python因子分析法_python——因子分析

因子分析用Python做的一个典型例子

一、实验目的

采用合适的数据分析方法对下面的题进行解答

20190506170032537916.png

二、实验要求

采用因子分析方法,根据48位应聘者的15项指标得分,选出6名最优秀的应聘者。

三、代码

importpandas aspd

importnumpy asnp

importmath asmath

importnumpy asnp

fromnumpy import*

fromscipy.stats importbartlett

fromfactor_analyzer import*

importnumpy.linalg asnlg

fromsklearn.cluster importKMeans

frommatplotlib importcm

importmatplotlib.pyplot asplt

defmain():

df=pd.read_csv("./data/applicant.csv")

# print(df)df2=df.copy()

print("\n原始数据:\n",df2)

deldf2[‘ID‘]

# print(df2)#皮尔森相关系数df2_corr=df2.corr()

print("\n相关系数:\n",df2_corr)

#热力图cmap = cm.Blues

# cmap = cm.hot_rfig=plt.figure()

ax=fig.add_subplot(111)

map = ax.imshow(df2_corr, interpolation=‘nearest‘, cmap=cmap, vmin=0, vmax=1)

plt.title(‘correlation coefficient--headmap‘)

ax.set_yticks(range(len(df2_corr.columns)))

ax.set_yticklabels(df2_corr.columns)

ax.set_xticks(range(len(df2_corr)))

ax.set_xticklabels(df2_corr.columns)

plt.colorbar(map)

plt.show()

# KMO测度defkmo(dataset_corr):

corr_inv = np.linalg.inv(dataset_corr)

nrow_inv_corr, ncol_inv_corr = dataset_corr.shape

A = np.ones((nrow_inv_corr, ncol_inv_corr))

fori inrange(0, nrow_inv_corr, 1):

forj inrange(i, ncol_inv_corr, 1):

A[i, j] = -(corr_inv[i, j]) / (math.sqrt(corr_inv[i, i] * corr_inv[j, j]))

A[j, i] = A[i, j]

dataset_corr = np.asarray(dataset_corr)

kmo_num = np.sum(np.square(dataset_corr)) - np.sum(np.square(np.diagonal(A)))

kmo_denom = kmo_num + np.sum(np.square(A)) - np.sum(np.square(np.diagonal(A)))

kmo_value = kmo_num / kmo_denom

returnkmo_value

print("\nKMO测度:", kmo(df2_corr))

#巴特利特球形检验df2_corr1 = df2_corr.values

print("\n巴特利特球形检验:", bartlett(df2_corr1[0], df2_corr1[1], df2_corr1[2], df2_corr1[3], df2_corr1[4],

df2_corr1[5], df2_corr1[6], df2_corr1[7], df2_corr1[8], df2_corr1[9],

df2_corr1[10], df2_corr1[11], df2_corr1[12], df2_corr1[13], df2_corr1[14]))

#求特征值和特征向量eig_value, eigvector = nlg.eig(df2_corr) #求矩阵R的全部特征值,构成向量eig = pd.DataFrame()

eig[‘names‘] = df2_corr.columns

eig[‘eig_value‘] = eig_value

eig.sort_values(‘eig_value‘, ascending=False, inplace=True)

print("\n特征值\n:",eig)

eig1=pd.DataFrame(eigvector)

eig1.columns = df2_corr.columns

eig1.index = df2_corr.columns

print("\n特征向量\n",eig1)

#求公因子个数m,使用前m个特征值的比重大于85%的标准,选出了公共因子是五个form inrange(1, 15):

ifeig[‘eig_value‘][:m].sum() / eig[‘eig_value‘].sum() >= 0.85:

print("\n公因子个数:", m)

break#因子载荷阵A = np.mat(np.zeros((15, 5)))

i = 0

j = 0

whilei < 5:

j = 0

whilej < 15:

A[j:, i] = sqrt(eig_value[i]) * eigvector[j, i]

j = j + 1

i = i + 1

a = pd.DataFrame(A)

a.columns = [‘factor1‘, ‘factor2‘, ‘factor3‘, ‘factor4‘, ‘factor5‘]

a.index = df2_corr.columns

print("\n因子载荷阵\n", a)

