跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

Python 数据分析入门:集中趋势与离散程度

综述由AI生成集中趋势与离散程度是数据分析的核心基础。通过 Pandas 实战,演示了如何使用均值、中位数、众数衡量数据集中位置,利用极差、方差、标准差及 IQR 评估数据波动。重点解析了 describe() 方法的关键字段含义,揭示了仅看平均值可能掩盖的稳定性风险。掌握这些指标有助于准确识别异常值,为后续数据清洗、可视化和建模打下坚实基础。初学者需警惕均值陷阱,结合中心与离散指标综合判断数据特征。

落日余晖发布于 2026/3/29更新于 2026/5/88 浏览

集中趋势与离散程度

在做数据分析时,我们经常会遇到这样的问题:一组数据的'平均水平'到底是多少?为什么两组数据均值差不多,但实际情况完全不同?如何判断数据是否稳定,波动大不大?数据里有没有异常值?这些问题,本质上都离不开两个统计学基础概念:集中趋势和离散程度。

本文用一个非常简单的案例——班级成绩分析,带你从 0 到 1 学会这些统计指标,并用 Pandas 完成实战分析。

一、先看一个问题:平均分差不多,班级情况就一样吗?

假设现在有两个班级的数学成绩:

a_scores = [85, 82, 88, 84, 86, 83, 87, 85, 84, 86]
b_scores = [100, 60, 90, 70, 95, 65, 85, 85, 85, 85]

很多人拿到数据后,第一反应就是先看平均分。但问题是:平均分差不多,就说明两个班水平一样吗?哪个班更稳定?哪个班成绩差距更大?答案显然不是。A 班成绩比较集中,整体比较稳定;B 班虽然也有高分,但高低差距很大。这说明:分析数据时,不能只看平均值,还要看数据的分散程度。

二、什么是集中趋势?

集中趋势,就是描述一组数据'中心位置'的指标。你可以简单理解为:这组数据大多数值,整体上靠近哪里?常见的集中趋势指标有:均值(Mean)、中位数(Median)、众数(Mode)、中列数(Midrange)。

1. 均值(Mean)

均值就是我们平时说的'平均数'。计算公式:所有数据之和 / 数据个数。Pandas 写法:df['A 班'].mean()。特点:最常用,最直观。缺点是对异常值敏感。也就是说,如果一组数据里存在特别大或特别小的值,均值很容易被拉偏。

2. 中位数(Median)

中位数就是把数据排序后,位于中间位置的值。Pandas 写法:df['A 班'].median()。特点:不容易被极端值拉偏。在有异常值时,通常比均值更可靠。如果你分析的数据可能存在异常值,比如成绩异常、消费异常、销售爆发等,中位数往往比均值更能反映真实水平。

3. 众数(Mode)

众数就是一组数据中出现次数最多的值。Pandas 写法:df['A 班'].mode()。特点:适合看'最常见的水平'。可能有多个众数。如果每个值都只出现一次,就可能没有众数。比如一组成绩里,85 分出现次数最多,那么 85 就是众数。

4. 中列数(Midrange)

中列数是最大值和最小值的平均值。计算公式:(最大值 + 最小值)/2。特点:计算简单,但受极端值影响较大。一般了解即可,实际分析中不如均值和中位数常用。

三、什么是离散程度?

如果说集中趋势解决的是:'这组数据大概在什么水平?'那么离散程度解决的就是:'这组数据差距大不大?稳定不稳定?'常见指标有:极差(Range)、四分位数(Quartiles)、四分位数极差(IQR)、方差(Variance)、标准差(Standard Deviation)。

1. 极差(Range)

极差是最大值减去最小值。计算公式:max-min。Pandas 写法:df['A 班'].max()- df['A 班'].min()。特点:计算最简单,但只看最值,容易受极端值影响。如果一组数据里有异常值,极差可能会被放大。

2. 四分位数(Quartiles)

四分位数是把数据从小到大排序后,分成四份得到的几个关键位置:Q1(25% 位置)、Q2(50% 位置,也就是中位数)、Q3(75% 位置)。Pandas 写法:df['A 班'].quantile([0.25, 0.5, 0.75])。四分位数非常适合用来观察数据分布情况。

3. 四分位数极差(IQR)

IQR 的公式是:IQR = Q3 - Q1。它表示中间 50% 数据的离散程度。特点:比极差更稳定,常用于异常值判断,对极端值不那么敏感。所以在实际分析中,IQR 是一个非常实用的指标。

4. 方差(Variance)与标准差(Standard Deviation)

这两个指标是分析'波动大小'的经典工具。Pandas 写法:df['A 班'].var()(方差),df['A 班'].std()(标准差)。怎么理解?你可以简单理解为:标准差越小,数据越集中,越稳定;标准差越大,数据越分散,差异越明显。在实际工作中,标准差通常比方差更常用,因为它更容易解释。

