数据选自Journal of the American Medical Association(http://jse.amstat.org/v4n2/datasets.shoemaker.html
)关于体温、性别、心率的临床数据,并对以下问题进行数据分析:
人类体温均值真的是98.6F吗?(Journal of the American Medical Association entitled "A Critical Appraisal of 98.6 Degrees F, the Upper Limit of the Normal Body Temperature)
体温样本数据是否服从正态分布?
不正常的体温是多少?
男性和女性的正常体温有明显的区别吗?
体温和心率是否有相关性?
为了找到以上问题的答案,我们使用python来对样本数据做一下分析。
1. 人类体温均值真的是98.6F吗?
体温散点图
注:样本共130条数据,其中male数据65条,female数据65条。
importpandasaspddf = pd.read_csv('http://jse.amstat.org/datasets/normtemp.dat.txt', header =None,sep ='\s+',names=['体温','性别','心率'])#读取数据df['体温'].describe()'''
count 130.000000
mean 98.249231
std 0.733183
min 96.300000
25% 97.800000
50% 98.300000
75% 98.700000
max 100.800000
'''
结论:可以看到 体温的均值为 98.25 F.
2. 体温样本数据是否服从正态分布?
检测体温是否服从正态分布:以下分别使用 kstest、shapiro、normaltest三种方法来检验。
u = df['体温'].mean()# 计算均值std = df['体温'].std()# 计算标准差ks_test = kstest(df['体温'],'norm',(u,std))#KstestResult(statistic=0.06472685044046644, pvalue=0.645030731743997)shapiro_test = scipy.stats.shapiro(df['体温'])#(0.9865770936012268, 0.233174666762352)normaltest_test = normaltest(df['体温'], axis=None)#NormaltestResult(statistic=2.703801433319236, pvalue=0.2587479863488212)
结论:三种检验的pvalue值均大于5%,因此体温值服从正态分布。
体温分布直方图
我们通过绘制体温的密度分布直方图也可以看出来服从正态分布。
3. 不正常的体温是多少?
利用箱线图剔除异常值
体温分布箱线图
# 计算上下四分位数Q1 = df['体温'].quantile(q =0.25)#97.8Q3 = df['体温'].quantile(q =0.75)#98.7#异常值判断标准, 1.5倍的四分位差 计算上下须对应的值low_quantile = Q1 -1.5*(Q3-Q1)#96.44999999999999high_quantile = Q3 +1.5*(Q3-Q1)#100.05000000000001# 输出异常值value = df['体温'][(df['体温'] > high_quantile) | (df['体温'] < low_quantile)]'''
超过上下须的异常体温值:
0 96.3
65 96.4
129 100.8
'''
结论:体温值大于100.05F,小于96.45F的均为异常体温。
4. 男性和女性的正常体温有明显的区别吗?
剔除异常体温后,分析样本中男女体温是否有明显区别
df2 = df.loc[(df['体温'] != 96.3)&(df['体温'] != 96.4)&(df['体温'] != 100.8)]#排除异常值df3 = df2.loc[df2['性别']==1]man_narmal_mean_temperature = df3['体温'].mean()#男士体温均值 98.13281250000003df4 = df2.loc[df2['性别']==2]woman_narmal_mean_temperature = df4['体温'].mean()#女士体温均值 98.38730158730158
结论:女性体温均值比男性体温均值偏高.
5. 体温和心率是否有相关性?
df2.corr()'''
体温 性别 心率
体温 1.000000 0.192293 0.243285
性别 0.192293 1.000000 0.054193
心率 0.243285 0.054193 1.000000
'''df2.corr('kendall')'''
体温 性别 心率
体温 1.000000 0.159488 0.176732
性别 0.159488 1.000000 0.064551
心率 0.176732 0.064551 1.000000
'''df2.corr('spearman')'''
体温 性别 心率
体温 1.000000 0.190609 0.265460
性别 0.190609 1.000000 0.077409
心率 0.265460 0.077409 1.000000
5. 结论:由上面三种相关系数可以看出 心率和体温具有正相关。