fa = FactorAnalyzer(n_factors=5)

fa.loadings_ = a

# print(fa.loadings_)print("\n特殊因子方差:\n", fa.get_communalities()) #特殊因子方差,因子的方差贡献度 ,反映公共因子对变量的贡献var = fa.get_factor_variance() #给出贡献率print("\n解释的总方差(即贡献率):\n", var)

#因子旋转rotator = Rotator()

b = pd.DataFrame(rotator.fit_transform(fa.loadings_))

b.columns = [‘factor1‘, ‘factor2‘, ‘factor3‘, ‘factor4‘, ‘factor5‘]

b.index = df2_corr.columns

print("\n因子旋转:\n", b)

#因子得分X1 = np.mat(df2_corr)

X1 = nlg.inv(X1)

b = np.mat(b)

factor_score = np.dot(X1, b)

factor_score = pd.DataFrame(factor_score)

factor_score.columns = [‘factor1‘, ‘factor2‘, ‘factor3‘, ‘factor4‘, ‘factor5‘]

factor_score.index = df2_corr.columns

print("\n因子得分:\n", factor_score)

fa_t_score = np.dot(np.mat(df2), np.mat(factor_score))

print("\n应试者的五个因子得分:\n",pd.DataFrame(fa_t_score))

#综合得分wei = [[0.50092], [0.137087], [0.097055], [0.079860], [0.049277]]

fa_t_score = np.dot(fa_t_score, wei) / 0.864198

fa_t_score = pd.DataFrame(fa_t_score)

fa_t_score.columns = [‘综合得分‘]

fa_t_score.insert(0, ‘ID‘, range(1, 49))

print("\n综合得分:\n", fa_t_score)

print("\n综合得分:\n", fa_t_score.sort_values(by=‘综合得分‘, ascending=False).head(6))

plt.figure()

ax1=plt.subplot(111)

X=fa_t_score[‘ID‘]

Y=fa_t_score[‘综合得分‘]

plt.bar(X,Y,color="#87CEFA")

# plt.bar(X, Y, color="red")plt.title(‘result00‘)

ax1.set_xticks(range(len(fa_t_score)))

ax1.set_xticklabels(fa_t_score.index)

plt.show()

fa_t_score1=pd.DataFrame()

fa_t_score1=fa_t_score.sort_values(by=‘综合得分‘,ascending=False).head()

ax2 = plt.subplot(111)

X1 = fa_t_score1[‘ID‘]

Y1 = fa_t_score1[‘综合得分‘]

plt.bar(X1, Y1, color="#87CEFA")

# plt.bar(X1, Y1, color=‘red‘)plt.title(‘result01‘)

plt.show()

if__name__ == ‘__main__‘:

main()

四、实验步骤

(1)引入数据,数据标准化

因为数据是面试中的得分,量纲相同,并且数据的分布无异常值,所以数据可以不进行标准化。

20190506170032866054.png

(2)建立相关系数矩阵

计算皮尔森相关系数,从热图中可以明显看出变量间存在的相关性。

20190506170033163917.png

20190506170033536978.png

进行相关系数矩阵检验——KMO测度和巴特利特球体检验:

KMO值:0.9以上非常好;0.8以上好;0.7一般;0.6差;0.5很差;0.5以下不能接受;巴特利球形检验的值范围在0-1,越接近1,使用因子分析效果越好。

20190506170033850467.png

通过观察上面的计算结果,可以知道,KMO值为0.783775605643526,在较好的范围内,并且巴特利球形检验的值接近1,所有可以使用因子分析。

(3)求解特征值及相应特征向量

20190506170034089734.png

20190506170034334860.png

求公因子个数m,使用前m个特征值的比重大于85%的标准,选出了公共因子是五个。

(4)因子载荷阵

20190506170034730383.png

20190506170035106374.png

20190506170035317320.png

由上可以看出,选择5个公共因子,从方差贡献率可以看出,其中第一个公因子解释了总体方差的50.092%,四个公共因子的方差贡献率为86.42%,可以较好的解释总体方差。

(5)因子旋转

20190506170035608347.png

(6)因子得分

20190506170035946250.png

20190506170036221652.png

