Python3入门指南Python语言的特点和实际应用Python3环境搭建配置VSCode进行Python开发Python基础语法Python变量与数据类型Python数据类型转换Python解释器使用Python注释使用Python运算符Python数字类型Python字符串操作Python列表操作Python元组使用Python字典使用Python集合使用Python条件控制详解Python循环语句详解Python编程入门实践Python推导式详解Python迭代器和生成器Python with语句详解Python函数详解Python lambda(匿名函数)Python装饰器Python数据结构Python模块和包使用Python中__name__和__main__的用法Python输入输出:从基础到文件操作Python文件操作Python OS模块使用Python错误和异常处理Python面向对象编程Python命名空间和作用域Python虚拟环境:venv详细教程Python类型注解Python标准库常用模块Python正则表达式Python CGI编程Python MySQL(mysql-connector驱动)Python MySQL(PyMySQL驱动)Python网络编程Python发送邮件Python多线程编程Python XML解析Python JSON解析Python日期和时间处理Python操作MongoDBPython urllib库使用Python uWSGI 安装与配置Python pip包管理工具Python operator模块Python math模块Python requests模块HTTP请求Python random模块Python OpenAI库Python AI绘画制作Python statistics模块Python hashlib模块:哈希加密Python量化交易Python pyecharts数据可视化Python Selenium网页自动化Python BeautifulSoup网页数据提取Python Scrapy爬虫框架Python Markdown转HTMLPython sys模块Python Pickle模块:数据存储Python subprocess模块Python queue队列模块Python StringIO内存文件操作Python logging日志记录Python datetime日期时间处理Python re正则表达式Python csv表格数据处理Python threading 多线程编程Python asyncio 异步编程Python PyQt 图形界面开发Python 应用方向和常用库框架

Python statistics模块

Python的statistics模块专门用于基本统计计算。这个模块提供了计算平均值、中位数、标准差等常用统计量的函数,非常适合数据分析和统计学习。


开始使用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等专业的数据分析库。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/course/36_2129

目录选择