python-----因子分析

因子分析用Python做的一个典型例子
一、实验目的
采用合适的数据分析方法对下面的题进行解答

二、实验要求
采用因子分析方法,根据48位应聘者的15项指标得分,选出6名最优秀的应聘者。
三、代码

import pandas as pd
import numpy as np
import math as math
import numpy as np
from numpy import *
from scipy.stats import bartlett
from factor_analyzer import *
import numpy.linalg as nlg
from sklearn.cluster import KMeans
from matplotlib import cm
import matplotlib.pyplot as plt
def main():df=pd.read_csv("./data/applicant.csv")# print(df)df2=df.copy()print("\n原始数据:\n",df2)del df2['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测度def kmo(dataset_corr):corr_inv = np.linalg.inv(dataset_corr)nrow_inv_corr, ncol_inv_corr = dataset_corr.shapeA = np.ones((nrow_inv_corr, ncol_inv_corr))for i in range(0, nrow_inv_corr, 1):for j in range(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_denomreturn kmo_valueprint("\nKMO测度:", kmo(df2_corr))# 巴特利特球形检验df2_corr1 = df2_corr.valuesprint("\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.columnseig['eig_value'] = eig_valueeig.sort_values('eig_value', ascending=False, inplace=True)print("\n特征值\n:",eig)eig1=pd.DataFrame(eigvector)eig1.columns = df2_corr.columnseig1.index = df2_corr.columnsprint("\n特征向量\n",eig1)# 求公因子个数m,使用前m个特征值的比重大于85%的标准,选出了公共因子是五个for m in range(1, 15):if eig['eig_value'][:m].sum() / eig['eig_value'].sum() >= 0.85:print("\n公因子个数:", m)break# 因子载荷阵A = np.mat(np.zeros((15, 5)))i = 0j = 0while i < 5:j = 0while j < 15:A[j:, i] = sqrt(eig_value[i]) * eigvector[j, i]j = j + 1i = i + 1a = pd.DataFrame(A)a.columns = ['factor1', 'factor2', 'factor3', 'factor4', 'factor5']a.index = df2_corr.columnsprint("\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.columnsprint("\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.columnsprint("\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.864198fa_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

python-----因子分析相关推荐

  1. python 因子分析

    目录 一.算法作用 二.案例 1.关于数据 2.数据标准化 3.适用性检验 3.1 KMO和Bartlett球形检验 4.因子提取 4.1 数据原始特征值.方差贡献率 5 因子旋转 6 因子命名 7 ...

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

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

  3. python 因子分析_因子分析在python上的实现

    因子分析(Factor Analysis)是指研究从变量群中提取共性因子的统计技术,这里的共性因子指的是不同变量之间内在的隐藏因子.例如,一个学生的数学.物理.化学成绩都很好,那么潜在的共性因子可能是 ...

  4. Python——因子分析(KMO检验和Bartlett's球形检验)

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

  5. python 因子分析 权重计算方法_【万矿新品】因子研究利器——WindAlpha

    原标题:[万矿新品]因子研究利器--WindAlpha 因子选股模型是我们在量化策略研究中使用最多的一种方法.今天,万矿重磅推出一款高效.便捷的因子分析工具--WindAlpha,让您在万矿上用于进行 ...

  6. python因子分析 ic值 函数_Python——因子分析(KMO检验和Bartlett's球形检验)

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

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

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

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

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

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

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

  10. python 因子分析 权重计算方法_因子得分如何计算_spss如何计算因子得分

    因子得分如何计算 各个因子得分是如何计算的?是旋转后的各个因子载荷矩阵中的因子系数*相应的各个指标标准后数据? 解答:因子得分=因子得分系数(因子得分系数矩阵里相应的值)*标准化转化后的数据 再问如何 ...

最新文章

  1. GLM+广义线性模型
  2. mysql查询职位大于3_4、MySQL查询(控制行)
  3. 如何在Office 2007中查看关于对话框和版本信息
  4. Java中的继承性特性
  5. Linux下MySQL5.6的修改字符集编码为UTF8
  6. 计算机专业最低院校门槛,2021年全国各省高考高校录取最低位次排名查询系统...
  7. 键盘按钮keyCode大全
  8. winform datagridview 自定义tooltip
  9. python查看函数消耗的内存_用sys.getsizeof查看对象占用内存数
  10. 如何禁止某个程序修改计算机,电脑如何禁止某个程序运行?
  11. 解决MAC launchpad顽固性图标无法删除问题。
  12. vos3000如何检查落地网关配置正常,路由分析
  13. facebook聊单?SaleSmatly来助力
  14. Flash Professional / 处理 Flash 文档 XFL(XML格式描述的CS5 FLA)
  15. 山东 计算机专业,山东省内计算机专业大学排名?
  16. 【破解利器】反汇编工具 and 反编译(Decompilers)
  17. 大端与小端字节数据详解
  18. 【翻译】用 安全即代码 保护你的GitOps流程
  19. vue render 渲染函数 属性写法
  20. [网摘]深入浅出解读微软云计算:让云触手可及

热门文章

  1. Java实现导出Excel
  2. APISpace 中文简繁转换API
  3. 空气炸锅能从“网红”到“长红”吗?
  4. 涵盖了Excel、Word、PPT、ODF、PDF、邮件、微信、文件处理等所有能在办公场景实现自动化的库
  5. 智慧职教云答案在哪里找_智慧职教云课堂上的题答案在哪里能找到?
  6. linux中systemd服务介绍
  7. 佳能数码相机拍摄技巧
  8. 中关村工业互联网产业联盟成立大会成功召开
  9. Aspose.Imaging for .NET V23
  10. Android Java 多线程常见问题