Python的statistics模块专门用于基本统计计算。这个模块提供了计算平均值、中位数、标准差等常用统计量的函数,非常适合数据分析和统计学习。
首先导入statistics模块:
import statistics平均值是最常用的统计量,表示一组数据的平均水平。
import statistics
# 学生考试成绩
scores = [85, 92, 78, 96, 88, 90, 76]
# 计算平均分
average_score = statistics.mean(scores)
print(f"平均分: {average_score}")
# 计算浮点数平均值
prices = [12.5, 15.8, 9.9, 23.4, 18.7]
average_price = statistics.mean(prices)
print(f"平均价格: {average_price:.2f}")输出结果:
平均分: 86.42857142857143
平均价格: 16.06中位数表示数据中间位置的值,不受极端值影响。
import statistics
# 奇数个数据
data1 = [100, 200, 300, 400, 500]
median1 = statistics.median(data1)
print(f"中位数: {median1}")
# 偶数个数据
data2 = [100, 200, 300, 400]
median2 = statistics.median(data2)
print(f"中位数: {median2}")
# 实际应用:员工工资
salaries = [3500, 4200, 3800, 5500, 4800, 6000, 2800]
median_salary = statistics.median(salaries)
print(f"工资中位数: {median_salary}")输出结果:
中位数: 300
中位数: 250.0
工资中位数: 4200对于偶数个数据,可以选择中间两个数中的较大或较小值。
import statistics
data = [10, 20, 30, 40]
median_low = statistics.median_low(data)
median_high = statistics.median_high(data)
print(f"低中位数: {median_low}")
print(f"高中位数: {median_high}")输出结果:
低中位数: 20
高中位数: 30众数是出现次数最多的值。
import statistics
# 简单的众数计算
numbers = [1, 2, 2, 3, 4, 2, 5]
mode_value = statistics.mode(numbers)
print(f"众数: {mode_value}")
# 实际应用:最受欢迎的颜色
colors = ['红', '蓝', '红', '绿', '蓝', '红', '黄']
color_mode = statistics.mode(colors)
print(f"最受欢迎的颜色: {color_mode}")输出结果:
众数: 2
最受欢迎的颜色: 红如果数据中有多个值出现次数相同,可以使用multimode函数。
import statistics
# 多个众数的情况
scores = [85, 90, 90, 85, 95, 80]
multi_modes = statistics.multimode(scores)
print(f"多个众数: {multi_modes}")
# 所有值都只出现一次
unique_numbers = [1, 2, 3, 4]
all_modes = statistics.multimode(unique_numbers)
print(f"所有值都是众数: {all_modes}")输出结果:
多个众数: [85, 90]
所有值都是众数: [1, 2, 3, 4]方差和标准差衡量数据的离散程度。
import statistics
# 学生成绩数据
grades = [75, 82, 90, 65, 88, 92, 78]
# 计算方差
variance_value = statistics.variance(grades)
print(f"方差: {variance_value:.2f}")
# 计算标准差
std_deviation = statistics.stdev(grades)
print(f"标准差: {std_deviation:.2f}")
# 总体方差和标准差
population_variance = statistics.pvariance(grades)
population_std = statistics.pstdev(grades)
print(f"总体方差: {population_variance:.2f}")
print(f"总体标准差: {population_std:.2f}")输出结果:
方差: 85.95
标准差: 9.27
总体方差: 73.67
总体标准差: 8.58几何平均数适用于计算增长率或比例。
import statistics
# 投资年收益率
growth_rates = [1.1, 1.2, 0.9, 1.15, 1.05]
geo_mean = statistics.geometric_mean(growth_rates)
print(f"几何平均增长率: {geo_mean:.4f}")
# 计算平均年化收益率
annual_return = (geo_mean - 1) * 100
print(f"平均年化收益率: {annual_return:.2f}%")输出结果:
几何平均增长率: 1.0783
平均年化收益率: 7.83%调和平均数适用于计算平均速率。
import statistics
# 计算平均速度
speeds = [60, 80, 120] # 公里/小时
harmonic_mean = statistics.harmonic_mean(speeds)
print(f"调和平均速度: {harmonic_mean:.2f} 公里/小时")
# 实际应用:平均完成时间
completion_times = [2, 3, 6] # 小时
rates = [1/t for t in completion_times] # 转换为速率
avg_rate = statistics.harmonic_mean([1, 1/2, 1/3, 1/6])
print(f"平均完成速率: {avg_rate:.2f} 任务/小时")输出结果:
调和平均速度: 80.00 公里/小时
平均完成速率: 0.33 任务/小时分位数将数据分成几个等份。
import statistics
# 学生成绩
exam_scores = [65, 72, 78, 85, 88, 92, 95, 98]
# 计算四分位数
quartiles = statistics.quantiles(exam_scores, n=4)
print(f"四分位数: {quartiles}")
# 计算十分位数
deciles = statistics.quantiles(exam_scores, n=10)
print(f"十分位数: {[f'{q:.1f}' for q in deciles]}")
# 解释四分位数
q1, q2, q3 = quartiles
print(f"第一四分位数(Q1): {q1}")
print(f"第二四分位数(Q2, 中位数): {q2}")
print(f"第三四分位数(Q3): {q3}")输出结果:
四分位数: [72.5, 86.5, 94.25]
十分位数: ['68.5', '71.0', '74.0', '80.5', '86.5', '89.0', '92.5', '95.5', '97.0']
第一四分位数(Q1): 72.5
第二四分位数(Q2, 中位数): 86.5
第三四分位数(Q3): 94.25对于分组数据,可以计算分组中位数。
import statistics
# 分组数据(每个区间的中点)
grouped_data = [25, 35, 45, 55, 65]
# 假设每个区间的频率相同
grouped_median = statistics.median_grouped(grouped_data)
print(f"分组数据中位数: {grouped_median}")import statistics
def analyze_grades(grades):
"""分析学生成绩"""
print("=== 成绩分析报告 ===")
print(f"成绩数据: {grades}")
print(f"平均分: {statistics.mean(grades):.1f}")
print(f"中位数: {statistics.median(grades):.1f}")
print(f"众数: {statistics.mode(grades)}")
print(f"标准差: {statistics.stdev(grades):.2f}")
# 成绩等级判断
mean_score = statistics.mean(grades)
if mean_score >= 90:
level = "优秀"
elif mean_score >= 80:
level = "良好"
elif mean_score >= 70:
level = "中等"
elif mean_score >= 60:
level = "及格"
else:
level = "不及格"
print(f"整体水平: {level}")
# 使用示例
class_grades = [85, 92, 78, 65, 88, 95, 72, 81, 90, 68]
analyze_grades(class_grades)import statistics
def sales_analysis(sales_data):
"""分析销售数据"""
print("=== 销售数据分析 ===")
print(f"销售额数据: {sales_data}")
# 基本统计量
mean_sales = statistics.mean(sales_data)
median_sales = statistics.median(sales_data)
std_sales = statistics.stdev(sales_data)
print(f"平均销售额: ¥{mean_sales:,.2f}")
print(f"销售额中位数: ¥{median_sales:,.2f}")
print(f"销售额标准差: ¥{std_sales:,.2f}")
# 稳定性分析
cv = (std_sales / mean_sales) * 100 # 变异系数
print(f"变异系数: {cv:.1f}%")
if cv < 20:
stability = "稳定"
elif cv < 50:
stability = "一般"
else:
stability = "波动大"
print(f"销售稳定性: {stability}")
# 使用示例
monthly_sales = [125000, 138000, 112000, 156000, 145000, 132000]
sales_analysis(monthly_sales)import statistics
def investment_analysis(returns):
"""分析投资回报"""
print("=== 投资回报分析 ===")
# 转换为百分比
returns_pct = [r * 100 for r in returns]
# 计算各种平均数
arithmetic_mean = statistics.mean(returns_pct)
geometric_mean = statistics.geometric_mean([1 + r for r in returns]) - 1
geometric_mean_pct = geometric_mean * 100
print(f"算术平均回报: {arithmetic_mean:.2f}%")
print(f"几何平均回报: {geometric_mean_pct:.2f}%")
print(f"回报率标准差: {statistics.stdev(returns_pct):.2f}%")
# 风险评估
risk_level = "高风险" if statistics.stdev(returns_pct) > 15 else "中低风险"
print(f"风险等级: {risk_level}")
# 使用示例
annual_returns = [0.12, 0.08, -0.05, 0.15, 0.10] # 年回报率
investment_analysis(annual_returns)使用统计函数时可能会遇到错误,需要进行处理。
import statistics
def safe_statistics_calculation(data):
"""安全的统计计算"""
try:
if not data:
return "数据为空"
results = {
'平均值': statistics.mean(data),
'中位数': statistics.median(data),
'标准差': statistics.stdev(data)
}
# 尝试计算众数
try:
results['众数'] = statistics.mode(data)
except statistics.StatisticsError:
results['众数'] = "无唯一众数"
return results
except statistics.StatisticsError as e:
return f"统计计算错误: {e}"
except Exception as e:
return f"其他错误: {e}"
# 测试
test_data = [1, 2, 3, 4, 5]
print(safe_statistics_calculation(test_data))
empty_data = []
print(safe_statistics_calculation(empty_data))math 模块方法
| 方法 | 描述 |
|---|---|
| statistics.harmonic_mean() | 计算给定数据集的调和平均值。 |
| statistics.mean() | 计算数据集的平均值 |
| statistics.median() | 计算数据集的中位数 |
| statistics.median_grouped() | 计算给定分组数据集的分组中位数 |
| statistics.median_high() | 计算给定数据集的高位中位数 |
| statistics.median_low() | 计算给定数据集的低位中位数。 |
| statistics.mode() | 算数据集的众数(出现频率最高的值) |
| statistics.pstdev() | 计算给定数据集的样本标准偏差 |
| statistics.stdev() | 计算数据集的标准差 |
| statistics.pvariance() | 计算给定数据集的样本方差 |
| statistics.variance() | 计算数据集的方差 |
| statistics.quantiles() | 计算数据集的分位数,可指定分位数的数量(默认为四分位数) |
statistics模块提供了丰富的统计计算功能:
中心趋势:平均值、中位数、众数
离散程度:方差、标准差
特殊平均数:几何平均数、调和平均数
位置度量:分位数、分组中位数
这些函数在数据分析、科学研究、商业统计等场景中非常有用。对于简单的统计分析,statistics模块完全够用。如果需要更复杂的功能,可以考虑使用pandas、numpy等专业的数据分析库。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!