Python 数据可视化:数据分布统计图和热图
本课将继续介绍 Seaborn 中的统计图。一定要牢记,Seaborn 是对 Matplotlib 的高级封装,它优化了很多古老的做图过程,因此才会看到一个函数解决问题的局面。
2.4.1 数据分布统计图
在统计学中,研究数据的分布情况,也是一个重要的工作,比如某些数据是否为正态分布——某些机器学习模型很在意数据的分布情况。
在 Matplotlib 中,可以通过绘制直方图将数据的分布情况可视化。在 Seaborn 中,也提供了绘制直方图的函数。
%matplotlib inline
import seaborn as sns
import numpy as np
sns.set()
np.random.seed(0)
x = np.random.randn(100)
ax = sns.distplot(x)
输出结果:
enter image description heresns.distplot 函数即实现了直方图,还顺带把曲线画出来了——曲线其实代表了 KDE。
seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
除了 sns.distplot 之外,在 Seaborn 中还有另外一个常用的绘制数据分布的函数 sns.kdeplot,它们的使用方法类似。
2.4.2 联合统计图
首先看这样一个示例。
sns.set(rc={'axes.facecolor':'cornflowerblue', 'figure.facecolor':'cornflowerblue'}) #①
tips = sns.load_dataset("tips")
jg = sns.JointGrid(x='total_bill', y='tip', data=tips) #②
输出结果:
image① 的作用是设置所得图示的背景颜色,这样做的目的是让下面的 ② 绘制的图像显示更清晰,如果不设置 ①,在显示的图示中看到的就是白底图像,有的部分看不出来。
② 最终得到的是坐标网格,而且在图中分为三部分,如下图所示。
image相对于以往的坐标网格,多出了 B 和 C 两个部分。也就是说,不仅可以在 A 部分绘制某种统计图,在 B 和 C 部分也可以绘制。
继续操作:
jg = sns.JointGrid(x='total_bill', y='tip', data=tips)
jg.plot(sns.regplot, sns.distplot) #③
输出结果:
image语句 ③ 实现了在坐标网格中绘制统计图的效果,jp.plot 方法以两个绘图函数为参数,分别在 A 部分绘制了回归统计图,在 B 和 C 部分绘制了直方图,而且直方图分别表示了对应坐标轴数据的分布,即:
- A 部分表示的是两个特征之间的关系;
- B 和 C 部分分别表示某一个特征的数据分布。
我们把有语句 ② 和 ③ 共同实现的统计图,称为联合统计图。除了用 ② ③ 两句可以绘制这种图之外,还有一个函数也能够“两步并作一步”,具体如下:
seaborn.jointplot(x, y, data=None, kind='scatter', stat_func=None, color=None, height=6, ratio=5, space=0.2, dropna=True, xlim=None, ylim=None, joint_kws=None, marginal_kws=None, annot_kws=None, **kwargs)
注意,参数 kind 的取值只能是“scatter”、“reg”、“resid”、“kde”、“hex”中的一个,这就规定了在 A 区中所显示的统计图的种类。
sns.set()
sns.jointplot(x="total_bill", y="tip", kind='reg', data=tips) #④
输出结果: