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:学生成绩分析
示例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
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 等专业的数据科学库。