Python3 statistics 模块

news/2025/10/20 13:50:50/文章来源:https://www.cnblogs.com/xtcoding/p/19152462

Python3 statistics 模块

statistics 是 Python 3.4 引入的标准库,专注于提供基本的统计计算功能,可用于分析数值数据的集中趋势、离散程度、分布形状等。它无需额外安装,接口简洁,适合快速完成简单的统计分析任务(如计算均值、中位数、方差等)。

一、核心功能:统计量计算分类

statistics 模块的函数可按 “统计分析维度” 分为四大类,涵盖描述性统计的核心需求。

1. 集中趋势度量(数据的 “中心位置”)

用于描述数据集中趋势的统计量,包括均值、中位数、众数等。
 
函数作用示例
mean(data) 计算算术平均值(总和 / 数据个数),支持整数、浮点数。 mean([1, 2, 3, 4]) → 2.5
median(data) 计算中位数(排序后中间位置的值,偶数个数据取中间两数的平均值)。 median([1, 3, 5]) → 3median([1, 2, 3, 4]) → 2.5
median_low(data) 中位数的 “下限版”:偶数个数据时取中间两数中较小的那个。 median_low([1, 2, 3, 4]) → 2
median_high(data) 中位数的 “上限版”:偶数个数据时取中间两数中较大的那个。 median_high([1, 2, 3, 4]) → 3
median_grouped(data, interval=1) 分组数据的中位数(适用于连续区间数据,如考试分数段)。 median_grouped([10, 20, 30], interval=10) → 20.0
mode(data) 计算众数(出现次数最多的元素),Python 3.8+ 支持多众数(返回 ModeResult 对象)。 mode([1, 2, 2, 3]) → 2mode([1, 1, 2, 2]) → ModeResult(mode=[1, 2], count=[2, 2])
fmean(data) 快速均值(比 mean 更快,适合大型数据集,返回浮点数)。 fmean([1, 2, 3]) → 2.0
geometric_mean(data) 几何平均值(适用于比例数据,如增长率),要求所有数据为正数。 geometric_mean([2, 8]) → 4.0(√(2×8)=4)
harmonic_mean(data) 调和平均值(适用于速率数据,如平均速度),要求所有数据为正数。 harmonic_mean([2, 3]) → 2.4(2/(1/2+1/3)=2.4)

2. 离散程度度量(数据的 “分散程度”)

用于描述数据离散程度的统计量,包括方差、标准差等,反映数据与中心值的偏离程度。
 
函数作用示例
pvariance(data) 总体方差(基于全部数据计算,分母为 n)。 pvariance([1, 2, 3, 4]) → 1.25([(1-2.5)² + ... + (4-2.5)²]/4)
variance(data) 样本方差(基于样本数据计算,分母为 n-1,更常用)。 variance([1, 2, 3, 4]) → 1.666...([(1-2.5)² + ...]/3)
pstdev(data) 总体标准差(总体方差的平方根)。 pstdev([1, 2, 3, 4]) → 1.118...(√1.25)
stdev(data) 样本标准差(样本方差的平方根)。 stdev([1, 2, 3, 4]) → 1.290...(√1.666)

3. 分布形状度量(数据的 “对称性与尾部”)

用于描述数据分布形状的统计量,反映数据分布的偏斜程度和陡峭程度。
 
函数作用示例
skew(data) 偏度(衡量分布对称性):
 
- 正偏:右尾长(均值 > 中位数)
 
- 负偏:左尾长(均值 < 中位数)
 
- 0:对称分布(如正态分布)
skew([1, 2, 3, 4, 100]) → 1.93(强正偏)
kurtosis(data) 峰度(衡量分布尾部厚度):
 
- 0:与正态分布峰度相同
 
- 正值:尾部更厚(尖峰分布)
 
- 负值:尾部更薄(平峰分布)
kurtosis([1, 2, 3, 4, 5]) → -1.3(平峰)

4. 分位数计算(数据的 “分段位置”)

Python 3.8+ 新增 quantiles() 函数,用于计算数据的分位数(如四分位数、百分位数),反映数据在不同比例位置的值。
 
from statistics import quantilesdata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 计算四分位数(4 等分,返回 3 个分位点)
print(quantiles(data, n=4))  # [3.25, 5.5, 7.75]
# 解释:25% 位置的值为 3.25,50% 为 5.5(即中位数),75% 为 7.75# 计算百分位数(100 等分,取第 90 分位)
print(quantiles(data, n=100)[89])  # 9.1(90% 的数据 ≤ 9.1)
 

二、异常处理与注意事项

