Python实现数据压缩如此简单( 二 )


文章插图
可以明显看出:

  • 主成分1几乎不受data的第二个自变量人均GDP的影响,0.034,其他自变量对其影响程度都差不多 。
  • 主成分2受data的第二个自变量人均GDP影响最大,达到了0.94
 
结果描述通过上面的PCA建模,我们把9个自变量压缩成了2 主成分,每个主成分受哪些变量的影响也有了了解 。虽然得到的主成分都没有什么意义,但我们是否可以通过变量们对主成分的影响程度来为生成的两个主成分命名呢?
第一个主成分在表达经济总量的指标上的权重相当,可考虑命名为经济总量水平;而第二个主成分只在人均GDP上权重很高,可暂时考虑命名为人均水平
注意:这里的给主成分命名(包括后续有关因子分析的推文)都是对降维后的数据进行的,而不是生成的主成分,这样才有比较和描述的价值 。每个自变量在生成的主成分上的权重只是给这个主成分的命名提供参考,真正的命名操作是对压缩后的数据进行 。
 new_data = https://www.isolves.com/it/cxkf/yy/Python/2020-08-31/pca.fit_transform(data) # fit_transform 表示将生成降维后的数据
results = df.join(pd.DataFrame(new_data, # new_data 是降维后的数据
columns=['经济总量水平', '人均水平'])) # 与原来的数据拼接
results
Python实现数据压缩如此简单

文章插图
绘制波士顿矩阵,这里的散点图的点标注代码是前人的优秀轮子,直接拿来用即可 。
 plt.figure(figsize=(10, 8))
# 基础散点图
x, y = results['经济总量水平'], results['人均水平']
label = results['area']
plt.scatter(x, y)
plt.xlabel('经济总量水平'); plt.ylabel('人均水平')
# 对散点图中的每一个点进行文字标注
## 固定代码,无需深究,拿来即用
## 给点标注是需要将 x 和 y 以及标签如上段代码那样单独拆开
for a,b,l in zip(x,y,label):
plt.text(a, b+0.1, '%s.' % l, ha='center', va='bottom', fontsize=14)
# 添加两条竖线
plt.vlines(x=results['经济总量水平'].mean,
ymin=-1.5, ymax=3, colors='red')
plt.hlines(y=results['人均水平'].mean,
xmin=-4, xmax=6, colors='red')
Python实现数据压缩如此简单

文章插图
最终从上图可以看出:
  • 广西,河北,福建三地的人均水平和经济总量水平都偏低
  • 上海的人均经济水平很高,但经济总量水平缺只是略优于均值
  • 广东的人均经济水平稍次于均值,但经济总量水平很高
  • ......
  
小结本文讲解了基于主成分分析的样本特征描述,并使用Python示范了完整的流程 。其中,也对由多个自变量生成的主成分的命名描述操作中需要注意的点作了比较详细的说明 。其实PCA并不能非常好的满足维度分析的需求,能够做到「因子分析」最好,它是主成分方法的拓展,作为维度分析的手段,因子分析也是构造合理的聚类模型和稳健的分类模型的必然步骤 。
Python商业数据挖掘自动化系列代码及数据已经上传GitHub,如有需要可以自行下载:「https://github.com/liuhuanshuo/zaoqi-Python/tree/master/商业数据分析实战」 。

【Python实现数据压缩如此简单】


推荐阅读