Python进阶教程:17_statistics 模块 —— 新手完全指南

发布时间:2026/8/27 18:48:18

Python进阶教程:17_statistics 模块 —— 新手完全指南
statistics是 Python 3.4 版本开始加入的内置标准库专门用来做基础的统计计算不需要额外安装导入就能用。它封装了我们日常最常用的统计量均值、中位数、众数、方差、标准差等不用自己写循环、写公式计算一行代码就能得到准确结果非常适合新手处理简单的数据分析场景。本文会按「集中趋势 → 离散程度」的逻辑逐个讲解每个函数每个函数都配可运行示例 逐行解释 新手避坑指南零基础也能完全吃透。一、模块基础说明1. 模块定位内置模块Python 安装完就有不需要pip install适用场景简单的基础统计计算处理小规模数值数据优势代码简洁、结果准确、不用自己实现统计公式2. 导入方式# 方式1导入整个模块推荐新手用不容易混淆函数来源 import statistics # 方式2单独导入需要的函数 from statistics import mean, stdev, median3. 前置约定所有统计函数的输入基本都是「数值型可迭代对象」比如整数 / 浮点数组成的列表、元组。 ⚠️ 新手坑不能传入空列表、不能传入字符串 / None 等非数值类型否则会直接报错。二、第一类集中趋势指标描述数据的中心水平集中趋势就是找一组数据的「代表值 / 中心值」比如我们常说的平均分、中间分、出现最多的分数都属于这类指标。1. mean ()算术平均数功能计算一组数据的算术平均值也就是我们最常用的「总和 ÷ 个数」是最基础、最常用的平均指标。语法statistics.mean(数值序列)示例计算班级考试平均分import statistics # 班级8名同学的数学成绩 scores [85, 92, 78, 90, 88, 76, 95, 82] # 计算算术平均分 avg statistics.mean(scores) print(f班级数学平均分{avg})运行结果plaintext班级数学平均分85.75代码解释先定义成绩列表scores一共 8 个数值statistics.mean(scores)自动计算(8592789088769582) ÷ 8 686 ÷ 8 85.75结果是浮点数类型哪怕刚好整除也会返回 float注意事项序列不能为空否则报错StatisticsError: mean requires at least one data point只能放数值int/float放字符串会报类型错误容易受极端值影响比如加一个 0 分平均分被大幅拉低2. median ()中位数功能把数据从小到大排序后位于正中间位置的数值。如果数据个数是偶数取中间两个数的平均值。 中位数的优势是不受极端值影响适合数据里有异常大 / 异常小值的场景。语法statistics.median(数值序列)示例 1奇数个数据import statistics # 9个同学的成绩奇数个 scores [76, 78, 82, 85, 88, 90, 92, 95, 100] mid statistics.median(scores) print(f成绩中位数{mid})运行结果成绩中位数88解释9 个数排序后第 5 个位置的数就是中位数也就是 88。示例 2偶数个数据import statistics # 8个同学的成绩偶数个 scores [76, 78, 82, 85, 88, 90, 92, 95] mid statistics.median(scores) print(f成绩中位数{mid})运行结果成绩中位数86.5解释8 个数排序后中间是第 4 个和第 5 个取两者的平均值(8588) ÷ 2 86.5。拓展低中位数、高中位数还有两个衍生函数适合需要取整数的场景median_low()偶数个时取中间偏小的那个数median_high()偶数个时取中间偏大的那个数scores [76, 78, 82, 85, 88, 90, 92, 95] print(statistics.median_low(scores)) # 85 print(statistics.median_high(scores)) # 883. mode ()众数功能一组数据中出现次数最多的数值用来反映最普遍的情况。语法statistics.mode(数值序列)示例统计出现次数最多的分数import statistics scores [85, 92, 85, 90, 88, 92, 92, 82] most statistics.mode(scores) print(f出现次数最多的分数{most})运行结果出现次数最多的分数92解释92 出现了 3 次是出现次数最多的所以众数是 92。⚠️ 新手头号大坑多个众数会报错如果有两个及以上的数值出现次数并列最多mode()会直接报错StatisticsError。 解决方法用multimode()函数返回所有众数组成的列表Python 3.8 支持。示例多个众数的处理import statistics scores [85, 92, 85, 92, 88, 76] # 85和92都出现了2次并列最多 # 错误写法mode会报错 # print(statistics.mode(scores)) # 正确写法multimode返回所有众数 all_modes statistics.multimode(scores) print(f所有众数{all_modes})运行结果所有众数[85, 92]4. geometric_mean ()几何平均数功能几何平均数多用于计算平均增长率、平均比例比如连续多年的收益率、人口增长率比算术平均更适合描述增长类数据。 公式n 个数值相乘后开 n 次方。注意Python 3.8 才支持这个函数所有数据必须是正数。示例计算平均年收益率import statistics # 某基金连续3年的收益率第一年涨10%、第二年涨20%、第三年涨15% # 转化为增长倍数1.1、1.2、1.15 growth_rates [1.1, 1.2, 1.15] avg_growth statistics.geometric_mean(growth_rates) print(f年均增长倍数{avg_growth:.4f}) print(f年均收益率{(avg_growth - 1)*100:.2f}%)运行结果年均增长倍数1.1487 年均收益率14.87%解释三年的复利平均下来相当于每年稳定涨 14.87%。5. harmonic_mean ()调和平均数功能调和平均数多用于计算平均速度、平均单价等场景比如路程相同的情况下计算平均速度。示例计算往返平均速度import statistics # 去程速度60km/h返程速度40km/h路程相同求平均速度 speeds [60, 40] avg_speed statistics.harmonic_mean(speeds) print(f往返平均速度{avg_speed:.2f} km/h)运行结果往返平均速度48.00 km/h解释调和平均计算的是「相同距离下的平均速度」结果 48 是正确的不是简单的 (6040)/250。三、第二类离散程度指标描述数据的波动大小离散程度用来衡量一组数据「散不散、波动大不大」。比如两个班平均分都是 85一个班分数都集中在 80-90另一个班有考 60 也有考 100 的后者波动更大离散程度更高。前置必懂总体 vs 样本这是新手最容易混淆的点先通俗讲清楚总体你手里的数据就是全部研究对象比如全班所有人的成绩计算波动用「总体方差 / 总体标准差」函数名带p前缀p population样本你手里的数据只是从整体里抽出来的一部分比如从全年级抽 10 个学生的成绩用来估计全年级的波动用「样本方差 / 样本标准差」分母是 n-1结果比总体的稍大更严谨。四个函数对应关系类型方差函数标准差函数总体pvariance()pstdev()样本variance()stdev()方差和标准差的关系标准差 √方差 标准差的单位和原数据一致比方差更直观日常描述波动更常用标准差。1. pvariance ()总体方差功能计算总体方差描述整组数据偏离均值的程度数值越大数据越分散。语法statistics.pvariance(数值序列, 均值可选)示例计算全班成绩的总体方差import statistics # 全班8名同学的成绩这就是全部总体 scores [85, 92, 78, 90, 88, 76, 95, 82] # 计算总体方差 p_var statistics.pvariance(scores) print(f成绩总体方差{p_var:.2f})运行结果成绩总体方差35.942. pstdev ()总体标准差功能总体方差开平方就是总体标准差单位和原数据一样这里是「分」比方差更直观好理解。示例import statistics scores [85, 92, 78, 90, 88, 76, 95, 82] p_std statistics.pstdev(scores) print(f成绩总体标准差{p_std:.2f} 分)运行结果成绩总体标准差5.99 分解释可以简单理解为班级里大部分同学的分数都在平均分上下浮动约 6 分左右。3. variance ()样本方差功能计算样本方差用于抽样数据估计总体波动分母是 n-1n 是数据个数。示例抽样估计年级成绩波动import statistics # 从全年级抽了8个同学的成绩样本数据 sample_scores [85, 92, 78, 90, 88, 76, 95, 82] # 样本方差 sample_var statistics.variance(sample_scores) print(f样本方差{sample_var:.2f})运行结果样本方差41.07可以看到同样的数据样本方差41.07比总体方差35.94大这是正常的因为样本估计总体需要留有余量。4. stdev ()样本标准差功能样本方差开平方是最常用的波动描述指标。示例import statistics sample_scores [85, 92, 78, 90, 88, 76, 95, 82] sample_std statistics.stdev(sample_scores) print(f样本标准差{sample_std:.2f} 分)运行结果样本标准差6.41 分四、拓展quantiles () 分位数Python 3.8功能把数据按大小排序后分成 n 等份得到分割点的数值最常用的是四分位数分成 4 份可以快速了解数据的分布区间。示例计算成绩的四分位数import statistics scores [76, 78, 82, 85, 88, 90, 92, 95, 100] # n4 表示分成4等份得到3个四分位点 q statistics.quantiles(scores, n4) print(f第一四分位数Q1{q[0]}) # 25%位置 print(f第二四分位数Q2{q[1]}) # 50%位置就是中位数 print(f第三四分位数Q3{q[2]}) # 75%位置运行结果第一四分位数Q180.0 第二四分位数Q288.0 第三四分位数Q393.5解释25% 的同学分数低于 80 分75% 的同学低于 93.5 分。五、综合实战案例班级成绩完整统计下面是一个完整的小例子用statistics模块一次性算出所有常用统计量非常适合日常简单分析。import statistics # 某班10名同学的期末数学成绩 scores [72, 85, 91, 68, 95, 85, 79, 88, 91, 91] print( 班级成绩统计 ) print(f平均分{statistics.mean(scores):.2f} 分) print(f中位数{statistics.median(scores)} 分) print(f众数{statistics.mode(scores)} 分) print(f最高分{max(scores)} 分) print(f最低分{min(scores)} 分) print(f总体标准差{statistics.pstdev(scores):.2f} 分) print(f总体方差{statistics.pvariance(scores):.2f})运行结果 班级成绩统计 平均分84.50 分 中位数86.5 分 众数91 分 最高分95 分 最低分68 分 总体标准差8.52 分 总体方差72.65六、新手高频易错点总结传入空列表报错所有统计函数都要求序列至少有 1 个数据空列表会触发StatisticsError。非数值类型报错列表里不能有字符串、None、布尔值以外的非数值类型否则报类型错误。众数多个时报错并列最多的众数有多个时mode()会报错改用multimode()获取所有众数列表。总体和样本搞混数据是全部研究对象 → 用pvariance/pstdev数据是抽样样本 → 用variance/stdev日常小数据、只是描述当前这组数据用总体的即可。低版本 Python 不支持新函数geometric_mean、harmonic_mean、multimode、quantiles都是 Python 3.8 才有的低版本会报错。复杂统计场景不适用statistics只适合基础统计复杂的数据分析、矩阵运算、回归分析等建议用numpy、pandas第三方库。

