Python标准库-数学统计函数(statistics)

229 阅读2分钟

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 = [12345678]
a = statistics.mean(arr)    # 计算平均值
print(a)                    # 4.5

median()

mean() 可以计算多个数字的中位数,如果数字的数量为奇数,则返回中间的数字,如果是偶数,则返回中间数字的平均值。

import statistics
arr = [12345678]
arr2 = [1234567]
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 = [12345678]
a = statistics.median_low(arr)    # 计算较低的中位数
b = statistics.median_high(arr)   # 计算较高的中位数
print(a)   # 4
print(b)   # 5

median_grouped()

median_grouped() 可以计算数据分组(同样数值的分成同一组)的中位数。

import statistics
arr = [122344444455]   # 数据中有重复的数值
a = statistics.median_grouped(arr)    # 计算分组的中位数
print(a)   # 3.8333333333333335

mode

mode() 可以计算众数(数据中出现最多次的数值)。

import statistics
arr = [122344444455]
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 = [123456789]
a = statistics.pstdev(arr)
b = statistics.pvariance(arr)
print(a)   # 2.581988897471611
print(b)   # 6.666666666666667

stdev()、variance()

stdev() 和 variance() 可以计算数据的样本标准差和方差。

import statistics
arr = [123456789]
a = statistics.stdev(arr)
b = statistics.variance(arr)
print(a)   # 2.7386127875258306
print(b)   # 7.5