使用python实现正态分布检验

本次的正态分布检验的数据描述为What’s Normal? – Temperature, Gender, and Heart Rate中的数据,其中数据源中包含体温、性别和心率三个数据。这次我们选择文章中的一个问题来实现,即样本的中的体温是否符合正态分布。

正态性检验

通过样本数据来判断总体是否服从正态分布的检验称为正态性检验。

以下的数据为了方便起见,data.txt中只包含了体温一列。

1、通过直方图初步判断样本数据是否符合正态分布

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()	

输出结果如下图
使用python实现正态分布检验_第1张图片
从输出结果图可以看出直方图呈现出很明显的正态分布特性。

2、直接用算法做KS检验

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实现

你可能感兴趣的:(数据分析)