四、Pandas 实战:完整代码直接运行

下面直接上完整代码,复制即可运行。注意这里我稍微调整了格式,方便阅读。

import pandas as pd
import matplotlib.pyplot as plt

# 1. 构造数据
a_scores = [85, 82, 88, 84, 86, 83, 87, 85, 84, 86]
b_scores = [100, 60, 90, 70, 95, 65, 85, 85, 85, 85]
df = pd.DataFrame({'A 班': a_scores, 'B 班': b_scores})

# 2. 查看原始数据
print("=== 原始数据 ===")
print(df)

# 3. 一键统计描述
print("\n=== describe() 统计结果 ===")
print(df.describe())

# 4. 集中趋势
print("\n=== 集中趋势 ===")
print("A 班均值:", df['A 班'].mean())
print("B 班均值:", df['B 班'].mean())
print("A 班中位数:", df['A 班'].median())
print("B 班中位数:", df['B 班'].median())
print("A 班众数:", df['A 班'].mode().tolist())
print("B 班众数:", df['B 班'].mode().tolist())
print("A 班中列数:", (df['A 班'].max() + df['A 班'].min())/2)
print("B 班中列数:", (df['B 班'].max() + df['B 班'].min())/2)

# 5. 离散程度
print("\n=== 离散程度 ===")
print("A 班极差:", df['A 班'].max() - df['A 班'].min())
print("B 班极差:", df['B 班'].max() - df['B 班'].min())
print("A 班方差:", df['A 班'].var())
print("B 班方差:", df['B 班'].var())
print("A 班标准差:", df['A 班'].std())
print("B 班标准差:", df['B 班'].std())

# 6. 四分位数和 IQR
a_q1 = df['A 班'].quantile(0.25)
a_q2 = df['A 班'].quantile(0.5)
a_q3 = df['A 班'].quantile(0.75)
a_iqr = a_q3 - a_q1
b_q1 = df['B 班'].quantile(0.25)
b_q2 = df['B 班'].quantile(0.5)
b_q3 = df['B 班'].quantile(0.75)
b_iqr = b_q3 - b_q1
print("\n=== 四分位数与 IQR ===")
print(f"A 班:Q1={a_q1}, Q2={a_q2}, Q3={a_q3}, IQR={a_iqr}")
print(f"B 班:Q1={b_q1}, Q2={b_q2}, Q3={b_q3}, IQR={b_iqr}")

# 7. 盒图可视化
df.boxplot()
plt.title("A 班与 B 班成绩盒图")
plt.ylabel("分数")
plt.show()

输出结果会显示两班均值接近,但标准差差异巨大。A 班标准差约 1.8,B 班约 12.9,说明 B 班波动极大。

五、重点来了:describe() 到底看什么?

很多初学者第一次用 describe(),会觉得输出一堆数字,不知道重点看哪里。其实重点就盯住这几个字段:mean(均值)、50%(中位数)、std(标准差)、min / max(最小值和最大值)、25% / 75%(Q1 和 Q3)。

一个简单经验:如果你刚开始学数据分析,看到 describe(),优先看这三类信息:

  1. 看中心:mean 和 50%。
  2. 看波动:std 和 max - min。
  3. 看分布:25% 和 75%。 这几个值,已经足够完成一轮基础分析。

六、结合案例解释结果

运行完代码后,你通常会发现:A 班成绩集中在 80 多分附近,B 班虽然也有多个 85,但整体差距更大,B 班的极差和标准差通常会更大。这说明:A 班整体稳定,学生成绩差异不大,班级表现比较均衡;B 班两极分化更明显,有高分,也有低分,平均值不能完全说明问题。这也是为什么在实际分析中,不能只看平均分。

七、异常值为什么重要?

在真实数据中,经常会遇到一些'看起来不太正常'的值,比如成绩里突然出现一个特别高或特别低的数,销售数据里某一天异常爆发,用户消费数据里出现极端金额。这些值可能是真实异常、录入错误或特殊情况。因此,分析数据时一定要关注异常值,因为它会直接影响均值、极差、标准差等指标。对于异常值,常见的一种判断方式是利用四分位数极差 IQR:下界 = Q1 - 1.5IQR,上界 = Q3 + 1.5IQR。超出这个范围的数据,通常可以视为异常值。

八、学习这部分内容,最容易踩的坑

坑 1:只看均值,不看标准差 这是初学者最常见的问题。均值只能说明平均水平,不能说明稳定性。

坑 2:看到中位数和均值差不多,就觉得数据没问题 不一定。有时候数据虽然中位数和均值接近,但极差、IQR、标准差可能已经说明波动很大。

