ZetCode

Python 统计

最后修改:2025 年 2 月 15 日

在本文中,我们将展示如何使用 Python 的 statistics 模块执行统计计算,例如均值、中位数、方差和标准差。

statistics 模块提供了用于计算数值数据的数学统计的函数。它是 Python 标准库的一部分,对于基本统计运算很有用。

Python 统计均值

均值是数据集的平均值。它通过将所有值相加除以值的数量来计算。

mean.py
#!/usr/bin/python

import statistics

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

mean = statistics.mean(data)
print(f"Mean: {mean}")
$ ./mean.py
Mean: 5.5

Python 统计中位数

中位数是将数据集中的值按顺序排列后的中间值。如果数据集中的值数量是偶数,则中位数是两个中间值的平均值。

median.py
#!/usr/bin/python

import statistics

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

median = statistics.median(data)
print(f"Median: {median}")
$ ./median.py
Median: 5.5

Python 统计众数

众数是数据集中出现频率最高的值。数据集可能没有众数(如果所有值都唯一)或有多个众数(如果多个值具有相同的最高频率)。

mode.py
#!/usr/bin/python

import statistics

data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

mode = statistics.mode(data)
print(f"Mode: {mode}")
$ ./mode.py
Mode: 4

Python 统计方差

方差衡量数据集中每个数字与均值之间的距离。它计算为与均值平方差的平均值。

variance.py
#!/usr/bin/python

import statistics

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

variance = statistics.variance(data)
print(f"Variance: {variance}")
$ ./variance.py
Variance: 9.166666666666666

Python 统计标准差

标准差是衡量数据集中变化的量或离散程度。它是方差的平方根,并提供了衡量值分散程度的指标。

stdev.py
#!/usr/bin/python

import statistics

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

stdev = statistics.stdev(data)
print(f"Standard Deviation: {stdev}")
$ ./stdev.py
Standard Deviation: 3.0276503540974917

Python 统计分位数

分位数是将数据集划分为等大小区间的数值。常见的分位数包括四分位数(将数据分为 4 部分)、十分位数(10 部分)和百分位数(100 部分)。第一四分位数 (Q1) 是第 25 百分位数,第二四分位数 (Q2) 是中位数(第 50 百分位数),第三四分位数 (Q3) 是第 75 百分位数。

四分位距 (IQR) 是 Q3 和 Q1 之间的差值,用于识别异常值。

quantiles.py
#!/usr/bin/python

import statistics

data = [10, 12, 12, 14, 12, 11, 14, 13, 15, 100]

q1, median, q3 = statistics.quantiles(data, n=4, method='exclusive')
print(f"Q1: {q1}, Median: {median}, Q3: {q3}")

iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr

filtered_data = [e for e in data if e >= lower_bound and e <= upper_bound]

print(f"Filtered Data: {filtered_data}")
q1, median, q3 = statistics.quantiles(data, n=4, method='exclusive')

我们使用 statistics.quantiles 函数计算第一四分位数 (Q1)、中位数 (Q2) 和第三四分位数 (Q3)。n=4 参数指定四分位数,method='exclusive' 参数指定计算方法。

iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr

我们计算四分位距 (IQR) 并用它来确定识别异常值的上下界。

filtered_data = [e for e in data if e >= lower_bound and e <= upper_bound]

我们根据计算出的界限过滤数据集以排除异常值。

$ ./quantiles.py
Q1: 12.0, Median: 13.0, Q3: 14.0
Filtered Data: [10, 12, 12, 14, 12, 11, 14, 13, 15]

Python 统计相关性

相关性是一种衡量两个变量线性关系程度的度量,意味着它们以恒定的速率一起变化。它是描述简单关系而无需陈述因果关系的常用工具。

相关性由相关系数量化,通常表示为 r,它衡量两个变量之间线性关系的强度。相关系数的范围从 -1+1。接近 0 的相关系数表示线性关系较弱。正 r 值表示正相关,而负值表示负相关。

correlation.py
#!/usr/bin/python

import statistics

orbital_period = [88, 225, 365, 687, 4331, 10_756, 30_687, 60_190]    # days
dist_from_sun = [58, 108, 150, 228, 778, 1_400, 2_900, 4_500]         # million km

cor = statistics.correlation(orbital_period, dist_from_sun, method='ranked')
print(f"Correlation Coefficient: {cor}")
orbital_period = [88, 225, 365, 687, 4331, 10_756, 30_687, 60_190]    # days
dist_from_sun = [58, 108, 150, 228, 778, 1_400, 2_900, 4_500]         # million km

我们定义了两个数据集:orbital_period(行星的轨道周期,以天为单位)和 dist_from_sun(行星到太阳的距离,以百万公里为单位)。

cor = statistics.correlation(orbital_period, dist_from_sun, method='ranked')

我们使用 statistics.correlation 函数计算相关系数。method='ranked' 参数指定计算应使用排序数据,这对于非线性关系或存在异常值的情况很有用。

print(f"Correlation Coefficient: {cor}")

我们打印相关系数,它量化了两个变量之间线性关系的强度和方向。

$ ./correlation.py
Correlation Coefficient: 1.0

输出显示相关系数为 1.0,表明行星轨道周期和到太阳的距离之间存在完美的正线性关系。

来源

Python 统计模块文档

在本文中,我们使用 Python 的 statistics 模块执行了统计计算。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Python 教程