Python 中 10 个最常用的统计函数

刚入行数据科学,面对成堆的数据和模型,往往最先卡在"算个平均值都要翻文档"这一步。

别急,Python 标准库 statistics 模块 就能帮你搞定 80% 的日常统计需求。

本文挑选了 10 个最常用的统计函数,每个都配上核心代码片段,让你看完就能上手,快速搭起自己的数据分析小工具。

为什么要先掌握这 10 个函数?

在数据科学工作中,描述性统计和基础推断 是每次探索性数据分析(EDA)的起点。无论是清洗数据、发现异常,还是为建模做准备,都绕不开这些计算:

  • 集中趋势 ------ 数据"平均"在哪儿?
  • 离散程度 ------ 数据"散"成什么样?
  • 关联关系 ------ 变量之间怎么相互影响?

statistics 模块是 Python 内置库,无需安装 ,直接 import 即可。

虽然它不如 NumPy/SciPy 功能强大,但胜在轻量、易读、零依赖,对新手极度友好。

1. 均值(mean)------ 最直观的"平均水平"

均值是所有数值加起来除以个数,简单明了。但要注意:它对异常值很敏感,如果你的数据里有极端大或极端小的数,均值会被"带偏"。

数学公式

\\bar{x} = \\frac{1}{n}\\sum_{i=1}\^{n} x_i

python 复制代码
import statistics
data = [10, 20, 30, 40, 50]
mean = statistics.mean(data)
print("均值:", mean)   # 30

📌 新手场景:计算员工平均工资、商品平均价格时先用它,但记得画个箱线图检查异常值。

2. 中位数(median)------ 抗干扰的"中间水平"

中位数是把数据排序后位于中间的那个数。当数据有异常值或分布偏斜时,中位数比均值更靠谱

数学公式(数据排序后记为 X_{(1)}, X_{(2)}, ..., X_{(n)} ):

\\text{Median}(X) = \\begin{cases} X_{(\\frac{n+1}{2})} \& \\text{if } n \\text{ is odd} \\ \\frac{X_{(\\frac{n}{2})} + X_{(\\frac{n}{2}+1)}}{2} \& \\text{if } n \\text{ is even} \\end{cases}

python 复制代码
data = [15, 20, 35, 40, 50]
median = statistics.median(data)
print("中位数:", median)   # 35
# 偶数个数据时,会自动取中间两个的平均值

📌 新手场景:分析收入分布、房价等常带"长尾"的数据,中位数是你的首选。

3. 众数(mode / multimode)------ 找出"出现最多"的值

众数是频率最高的数值(或类别)。对于分类数据(如性别、产品类型),均值中位数都无效,但众数可以。

数学公式 freq(v) 表示数值 v 出现的频次):

\\text{Mode}(X) = \\arg\\max_{v} , \\text{freq}(v)

  • mode() 返回找到的第一个众数;
  • multimode() 返回所有众数(当有多个并列最高频时很有用)。
python 复制代码
data = [1, 2, 2, 2, 3, 4, 4, 4, 7, 7, 7]
# 只取第一个众数
mode = statistics.mode(data)         # 2
# 取全部众数
modes = statistics.multimode(data)   # [2, 4, 7]

📌 新手场景:分析用户最喜欢的产品颜色、最常出现的错误代码等。

4. 标准差(stdev)------ 衡量数据"离散"程度的标尺

标准差告诉我们数据点与均值的平均偏离距离。值越大,数据越分散

数学公式(样本标准差,分母为 n-1 ):

s = \\sqrt{\\frac{1}{n-1}\\sum_{i=1}\^{n} (x_i - \\bar{x})\^2}

  • stdev() 计算样本标准差(分母 n-1);
  • pstdev() 计算总体标准差(分母 n)。
python 复制代码
data = [12, 15, 22, 29, 35]
std = statistics.stdev(data)
print(f"样本标准差: {std:.3f}")   # 9.555

📌 新手场景:评估测试成绩的波动性、产品质量的稳定性。记得区分总体和样本(绝大多数场景用样本标准差)。

5. 方差(variance)------ 标准差的平方,但同样重要

方差在数学上更方便推导,但解释性不如标准差(因为单位被平方了)。不过很多统计检验直接用到方差。

数学公式(样本方差,分母为 n-1 ):

s\^2 = \\frac{1}{n-1}\\sum_{i=1}\^{n} (x_i - \\bar{x})\^2

python 复制代码
data = [8, 10, 12, 14, 16]
var = statistics.variance(data)
print(f"样本方差: {var:.2f}")   # 10.00

📌 新手场景:ANOVA 分析、特征工程中归一化之前可能需要估算方差。

6. 协方差(covariance)------ 两个变量"同向变化"的度量

协方差为正表示两个变量趋向一起增大;为负则表示一个增大另一个减小。但协方差大小受量纲影响,不易直接比较,一般后续会转为相关系数。

数学公式(样本协方差,分母为 n-1 ):

\\text{Cov}(X,Y) = \\frac{1}{n-1}\\sum_{i=1}\^{n} (x_i - \\bar{x})(y_i - \\bar{y})

python 复制代码
x = [2, 4, 6, 8, 10]
y = [1, 3, 5, 7, 9]
cov = statistics.covariance(x, y)
print("协方差:", cov)   # 10.0

📌 新手场景:初步判断两个指标(如广告投入与销售额)是否有关联。

7. 分位数(quantiles)------ 把数据切成等份,看清分布

