3.14 数据科学入门:集中趋势度量—均值、中值和众数
在这一节中,我们继续讨论如何使用描述性统计数据进行数据分析,包括:
- 均值—一组值的平均值;
- 中值—当所有值按顺序排列时的中间值;
- 众数—最常出现的值。
以上这些都是集中趋势度量,每种都会产生一个值来表示一组值中的“中心”值,或者说,在某种意义上是这组值中的典型值。
我们来计算一个整数列表的均值、中值和众数。下面的代码段创建一个名为grades
的列表,然后使用内置的sum
和len
函数来“手动”计算平均值—sum
计算grade
的总和(397),len
计算grade
的个数(5):
前一章介绍了使用Python的内置函数len
和sum
分别计算描述性统计中的计数和求和。与函数min
和max
(在前一章中介绍)类似,sum
和len
都是函数式编程中约简的示例,它们会将值合集减少为单个值—值的总和与值的数量。在3.8节的计算班级平均分的示例中,可以删除脚本的第10~15行,并使用代码段[2]
替换第16行的代码来计算平均值。
Python标准库的statistics
模块提供了计算均值、中值和众数的函数,这些同样也是约简。要使用这些功能,首先需要导入statistics
模块,如下:
然后,可以使用“statistics.
”加上需要调用的函数名称来访问模块的功能。下面的代码使用statistics
模块的mean
、median
和mode
函数分别计算列表grades
的均值、中值和众数:
其中,每个函数的参数都必须是可迭代的,在本例中为列表grades
。要确认中值和众数是否正确,可以使用内置的sorted
函数来得到列表grades
按值的递增顺序排列的副本:
列表grades
具有奇数个值(5),因此median
返回中间值(85
)。如果列表包含偶数个值,则median
会返回两个中间值的平均值。从排好序的列表可以看到85
是众数,因为它出现的次数最多(两次)。类似于下面的列表会导致mode
函数产生一个StatisticsError
:
因为其中有两个或更多个“出现最多”的值。这样的一组值是双峰的,85
和93
都出现了两次。