成对分析图是以图像形式分析多个变量之间相关性的图像,是矩阵图的具象化。
如我们之前所学习的,我们可以使用散点图,或者带最佳拟合线的散点图来描述变量两两之间的关系。
但当我们有着探索多个特征两两之间关系的需求时,一一绘制图像的效率比较低下,因此我们才引入相关性矩阵。
但如果我们还是希望绘制出图像,我们就可以使用成对分析图,一种类矩阵的绘图方式,一次性绘制出所有特征之间的相关性图像。
成对分析图的横坐标是所有特征,纵坐标也是所有特征。
横纵坐标为不同的特征时,显示两个特征之间的相关性图像。
当横纵坐标为同一个特征时,显示这个特征自身的分布图。
1. 导入需要的绘图库
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
large = 22; med = 16; small = 12
params = {'axes.titlesize': large,
'legend.fontsize': med,
'figure.figsize': (16, 10),
'axes.labelsize': med,
'axes.titlesize': med,
'xtick.labelsize': med,
'ytick.labelsize': med,
'figure.titlesize': large}
plt.rcParams.update(params)
plt.style.use('seaborn-whitegrid')
sns.set_style("white")
import numpy as np
import pandas as pd
import warnings; warnings.filterwarnings(action='once')
2. 导入数据
# seaborn中自带数据库,可以从中导入著名的鸢尾花数据集
df = sns.load_dataset('iris')
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 |
df.columns = ['花萼长', '花萼宽', '花瓣长', '花瓣宽', 'species']
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 |
3. 绘制图像
sns.pairplot()
重要参数:
hue:类别所在的列(和带拟合线的散点图一致),取出数据集的子集,对数据集进行分类,其实单词“hue”是色调的意思,可以将这个参数与我们之前的类中的参数c来进行对比,在这个参数中输入不同的类别,可以让不同的数据集展示不同的颜色
kind:绘制的相关性图像类型,可以选择“scatter”散点图或者“reg”带拟合线的散点图
plt.figure(figsize = (10, 8), dpi = 80) # 设置画布
plt.rcParams['font.sans-serif'] = ['Simhei'] # 显示中文
sns.pairplot(df # 数据,包含各特征和标签
, kind = 'scatter' # 要绘制的图像类型
, hue = 'species' # 类别所在的列(标签)
, plot_kws = dict(s = 40, edgecolor = 'white', linewidth = 1) # 补充散点图的详细设置
)
<seaborn.axisgrid.PairGrid at 0x1ed58d37cf8>
<Figure size 800x640 with 0 Axes>
sns.pairplot(df # 数据,包含各特征和标签
, kind = 'reg' # 要绘制的图像类型
, hue = 'species' # 类别所在的列(标签)
)
<seaborn.axisgrid.PairGrid at 0x1ed5a9219b0>
4. 解读散点图
- 从纵坐标为花萼长的一行看起:
图二:花萼越宽,花萼越长。setosa的花萼相对更宽,其他两种花的花萼更长,其中virginica的花萼最长。
图三:setosa的花瓣最短,而且setosa的花萼越长,花瓣的长度没有变化。其他两种花的花萼越长,花瓣也越长。其中virginica的花瓣最长。
图四:setosa的花瓣最窄,而且setosa的花萼越长,花瓣的宽度没有变化。其他两种花的花萼越长,花瓣也越宽。其中virginica的花瓣最宽。
- 再看纵坐标为花萼宽的一行:
每种花的花萼宽与花瓣大小的关系同上
- 最后看纵坐标为花瓣长的一行:
每种花的花瓣越长,花瓣也越宽。其中setosa的花瓣最短,virginica的花瓣最长
- 结论:
花瓣与花萼间的关系:
seatosa的花瓣大小与花萼大小没有关系
其他两种花的花瓣大小与花萼大小正相关花萼与花萼间的关系:
seatosa的花萼宽与花萼长正相关
其他两种花的花萼宽与花萼长正相关花瓣与花瓣间的关系:
每种花的花瓣宽与花瓣长都正相关
5. 解读分布图
- 花萼:
versicolor和virginica的花萼更长,setosa的花萼最短,且长度较为集中
setosa的花萼最宽
- 花瓣:
setosa的花瓣最短,其他两种花的花瓣更长。其中virginica的花瓣最长
setosa的花瓣最窄,其他两种花的花瓣更宽。其中virginica的花瓣最宽
- 结论:
setosa的花萼宽且短,其他两种花的花萼窄且长。其中virginica的花萼最长最宽
setosa的花瓣窄且短,其他两种花的花瓣宽且长。其中virginica的花瓣最长最宽
6. 什么时候用相关性矩阵,什么时候用成对分析图呢?
当探索不同分类下的特征之间的相关性的时候,用成对分析图
当特征很多的时候,使用相关性矩阵,当特征只有少数几个的时候,使用成对分析图
在意特征本身的分布时,使用成对分析图
当数据较少时,使用成对分析图