(7)根据应聘者的五个因子得分,按照贡献率进行加权,得到最终各应试者的综合得分,然后选出前六个得分最高的应聘者。

20190506170036534164.png

20190506170037061528.png

20190506170037310561.png

20190506170037510764.png

所以我们用因子分析产生的前六名分别是:40,39,22,2,10,23

原文:https://www.cnblogs.com/wangshanchuan/p/10820326.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

polycom安卓手机客户端_三款免费「游戏串流」APP,在手机/电视上玩PC游戏

以前想把电脑游戏输出到电视机上玩&#xff0c;得用HDMI线输出&#xff0c;如果电脑主机和电视机离太远&#xff0c;HDMI线不够长&#xff0c;还得抱电脑主机到电视机旁边&#xff0c;非常不方便。随着技术的发展&#xff0c;现在已经有「串流」功能&#xff0c;只要电视机和电…

python获取返回值_python如何获取函数的返回值

函数需要先定义后调用&#xff0c;函数体中 return 语句的结果就是返回值。如果一个函数没有 reutrn 语句&#xff0c;其实它有一个隐含的 return 语句&#xff0c;返回值是 None&#xff0c;类型也是 NoneType。return 语句的作用&#xff1a;结束函数调用、返回值 指定返回值…

java模拟器百度_Java模拟实现百度文档在线浏览

这个思路是我参考网上而来&#xff0c;代码是我实现。采用Apache下面的OpenOffice将资源文件转化为pdf文件&#xff0c;然后将pdf文件转化为swf文件&#xff0c;用FlexPaper浏览。ok&#xff0c;A、下载OpenOffice (转换资源文件)B、下载JodConverter(调用OpenOffice)C、下载Sw…

body click js 委托_JS 事件循环

进程 线程CPU 分配资源的最小单位是进程&#xff0c;同一个时间内单个 CPU 只能运行一个进程&#xff0c;单个 CPU 一次只能运行一个任务CPU 调度的最小单位是线程&#xff0c;一个进程里面包含多个线程。可以看看阮老师的这篇文章&#xff0c;进程与线程的一个简单解释浏览器的…

django jsonresponse_利用 Django 动态展示 Pyecharts 图表数据的几种方法

本文将介绍如何在 web 框架 Django 中使用可视化工具 Pyecharts, 看完本教程你将掌握几种动态展示可视化数据的方法!Django 模板渲染1. 新建一个 Django 项目命令行中输入以下命令django-admin startproject pyecharts_django_demo创建一个应用程序python manage.py startapp d…

python网页登录验证码不显示_进网页需要验证码?不好意思,Python从来不惧各种验证码!...

今天要来说说滑动验证码了大家应该都很熟悉点击滑块然后移动到图片缺口进行验证现在越来越多的网站使用这样的验证方式为的是增加验证码识别的难度那么&#xff0c;对于这种验证码应该怎么破呢接下来就是见证神奇的时刻打开 b 站的登录页面可以看到登录的时候需要进行滑块验证按…

怎么调用新建模型里文章的内容_优雅地进行Tensorflow Lite模型转换

初涉知乎江湖&#xff0c;知道大佬很多&#xff0c;请温柔以待&#xff01;&#xff01;&#xff01;七日凌晨&#xff0c;谷歌连夜发布了有关于Tensorflow最新成果和技术&#xff0c;这应该是贾扬清离开脸书后另一个深度学习界令人惊呼的事件了吧&#xff01;&#xff08;旁白…

git add后取消_Git常用命令-总结

创建git用户$ git config --global user.name "Your Name"$ git config --global user.email "emailexample.com"初始化一个Git仓库&#xff0c;使用git init命令。添加文件到Git仓库&#xff0c;分两步&#xff1a;使用命令git add &#xff0c;注意&…

查看csv编码_[小O地图-数据] - 坐标转地址文字(逆地理编码)

小O地图是一款基于互联网地图进行地理数据处理、分析、图表的软件。致力为广大科研人员提供专业地图数据&#xff0c;用于科研及学习。小&#xff2f;地图提供将【经纬度坐标转换为地址】的功能&#xff0c;例如&#xff1a;将“116.359861, 39.917225” 转换为 “北京市西城区…

