机器学习:软件工程方法与实现
上QQ阅读APP看书,第一时间看更新

5.2.4 多变量可视化分析

多变量数据分析的可视化图像比之前的要更加复杂,但图像越复杂并不代表可视化的效果越好,因为人接收和理解信息的能力是有限的,所以最好的可视化是简单明了地表达出数据中的含义。多变量数据的可视化可以使用二维图像的多维表达、多个二维图像的分类、降维可视化展示。

多维数据可视化比较少用到Seaborn,而更多地使用Pandas、Matplotlib。由于部分接口不能传入空值数据,为了方便演示,下面的案例会创建一个新的Dataframe,并对空值字段进行均值或众数填充。


#导入数据
titanic = sns.load_dataset('titanic')
#对缺失值进行简单填充
titanic['age'].fillna(titanic['age'].median(), inplace=True)

1.多图网格

Seaborn提供了非常方便快速查看多变量分布的接口——多图网格seaborn.FacetGrid和seaborn.PairGrid。seaborn.JointGrid也属于多图网格,不过JointGrid主要用于分析单变量和双变量。

(1)FacetGrid

FacetGrid可以展示在数据集的子集内可视化变量的分布或多个变量之间的关系,FacetGrid可绘制最多3个维度:Row、Col和Hue。Row和Col将数据集映射到由行和列组成的网格中的多个轴上,这些轴与数据集中的变量对应。Hue参数表示第3个变量的级别,该参数以不同的颜色绘制数据的不同子集,这使用颜色来解析第三维上的元素。


sns.FacetGrid(titanic, hue="alive", size=6).map(plt.scatter, "age",
                                        "fare").add_legend()

输出如图5-15所示。

图5-15 FacetGrid图

(2)PairGrid

seaborn.PairGrid支持快速绘制变量间两两关系的多个子图。在PairGrid中,每行每列都被分配给一个不同的变量,所以最后生成的图片可以展示数据集中所有的成对关系。在PairGrid中,每张子图都代表了不同的两个变量间的关系,PairGrid可以对数据集中的变量关系提供非常快速、整体(但不深入)的总结。

PairGrid表现的维度理论上无上限,PairGrid还有一定的灵活性,可以设置对角类型、非对角类型、具体的列、对角上下的图表格式等,具体可查看Seaborn官方文档。


#为了图的展示效果,行列上只选了两个字段,实际使用时可以选择多个字段
g = sns.PairGrid(titanic[['age', 'fare', 'who']], hue="who", size=5)
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter)
g.add_legend()

输出如图5-16所示。

图5-16 PairGrid图

2.热力图

绘制热力图(Heatmap)是数据分析的常用方法,热力图通过色差、亮度来展示数据相关性。


#变量间相关系数热力图
f = titanic[['age', 'fare', 'sibsp']].corr()
sns.heatmap(f, annot=True)

输出如图5-17所示。

图5-17 热力图

图5-17中的数值是皮尔森相关系数,浅颜色表示相关性高。