第9关:基于主成分分析的综合评价

任务描述

本关任务:读取“农村居民人均可支配收入来源2016.xlsx”数据表,其中数据来源于2016年《中国统计年鉴》,对表中给出的我国内陆31个地区做主成分分析,并基于主成分进行综合排名,输出排名结果。

相关知识

为了完成本关任务,你需要掌握: (1)对原始数据进行标准化处理。 (2)计算样本相关系数矩阵。 (3)求相关系数矩阵的特征值和相应的特征向量。 (4)选择重要的主成分,并写出主成分表达式。 (5)计算主成分得分。 (6)依据主成分得分的数据,进一步从事统计分析。

相关系数矩阵

多个随机变量的方差可以通过其协方差矩阵来考察。由于多个变量的单位不一样,为了消除量纲,通常需要对变量数据做规范化处理,规范化变量数据的协方差矩阵,即是相关系数矩阵。本例的相关系数矩阵计算示例代码如下:


  1. import pandas as pd
  2. Data=pd.read_excel('农村居民人均可支配收入来源2016.xlsx')
  3. X=Data.iloc[:,1:]
  4. R=X.corr()

输出:``

数据规范化处理

对数据集X进行拟合训练,返回规范化后的数据X。 示例如下:


  1. from sklearn.preprocessing import StandardScaler
  2. scaler = StandardScaler()
  3. scaler.fit(X)
  4. X=scaler.transform(X)

输出:``

主成分分析

对标准化后的数据X做主成分分析,基本步骤如下


  1. ① 导入主成分分析模块PCA。
  2. from sklearn.decomposition import PCA
  3. ② 利用PCA创建主成分分析对象pca。
  4. pca=PCA(n_components=0.95) #这里设置累计贡献率为95%以上。
  5. ③ 调用pca对象中的fit()方法,对待分析的数据进行拟合训练。
  6. pca.fit(X)
  7. ④ 调用pca对象中的transform()方法,返回提取的主成分。
  8. Y=pca.transform(X)
  9. ⑤ 通过pca对象中的components_属性、explained_variance_属性、explained_variance_ ratio_属性,返回主成分分析中对应的特征向量、特征值和主成分方差百分比(贡献率),比如:
  10. tzxl=pca.components_
  11. tz=pca.explained_variance_
  12. gxl=pca.explained_variance_ratio_ #返回主成分方差百分比(贡献率)
  13. ⑥ 主成分表达式及验证。可以通过程序验证第1个主成分前面的4个分量的值。
  14. Y00=sum(X[0,:]*tzxl[0,:])
  15. Y01=sum(X[1,:]*tzxl[0,:])
  16. Y02=sum(X[2,:]*tzxl[0,:])
  17. Y03=sum(X[3,:]*tzxl[0,:])。

主成分分析的示例代码如下:


  1. from sklearn.decomposition import PCA
  2. pca=PCA(n_components=0.95)
  3. pca.fit(X)
  4. Y=pca.transform(X)
  5. tzxl=pca.components_
  6. tz=pca.explained_variance_
  7. gxl=pca.explained_variance_ratio_
  8. Y00=sum(X[0,:]*tzxl[0,:])
  9. Y01=sum(X[1,:]*tzxl[0,:])
  10. Y02=sum(X[2,:]*tzxl[0,:])
  11. Y03=sum(X[3,:]*tzxl[0,:])
主成分分析综合评价

基于主成分进行综合排名。记综合排名指标为F,示例代码如下:


  1. F=gxl[0]*Y[:,0]+gxl[1]*Y[:,1]+gxl[2]*Y[:,2] #综合得分=各个主成分×贡献率之和
  2. dq=list(Data['地区'].values) #提取地区
  3. Rs=pd.Series(F,index=dq) #以地区作为index,综合得分为值,构建序列
  4. Rs=Rs.sort_values(ascending=False) #按综合得分降序进行排序

编程要求

根据提示,在右侧编辑器补充代码,对表中给出的我国内陆31个地区做主成分分析,并基于主成分进行综合排名

测试说明

平台会对你编写的代码进行测试:


开始你的任务吧,祝你成功!

任务代码

#********** Begin **********#
#读取“农村居民人均可支配收入来源2016.xlsx”数据表,其中数据来源于2016年《中国统计年鉴》,
#首先,对指标数据进行均值方差标准化处理
#其次,其次对标准化处理后的指标数据作主成分分析,要求提前累计贡献率在95%以上
#再次,基于提取的主成分计算综合得分,综合得分=提取的各主成分与对应贡献率之和
#最后,基于综合得分获得各地区的排名,得分按从高到低排序,用一个序列Rs来表示,其中index为地区名称,值为综合得分
def return_values():
    import pandas as pd
    from sklearn.preprocessing import StandardScaler
    from sklearn.decomposition import PCA   
    Data=pd.read_excel('农村居民人均可支配收入来源2016.xlsx')
    X=Data.iloc[:,1:]
    R=X.corr()
    scaler = StandardScaler()
    scaler.fit(X) 
    X=scaler.transform(X)

    pca=PCA(n_components=0.95)
    pca.fit(X)
    Y=pca.transform(X)
    tzxl=pca.components_              
    tz=pca.explained_variance_           
    gxl=pca.explained_variance_ratio_    #返回主成分方差百分比(贡献率)
    for i in range(0,4):
        Y[i]=sum(X[i,:]*tzxl[0,:])
    F=gxl[0]*Y[:,0]+gxl[1]*Y[:,1]+gxl[2]*Y[:,2]  #综合得分=各个主成分×贡献率之和
    dq=list(Data['地区'].values)         #提取地区
    Rs=pd.Series(F,index=dq)             #以地区作为index,综合得分为值,构建序列
    Rs=Rs.sort_values(ascending=False) #按综合得分降序进行排序

    return Rs

#********** End **********#

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