坑 3:不会解读 mode() mode() 返回的是一个序列,不一定只有一个值。比如 print(df['A 班'].mode()) 可能返回多个众数,这是正常现象。

坑 4:把方差和标准差混为一谈 记住一句话:方差是'平方后的离散程度',标准差是方差开根号后得到的,更容易解释。实际分析中,标准差更常用。

九、这部分知识在数据分析里有什么用?

别看它只是'统计描述',其实它是后面很多内容的基础。比如数据清洗、异常值检测、数据可视化、聚类分析、建模前的数据理解。也就是说,如果你连均值、中位数、标准差都看不懂,后面做更复杂的数据分析会非常吃力。

十、给初学者的一个记忆口诀

这部分我建议直接记成下面这 4 句话:

  1. 均值看平均,但怕异常值。
  2. 中位数更稳,适合有极端值的数据。
  3. 标准差越大,波动越大。
  4. 分析数据时,中心和离散要一起看。

十一、课后练习(适合自学)

练习 1:基础题 已知一组成绩数据:scores = [72, 75, 78, 80, 85, 85, 86, 90, 92, 95]。请完成:计算均值、中位数、众数;计算极差、方差、标准差;计算 Q1、Q2、Q3 和 IQR;用一句话描述这组数据的特点。

练习 2:提高题 加入一个异常值:scores = [72, 75, 78, 80, 85, 85, 86, 90, 92, 150]。请思考:均值变化大吗?中位数变化大吗?哪个指标更适合描述这组数据?能否认为 150 是异常值?

练习 3:迁移题 请把'成绩数据'换成你熟悉的业务数据,例如某店铺近 10 天销售额、某班学生 10 次上机时长、某宿舍 10 天用电量。要求:使用 Pandas 完成统计描述,输出 describe(),分析集中趋势和离散程度,尝试绘制盒图。

十二、总结

这篇文章我们解决了一个非常基础但非常重要的问题:一组数据到底该怎么快速读懂?答案就是两步:看集中趋势,判断整体水平;看离散程度,判断波动大小。本文重点讲了这些常用指标:均值、中位数、众数、中列数、极差、四分位数、IQR、方差、标准差。这些内容是数据分析中的基础能力,也是后续数据清洗、异常值识别和可视化分析的起点。

目录

  1. 集中趋势与离散程度
  2. 一、先看一个问题:平均分差不多,班级情况就一样吗?
  3. 二、什么是集中趋势?
  4. 1. 均值(Mean)
  5. 2. 中位数(Median)
  6. 3. 众数(Mode)
  7. 4. 中列数(Midrange)
  8. 三、什么是离散程度?
  9. 1. 极差(Range)
  10. 2. 四分位数(Quartiles)
  11. 3. 四分位数极差(IQR)
  12. 4. 方差(Variance)与标准差(Standard Deviation)
  13. 四、Pandas 实战:完整代码直接运行
  14. 1. 构造数据
  15. 2. 查看原始数据
  16. 3. 一键统计描述
  17. 4. 集中趋势
  18. 5. 离散程度
  19. 6. 四分位数和 IQR
  20. 7. 盒图可视化
  21. 五、重点来了:describe() 到底看什么?
  22. 六、结合案例解释结果
  23. 七、异常值为什么重要?
  24. 八、学习这部分内容,最容易踩的坑
  25. 九、这部分知识在数据分析里有什么用?
  26. 十、给初学者的一个记忆口诀
  27. 十一、课后练习(适合自学)
  28. 十二、总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 哈希算法:数字世界的安全指纹,从原理到实用全解析
  • 基于 Selenium 的网页自动化抢购脚本实现
  • Android DataBinding 从入门到进阶
  • 网络安全工程师职业解析与入门指南
  • AI 支持的临床医学工作、论文撰写与机器学习建模实践
  • DeepSeek-R1 大模型基于 MS-Swift 框架部署推理与微调实践
  • 基于 Python 的数字签名教务管理系统
  • 拆解 DDSM400 伺服轮毂电机:结构原理与选型实战
  • CycleGAN 详解与实现
  • 基于 SpringBoot 和 Vue 的民宿房源预订系统设计
  • macOS 环境下 OpenClaw 部署与配置指南
  • llama.cpp 量化技术详解:降低大模型内存占用
  • WebStorm 集成 AI 编程助手实战指南
  • Moondream2 本地工具优化 Stable Diffusion 提示词案例对比
  • Coze 工作流实战:将文章链接转为思维导图
  • Spring 事务管理与传播机制详解
  • 递归算法实战:从汉诺塔到快速幂与链表操作
  • Go map 底层原理
  • 使用 OpenClaw 与 cpolar 实现本地 AI 远程访问及内网穿透
  • MiniMax 开源 Office 文档引擎与飞猪旅行 Skill 技术解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online