statistics 是 Python 3.4 引入的标准库,专注于提供基本的统计计算功能,可用于分析数值数据的集中趋势、离散程度、分布形状等。它无需额外安装,接口简洁,适合快速完成简单的统计分析任务(如计算均值、中位数、方差等)。
statistics 模块的函数可按 “统计分析维度” 分为四大类,涵盖描述性统计的核心需求。
用于描述数据集中趋势的统计量,包括均值、中位数、众数等。
用于描述数据离散程度的统计量,包括方差、标准差等,反映数据与中心值的偏离程度。
用于描述数据分布形状的统计量,反映数据分布的偏斜程度和陡峭程度。
Python 3.8+ 新增 quantiles() 函数,用于计算数据的分位数(如四分位数、百分位数),反映数据在不同比例位置的值。
from statistics import quantilesdata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
statistics 模块对输入数据有严格要求,不符合条件时会抛出 StatisticsError 异常,需注意以下几点:
-
非空数据:所有函数都要求输入非空序列,否则报错:
from statistics import mean
mean([])
-
数值类型:输入数据必须是数值(int/float),包含非数值类型(如字符串)会报错:
-
众数的特殊情况:
- 若所有元素出现次数相同(如
[1, 2, 3]),mode() 会抛出 StatisticsError(无众数)。
- Python 3.8 前的
mode() 只支持单众数,多众数时会报错;3.8+ 会返回包含所有众数的 ModeResult 对象。
-
样本与总体的区别:
variance()(样本方差)和 pvariance()(总体方差)的核心区别是分母:样本用 n-1(修正自由度,减少抽样误差),总体用 n。
- 示例:对数据
[1, 2, 3, 4],样本方差 = 5/3 ≈ 1.666,总体方差 = 5/4 = 1.25。
假设我们有一组学生成绩数据 [85, 92, 78, 90, 85, 88, 95, 85, 72, 80],用 statistics 模块进行完整分析:
from statistics import (mean, median, mode, stdev, pstdev,skew, kurtosis, quantiles
)scores = [85, 92, 78, 90, 85, 88, 95, 85, 72, 80]
- 适用场景:简单的描述性统计分析(如快速计算均值、方差)、小型数据集处理、不需要复杂统计模型的场景。
- 局限性:
- 不支持大型数据集(性能不如
numpy)。
- 功能有限,不包含高级统计方法(如假设检验、回归分析)。
- 对非数值数据支持差(如字符串、缺失值)。
若需处理复杂统计任务(如大数据量、缺失值处理、高级建模),建议使用 numpy(数值计算)、pandas(数据分析)或 scipy(科学计算)。
statistics 模块作为 Python 标准库,提供了简洁易用的基本统计功能,核心涵盖集中趋势、离散程度、分布形状和分位数计算。掌握它可以快速完成简单的数据分析任务,适合初学者或轻量场景。使用时需注意输入数据的合法性(非空、数值类型),并区分样本与总体统计量的差异。对于复杂需求,可结合第三方库扩展功能。