statistics 模块对输入数据有严格要求,不符合条件时会抛出 StatisticsError 异常,需注意以下几点:
 
  1. 非空数据:所有函数都要求输入非空序列,否则报错:
    from statistics import mean
    mean([])  # 抛出 StatisticsError: no data points
    
     
     
  2. 数值类型:输入数据必须是数值(int/float),包含非数值类型(如字符串)会报错:
    mean([1, 2, "3"])  # 抛出 TypeError: can't convert type 'str' to numerator/denominator
    
     
     
  3. 众数的特殊情况
    • 若所有元素出现次数相同(如 [1, 2, 3]),mode() 会抛出 StatisticsError(无众数)。
    • Python 3.8 前的 mode() 只支持单众数,多众数时会报错;3.8+ 会返回包含所有众数的 ModeResult 对象。
  4. 样本与总体的区别
    • variance()(样本方差)和 pvariance()(总体方差)的核心区别是分母:样本用 n-1(修正自由度,减少抽样误差),总体用 n
    • 示例:对数据 [1, 2, 3, 4],样本方差 = 5/3 ≈ 1.666,总体方差 = 5/4 = 1.25。

三、实战示例:完整数据分析流程

假设我们有一组学生成绩数据 [85, 92, 78, 90, 85, 88, 95, 85, 72, 80],用 statistics 模块进行完整分析:
 
from statistics import (mean, median, mode, stdev, pstdev,skew, kurtosis, quantiles
)scores = [85, 92, 78, 90, 85, 88, 95, 85, 72, 80]# 1. 集中趋势
print(f"平均分:{mean(scores)}")       # 84.0
print(f"中位数:{median(scores)}")     # 85.0(排序后中间两数 85 和 85 的平均)
print(f"众数:{mode(scores)}")         # 85(出现 3 次)
print(f"几何均值:{geometric_mean([x for x in scores if x > 0])}")  # 约 84.3(成绩均为正数)# 2. 离散程度
print(f"样本标准差:{stdev(scores)}")  # 约 6.83(反映成绩波动)
print(f"总体标准差:{pstdev(scores)}") # 约 6.48# 3. 分布形状
print(f"偏度:{skew(scores)}")         # 约 -0.41(轻微负偏,低分略多)
print(f"峰度:{kurtosis(scores)}")     # 约 -0.94(平峰分布,成绩分布较均匀)# 4. 分位数
print(f"四分位数:{quantiles(scores, n=4)}")  # [79.0, 85.0, 90.5]
# 解释:25% 的学生成绩 ≤79,50% ≤85,75% ≤90.5
 

四、适用场景与局限性

  • 适用场景:简单的描述性统计分析(如快速计算均值、方差)、小型数据集处理、不需要复杂统计模型的场景。
  • 局限性
    • 不支持大型数据集(性能不如 numpy)。
    • 功能有限,不包含高级统计方法(如假设检验、回归分析)。
    • 对非数值数据支持差(如字符串、缺失值)。
 
若需处理复杂统计任务(如大数据量、缺失值处理、高级建模),建议使用 numpy(数值计算)、pandas(数据分析)或 scipy(科学计算)。

总结

statistics 模块作为 Python 标准库,提供了简洁易用的基本统计功能,核心涵盖集中趋势、离散程度、分布形状和分位数计算。掌握它可以快速完成简单的数据分析任务,适合初学者或轻量场景。使用时需注意输入数据的合法性(非空、数值类型),并区分样本与总体统计量的差异。对于复杂需求,可结合第三方库扩展功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux内核开发学习计划

目录岗位需求实习--字节跳动--Linux内核开发实习生--实时核方向正式--Linux内核驱动工程师 央企直招实习--乐研--linux内核研发工程师正式--京东--OS内核核心研发正式--小米--linux内核高级工程师 岗位需求 实习--字节…

随机生成动态头像

Multiavatar 是一个多文化的头像生成器,使用 JavaScript 编写。它能够生成代表不同种族、文化、年龄组、世界观和生活方式的头像。Multiavatar 可以生成超过 120 亿个独特的头像。Multiavatar Github 地址安装 pnpm i…

2025年湖北武汉实验室装修/实验室设计/实验室改造哪个厂家好

2025年湖北武汉实验室装修厂家推荐:湖北特尔诺实验室设备有限公司 在2025年,如果您正在寻找湖北武汉地区优质的实验室装修厂家,那么​​湖北特尔诺实验室设备有限公司​​无疑是您的不二之选。这家公司凭借其专业的…

能源AI天团:多智能体如何破解行业复杂任务 - 实践

能源AI天团:多智能体如何破解行业复杂任务 - 实践2025-10-20 13:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

