其他
软件应用 | 主成分分析的Python实现
The following article is from Stata and Python数据分析 Author 爬虫俱乐部
本文作者:万 浩,中南财经政法大学统计与数学学院
本文编辑:张孟晗
技术总编:陈 鼎
来 源:Stata and Python数据分析
一主成分分析
二Python实现
import numpy as np
import pandas as pd
data = pd.read_excel('states.xls') # 读取数据文件
var_ind = data.columns[1:]
capital_index = list(data['states'])
data = data.iloc[:, 1:]
corr_mat = data.corr() # 计算相关矩阵
print(corr_mat)
data = (data-data.mean())/data.std() # 数据标准化
cov_mat = data.cov() # 计算协方差矩阵
eigvals,eigvects = np.linalg.eig(cov_mat) # 计算特征值与特征向量
def cal_contribution(eigvals, k):
for i in range(1, k):
contri = eigvals[:i].sum()/eigvals.sum() # 计算累计贡献率
print('第%d主成分贡献率为:%s'%(i, contri))
if contri >0.85:
return i
i = cal_contribution(eigvals, 7)
eigs = eigvals[:i]
A = eigvects[:i].T # 计算特征向量矩阵
A1 = pd.DataFrame(A)
A1.index = var_ind
A1.columns = [1, 2, 3]
score_mat = data.dot(A) # 计算主成分得分
print(A1)
print('特征值为%s' %eigs)
score_mat.index = capital_index
sort_1 = score_mat.sort_values(0) # 按第一主成分得分排序
sort_1.columns = [1, 2, 3]
sort_2 = score_mat.sort_values(1) # 按第二主成分得分排序
sort_2.columns = [1, 2, 3]
sort_3 = score_mat.sort_values(2) # 按第三主成分得分排序
sort_3.columns = [1, 2, 3]
print(sort_1)
print(sort_2)
print(sort_3)
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
推荐 | 青酱
欢迎扫描👇二维码添加关注