说明判断数据正态分布的 2 个方法,当然也不止 2 种,只是比较常用。

Q-Q图

Q-Q图(分位数-分位数图)是两个分位数彼此相对的图。分位数是某些值低于该分位数的分数。

例如,中位数是一个分位数,其中 50% 的数据低于该点,而 50% 的数据位于该点之上。Q-Q图的目的是找出两组数据是否来自同一分布。Q-Q图上绘制了 45 度角;如果两个数据集来自同一分布,则这些点将落在该参考线上。

Q-Q图的 2 个作用:

  1. 数据集和正态分布做对比,观察数据是否符合正态分布;
  2. 两个数据集对比,观察两个数据集是否分布一致。

image.png

举例:7.19、6.31、5.89、4.5、3.77、4.25、5.19、5.79、6.79。以上值是否来自正态分布?
解法:

  1. 从最小到最大排序。3.77、4.25、4.50、5.19、5.89、5.79、6.31、6.79、7.19
  2. 绘制正态分布曲线。将曲线分成n + 1个段。我们有 9 个值,因此将曲线分为 10 个大小相等的区域。对于此示例,每个线段占面积的 10%(因为100%/ 10 = 10%)。

image.png

  1. 在第 3 步中找到每个分段的 z 值(截止点)。这些分段是 _area_,因此请参考 z 表(标准正态概率)以获取每个分段的 z 值。在 z 值是:
分位 z值
10% -1.28
20% -0.84
30% -0.52
40% -0.25
50% 0
60% 0.25
70% 0.52
80% 0.84
90% 1.28
100% 3.0

image.png

  1. 针对正态分布截止点(步骤 3 )绘制数据集值(步骤 1 )。绘制表格:

image.png

Q-Q图上的(几乎)直线表示数据符合正态分布。

直方图

使用直方图来观察数据集符合正态分布相对容易理解,只需要观察数据集是否是正态分布的钟型形状,两头低,中间高。越标准与正态分布越吻合。

案例

1
2
3
4
5
6
# 导入包
import seaborn as sns
from pandas import Series,DataFrame
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
1
2
3
4
5
6
7
# 拿到小费数据集
tips = sns.load_dataset('tips')

# 数据介绍: total_bill列为消费总金额;tip列为小费金额;sex列为顾客性别;smoker列为顾客是否抽烟;day列为消费的星期;time列为聚餐的时间段;size列为聚餐人数

# 查看前5行数据
tips.head()

image.png

1
2
3
4
5
6
7
8
9
plt.figure(figsize=(10,5))

# 直方图
ax=plt.subplot(1,2,1)
sns.distplot(tips['total_bill'],fit=stats.norm)

# Q-Q图
ax=plt.subplot(1,2,2)
res = stats.probplot(tips['total_bill'], plot=plt)

image.png

观察可以得出,total_bill数据集大概是符合正态分布的。

Reference