Python 的标准函数“statistics”提供了一些基本的数学统计函数,可以快速求出平均数、中位数、标准差、众数等数字统计,但如果需要更专业的统计函数,则需要参考 NumPy 或 SciPy 等第三方函数库。
statistics 常用方法
下方列出几种 statistics 模块常用的方法:
| 方法 | 说明 |
|---|---|
| mean() | 计算平均值。 |
| median() | 计算中位数。 |
| median_low()、median_high() | 计算偶数个数据中,较高的或较低的中位数。 |
| median_grouped() | 计算数据分组(同样数值的分成同一组)的中位数。 |
| mode() | 计算众数(数据中出现最多次的数值)。 |
| pstdev()、pvariance() | 计算数据的总体标准差和方差。 |
| stdev()、variance() | 计算数据的样本标准差和方差。 |
要使用 statistics 必须先 import statistics 模块,或使用 from 的方式,单独 import 特定的模块。
import statistics
from statistics import mean
mean()
mean() 可以计算多个数字的平均值,计算结果以小数点两位显示。
import statistics
arr = [1, 2, 3, 4, 5, 6, 7, 8]
a = statistics.mean(arr) # 计算平均值
print(a) # 4.5
median()
mean() 可以计算多个数字的中位数,如果数字的数量为奇数,则返回中间的数字,如果是偶数,则返回中间数字的平均值。
import statistics
arr = [1, 2, 3, 4, 5, 6, 7, 8]
arr2 = [1, 2, 3, 4, 5, 6, 7]
a = statistics.median(arr) # 计算中位数
b = statistics.median(arr2) # 计算中位数
print(a) # 4.5
print(b) # 4
median_low()、median_high()
median_low() 和 median_high() 可以计算“偶数个”数据中,较高的或较低的中位数,如果是数字的数量为奇数,则返回中间的数字(等同 median())。
import statistics
arr = [1, 2, 3, 4, 5, 6, 7, 8]
a = statistics.median_low(arr) # 计算较低的中位数
b = statistics.median_high(arr) # 计算较高的中位数
print(a) # 4
print(b) # 5
median_grouped()
median_grouped() 可以计算数据分组(同样数值的分成同一组)的中位数。
import statistics
arr = [1, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 5] # 数据中有重复的数值
a = statistics.median_grouped(arr) # 计算分组的中位数
print(a) # 3.8333333333333335
mode
mode() 可以计算众数(数据中出现最多次的数值)。
import statistics
arr = [1, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 5]
a = statistics.mode(arr) # 计算出现最多次的数值
print(a) # 4
只要是可迭代的对象,就可以使用 mode 计算,下方的例子会计算一个字符串中,出现最多次的字母(注意,在 Python 3.8 版以前,如果最多次的字母不只一个,会发生错误)。
import statistics
text = 'hello world'
a = statistics.mode(text) # 计算出现最多次的字母
print(a) # l
pstdev()、pvariance()
pstdev() 和 pvariance() 可以计算数据的总体标准差和方差。
import statistics
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = statistics.pstdev(arr)
b = statistics.pvariance(arr)
print(a) # 2.581988897471611
print(b) # 6.666666666666667
stdev()、variance()
stdev() 和 variance() 可以计算数据的样本标准差和方差。
import statistics
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = statistics.stdev(arr)
b = statistics.variance(arr)
print(a) # 2.7386127875258306
print(b) # 7.5