成对分析图是以图像形式分析多个变量之间相关性的图像,是矩阵图的具象化。
如我们之前所学习的,我们可以使用散点图,或者带最佳拟合线的散点图来描述变量两两之间的关系。
但当我们有着探索多个特征两两之间关系的需求时,一一绘制图像的效率比较低下,因此我们才引入相关性矩阵。
但如果我们还是希望绘制出图像,我们就可以使用成对分析图,一种类矩阵的绘图方式,一次性绘制出所有特征之间的相关性图像。
成对分析图的横坐标是所有特征,纵坐标也是所有特征。

横纵坐标为不同的特征时,显示两个特征之间的相关性图像。
当横纵坐标为同一个特征时,显示这个特征自身的分布图。

1. 导入需要的绘图库

  1. import matplotlib as mpl
  2. import matplotlib.pyplot as plt
  3. import seaborn as sns
  4. %matplotlib inline
  5. large = 22; med = 16; small = 12
  6. params = {'axes.titlesize': large,
  7. 'legend.fontsize': med,
  8. 'figure.figsize': (16, 10),
  9. 'axes.labelsize': med,
  10. 'axes.titlesize': med,
  11. 'xtick.labelsize': med,
  12. 'ytick.labelsize': med,
  13. 'figure.titlesize': large}
  14. plt.rcParams.update(params)
  15. plt.style.use('seaborn-whitegrid')
  16. sns.set_style("white")
  17. import numpy as np
  18. import pandas as pd
  19. import warnings; warnings.filterwarnings(action='once')

2. 导入数据

  1. # seaborn中自带数据库,可以从中导入著名的鸢尾花数据集
  2. df = sns.load_dataset('iris')
  1. df.head()
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
  1. df.columns = ['花萼长', '花萼宽', '花瓣长', '花瓣宽', 'species']
  1. df.head()
花萼长 花萼宽 花瓣长 花瓣宽 species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa

iris.png

3. 绘制图像

sns.pairplot()

重要参数:

hue:类别所在的列(和带拟合线的散点图一致),取出数据集的子集,对数据集进行分类,其实单词“hue”是色调的意思,可以将这个参数与我们之前的类中的参数c来进行对比,在这个参数中输入不同的类别,可以让不同的数据集展示不同的颜色
kind:绘制的相关性图像类型,可以选择“scatter”散点图或者“reg”带拟合线的散点图

  1. plt.figure(figsize = (10, 8), dpi = 80) # 设置画布
  2. plt.rcParams['font.sans-serif'] = ['Simhei'] # 显示中文
  3. sns.pairplot(df # 数据,包含各特征和标签
  4. , kind = 'scatter' # 要绘制的图像类型
  5. , hue = 'species' # 类别所在的列(标签)
  6. , plot_kws = dict(s = 40, edgecolor = 'white', linewidth = 1) # 补充散点图的详细设置
  7. )
  1. <seaborn.axisgrid.PairGrid at 0x1ed58d37cf8>
  2. <Figure size 800x640 with 0 Axes>

output_10_2.png

  1. sns.pairplot(df # 数据,包含各特征和标签
  2. , kind = 'reg' # 要绘制的图像类型
  3. , hue = 'species' # 类别所在的列(标签)
  4. )
  1. <seaborn.axisgrid.PairGrid at 0x1ed5a9219b0>

output_11_1.png

4. 解读散点图

  1. 从纵坐标为花萼长的一行看起:

图二:花萼越宽,花萼越长。setosa的花萼相对更宽,其他两种花的花萼更长,其中virginica的花萼最长。
图三:setosa的花瓣最短,而且setosa的花萼越长,花瓣的长度没有变化。其他两种花的花萼越长,花瓣也越长。其中virginica的花瓣最长。
图四:setosa的花瓣最窄,而且setosa的花萼越长,花瓣的宽度没有变化。其他两种花的花萼越长,花瓣也越宽。其中virginica的花瓣最宽。

  1. 再看纵坐标为花萼宽的一行:

每种花的花萼宽与花瓣大小的关系同上

  1. 最后看纵坐标为花瓣长的一行:

每种花的花瓣越长,花瓣也越宽。其中setosa的花瓣最短,virginica的花瓣最长

  1. 结论:

花瓣与花萼间的关系:

seatosa的花瓣大小与花萼大小没有关系
其他两种花的花瓣大小与花萼大小正相关

花萼与花萼间的关系:

seatosa的花萼宽与花萼长正相关
其他两种花的花萼宽与花萼长正相关

花瓣与花瓣间的关系:

每种花的花瓣宽与花瓣长都正相关

5. 解读分布图

  1. 花萼:

versicolor和virginica的花萼更长,setosa的花萼最短,且长度较为集中
setosa的花萼最宽

  1. 花瓣:

setosa的花瓣最短,其他两种花的花瓣更长。其中virginica的花瓣最长
setosa的花瓣最窄,其他两种花的花瓣更宽。其中virginica的花瓣最宽

  1. 结论:

setosa的花萼宽且短,其他两种花的花萼窄且长。其中virginica的花萼最长最宽
setosa的花瓣窄且短,其他两种花的花瓣宽且长。其中virginica的花瓣最长最宽

iris.png

6. 什么时候用相关性矩阵,什么时候用成对分析图呢?

当探索不同分类下的特征之间的相关性的时候,用成对分析图
当特征很多的时候,使用相关性矩阵,当特征只有少数几个的时候,使用成对分析图
在意特征本身的分布时,使用成对分析图
当数据较少时,使用成对分析图