Python statistics 模块详解

Python statistics 模块详解

statistics模块是 Python 标准库中用于数学统计计算的模块,提供了常用的统计函数,如均值、中位数、方差、标准差等。

主要功能概览

1. 集中趋势度量

import statistics as stats

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

# 算术平均数
mean = stats.mean(data)
print(f"平均数: {mean}")  # 5.0

# 中位数
median = stats.median(data)
print(f"中位数: {median}")  # 5

# 众数
data2 = [1, 2, 2, 3, 4, 4, 4, 5]
mode = stats.mode(data2)
print(f"众数: {mode}")  # 4

# 分位数
quartiles = stats.quantiles(data, n=4)
print(f"四分位数: {quartiles}")  # [3.0, 5.0, 7.0]

 

2. 离散程度度量

# 方差
variance = stats.variance(data)
print(f"方差: {variance}")  # 7.5

# 标准差
stdev = stats.stdev(data)
print(f"标准差: {stdev}")  # 约 2.738

# 总体方差和标准差
pvariance = stats.pvariance(data)
pstdev = stats.pstdev(data)
print(f"总体方差: {pvariance}, 总体标准差: {pstdev}")

 

3. 高级统计函数

# 调和平均数
harmonic_mean = stats.harmonic_mean([1, 2, 4])
print(f"调和平均数: {harmonic_mean}")  # 约 1.714

# 几何平均数
geometric_mean = stats.geometric_mean([1, 2, 4])
print(f"几何平均数: {geometric_mean}")  # 2.0

# 协方差和相关系数
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
covariance = stats.covariance(x, y)
correlation = stats.correlation(x, y)
print(f"协方差: {covariance}, 相关系数: {correlation}")
 

实际应用示例

示例1:学生成绩分析

import statistics as stats

# 学生成绩数据
scores = [85, 92, 78, 96, 88, 76, 91, 84, 79, 87]

# 基本统计信息
print(f"平均分: {stats.mean(scores):.2f}")
print(f"中位数: {stats.median(scores)}")
print(f"最高分: {max(scores)}")
print(f"最低分: {min(scores)}")
print(f"分数范围: {max(scores) - min(scores)}")
print(f"标准差: {stats.stdev(scores):.2f}")

# 成绩分布分析
q1, q2, q3 = stats.quantiles(scores, n=4)
print(f"第一四分位数 (Q1): {q1}")
print(f"第二四分位数 (中位数, Q2): {q2}")
print(f"第三四分位数 (Q3): {q3}")
print(f"四分位距 (IQR): {q3 - q1}")

 

示例2:数据异常值检测

def detect_outliers(data):
    """使用IQR方法检测异常值"""
    q1, q3 = stats.quantiles(data, n=4)[0], stats.quantiles(data, n=4)[2]
    iqr = q3 - q1
    lower_bound = q1 - 1.5 * iqr
    upper_bound = q3 + 1.5 * iqr
    
    outliers = [x for x in data if x < lower_bound or x > upper_bound]
    return outliers

# 测试数据(包含一个异常值)
test_data = [10, 12, 12, 13, 12, 11, 14, 13, 15, 10, 50]
outliers = detect_outliers(test_data)
print(f"异常值: {outliers}")  # [50]

 

示例3:投资组合分析

 
# 模拟两只股票的收益率
stock_a_returns = [0.02, 0.03, -0.01, 0.05, 0.02]
stock_b_returns = [0.01, 0.04, 0.02, -0.02, 0.03]

# 计算基本统计量
def analyze_returns(returns, name):
    print(f"\n{name}分析:")
    print(f"平均收益率: {stats.mean(returns):.3f}")
    print(f"收益率标准差: {stats.stdev(returns):.3f}")
    print(f"收益率方差: {stats.variance(returns):.6f}")

analyze_returns(stock_a_returns, "股票A")
analyze_returns(stock_b_returns, "股票B")

# 计算相关性
corr = stats.correlation(stock_a_returns, stock_b_returns)
print(f"\n两只股票的相关系数: {corr:.3f}")

 

错误处理

import statistics as stats

# 处理空数据
try:
    empty_data = []
    result = stats.mean(empty_data)
except stats.StatisticsError as e:
    print(f"错误: {e}")

# 处理单一数据点
single_point = [5]
try:
    result = stats.stdev(single_point)
except stats.StatisticsError as e:
    print(f"错误: {e}")  # 需要至少两个数据点来计算标准差

 

与第三方库对比

import statistics as stats
import numpy as np

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

# statistics 模块
stats_mean = stats.mean(data)
stats_std = stats.stdev(data)

# NumPy
np_mean = np.mean(data)
np_std = np.std(data, ddof=1)  # ddof=1 对应样本标准差

print(f"statistics - 均值: {stats_mean}, 标准差: {stats_std}")
print(f"NumPy - 均值: {np_mean}, 标准差: {np_std}")

 

总结

statistics模块的特点:优点:

  • Python 标准库,无需额外安装
  • 接口简单易用
  • 适合基本的统计计算需求
  • 对初学者友好

局限性:

  • 功能相对基础
  • 性能不如 NumPy、pandas 等专业库
  • 不支持多维数组操作

适用场景:

  • 简单的数据分析任务
  • 学习统计概念
  • 小型项目或脚本
  • 不需要复杂数据结构的场景

对于更复杂的统计分析,建议使用 NumPy、pandas、SciPy 等专业的数据科学库。

posted @ 2025-11-10 11:54  你说夕阳很美  阅读(12)  评论(0)    收藏  举报