1. 初识箱形图
箱形图(Box Plot, or Boxplot)是一种描述数据描述性统计结果的图形。例如下图:简单箱形图
代码如下
import matplotlib.pyplot as plt
import numpy as np
# 设置数据以及异常值(Outlier)
data = np.random.random(100)
outlier = [1.6]
all_data = np.append(data, outlier)
# 绘图
fig, ax= plt.subplots(figsize=(4, 6))
ax.boxplot(all_data, labels=['Score'])
2. 我们应该怎么看箱形图?
箱形图与其注解
import matplotlib.pyplot as plt
import numpy as np
# 生成数据以及异常值
data = np.append(np.random.random(10000)*80, [138])
# 绘制图片
fig, ax = plt.subplots(figsize=(5, 6))
ax.boxplot(data, labels=['Total Score'])
# 添加注解
ax.annotate(xy=(1.03, 138), text='Outlier', xytext=(1.25, 136.8), arrowprops={'arrowstyle': '-|>'})
ax.annotate(xy=(1.04, 100), text='Maximum', xytext=(1.25, 98.8), arrowprops={'arrowstyle': '-|>'})
ax.annotate(xy=(1.04, 0), text='Minimum', xytext=(1.25, -1.2), arrowprops={'arrowstyle': '-|>'})
ax.annotate(xy=(0.9, 60), text='Q3', xytext=(0.6, 58.5), arrowprops={'arrowstyle': '-|>'})
ax.annotate(xy=(0.9, 20), text='Q1', xytext=(0.6, 18.5), arrowprops={'arrowstyle': '-|>'})
ax.annotate(xy=(1.08, 40), text='Q2 / Median', xytext=(1.25, 38.5), arrowprops={'arrowstyle': '-|>'})
ax.annotate(xy=(0.8, 60), text='', xytext=(0.8, 42), arrowprops={'arrowstyle': '-|>'})
ax.annotate(xy=(0.8, 20), text='IQR', xytext=(0.75, 38), arrowprops={'arrowstyle': '-|>'})
Outlier: 异常值
Maximum: 最大值
Q2: 第二四分位数,或者说中位数,50百分位数
Q3: 第三四分位数,75百分位数
Q4: 第一四分位数,25百分位数
IQR: 四分位距,即Q3 - Q1
Minimum: 最小值
3.箱形图不假设数据分布
很多人会以为最大值与最小值是均值正负三个标准差(Mean ± SD)。但是一定要记住,大部分的箱形图对数据并没有假设,而三个标准差规则只适用于正态以及近似正态分布的数据。所以箱形图的最大值最小值以及由此判断的异常值并不是以三个标准差为规则的。那么他们如何计算呢?
4. 一种有趣的箱形图画法
试试在第二部分开始画图之前加上
plt.xckd()
; )
一种有趣的箱形图