统计学~体温是否符合正态分布?【第四周】

数据集

数据集来源:http://jse.amstat.org/v4n2/datasets.shoemaker.html ,我们取其中的体温测试是否满足正态分布。

验证

import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
import matplotlib as mpl

#读取数据
df = pd.read_csv('http://jse.amstat.org/datasets/normtemp.dat.txt', header = None,sep = '\s+' ,names=['体温','性别','心率']) 
#查看数据概览
df.head()

结果数据:
在这里插入图片描述

# 查看数据描述
df['体温'].describe()

输出:
[外链图片转存失败(img-Th0kBQeu-1565496321580)(./1565495490205.png)]

# 计算偏态系数
stats.skew(df['体温'])
# out:-0.004367976879198404 
# 偏态系数小于0且接近0,曲线呈微左偏,大致呈对称分布

# 峰态系数
stats.kurtosis(df['体温'])
# 峰态系数0.7049597854114715
# 峰态系数大于0且接近0,说明曲线微高耸

我们知道正态分布时堆对称的,偏度为0,峰度为0,从以上两个系数可以判断,体温的分布近似正态分布,那到底是不是满足分布的正态性呢,需要使用真正的统计检验方法,而不是简单地检查峰度或偏度。

这里使用 scipy.stats 提供的 shapiro 函数,对体温分布进行 Shapiro-Wilk 检验。该函数有两个返回值,一个是检验的t统计量,另一个是p值。我们只需要知道如何使用p值判断数据的正态性:如果p值小于等于0.05,就拒绝正态性假设,得出数据非正态分布的结论。

# 检验是否满足正态分布
stats.shapiro(df['体温'])
# out:(0.9865769743919373, 0.2331680953502655)
# 输出结果中第一个为统计数,第二个为P值
# p值小于0.05,所以体温满足正态分布

呈现

体温满足正态分布,我们将绘制正态分布曲线

import matplotlib.pyplot as plt
import matplotlib as mpl
#解决乱码
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']

#绘制正态分布图形
t = df['体温'].sort_values()
#计算合适的位置和比例
loc,scale = stats.norm.fit(t)
plt.plot(t, stats.norm.pdf(t,loc,scale),'b-',label = 'norm')
plt.title(u'体温正态分布图')
plt.show()

输出:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章