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

一、实验目的

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

二、实验要求

采用因子分析方法,根据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)引入数据,数据标准化

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

(2)建立相关系数矩阵

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

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

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

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

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

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

(4)因子载荷阵

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

(5)因子旋转

(6)因子得分

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

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

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

python因子分析法_python——因子分析相关推荐

  1. python因子分析法_Python——因子分析(KMO检验和Bartlett's球形检验)

    因子分析用Python做的一个典型例子 一.实验目的 采用合适的数据分析方法对下面的题进行解答 二.实验要求 采用因子分析方法,根据48位应聘者的15项指标得分,选出6名最优秀的应聘者. 三.代码 i ...

  2. python因子分析案例_Python——因子分析(KMO检验和Bartlett's球形检验)

    因子分析用Python做的一个典型例子 一.实验目的 采用合适的数据分析方法对下面的题进行解答 二.实验要求 采用因子分析方法,根据48位应聘者的15项指标得分,选出6名最优秀的应聘者. 三.代码 i ...

  3. python因子分析论文_Python——因子分析(KMO检验和Bartlett's球形检验)

    因子分析用Python做的一个典型例子 一.实验目的 采用合适的数据分析方法对下面的题进行解答 二.实验要求 采用因子分析方法,根据48位应聘者的15项指标得分,选出6名最优秀的应聘者. 三.代码 i ...

  4. 因子分析法(Factor Analysis Method) 【转】

    目录 1 什么是因子分析 2 因子分析法的步骤 3 因子分析法的实例 [1] <

  5. 因子分析 factor analysis (七) :因子分析法与主成分分析的异同

    因子分析系列博文:  因子分析 factor analysis (一 ):模型的理论推导 因子分析 factor analysis (二 ) : 因子分析模型 因子分析 factor analysis ...

  6. 基于 python 的单细胞转录因子分析

    基于 python 的单细胞转录因子分析 pyscenic 文章目录 基于 python 的单细胞转录因子分析 前言 Main 前言 流程极为简单,几乎没有任何难度 Main Install pysc ...

  7. 机器学习-特征抽取(主成分分析法/因子分析法/非负矩阵因子分解NMF算法)

    1.特征抽取: 特征抽取是机器学习中另一种十分有用的方法,它与特性选择不同,特征抽取是对数据的特征进行概括和总结,而特性选择则主要是对数据中的不同特征进行比较和选取. 特征抽取是机器学习技术中的一个常 ...

  8. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

  9. 《贝叶斯思维:统计建模的Python学习法》——1.8 讨论

    本节书摘来异步社区<贝叶斯思维:统计建模的Python学习法>一书中的第1章,第1.8节,作者:[美]Allen B. Downey,更多章节内容可以访问云栖社区"异步社区&qu ...

最新文章

  1. 完全二叉树、平衡二叉树、二叉查找树(二叉排序树)
  2. 性能调优某大型银行的一个系统过程跟踪和记录
  3. 界面设计方法(2)— 5.功能按钮设计(新增,查询)
  4. JDK的bug导致Java文件删除不了,必须fgc
  5. cf1173 D. Nauuo and Circle
  6. (转)重写重载多态,接口与类
  7. 最适合写python程序的软件
  8. 制作windows7虚拟机镜像并配置网络
  9. 《当时只道是寻常》——安意如——品纳兰容若《饮水词》
  10. 使用XMLSerializer报错java.lang.NoClassDefFoundError: nu/xom/ParentNode
  11. 酒店短视频营销,是酒店获客引流的重点推广手段之一
  12. 【kali】34 WEB渗透——扫描工具w3af_console
  13. python导入随机库_怎么用python导入随机库?
  14. uni-app 获取移动设备的MAC地址
  15. 【三维概念】【Cesium】 Camera控制-视角-roll,pitch,heading的含义
  16. 如何将白鹭引擎开发的游戏通过Egret Native发布到 GooglePlay平台
  17. mysql 数据库dbhelp_使用JDBC连接MYSQL数据库的问题
  18. 《花雕学AI》23:中文调教ChatGPT的秘诀:体验测试与通用案例,解锁无限有趣玩法!
  19. python抓取小红书_小红书很难爬?最新爬取方法教给你啦~
  20. 新媒体运营的日常工作如何?真的很有趣吗?

热门文章

  1. Wordpress模板标签大全
  2. shutil.copyfile使用方法
  3. 基于Flask制作一个简易版桌面监控软件
  4. 为Jpanel设置背景图片
  5. TLD、gTLD、nTLD、ccTLD、iTLD 以及几者之间的关系
  6. 支付宝支付ALIN10146-商户订单参数错误,请重新支付问题解决
  7. MATLAB 笛卡尔坐标系制图
  8. java 数字翻译成英文_Java实现数字日期翻译成英文单词的工具类案例分享
  9. 网络图片异步加载(用到多线程(线程池),java回调机制,图片缓存,图片的动画)
  10. 《编程之美》分离变量法,磁带访问优化方案