查看全课大纲(第 51 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

常用统计方法(4) -- mad var std cumsum

约 7 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

常用统计方法:MAD、方差、标准差与累加

小象实战讲义 · Python数据分析实战

在数据分析中,我们不仅关心数据的中心位置(如均值、中位数),更关心数据的“离散程度”或“波动性”。本节将介绍四个关键的统计量:平均绝对误差(MAD)、方差、标准差和累加(cumsum)。它们从不同角度量化了数据的离散程度和累积趋势,是描述性统计分析的核心工具。

💡 核心导读

  • 平均绝对误差 (MAD):衡量每个数据点与均值绝对差异的平均值,对异常值不敏感。
  • 方差与标准差:衡量数据点与均值差异的平方的平均值(方差),其平方根即为标准差,是衡量离散程度最常用的指标。
  • 累加 (cumsum):计算序列的累积和,常用于分析时间序列数据的增长趋势。
  • Pandas 便捷计算:掌握如何使用 Pandas 的 .var()、.std() 和 .cumsum() 方法快速计算统计量,并用等价表达式计算 MAD(原课演示的 .mad() 方法已在 pandas 2.0 中移除)。

描述数据离散程度的统计量

前三个统计量——平均绝对误差(MAD)、方差(variance)和标准差(standard deviation)——主要用于描述数据的离散程度和分布差异。

平均绝对误差 (MAD)

MAD 的全称是 Mean Absolute Deviation(平均绝对误差)。它表示各个数据值之间差异程度的一种数值。其计算公式为:

MAD=1n∑i=1n∣xi−xˉ∣\text{MAD} = \frac{1}{n} \sum_{i=1}^{n} |x_i - \bar{x}|

其中,xix_i 是每一个数据点,xˉ\bar{x} 是这组数据的均值,nn 是数据点的个数。计算步骤是:先求每个数据与均值的差,取绝对值,然后将所有绝对值相加,最后除以数据个数。

举例:假设有一组数据 [2, 2, 3, 4, 14]。

  1. 计算均值:(2+2+3+4+14)/5=5(2+2+3+4+14)/5 = 5。
  2. 计算每个数据与均值的绝对差:∣2−5∣=3|2-5|=3, ∣2−5∣=3|2-5|=3, ∣3−5∣=2|3-5|=2, ∣4−5∣=1|4-5|=1, ∣14−5∣=9|14-5|=9。
  3. 求和并求平均:(3+3+2+1+9)/5=18/5=3.6(3+3+2+1+9)/5 = 18/5 = 3.6。

因此,这组数据的 MAD 为 3.6。MAD 值越大,表明数据分布越分散;值越小,则分布越集中。

方差与标准差

方差(Variance)是另一个衡量离散程度的核心指标。其计算公式为:

Variance=1n∑i=1n(xi−xˉ)2\text{Variance} = \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2

与 MAD 不同的是,方差计算的是差值(xi−xˉx_i - \bar{x})的平方,而不是绝对值。这会使方差对较大的偏差(异常值)给予更高的权重。

沿用上面的例子 [2, 2, 3, 4, 14],均值仍为5。

  1. 计算每个数据与均值差的平方:(2−5)2=9(2-5)^2=9, (2−5)2=9(2-5)^2=9, (3−5)2=4(3-5)^2=4, (4−5)2=1(4-5)^2=1, (14−5)2=81(14-5)^2=81。
  2. 求和并求平均:(9+9+4+1+81)/5=104/5=20.8(9+9+4+1+81)/5 = 104/5 = 20.8。

所以,这组数据的方差为 20.8。

标准差(Standard Deviation) 就是方差的平方根:

Standard Deviation=Variance\text{Standard Deviation} = \sqrt{\text{Variance}}

计算上例的标准差:20.8≈4.56\sqrt{20.8} \approx 4.56。标准差与原始数据具有相同的量纲,因此在实际解释中比方差更直观。

在 Pandas 中计算离散统计量

Pandas 为 Series 和 DataFrame 提供了直接计算这些统计量的方法。让我们通过一个构造的示例数据集来演示。

import pandas as pd

# 构造一个简单的示例DataFrame
data = {
    '产品': ['A', 'B', 'C', 'D', 'E'],
    '评分': [7.2, 8.5, 6.8, 9.1, 5.5],
    '成本': [120, 150, 90, 200, 80]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
print()
原始数据:
  产品   评分   成本
0  A  7.2  120
1  B  8.5  150
2  C  6.8   90
3  D  9.1  200
4  E  5.5   80

现在,我们计算数值列的这些离散统计量。时效说明:原课演示的 .mad() 方法(以及 DataFrame.mad()/Series.mad())已在 pandas 2.0 中移除,这里用等价表达式 (x - x.mean()).abs().mean() 实现;.var() 与 .std() 仍可直接使用。

口径提示:.var() / .std() 默认按样本口径计算(分母为 n−1);而本节前文手算方差公式用的是总体口径(分母为 n)。两者相差一个自由度——把代码输出与前文公式做数值核对时,需用 .var(ddof=0) 切换到总体口径(本节练习答案中有对照演示)。

# 每个代码块自包含:重新构造数据;MAD 用等价表达式计算(.mad() 已在 pandas 2.0 移除)
import pandas as pd

data = {
    '产品': ['A', 'B', 'C', 'D', 'E'],
    '评分': [7.2, 8.5, 6.8, 9.1, 5.5],
    '成本': [120, 150, 90, 200, 80]
}
df = pd.DataFrame(data)
num_df = df[['评分', '成本']]

# 计算平均绝对误差 (MAD):每个值与均值之差的绝对值的平均
print("各数值列的平均绝对误差 (MAD):")
print((num_df - num_df.mean()).abs().mean())
print()

# 计算方差
print("各数值列的方差:")
print(num_df.var())
print()

# 计算标准差
print("各数值列的标准差:")
print(num_df.std())
各数值列的平均绝对误差 (MAD):
评分     1.104
成本    37.600
dtype: float64

各数值列的方差:
评分       2.027
成本    2370.000
dtype: float64

各数值列的标准差:
评分     1.423728
成本    48.682646
dtype: float64

从结果可以看出:

  • “评分”的 MAD、方差、标准差都较小,说明用户的评分相对集中,波动不大。
  • “成本”的各项离散指标都远大于“评分”,说明不同产品的成本差异很大,分布更分散。

累加操作 cumsum

累加(Cumulative Sum, cumsum)严格来说不是一个“统计量”,但在数据分析中极为常用。它计算序列中元素的累积和,即第一个元素,第一个加第二个,第一个加第二个加第三个,依此类推。

cumsum 特别适用于时间序列数据,用于观察累积效应或增长趋势。例如,分析每月销售额的累积和,可以直观看到全年销售目标的完成进度。斜率陡峭的部分代表增长迅速,平缓部分代表增长缓慢甚至下降(当新增值为负时)。

在 Pandas 中,.cumsum() 方法会对 DataFrame 或 Series 进行逐元素的累加。对于数值列,就是数学累加;对于字符串列,则是字符串的拼接。

# 演示cumsum:构造一个简单的月度销售数据(每个代码块自包含)
import pandas as pd

sales_data = {
    '月份': ['1月', '2月', '3月', '4月', '5月'],
    '销售额': [100, 150, 80, 200, 120]
}
sales_df = pd.DataFrame(sales_data).set_index('月份')
print("月度销售额:")
print(sales_df)
print("\n销售额的累积和 (cumsum):")
print(sales_df.cumsum())
月度销售额:
    销售额
月份
1月  100
2月  150
3月   80
4月  200
5月  120

销售额的累积和 (cumsum):
    销售额
月份
1月  100
2月  250
3月  330
4月  530
5月  650

解读:到3月底,累计销售额为330;到5月底,累计销售额达到650。从2月到3月,累计值增长放缓(因为3月销售额80低于2月的150),反映了该月销售表现不佳。

📝 动手练一练

  1. 概念辨析:方差和平均绝对误差(MAD)在衡量数据离散程度时,最主要的计算区别是什么?这种区别使得哪个指标对数据中的异常值(极大或极小的值)更敏感?
  2. 动手计算:给定一个简单的 Series:s = pd.Series([10, 20, 30, 40, 50]),请在不直接调用 .var() 方法的情况下,通过计算其均值和利用方差公式,手动验证其方差结果是否与 s.var() 的输出一致。
👉 点击查看参考答案
  1. 主要区别:方差计算的是数据与均值差值的平方的平均值,而 MAD 计算的是差值的绝对值的平均值。平方操作使得方差对异常值更为敏感,因为大的偏差会被平方放大,从而在最终结果中占据更大权重。
  2. 手动验证:
    import pandas as pd
    s = pd.Series([10, 20, 30, 40, 50])
    mean_val = s.mean() # 均值为 30
    # 根据方差公式计算
    variance_manual = ((s - mean_val)**2).sum() / len(s)
    print(f"手动计算方差: {variance_manual}")
    print(f"Pandas .var() 结果: {s.var()}")
    # 注意:Pandas 默认的 .var() 计算的是样本方差(分母为 n-1),而我们的手动计算是总体方差(分母为 n)。
    # 因此,s.var(ddof=0) 才会与手动结果一致。
    print(f"Pandas .var(ddof=0) 结果: {s.var(ddof=0)}")
手动计算方差: 200.0
Pandas .var() 结果: 250.0
Pandas .var(ddof=0) 结果: 200.0
输出将显示,手动计算结果与 `s.var(ddof=0)` 的结果一致(均为 200.0)。

本章小结

本节我们深入学习了四个用于描述数据分布和趋势的关键操作:

  1. MAD:通过绝对差值衡量离散度,稳健不易受极端值影响。
  2. 方差与标准差:通过平方差值衡量离散度,是应用最广泛的指标,标准差提供了与数据同量纲的离散度度量。
  3. 累加 (cumsum):计算序列的累积和,是分析时间序列累积效应与增长趋势的利器。

Pandas 提供的 .var()、.std() 和 .cumsum() 方法(MAD 则用等价表达式 (x - x.mean()).abs().mean() 计算,原 .mad() 方法已在 pandas 2.0 移除)让我们能够高效地对整个数据集进行这些计算。

📋 行动清单

  • 为你手头的一个数值型数据集,分别计算其 MAD、方差和标准差,并解释这些数值反映了数据怎样的分布特性。
  • 尝试对一个表示月度数据(如收入、用户数)的 Series 使用 .cumsum(),并观察其累积变化曲线,思考哪些时间点增长发生了显著变化。
  • 比较同一组数据方差与 MAD 的大小关系,理解平方惩罚与绝对惩罚带来的不同敏感性。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:常用统计方法(4) -- mad var std cumsum
    PDF · 201KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载