數(shù)據(jù)選自Journal of the American Medical Association(http://jse.amstat.org/v4n2/datasets.shoemaker.html
)關(guān)于體溫、性別、心率的臨床數(shù)據(jù)祖乳,并對以下問題進(jìn)行數(shù)據(jù)分析:
人類體溫均值真的是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)
體溫樣本數(shù)據(jù)是否服從正態(tài)分布拳恋?
不正常的體溫是多少凡资?
男性和女性的正常體溫有明顯的區(qū)別嗎?
體溫和心率是否有相關(guān)性谬运?
為了找到以上問題的答案隙赁,我們使用python來對樣本數(shù)據(jù)做一下分析。
1. 人類體溫均值真的是98.6F嗎梆暖?
體溫散點圖
注:樣本共130條數(shù)據(jù)伞访,其中male數(shù)據(jù)65條,female數(shù)據(jù)65條轰驳。
importpandasaspddf = pd.read_csv('http://jse.amstat.org/datasets/normtemp.dat.txt', header =None,sep ='\s+',names=['體溫','性別','心率'])#讀取數(shù)據(jù)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
'''
結(jié)論:可以看到 體溫的均值為 98.25 F.
2. 體溫樣本數(shù)據(jù)是否服從正態(tài)分布厚掷?
檢測體溫是否服從正態(tài)分布:以下分別使用 kstest、shapiro级解、normaltest三種方法來檢驗冒黑。
u = df['體溫'].mean()# 計算均值std = df['體溫'].std()# 計算標(biāo)準(zhǔn)差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)
結(jié)論:三種檢驗的pvalue值均大于5%,因此體溫值服從正態(tài)分布勤哗。
體溫分布直方圖
我們通過繪制體溫的密度分布直方圖也可以看出來服從正態(tài)分布抡爹。
3. 不正常的體溫是多少?
利用箱線圖剔除異常值
體溫分布箱線圖
# 計算上下四分位數(shù)Q1 = df['體溫'].quantile(q =0.25)#97.8Q3 = df['體溫'].quantile(q =0.75)#98.7#異常值判斷標(biāo)準(zhǔn)芒划, 1.5倍的四分位差 計算上下須對應(yīng)的值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
'''
結(jié)論:體溫值大于100.05F冬竟,小于96.45F的均為異常體溫。
4. 男性和女性的正常體溫有明顯的區(qū)別嗎民逼?
剔除異常體溫后泵殴,分析樣本中男女體溫是否有明顯區(qū)別
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
結(jié)論:女性體溫均值比男性體溫均值偏高.
5. 體溫和心率是否有相關(guān)性?
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. 結(jié)論:由上面三種相關(guān)系數(shù)可以看出 心率和體溫具有正相關(guān)拼苍。