使用 Python 验证数据集中的体温是否符合正态分布。
- 数据集地址:http://jse.amstat.org/datasets/normtemp.dat.txt
- 数据集描述:总共只有三列:体温、性别、心率
- 数据集详细描述:http://jse.amstat.org/v4n2/datasets.shoemaker.html
温度数据的基本信息描述性统计
import pandas as pd
datadf = pd.read_csv('http://jse.amstat.org/datasets/normtemp.dat.txt',header=None,sep='\s+',names=['体温','性别','心率'])
datadf['体温'].describe() #显示数值型数据的描述统计
结果
count 130.000000 # 总数
mean 98.249231 # 均值
std 0.733183 # 标准差
min 96.300000 # 极小值
25% 97.800000 # 第一四分位数Q1
50% 98.300000 # 中位数
75% 98.700000 # 第三四分位数Q3
max 100.800000 # 极大值
Name: 体温, dtype: float64
检验温度数据是否符合正态分布
1.直接用算法做KS检验(样本量大于50)
from scipy import stats
u = datadf['体温'].mean()
std = datadf['体温'].std()
stats.kstest(datadf['体温'], 'norm', (u, std))
# KstestResult(statistic=0.06472685044046644, pvalue=0.645030731743997)
结果返回两个值:statistic → D值,pvalue → P值
2.W检验(shapiro -wilk)
stats.shapiro(datadf['体温'])
# (0.9865769743919373, 0.2331680953502655)
返回:W → 统计数;p-value → p值
以上两种检验都是根据P值是否大于0.05确定是否为正态性,当P>0.05时,可以认为数据是呈正态分布的,小于为非正态性。
3.直接画出分布图观察是否符合正态分布
主流观点:就正态性检验而言,图示是最直接也是最可靠的方法,直方图是最常用的,一旦视觉上认为是正态的就可以。
画直方图
import matplotlib.pyplot as plt
plt.hist(datadf['体温'], bins=130, histtype='bar', color='r', density=True)
plt.show()
带拟合曲线的
import seaborn as sns
sns.set_palette("hls")
sns.distplot(datadf['体温'],color="r",bins=130,kde=True)
plt.show()
根据以上观察,我们可以肯定数据集中的体温数据符合正态分布