首先这玩意是干啥的?在什么情况下需要用到主成分因子分析?
首先是我们无法特别明确的界定一个事情的好与坏,如果能够明确界定那就直接上二分类了嘛。就是无法特别明确界定好坏,但是从业务上也知道这些指标对于我们想要评价的这个事情的好坏有着正向或者是负向的关系,影响的维度比较多,并且也无法确定每个维度的权重,我们需要通过这些指标来得出一个事情的综合好坏。这个时候就适合用此方法。先把这一堆指标降维融合、精简到几个指标,再通过这几个合成的核心指标来计算综合得分,进而评价样本水平。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
#画图中的显示中文
mpl.rcParams['font.sans-serif'] = ['simHei']
mpl.rcParams['axes.unicode_minus'] = False
from factor_analyzer import FactorAnalyzer
path = 'E:/data/'
需要用到factor_analyzer这个因子分析的包,自己去pypi搜索下载下来本地pip install一下就行
1.准备数据集
data = pd.read_excel(path+'factor2.xlsx')
#去掉前两列索引变量
df_model = data.iloc[:,2:]
2.数据集归一化(这里需要注意,你的变量如果跟想要评价的结果都是正相关的则没问题,如果有负相关的,需要单独(x.mean()-x)/x.std()处理成正相关)
#归一化处理(x-μ)/std
df_model = df_model.apply(lambda x:(x-x.mean())/x.std())
3.充分性检验和相关性检验(充分性检验要求P值接近于0,拒绝原假设。相关性检验要求KMO值大于0.6,也就是说变量之间有不错的相关性,这样比较适合做主成分因子分析,效果会好些,但小于0.6也不是不能做,干就完了)想了解具体原理的去百度补一下相关知识,这里就直接实操了。
#充分性检测
print('巴特利球形度检验')
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
chi_square_value,p_value=calculate_bartlett_sphericity(df_model)
print('卡方值:',chi_square_value,'P值', p_value)
#相关性检验kmo要大于0.6
from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(df_model)
print