开始

本篇文章,我们主要解决以下几个小问题:

  1. 人体体温的总体均值是否是98.6华氏度?
  2. 人体的温度是否服从正态分布?
  3. 人体体温中存在的异常数据是哪些?

    获取数据

    我们首先获取数据:

test.csv
如上图所示:数据源中 test 标签页内,共计有三个字段【Temperature、Gender、HeartRate】,分别代表数据源码中的【人体体温、男女性别(1男2女)、人体心率】,且表格中共计130条数据。

数据处理

使用python代码,进行数据的预处理:

  1. import pandas as pd
  2. path = 'C:/Users/wb-lc576419/Desktop/test.csv'
  3. data = pd.read_csv(path)
  4. print(data.head())

最终,显示如下结果:
image.png

查看整体的人体体温均值

  1. import pandas as pd
  2. path = 'C:/Users/wb-lc576419/Desktop/test.csv'
  3. data = pd.read_csv(path)
  4. print(data.mean())

最终,显示如下结果:
image.png
由此可知,整体的人体均值为98.249华氏度,人体心率均值为 73.76

查看人体的温度是否服从正态分布

此时,我们使用 python里面的 scipy 包,来进行KS检验

kstest 是一个很强大的检验模块,除了正态性检验,还能检验 scipy.stats 中的其他数据分布类型

  1. import pandas as pd
  2. from scipy.stats import kstest
  3. path = 'C:/Users/wb-lc576419/Desktop/test.csv'
  4. data = pd.read_csv(path)
  5. u =data['Temperature'].mean()
  6. std = data['Temperature'].std()
  7. ks_test = kstest(data['Temperature'],'norm',(u,std))
  8. print(ks_test)

最终,显示如下结果:
image.png

输出结果中第一个为统计量,第二个为P值(注:统计量越接近0就越表明数据和标准正态分布拟合的越好,如果P值大于显著性水平,通常是0.05,接受原假设,则判断样本的总体服从正态分布)

所以,综上所述,人体的温度 不服从正太分布

查看人体的温度中存在的异常数据有哪些

对于高斯分布的数据来说,68.27%的数据集中在一个标准差的范围内,95.45%在两个标准差的范围内,99.73%在3个标准差的范围内,因此根据这个,和平均值相差3倍标准差的点被看作异常点,但平均值和标准差太容易受异常点干扰,其有限样本击穿点是0%。

有效样本击穿点的定义是一个比例值,对超过这个比例值的的样本进行替换,评估方法将无法进行准确描述,有限样本击穿点越大,代表评估方法越robust。

因此,我们假定人体温度的数值中,和平均值相差3倍标准差的点作为异常数据,并将其输出。

  1. import pandas as pd
  2. path = 'C:/Users/wb-lc576419/Desktop/test.csv'
  3. data = pd.read_csv(path)
  4. u =data['Temperature'].mean()
  5. std = data['Temperature'].std()
  6. lower_limit = u-3*std
  7. upper_limit = u+3*std
  8. for i in data['Temperature']:
  9. if i < lower_limit or i > upper_limit:
  10. print(i)

最终,显示如下结果:
image.png
显然,人体体温中存在的异常数据为 100.8华氏度