Python 统计
最后修改:2025 年 2 月 15 日
在本文中,我们将展示如何使用 Python 的 statistics 模块执行统计计算,例如均值、中位数、方差和标准差。
statistics 模块提供了用于计算数值数据的数学统计的函数。它是 Python 标准库的一部分,对于基本统计运算很有用。
Python 统计均值
均值是数据集的平均值。它通过将所有值相加除以值的数量来计算。
#!/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 统计中位数
中位数是将数据集中的值按顺序排列后的中间值。如果数据集中的值数量是偶数,则中位数是两个中间值的平均值。
#!/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 统计众数
众数是数据集中出现频率最高的值。数据集可能没有众数(如果所有值都唯一)或有多个众数(如果多个值具有相同的最高频率)。
#!/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 统计方差
方差衡量数据集中每个数字与均值之间的距离。它计算为与均值平方差的平均值。
#!/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 统计标准差
标准差是衡量数据集中变化的量或离散程度。它是方差的平方根,并提供了衡量值分散程度的指标。
#!/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 之间的差值,用于识别异常值。
#!/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 值表示正相关,而负值表示负相关。
#!/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 的 statistics 模块执行了统计计算。
作者
列出所有 Python 教程。