第一趴:大白话理解(保你听一遍就记住)

1. 均值(平均数)—— “大家长啥样”

  • 大白话:就是“全班平均分”。把所有人的数加起来,除以人数。
  • 作用:告诉你这群人大概在什么水平(比如平均身高170cm)。

2. 方差(Variance)—— “大家吵不吵架”

  • 大白话:看每个人跟平均分差距的平方,再平均一下。
  • 为啥要平方? 因为有人比平均分高(正数),有人比平均分低(负数),直接加会正负抵消(比如 +10 和 -10 加起来是0,好像大家都很乖,其实两极分化严重)。平方一下,全都变成正数,就暴露真实差距了!
  • 作用:数值越大,说明这群人脾气越暴躁,彼此差距越大。

3. 标准差(Standard Deviation)—— 把“平方”变回原样

  • 大白话:方差算出来是“平方厘米”、“平方块钱”,听着很别扭。给它开个平方根,单位就变回原来的(厘米、块钱)了。
  • 作用:告诉你平均每个人离平均值到底有多远。
    • 比如平均身高170cm,标准差是10cm,意思就是“大部分人集中在160~180cm之间”。

4. 协方差(Covariance)—— “两个人是不是一条心”

  • 大白话:看两个东西是不是同涨同跌。
    • 正数:比如身高和体重,身高涨了,体重大概率也涨(同进退)。
    • 负数:比如车速和到达时间,车速越快,时间越短(你涨我跌)。
    • 接近0:比如身高和数学成绩,没啥关系(各玩各的)。

5. 相关系数(Correlation Coefficient)—— 把“协方差”标准化

  • 大白话:协方差有个缺点,它受单位影响(比如厘米和米的协方差差100倍)。为了公平比较,把协方差缩放到 -1 到 1 之间。
    • 1:完全正相关(一个人涨,另一个跟着涨,铁哥们)。
    • -1:完全负相关(一个人涨,另一个必跌,死对头)。
    • 0:没关系(路人甲和路人乙)。

第二趴:具体数学定义 + 代码怎么算

1. 均值(Mean)

  • 公式:( \mu = \frac{x_1 + x_2 + … + x_n}{n} )
  • Python(NumPy):
    1
    2
    3
    import numpy as np
    data = [100, 200, 300, 400, 500]
    print(np.mean(data)) # 结果:300.0

2. 方差(Variance)

  • 重要区分(好多新手在这踩坑):
    • 总体方差(ddof=0,默认):除以 n(数据总数)。适用于你已经有全部数据。
    • 样本方差(ddof=1):除以 n-1。适用于你只抽样了一部分,想用样本推断总体。因为除以 n-1 会让结果稍微大一点,更保险(统计学上的无偏估计)。
  • 公式(总体方差):( \sigma^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i - \mu)^2 )
  • Python(NumPy / Pandas):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import numpy as np
    import pandas as pd

    data = [100, 200, 300, 400, 500]

    # 默认是总体方差(除以 n)
    print(np.var(data)) # 结果:20000.0
    print(pd.Series(data).var()) # 注意!Pandas默认是样本方差(除以 n-1),结果是 25000.0

    # 如果想在 NumPy 里算样本方差(除以 n-1),加 ddof=1
    print(np.var(data, ddof=1)) # 结果:25000.0

3. 标准差(Standard Deviation)

  • 大白话:就是把上面方差的平方根给开了。单位回到原始数据。
  • 公式:( \sigma = \sqrt{\text{方差}} )
  • Python(NumPy / Pandas):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import numpy as np
    data = [100, 200, 300, 400, 500]

    # NumPy 总体标准差(除以 n)
    print(np.std(data)) # 结果:141.42

    # Pandas 默认样本标准差(除以 n-1)
    print(pd.Series(data).std()) # 结果:158.11

    # NumPy 样本标准差(除以 n-1)
    print(np.std(data, ddof=1)) # 结果:158.11

    灵魂记忆点:标准差比方差好用多了!因为如果数据是“工资”,方差单位是“平方块钱”听不懂,标准差就是实实在在的“块钱”。


4. 协方差(Covariance)

  • 公式(样本协方差):( \text{Cov}(X,Y) = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y}) )
  • Python(NumPy):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import numpy as np
    height = [170, 180, 160, 175] # 身高
    weight = [65, 80, 55, 70] # 体重

    # 注意:np.cov 默认返回一个协方差矩阵(因为可以算多个变量)
    # 矩阵的 [0][1] 位置就是身高的协方差
    cov_matrix = np.cov(height, weight)
    print(cov_matrix)
    # 结果:
    # [[25.0, 37.5],
    # [37.5, 62.5]]
    # 这里的 37.5 就是身高和体重的协方差(正数,说明一起长)

5. 相关系数(Correlation Coefficient,也叫皮尔逊系数)

  • 公式:( r = \frac{\text{Cov}(X,Y)}{\sigma_X \cdot \sigma_Y} )(用两者的标准差把协方差归一化)
  • 范围:-1 到 1。
  • Python(NumPy):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import numpy as np
    height = [170, 180, 160, 175]
    weight = [65, 80, 55, 70]

    # np.corrcoef 返回相关系数矩阵
    corr_matrix = np.corrcoef(height, weight)
    print(corr_matrix)
    # 结果:
    # [[1. , 0.9486],
    # [0.9486, 1. ]]
    # 0.9486 非常接近 1,说明身高和体重强正相关(很铁的兄弟关系!)

第三趴:用“发工资”的例子把所有概念串一遍

假设你们公司 5 个人的工资是:[5000, 6000, 7000, 8000, 9000]

  1. 均值(平均数) = 7000 块。这就是公司的“平均水平”。
  2. 方差 = 算出来是 2,000,000(单位是“平方块”,很抽象,没人这么说话)。
  3. 标准差 = 开平方根 ≈ 1414 块。这把人们说清楚了:“咱们公司大部分人,工资都在 7000 ± 1414 块之间,也就是 5586 ~ 8414 块。”
  4. 现在再加一个数据:工龄 = [1, 2, 3, 4, 5] 年。
    • 协方差算出来是正数(比如 5000),说明“工龄越长,工资越高”,但 5000 这个数字受“块”这个单位影响。
    • 相关系数算出来可能是 0.99,说明工龄和工资几乎是一根绳上的蚂蚱,强相关!

最后给你一个生活化口诀(记在心里)

  • 均值:大家站的平均位置。
  • 方差:大家站得散不散(平方后的散度)。
  • 标准差:大家平均离均值到底多远(真实的距离)。
  • 协方差:两个人是不是一个涨另一个也涨。
  • 相关系数:两个人关系的铁不铁(-1到1打分)。

在 Pandas 里偷懒的大招:

  • df.describe() 直接给你看均值、标准差、四分位数。
  • df.cov() 直接出协方差矩阵。
  • df.corr() 直接出相关系数矩阵,一眼看出哪些列是“铁哥们”!