什么是因子分析?
又用来做什么?
conda install -c desilinguist factor_analyzer

import pandas as pdimport numpy as npfrom pandas import DataFrame,Seriesfrom factor_analyzer import FactorAnalyzer, Rotator
说明:
FactorAnalyzer里面包含了基本的功能,例如方差、因子载荷矩阵、提取主成分、计算得分等,但是没有旋转因子矩阵这一重要功能,所以需要加载Rotator,进行补充。
第二部分:导入数据
data = pd.read_excel("F:\\公众号\\python\\【案例】因子分析\\data.xlsx", sheetname = 0, header = 0, index_col = 0)

参数说明:
1、sheetname指选取哪个sheet的数据,0代表第一个,1代表第二个,依此类推;如果不填,默认选取所有sheet。
2、header选取哪一行作为列指标;index_col选取哪一列作为索引,这两个与read_csv()相同。
第二部分:建立因子分析模型
fa = FactorAnalyzer(rotation=None)fa.fit(data

从结果中可以看出,从中提取了3个主成分因子。
然后我们可以通过.loadings_查看因子载荷矩阵:
print("因子载荷矩阵:\n", fa.loadings_)

rotator = Rotator()print("按正交旋转后的因子载荷矩阵:\n", rotator.fit_transform(fa.loadings_))

说明:
Rotator()默认选择varimax,要得出旋转后的载荷矩阵需要通过.fit_transform()来进行计算;
然后按照每一行中绝对值最大的数进行分组,就可以得到三个主成分中所含有的逻辑关系,在这里就不进行分析了,留给大家自行解释。

假如我们使用varimax方法旋转后,还是不能很好的解释主成分所蕴含的逻辑,那么我们就需要用其它旋转方法进行探索,这里以promax进行展示:

说明:
旋转方法还有:varimax、promax 、oblimin、oblimax、quartimin、quartimax 、equamax
计算变量共同度:
fa.get_communalities()

计算因子相关矩阵和特征值:
fa.get_eigenvalues()

计算因子方差信息,从上到下依次是每个因子的方差,比例方差和累积方差:
fa.get_factor_variance()

第四部分:计算各个城市得分
为了计算便利,我们先定义一个计算得分的函数,得分的计算公式是以比例方差为权重的加权求和:
def socre(factors):return sum(factors*fa.get_factor_variance()[1])
fa.transform(data)

紧接着就可以套用循环语句依次计算每个城市的污染得分:
socres = []for i in range(len(fa.transform(data))):new = socre(fa.transform(data)[i])socres.append(new)

并将得分插入到原数据表中:
data['得分'] = socres

最后就可以根据大家各自的需求进行排序、可视化等操作了,是不是比SPSS还要简单呢。
之前有小伙伴反映无法打开我上传的代码文件,因为之前的代码文件都是我从notebook中直接保存的.ipynb格式,无法用python直接打开,所以后续传代码,我会再附上完整代码.py格式一起上传。

称心常识网