python自动化办公源码_python自动化办公:文件篇(自动整理文件,一键完成)

import os list_all[]#初始化一个空列表 for root ,dirs,files in os.walk(rC:UsersShineionDesktop新建文件夹): for name in files: file_pathos.path.join(root,name)#包含路径的文件 file_nameos.path.split(file_path)[-1] list_all.append(file_name) print(list_all)如果…

ocr中文数据集_CNOCR:测试集准确率最高98%,自带识别模型的中文OCR包

今天 Gitee 为大家介绍的是一款中文 OCR 包。大家都知道&#xff0c;训练模型是一件非常费时费力的事情&#xff0c;但今天这款项目已经自带训练好的识别模型&#xff0c;我们只需要下载下来使用即可&#xff0c;可以说是非常方便了&#xff0c;那么下面我们就去看看这个项目的…

sha算法源代码java_SHA算法Java实现

一 简介安全散列算法固定长度摘要信息二 SHA算法SHA-1、SHA-2(SHA-224、SHA-256、SHA384、SHA-512)三 SHA算法实现package com.imooc.security.sha; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Security; impo…

arraylist remove() java_执行ArrayList的remove(object)方法抛异常?

简介或许有很多小伙伴都尝试过如下的代码&#xff1a;然后会发现抛出java.util.ConcurrentModificationException异常&#xff0c;这是一个并发异常。那么这个到底是什么情况&#xff1f;首先需要介绍一下增强for循环增强for循环增强for循环是Java1.5后&#xff0c;Collection实…

centos gdb调试_gdb-miss-debuginfo

使用gdb调试core时候&#xff0c;提示Missing separate debuginfos的解决办法。错误提示错误提示信息如下&#xff1a;Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.8.x86_64 libaio-0.3.109-13.el7.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc-4…

怎么判断自己启动的线程是否执行完成 java_多线程?怎么用?

Java线程&#xff1a;概念与原理操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序&#xff0c;每个进程都有自己独立的一块内存空间&#xff0c;一个进程中可以启动多个线程。比如在Windows系统中&…

mysql设置中文_Flask中MySQL预热

Flask和MySQL导读现在Flask已经学习到了类视图,它其实是这样一个关系FLask高级视图视图函数app.route\add_url_rule类视图蓝图blueprint(这个接下来要讲)结束蓝图后,接着就是Flask数据库的结合SQLAlchemy.在学习SQLAlchemy之前,希望和大家一起了解学习一下mysql这篇文章不涉及理…

html首行缩进2字符怎么设置_Word如何设置首行缩进2字符

在使用Word编写书籍或者文稿时&#xff0c;我们都会有个习惯将每个段落前面空两个字符&#xff0c;这样可以很好的方便读者阅读时分辨段落。有的人习惯用几个空格来代替&#xff0c;有的人习惯用空白字符V1来代替(像Word联盟网站上的每篇教程就是用V1来标记段落的)。其实在Word…

java 面试什么是类_Java 面试题代码类收集

long temp(int)3.9;System.out.println(temp);temp%2;System.out.println(temp);31View CodeJava里面类的方法名可以与类名一样&#xff0c;与构造函数的区别是方法有返回值&#xff0c;构造函数没有。public classUserInfo {publicUserInfo(){}publicString UserInfo(){return…

idea jdk配置_在IDEA中DEBUG Javac源码

背景在做JSR269的深度解析的时候&#xff0c;需要对javac的源代码进行单步调试并跟踪。因此在这里记录下具体的调试步骤。调试环境&#xff1a;OS: MacOS 10.14.5JDK&#xff1a;JDK_1.8IDEA: IntelliJ IDEA 2019.1.3下载Javac源码可以直接用JDK的github镜像仓库处下载&#xf…

jar中没有主清单属性_还在因 JDK 兼容问题发不同 JAR 包做兼容?MRJAR 了解一下?...

背景Java 9 版本中增强了Jar 包多版本字节码文件格式支持&#xff0c;也就是说在同一个 Jar 包中我们可以包含多个 Java 版本的 class 文件&#xff0c;这样就能做到 Jar 包升级到新的 Java 版本(新特性 API 使用)时不用强迫使用方为了使用新 Jar 包而升级自己的业务模块 Java …