分位数将数据划分为多个等大小的区间。四分位数(n=4)是最常用的,帮你快速发现数据集中在哪个区间、有无异常尾巴。

数学公式 (定义方式不唯一,Python 使用位置插值法。此处给出 p 分位数的通用思想):

p 分位数是指至少有 p 比例的数据小于等于该值,至少有 1-p 比例的数据大于等于该值。对于 n 等分,计算排序后数据的相应位置。

python 复制代码
data = [1, 5, 7, 9, 10, 12, 16, 18, 19, 21]
quartiles = statistics.quantiles(data, n=4)
print("四分位数:", quartiles)   # [6.5, 11.0, 18.25]

📌 新手场景:绘制箱线图前手动算分位数,或者用它们来标记异常值(如 IQR 法)。

8. 相关系数(correlation)------ 标准化后的"关联强度"

相关系数消除了量纲影响,取值在 -1 到 1 之间。默认是 Pearson 相关系数 (线性相关),设置 method='ranked' 可转为 Spearman 秩相关系数(适用于非线性单调关系)。

数学公式(Pearson 相关系数):

r = \\frac{\\sum_{i=1}\^{n} (x_i - \\bar{x})(y_i - \\bar{y})}{\\sqrt{\\sum_{i=1}\^{n} (x_i - \\bar{x})\^2 \\cdot \\sum_{i=1}\^{n} (y_i - \\bar{y})\^2}}

python 复制代码
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
corr = statistics.correlation(x, y)
print("相关系数:", corr)   # 1.0 (完美正相关)

📌 新手场景:特征选择时筛掉高度相关的冗余特征,或初步探索目标变量与特征的关系。

9. 线性回归(linear_regression)------ 最简单的关系建模

此函数对两组数据执行简单线性回归 (一元),返回斜率截距 。它帮你快速得到一个可解释的线性方程 y = slope * x + intercept

数学公式(最小二乘法估计):

\\hat{\\beta} = \\frac{\\sum_{i=1}\^{n} (x_i - \\bar{x})(y_i - \\bar{y})}{\\sum_{i=1}\^{n} (x_i - \\bar{x})\^2} \\quad\\text{(斜率)}

\\hat{\\alpha} = \\bar{y} - \\hat{\\beta}\\bar{x} \\quad\\text{(截距)}

python 复制代码
x = [1, 2, 3, 4, 5]
y = [3, 4, 2, 5, 7]
slope, intercept = statistics.linear_regression(x, y)
print("斜率:", slope)         # 0.9
print("截距:", intercept)     # 1.5

📌 新手场景:快速验证两个连续变量的线性趋势,或者作为更复杂模型(如多元回归)前的热身。

10. 正态分布(NormalDist)------ 概率与 Z 分数的"瑞士军刀"

NormalDist 是一个类,不是简单函数,但它在统计推断中实在太常用了。你可以基于均值和标准差创建正态分布对象,然后计算累积概率(CDF)分位点(inv_cdf) 等。

数学公式(概率密度函数 PDF):

f(x) = \\frac{1}{\\sigma\\sqrt{2\\pi}} e^{-\\frac{(x-\\mu)^2}{2\\sigma\^2}}

(累积分布函数 CDF 是该密度函数从 -\\infty x 的积分,无初等闭式表达,直接通过 cdf() 方法数值计算。)

python 复制代码
# 构建一个均值为30、标准差为10的正态分布
dist = statistics.NormalDist(mu=30, sigma=10)

# 小于等于20的概率
prob = dist.cdf(20)
print(f"P(X ≤ 20) = {prob:.3f}")   # 0.159

# 求 97.5% 分位点(即 z=1.96 对应的原始值)
z = dist.inv_cdf(0.975)
print(f"97.5% 分位点: {z:.3f}")    # 49.600

📌 新手场景:计算置信区间、假设检验的 p 值近似,或者生成模拟数据时使用。

总结

你要做的事 该用哪个函数
看数据的"中心" mean()(无异常值)或 median()(有异常值)
看数据的"多数" mode() / multimode()
看数据的"分散程度" stdev()(样本)或 pstdev()(总体)
看两个变量是否"一起动" covariance()(量纲敏感)或 correlation()(推荐)
看数据的"分段分布" quantiles(n=4)
快速拟合一条直线 linear_regression()
做概率计算或正态假设 NormalDist
  • 别贪快:每个函数都花 2 分钟用真实数据跑一遍,比看十遍教程更管用。
  • 组合使用:均值 + 标准差 + 中位数 + 分位数,基本就能写出一份不错的 EDA 报告。
  • 进阶一步 :当你熟练这些后,可以转战 NumPy 和 SciPy,它们提供更多进阶统计功能(如 t 检验、卡方检验等)。但扎实的基础永远是你最硬的底牌
相关推荐
databook1 小时前
Python 中 10 个最常用的统计函数
python·数据分析
艾琳_lab2 小时前
Python环境配置:pip镜像设置
python
橘好き2 小时前
Python
python
鹿鹿学长2 小时前
从英伟达开源Nemotron 3.5看“本地跑大模型“:一张显卡够用的时代来了
python·自动化
燐妤2 小时前
中老年智能健康管理项目
python·ai·pycharm·vue3·fastapi·项目开发·健康
小龙报2 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
前端 贾公子2 小时前
第08章:中间件(1)
python
Sylvia33.2 小时前
篮球数据API的技术架构与工程实践:基于火星数据WebSocket实时推送体系
java·python·websocket·网络协议·架构