导语
seaborn是python里面做数据分析和机器学习常用的可视化库。它对matplotlib进行了深度封装,从而可以用非常简单的api接口绘制相对复杂的图形,提供对数据的深入认识。
这里为了让读者更深入的了解每个图形的意义,我们将从最简单的一维分布介绍起。
一、认识分布
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv("C:/Users/GaoJianli/Desktop/ml/SeabornHandbook/demo.csv")
df
Id | Age | |
---|---|---|
1 | 22 | |
2 | 38 | |
3 | 26 | |
4 | 35 | |
5 | 35 | |
6 | 39 |
看下均值、中位数、方差
df.describe()
count 6.000000
mean 32.500000
std 6.892024
min 22.000000
25% 28.250000
50% 35.000000
75% 37.250000
max 39.000000
Name: Age, dtype: float64
二、可视化该分布
sns.countplot(df["Age"])
plt.show()
可以看到,通过countplot会绘制出,每个值在样本中出现的次数。到底哪个值出现得比较多就能很容易的看出来了
sns.barplot(y="Age", data=df)
plt.show()
可以看到,barplot是一个柱状图上面加一个黑线。
柱状图的值默认情况下对应的要显示的样本的均值,本图中也就是 32.5,而黑线默认情况则标识了95%的置信区间。
何为95%的置信区间?95%的置信区间指的是对于当前样本所属的分布而言,当有个新的值产生时,这个值有95%的可能性在该区间内,5%的可能性不在该区间内。
我们可以通过速算公式计算95%的置信区间,范围为(26.5,37.5),跟上图可以对应上。
由此可见,barplot主要用来描述样本的均值和置信区间(置信区间本质上应该算是对整个分布的预估,而不仅仅是展示当前样本里面的信息)。
sns.pointplot(y="Age", data=df)
plt.show()
很容易看出来,pointplot表现的内容跟barplot是一样的。
pointplot也是用来描述样本的均值和置信区间。
sns.boxplot(y="Age", data=df)
plt.show()
boxplot长得跟barplot很像。但描述的内容却不一样。boxplot黑线起点是最小值,终点是最大值。而柱子的起点是25%处的值,终点是75%处的值。柱子中间的那条黑线则对应着50%处的值。跟我们通过df.describe()显示的结果一致(25%是28.25, 75%是37.25,50%是35。注意50%处的这个值和均值是不同的,均值是32.5,boxplot中并未显示出来。)
因此,boxplot是来表现样本里面的四分位值以及最大最小值的。
sns.distplot(df["Age"])
plt.show()
distplot展示了整体的分布情况,其中的曲线图则是概率密度函数。在概率密度函数中,某个点的概率是无意义的。而某两个点之间的概率则是通过对这两个点之间的面积计算得来的。对应到该图上,则意味着Age=40的概率是无意义的,但是Age在30和40之间的概率是二者之间的曲线下的面积。所以,整个曲线下的面积是1,对应着所有值出现的概率总和。
由此可知,distplot主要用来对整体分布进行预估,并很容易观察出某个区间概率的大小情况。
sns.violinplot(df["Age"])
plt.show()
violinplot是结合了boxplot和distplot的优点。
通过violinplot既能看到当前样本的最大最小值和四分位值,又能看到对整体分布的预估,了解任意区间的概率分布情况。