跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

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

Python 数据分析中,集中趋势与离散程度是理解数据分布的基础。文章通过班级成绩案例,演示了均值、中位数、众数等集中趋势指标,以及极差、方差、标准差、四分位数等离散程度指标的计算方法。结合 Pandas 库的 describe() 函数及代码实战,帮助初学者掌握如何识别异常值、评估数据稳定性,并总结常见分析误区与记忆口诀,为后续数据清洗与建模打下基础。

2177283801发布于 2026/3/26更新于 2026/7/2540 浏览

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

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

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

A班成绩 = [85, 82, 88, 84, 86, 83, 87, 85, 84, 86]
B班成绩 = [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 班  B 班
0    85  100
1    82   60
2    88   90
3    84   70
4    86   95
5    83   65
6    87   85
7    85   85
8    84   85
9    86   85

=== describe() 统计结果 ===
          A 班        B 班
count  10.000000  10.000000
mean   85.000000  82.000000
std     1.825742  12.952906
min     82.000000  60.000000
25%    84.000000  73.750000
50%    85.000000  85.000000
75%    86.000000  88.750000
max     88.000000  100.000000

=== 集中趋势 ===
A 班均值: 85.0
B 班均值: 82.0
A 班中位数: 85.0
B 班中位数: 85.0
A 班众数: [84, 85, 86]
B 班众数: [85]
A 班中列数: 85.0
B 班中列数: 80.0

=== 离散程度 ===
A 班极差: 6
B 班极差: 40
A 班方差: 3.3333333333333335
B 班方差: 167.77777777777777
A 班标准差: 1.8257418583505538
B 班标准差: 12.952906151816965

=== 四分位数与 IQR ===
A 班:Q1=84.0, Q2=85.0, Q3=86.0, IQR=2.0
B 班:Q1=73.75, Q2=85.0, Q3=88.75, IQR=15.0

五、重点来了: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.5 * IQR
上界 = Q3 + 1.5 * IQR 

超出这个范围的数据,通常可以视为异常值。

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

坑 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]

请完成:

  1. 计算均值、中位数、众数
  2. 计算极差、方差、标准差
  3. 计算 Q1、Q2、Q3 和 IQR
  4. 用一句话描述这组数据的特点
练习 2:提高题

加入一个异常值:

scores = [72, 75, 78, 80, 85, 85, 86, 90, 92, 150]

请思考:

  1. 均值变化大吗?
  2. 中位数变化大吗?
  3. 哪个指标更适合描述这组数据?
  4. 能否认为 150 是异常值?
练习 3:迁移题

请把'成绩数据'换成你熟悉的业务数据,例如:

  • 某店铺近 10 天销售额
  • 某班学生 10 次上机时长
  • 某宿舍 10 天用电量

要求:

  • 使用 Pandas 完成统计描述
  • 输出 describe()
  • 分析集中趋势和离散程度
  • 尝试绘制盒图

十二、总结

这篇文章我们解决了一个非常基础但非常重要的问题:

一组数据到底该怎么快速读懂?

答案就是两步:

  • 看集中趋势:判断整体水平
  • 看离散程度:判断波动大小

本文重点讲了这些常用指标:

  • 均值
  • 中位数
  • 众数
  • 中列数
  • 极差
  • 四分位数
  • IQR
  • 方差
  • 标准差

这些内容是数据分析中的基础能力,也是后续数据清洗、异常值识别和可视化分析的起点。

目录

  1. Python 数据分析入门:集中趋势与离散程度
  2. 一、先看一个问题:平均分差不多,班级情况就一样吗?
  3. 二、什么是集中趋势?
  4. 1)均值(Mean)
  5. 计算公式
  6. Pandas 写法
  7. 特点
  8. 2)中位数(Median)
  9. Pandas 写法
  10. 特点
  11. 3)众数(Mode)
  12. Pandas 写法
  13. 特点
  14. 4)中列数(Midrange)
  15. 计算公式
  16. 特点
  17. 三、什么是离散程度?
  18. 1)极差(Range)
  19. 计算公式
  20. Pandas 写法
  21. 特点
  22. 2)四分位数(Quartiles)
  23. Pandas 写法
  24. 3)四分位数极差(IQR)
  25. 特点
  26. 4)方差(Variance)与标准差(Standard Deviation)
  27. Pandas 写法
  28. 怎么理解?
  29. 四、Pandas 实战:完整代码直接运行
  30. 1. 构造数据
  31. 2. 查看原始数据
  32. 3. 一键统计描述
  33. 4. 集中趋势
  34. 5. 离散程度
  35. 6. 四分位数和 IQR
  36. 7. 盒图可视化
  37. 五、重点来了:describe() 到底看什么?
  38. 一个简单经验
  39. 1. 看中心
  40. 2. 看波动
  41. 3. 看分布
  42. 六、结合案例解释结果
  43. A 班
  44. B 班
  45. 七、异常值为什么重要?
  46. 八、学习这部分内容,最容易踩的坑
  47. 坑 1:只看均值,不看标准差
  48. 坑 2:看到中位数和均值差不多,就觉得数据没问题
  49. 坑 3:不会解读 mode()
  50. 坑 4:把方差和标准差混为一谈
  51. 九、这部分知识在数据分析里有什么用?
  52. 十、给初学者的一个记忆口诀
  53. 记忆版总结
  54. 十一、课后练习(适合课堂 / 自学)
  55. 练习 1:基础题
  56. 练习 2:提高题
  57. 练习 3:迁移题
  58. 十二、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Stable Diffusion 文生图基础详解
  • 低代码结合大模型:中小企业半天构建专属 SaaS 应用路径
  • WebSocket 与 MQTT 即时通讯协议对比与架构选型指南
  • Windows 系统 Git 安装与配置实战指南
  • Jupyter Notebook 安装与配置完整指南
  • 本地部署开源语言大模型 Llama3 及中文微调版教程
  • LoRA 训练入门:如何定制专属 AI 绘画模型
  • Python 装饰器核心原理解析
  • 漏洞扫描工具 AWVS 介绍及安装教程
  • Synfig Studio 入门指南:免费开源 2D 动画软件
  • 基于 LangChain 实现数据库问答机器人
  • OpenCode 开源 AI 编程助手使用教程
  • 6 款主流 AI 写作工具实测:网文创作效率对比
  • Finnhub Python API 客户端 5 个常见问题及解决方案
  • 2026 牛客寒假算法基础集训营 1 题解
  • Mac 使用 balenaEtcher 制作启动盘并重装系统
  • OpenClaw 开源智能 AI 助理云端部署方案
  • C++ 图论实战:三种经典最短路径算法解析
  • AI 内容安全审核:Qwen3Guard-Gen-WEB 部署与使用教程
  • Kiro AI 助手完整使用指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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