相关新闻

Android Kotlin 协程async

Android Kotlin 协程async

2026/8/27 18:48:18

Android Kotlin 协程asyncmeasureTimeMillis 统计一段代码耗时 内敛函数 measureTimeMillis{ } 可以很方便的统计一段代码执行的耗时。 使用: GlobalScope.launch {val time measureTimeMillis {delay(1000)Log.d("zyj-", "日志")}Log.d("…

2023年最新的Android面试大厂必考174题 (附详细答案)

2023年最新的Android面试大厂必考174题 (附详细答案)

2026/8/27 18:48:18

前言听说24届现在没找到实习,就崩溃了? 你是不是崩溃了?焦虑了?失眠了?脱发了? 其实吧,现在才4月,实习招聘刚刚拉开大幕,“统一招聘”只是形式大于实质的吆喝。 5-6月各种…

强AI助手的数据隐私风险:从权限审查到脱敏实操指南

强AI助手的数据隐私风险:从权限审查到脱敏实操指南

2026/8/27 18:48:18

一位开发者朋友最近装了一款标榜“强大 AI 助手”的桌面工具,安装时没细看授权说明就直接点了同意。半天后他意识到,这个助手不仅读取了当前打开的编辑器内容,还把终端历史和浏览器标签页一并纳入了“上下文”。他的第一反应是:它…

MISRA C:2012 详解 · 专栏03:表达式与求值(第 11~14 章)

MISRA C:2012 详解 · 专栏03:表达式与求值(第 11~14 章)

2026/8/27 20:18:22

MISRA C:2012 详解 专栏03:表达式与求值(第 11~14 章) 覆盖第 11~14 章共 23 条规则:指针类型转换、表达式、副作用与求值顺序、控制语句表达式。 这一篇是 MISRA 的「修罗场」——指针强转和副作用是 C 语言里最「自由」也最危险的两个领域,MISRA 在这里下手最狠。 第 1…

健康保险费率计算:从精算模型到Matlab实现

健康保险费率计算:从精算模型到Matlab实现

2026/8/27 20:18:22

1. 项目概述:当精算师遇上程序员 健康保险费率计算,听起来像是精算师在办公室里对着成堆的表格和公式埋头苦算的活儿。但如果你既懂点保险,又会写点代码,这事儿就变得有意思多了。本质上,它就是一个典型的数学建模问题…

CANOpen总结回顾

CANOpen总结回顾

2026/8/27 20:18:22

CANOpen将CAN的11位id叫做COB-ID,高四位为功能码,表示报文类型,包括NMT,SDO,RPDO,TPDO等,低7位叫Node-ID,是设备地址,也叫从机地址,0表示广播给所有从机。CAN…

玻璃温室微气候调控:温度湿度CO₂气流四维协同规则

玻璃温室微气候调控:温度湿度CO₂气流四维协同规则

2026/8/27 20:18:22

1. 什么是玻璃温室里的微气候规则?它到底管什么? “玻璃温室中的微气候规则”——这名字听起来像农业气象学的论文标题,但其实它是一套在真实生产场景里天天被种植户、园艺师、设施农业工程师反复调校、验证、推翻又重建的操作逻辑。它不是写…

MISRA C:2012 详解 · 专栏05:高级主题(第 19~22 章)

MISRA C:2012 详解 · 专栏05:高级主题(第 19~22 章)

2026/8/27 20:18:22

MISRA C:2012 详解 专栏05:高级主题(第 19~22 章) 覆盖第 19~22 章共 34 条规则:重叠存储、预处理指令、标准库、资源管理。 这是 MISRA 的收尾篇,也是最「接地气」的一篇——预处理宏的坑、标准库的雷、资源的债,都是真实项目里流过的血。 第 19 章 重叠存储(Overlap…

【幻尔科技10轴IMU惯导模块从零配置】

【幻尔科技10轴IMU惯导模块从零配置】

2026/8/27 20:08:21

10轴IMU惯导模块从零配置(GPSIMU堆叠,附C数据解析代码) 适用:亚博智能 10轴 IMU 中微科 ATGM336H GPS 软件:GnssToolKit3 维特智能上位机 V6.2.60 协议:维特智能 0x55 串口协议 资料:https://…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

2026/8/27 0:07:12

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

LeetCode Hot100(51-60)算法精解与面试技巧

LeetCode Hot100(51-60)算法精解与面试技巧

2026/8/27 0:07:12

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

CRC校验实战:从模2除法到HJ212协议排错

CRC校验实战:从模2除法到HJ212协议排错

2026/8/27 0:07:12

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…