青岛网站优化快速排名,阳春新农村建设网站,seo代码优化工具,搜索引擎排名国内为什么#xff1f;
SPSS 那么简单还免费#xff0c;为什么还要用 Python 做因子分析#xff08;factor analysis#xff09;呢#xff1f;工作狗表示#xff0c;建模的目的是要卖钱的#xff0c;也就是要嵌入到公司开发的产品上去#xff0c;用 Python 写因子分析
SPSS 那么简单还免费为什么还要用 Python 做因子分析factor analysis呢工作狗表示建模的目的是要卖钱的也就是要嵌入到公司开发的产品上去用 Python 写因子分析factor analysis总比找SPSS的接口更容易让大家接受。
算法核心
因子分析法factor analysis的核心是对若干综合指标进行因子分析并提取公共因子,再以每个因子的方差贡献率作为权数与该因子的得分乘数之和构造得分函数。
Python代码
先把该装上的模块都装上哈比如factor_analyzer
安装方法
系统解释器 pip install factor_analyzerconda-jupyterconda install -c desilinguist factor_analyzer第一步看原数据
总觉得看到原数据是个什么样子心里才有点谱所以基本每一篇博客都要先展示一下原数据。
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
from factor_analyzer import FactorAnalyzerdatafile uD:\\pythondata\\textdata.xlsx
data pd.read_excel(datafile)
data.head() 指标1指标2指标3指标4指标5指标6指标7指标8指标9指标1000.0037900.0037900.0049350.00760.400.00600.40000.00601.1538NaN1NaNNaN0.465854NaNNaNNaN0.09090.14271.1579NaN20.2948890.1246830.1447930.07350.250.07350.20000.06311.08000.444430.6681220.6681220.6681220.80100.500.80100.50000.80101.03130.363640.3045090.1886220.1886220.20260.400.20260.40000.20261.06000.5556有一些空值用0填充
data data.fillna(0)#用0填充空值
这一步对应到 SPSS 就是导入数据了放一张 SPSS 的页面下面每一步都会这样一一对应的讲解希望熟悉 SPSS 的可以对上号更快的学习用 Python 做因子分析。 第二步数据清洗
这里的原数据是用 mysql 清洗好的数据输出的指标值所以这里不用清洗。清洗数据是一件繁重复杂的事情有兴趣的可以单独去搜相关的文章学习。 第三步建模
fa FactorAnalyzer()
fa.analyze(data, 5, rotationNone)#固定公共因子个数为5个
print(公因子方差:\n, fa.get_communalities())#公因子方差
print(\n成分矩阵:\n, fa.loadings)#成分矩阵
var fa.get_factor_variance()#给出贡献率
print(\n解释的总方差即贡献率:\n, var)
输出结果 有人要问了怎么python输出的结果和SPSS不一样呢原因有二
SPSS默认用的提取方法是主成分分析即PCA中的principal 函数而模块factor_analyzer中用的提取方法是fa函数具体是个什么区别我还没开始研究等有时间研究研究再跟大家共享吧懂的大神也欢迎指教第二个原因就是SPSS选择了最大平衡法旋转而python的代码中了解的人会发现 rotationNone没有旋转第四步输出因子得分
因子分析关键的地方就是要输出公共因子的得分这样才能计算综合得分。在SPSS中只要勾选了【得分】中的【显示因子得分系数矩阵】就会自动输出公共因子的得分如下图所示。 在python的factor_analyzer模块中也有这样的函数可以实现这样的功能
fa_score fa.get_scores(data)#因子得分
fa_score.head() 第五步输出综合得分 因子分析法综合得分的计算方式
score( fac1 * fac1贡献率 fac2 * fac2贡献率 ...... fac5 * fac5贡献率) / 所有因子的累计贡献率
#将各因子乘上他们的贡献率除以总的贡献率,得到因子得分中间值
a (fa.get_scores(data)*var.values[1])/var.values[-1][-1]#将各因子得分中间值相加得到综合得分
a[score] a.apply(lambda x: x.sum(), axis1)
a.head()
计算逻辑类似SPSS中的 结果 文章里也提到了python运行因子分析和SPSS的不同之处待我研究清楚了再更新哈想了解的伙伴可以关注一下。
链接下载永久免费版SPSS的链接--欢迎一起学习
链接因子分析法原理的链接 -- 欢迎一起学习
链接factor-analyzer因子分析模块的官方文档