本次的正态分布检验的数据描述为What’s Normal? – Temperature, Gender, and Heart Rate中的数据,其中数据源中包含体温、性别和心率三个数据。这次我们选择文章中的一个问题来实现,即样本的中的体温是否符合正态分布。
通过样本数据来判断总体是否服从正态分布的检验称为正态性检验。
以下的数据为了方便起见,data.txt中只包含了体温一列。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
datas = pd.read_table(r'D:\normal_test\data.txt', encoding='utf-8',names = ['Temperature'])
fig = plt.figure(figsize = (10,6))
ax2 = fig.add_subplot(1,1,1)
datas.hist(bins=50,ax = ax2)
datas.plot(kind = 'kde', secondary_y=True,ax = ax2)
plt.grid()
plt.show()
输出结果如下图
从输出结果图可以看出直方图呈现出很明显的正态分布特性。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
data = pd.read_table(r'D:\normal_test\data.txt', encoding='utf-8',names = ['Temperature'])
df = pd.DataFrame(data, columns =['Temperature'])
u = df['Temperature'].mean() # 计算均值
std = df['Temperature'].std() # 计算标准差
# kstest方法中的参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
# 返回两个值:statistic → D值,pvalue → P值
# 当p值大于0.05,说明待检验的数据符合为正态分布
result = stats.kstest(df['Temperature'], 'norm', (u, std))
print(result)
输出结果为:
KstestResult(statistic=0.06472685044046644, pvalue=0.645030731743997)
从输出结果来看pvalue为0.645,大于0.05,因此可以接受体温符合正态分布的假设。
以上两种检验方法的输出结果说明样本的体温数据符合正态分布。
What’s Normal? – Temperature, Gender, and Heart Rate
测试数据集
数据分析之正态分布检验及python实现