2025年AI搜索优化品牌推荐排行榜前十强深度解析

摘要 随着人工智能技术的迅猛发展,AI搜索优化行业在2025年迎来爆发式增长,企业依赖高效、精准的搜索优化服务提升在线可见性和业务转化。本文基于市场调研和数据统计,解析2025年AI搜索优化品牌排行榜前十强,为读者…

2025年AI搜索优化品牌推荐排行榜:技术深度解析与选择指南

摘要 随着人工智能技术的飞速发展,AI搜索优化行业在2025年迎来爆发式增长,旨在提升内容精准度和用户体验。本排行基于技术实力、服务口碑、案例实效等维度综合评估,为寻求加盟或服务的企业提供参考。表单数据来源于…

2025年AI搜索优化品牌排行榜前十强权威发布

摘要 随着人工智能技术快速发展,AI搜索优化行业迎来爆发式增长,预计2025年市场规模将突破千亿。本文基于技术实力、服务能力、客户口碑等多维度评估,为您呈现最新AI搜索优化品牌排行榜,并提供专业选择指南,帮助您…

直播回顾|PostgreSQL 18 六大新特性深度解析

10 月 16 日,IvorySQL 社区组织了一场线上直播,主题为:PostgreSQL 18 六大新特性深度解析。以下为本场直播的回顾。 嘉宾简介王世鑫,数据库软件工程师 张虎,数据库软件工程师 权宗亮,数据库软件工程师 兰柯,数据…

异常----Windows 已保护你的电脑:Microsoft Defender SmartScreen 阻止了无法识别的应用启动。运行此应用可能会导致你的电脑存在风险。

exe文件运行异常: Windows 已保护你的电脑 Microsoft Defender SmartScreen 阻止了无法识别的应用启动。运行此应用可能会导致你的电脑存在风险。 解决方法: 打开文件属性, 找到“常规”中的“安全”,并勾选“解除…

win10 开启大小核心调度--异类策略0~4介绍

异类策略0‌:‌特点‌:Windows 11的默认策略。睡眠顺序为优先休眠超线程、小核、大核。‌适用场景‌:适合使用12代、13代处理器的用户,无论系统类型,都可以获得最佳的能效处理。‌优势‌:通过合理调度大小核,实…

Windows 已保护你的电脑:Microsoft Defender SmartScreen 阻止了无法识别的应用启动。运行此应用可能会导致你的电脑存在风险。

exe文件运行异常: Windows 已保护你的电脑 Microsoft Defender SmartScreen 阻止了无法识别的应用启动。运行此应用可能会导致你的电脑存在风险。 解决方法: 打开文件属性, 找到“常规”中的“安全”,并勾选“解除…

深入解析:Thinkphp-Laravel467 小程序校运会高校运动会管理系统

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

恒生电子面经准备 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

082_尚硅谷_单分支双分支课堂练习(2)

082_尚硅谷_单分支双分支课堂练习(2)1.声明2个float64变量并赋值, 判断第一个数大于10.0, 且第2个数小于20.0, 打印两数之和 2.声明2个int32变量并赋值, 判断两数之和, 如果大于等于50, 打印`hello world` 3.定义两个变…

把“扔硬币”搬到互联网:一文看懂 AB 测试的底层逻辑 - 指南

把“扔硬币”搬到互联网:一文看懂 AB 测试的底层逻辑 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

实用指南:IEC 60364-7-722-2018低压电气装置中电动车供电安全要求标准介绍

实用指南:IEC 60364-7-722-2018低压电气装置中电动车供电安全要求标准介绍pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

记录下,cadence17.4 PCB封装更新方法

在PCB板上 然后在元件选择栏内看到元件置于待放入元件nets列表中 在随后出现的设置对话框中,选择update 焊盘from lib,fixed 属性,然后update,再选元件进入PCB,封装已经更新了。

c#设计模式—访问者模式 - 教程

c#设计模式—访问者模式 - 教程2025-10-20 13:20 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

springboot使用aop切面,记录日志

技术说明: springboot:2.1.4.RELEASE jQuery Ajax mysql:8.0.32 业务背景: 当我们在操作网页的时候,我们后台需要记录每个用户,什么时候操作了哪些记录。比如注册了,还是登录了,还是查询了,我们把这些记录全部…

【整活】OI的那些奇妙小操作(Part 1)

卡时 在C++里,有(double)clock()/CLOCKS_PER_SEC这一行代码可以获得当前已经运行的时间。 初见端倪,也就是说,当你使用一些暴力算法(暴搜)的时候,你可以通过计算当前已经运行的时间并判断是否将要超时,如果要超…