美食网站开发的目标,wordpress首页模板在哪,江津哪里找做网站的,下载深圳app因子分析用Python做的一个典型例子
一、实验目的
采用合适的数据分析方法对下面的题进行解答二、实验要求
采用因子分析方法#xff0c;根据48位应聘者的15项指标得分#xff0c;选出6名最优秀的应聘者。
三、代码
importpandas aspd
importnumpy asnp
importmath asmath
imp…因子分析用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():
dfpd.read_csv(./data/applicant.csv)
# print(df)df2df.copy()
print(\n原始数据:\n,df2)
deldf2[‘ID‘]
# print(df2)#皮尔森相关系数df2_corrdf2.corr()
print(\n相关系数:\n,df2_corr)
#热力图cmap cm.Blues
# cmap cm.hot_rfigplt.figure()
axfig.add_subplot(111)
map ax.imshow(df2_corr, interpolation‘nearest‘, cmapcmap, vmin0, vmax1)
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‘, ascendingFalse, inplaceTrue)
print(\n特征值\n,eig)
eig1pd.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_factors5)
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‘综合得分‘, ascendingFalse).head(6))
plt.figure()
ax1plt.subplot(111)
Xfa_t_score[‘ID‘]
Yfa_t_score[‘综合得分‘]
plt.bar(X,Y,color#87CEFA)
# plt.bar(X, Y, colorred)plt.title(‘result00‘)
ax1.set_xticks(range(len(fa_t_score)))
ax1.set_xticklabels(fa_t_score.index)
plt.show()
fa_t_score1pd.DataFrame()
fa_t_score1fa_t_score.sort_values(by‘综合得分‘,ascendingFalse).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根据应聘者的五个因子得分按照贡献率进行加权得到最终各应试者的综合得分然后选出前六个得分最高的应聘者。所以我们用因子分析产生的前六名分别是40392221023
原文https://www.cnblogs.com/wangshanchuan/p/10820326.html