Python statistics.quantiles() 方法(长文讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
- 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言:统计学在编程中的重要性
在数据分析和编程领域,统计学方法是处理数据的核心工具之一。无论是计算平均值、方差,还是分析数据分布特征,统计方法都能帮助开发者快速提取数据中的关键信息。Python 的 statistics
模块提供了丰富的统计函数,其中 statistics.quantiles()
方法是用于计算分位数的便捷工具。
分位数在数据科学中扮演着重要角色,例如四分位数可以划分数据集的分布范围,帮助识别异常值或数据集中值的集中趋势。对于编程初学者和中级开发者而言,掌握 quantiles()
方法不仅能提升数据处理效率,还能为更复杂的统计分析打下基础。
本文将通过循序渐进的方式,从基础概念到实际案例,深入讲解 statistics.quantiles()
方法的使用场景、参数配置以及注意事项。
基础概念:什么是分位数?
分位数(Quantiles)是将一组数据按顺序划分为等概率的连续区间所对应的数值点。常见的分位数包括:
- 四分位数(Quartiles):将数据分为4个等份,对应3个分位点(Q1, Q2, Q3)。
- 五分位数(Quintiles):分为5个等份,对应4个分位点。
- 百分位数(Percentiles):分为100个等份,对应99个分位点。
例如,假设有一个学生的数学成绩分布,计算四分位数可以帮助我们快速判断:
- Q1(25%分位数):25%的学生得分低于或等于该值。
- Q2(50%分位数,即中位数):50%的学生得分低于或等于该值。
- Q3(75%分位数):75%的学生得分低于或等于该值。
方法详解:statistics.quantiles()
的基础用法
函数语法与参数
statistics.quantiles()
方法的语法如下:
statistics.quantiles(data, n=4, method='exclusive')
参数说明:
data
:要计算分位数的可迭代数据集(如列表、元组等)。n
:将数据划分为多少个等份(默认为4,即计算四分位数)。method
:分位数的计算方法,支持'exclusive'
或'inclusive'
(默认为'exclusive'
)。
示例:计算四分位数
import statistics
scores = [58, 62, 65, 68, 70, 72, 75, 80, 85, 90]
quartiles = statistics.quantiles(scores)
print("四分位数:", quartiles)
结果解释:
- 四分位数返回两个值,对应 Q1(68.0)和 Q3(72.0)。
- 中位数(Q2)未被包含在返回结果中,但可以通过
statistics.median()
单独计算。
参数深度解析:n
和 method
的选择
参数 n
:划分数据的等份数
n
参数决定了数据被划分为多少个等份,返回的分位点数量为 n-1
。例如:
- 当
n=5
时,返回 4个分位数(五分位数)。 - 当
n=100
时,返回 99个分位数(百分位数)。
quintiles = statistics.quantiles(scores, n=5)
print("五分位数:", quintiles)
参数 method
:分位数的计算方式
method
参数决定了分位数的计算逻辑,具体分为两种模式:
模式 1:method='exclusive'
(默认)
- 数据排序后,两端的极值(最小值和最大值)不包含在计算范围内。
- 适用场景:当数据被视为来自连续分布时,避免因数据边界值导致结果偏差。
模式 2:method='inclusive'
- 数据排序后,两端的极值被包含在计算范围内。
- 适用场景:当数据是有限且完整的集合时,确保所有值参与计算。
对比示例:
data = [1, 2, 3, 4, 5]
print("exclusive:", statistics.quantiles(data)) # 输出:[2.0, 4.0]
print("inclusive:", statistics.quantiles(data, method='inclusive'))
差异分析:
exclusive
模式将数据视为2, 3, 4
(排除两端),因此 Q1=2.0,Q3=4.0。inclusive
模式包含所有数据点,因此 Q1 和 Q3 是中间值的平均。
实战案例:分析学生成绩分布
案例背景
假设某班级有以下数学成绩数据:
math_scores = [55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
步骤 1:计算四分位数
quartiles = statistics.quantiles(math_scores)
print("四分位数:", quartiles) # 输出:[70.0, 85.0]
分析:
- Q1(25%分位数):70.0 表示25%的学生得分≤70分。
- Q3(75%分位数):85.0 表示75%的学生得分≤85分。
步骤 2:计算百分位数
percentiles = statistics.quantiles(math_scores, n=100)
print("第90百分位数:", percentiles[89]) # 输出:95.0
分析:
- 第90百分位数为95.0,意味着90%的学生得分≤95分。
对比其他方法:为何选择 quantiles()
?
与 numpy.quantile()
的对比
numpy
库的 quantile()
函数也用于计算分位数,但两者在以下方面存在差异:
特性 | statistics.quantiles() | numpy.quantile() |
---|---|---|
依赖库 | Python 标准库 | 需要安装 numpy |
数据类型 | 支持列表、元组等简单数据结构 | 支持多维数组和复杂数据结构 |
分位数返回方式 | 直接返回 n-1 个分位数 | 需手动指定分位数位置(如 0.25) |
计算速度 | 较慢(适合小规模数据集) | 快速(适合大规模数据集) |
使用场景建议:
- 若需简单、轻量级的分位数计算,优先使用
statistics.quantiles()
。 - 处理大规模或复杂数据时,可结合
numpy
的高性能方法。
注意事项与常见问题
问题 1:数据未排序的后果
quantiles()
方法会自动对数据排序,但需注意:
unsorted_data = [5, 3, 8, 1, 9]
print(statistics.quantiles(unsorted_data)) # 输出:[3.0, 8.0]
结论:输入数据无需预先排序,但若数据本身已排序,结果更易被验证。
问题 2:数据长度不足的处理
当数据长度不足以划分 n
份时,quantiles()
会返回 统计错误(StatisticsError)
。例如:
short_data = [1, 2]
try:
print(statistics.quantiles(short_data, n=3)) # 需至少3个数据点
except Exception as e:
print(e)
解决方法:确保数据长度足够,或调整 n
的值。
问题 3:method
参数的选择
- 若数据包含明确的边界值(如传感器测量值),推荐
method='inclusive'
。 - 若数据是样本的一部分,可能代表更大群体,选择
method='exclusive'
更合理。
进阶技巧:结合其他统计方法
技巧 1:计算四分位距(IQR)
四分位距(IQR)是 Q3 - Q1,用于衡量数据离散程度:
q1, q3 = statistics.quantiles(math_scores)
iqr = q3 - q1
print("IQR:", iqr) # 输出:IQR: 15.0
技巧 2:检测异常值
通过 IQR 可识别异常值:
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
outliers = [x for x in math_scores if x < lower_bound or x > upper_bound]
print("异常值:", outliers) # 输出:异常值: [55]
结论与展望
通过本文的学习,开发者可以掌握 statistics.quantiles()
方法的核心功能与应用场景。该方法简化了分位数的计算流程,尤其适合需要快速分析小规模数据集的场景。
在实际开发中,分位数不仅是数据可视化(如箱线图)的基础,还能帮助优化算法性能(如排序算法的中间值选择)。随着数据量的增长,开发者可以进一步结合 numpy
或 pandas
库,探索更复杂的统计分析方法。
掌握 Python statistics.quantiles() 方法
,不仅是对统计学工具的补充,更是提升数据处理能力的重要一步。希望本文能为你的编程旅程提供清晰的指引!