数据分布特征的统计描述

  |  

摘要: 数据分布特征的统计描述

【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:算法题刷刷
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


本文简要梳理一下数据分布特征的统计描述,以及相应的 Python 代码。

主要涉及以下内容

  • 集中趋势
    • 众数
    • 中位数
    • 四分位数
    • 算术平均数
    • 调和平均数
    • 几何平均数
  • 离中趋势
    • 极差
    • 四分位数间距
    • 方差
      • 总体方差
      • 样本方差
    • 标准差
      • 总体标准差
      • 样本标准差
    • 变异系数
  • 分布的形状
    • 偏度
    • 峰度

1.1 集中趋势

众数

不受数据极端值的影响,可能不存在也可能存在多个。一般只有数据量较大时才有意义。

虽然不受极端值影响,但不稳定,受分组和样本变动的影响较大,反应也不够灵敏,不能做进一步代数运算。

Python代码: scipy.stats.mode

1
scipy.stats.mode(a, axis=0, nan_policy="propagate")

中位数

中位数计算简单,不受极端值影响。由于中位数受制于全体数据,反应不够灵敏,且不能做进一步的代数运算。中位数不能用于分类数据。

Python代码: np.median

1
np.median(a, axis=None, out=None, overwrite_input=False, keepdims=False)

四分位数

位于 25% 位置的数据为下四分位数;位于 75% 位置的数据为上四分位数。

Python代码:

  • 求分位数对应的元素: scipy.stats.scoreatpercentile(a, per, interpolation_method)
  • 求元素所处的分位数: scipy.stats.percentileofscore(a, score, kind)
1
2
scipy.stats.scoreatpercentile(a, 25, interpolation_method="fraction")
scipy.stats.percentileofscore(a, 83.25, kind="rank")

算术平均数

算术平均数的计算方式如下

对于加权数据计算的算术平均数称为加权算术平均数。各个数据的权重为 f1, f2, …, fn,加权算术平均数的公式如下

算术平均数反应灵敏,可以进行代数运算。

但是对于极端值很敏感,如果数据中存在极端值,或者数据是偏度分布的,那么均值不能很好地度量数据的集中趋势

Python代码:

  • scipy.stats.tmean(a, limits, axis)
  • np.mean(a, axis)
1
2
scipy.stats.tmean(a, limits=None, inclusive=(True, True), axis=None)
np.mean(a, axis=0)

调和平均数

调和平均数的计算方式如下

对于加权数据计算的调和平均数称为加权调和平均数,各个数据的权重为 f1, f2, …, fn

Python代码: scipy.stats.hmean(a, axis)

1
scipy.stats.hmean(a, axis=0, dtype=None)

几何平均数

几何平均数的计算方式如下

几何平均数主要用于计算平均比率,当变量本身是比率的形式时,用几何平均值计算平均比率更合理。例如计算平均增长率。

Python代码: scipy.stats.gmean

1
scipy.stats.gmean(a, axis=0)

1.2 离中趋势

离中趋势是指一组数据中各数据值以不同程度的距离偏离数据中心(平均值)的趋势。

离散程度越大,集中趋势的值对该组数据的代表性越差。

极差

易受极端值影响,且不能反映数据的中间分布情况。

Python代码: np.ptp

1
np.ptp(a)

四分位数间距

反应一组数据中间 50% 数据的离散程度。也在一定程度上反映了中位数对一组数据的代表程度。不受极端值的影响。

Python代码:

1
scipy.stats.scoreatpercentile(a, 75) - scipy.stats.scoreatpercentile(a, 25)

方差

(1) 总体方差

总体方差的计算方式如下

对于加权数据计算的方差称为加权方差,各个数据的权重为 f1, f2, …, fn

Python代码: np.var

1
np.var(a, axis=None, ddof=0)

(2) 样本方差

样本方差的计算方式如下

对于加权数据计算的方差称为加权方差,各个数据的权重为 f1, f2, …, fn

Python代码: scipy.stats.tvar

1
scipy.stats.tvar(a, limits=None, inclusive(True, True), axis=0, ddof=1)

标准差

(1) 总体标准差

Python代码: np.std

1
np.std(a, axis=None, out=None, ddof=0)

(2) 样本标准差

Python代码: scipy.stats.tstd

1
scipy.stats.tstd(a, limits=None, inclusive=(True, True), axis=0, ddof=1)

变异系数

极差,方差,标准差都是有计量单位的。

如果要比较不同数据的离散程度,需要用变异系数。

变异系数是一组数据中的极差、四分位差或标准差等离散指标与算术平均数的比率。

例如样本标准差变异系数

Python代码

1
scipy.stats.tstd(a) / scipy.stats.tmean(a)

1.3 偏度与峰度

了解集中趋势和离散趋势后,还需要了解数据分布的形状是否对称、倾斜,扁平程度。

偏度

偏度是对分布倾斜方向及程度的测度。

偏度的方向相对简单,可以利用众数、中位数、均值之间的关系判断是左偏还是右偏。但是大小还是要借助偏度系数。

偏度系数有很多计算方法,下面是比较常用的一种

偏度系数为正则是右偏,为负则是左偏。

Python代码: scipy.stats.skew

1
scipy.stats.skew(a, axis=0, bias=True, nan_policy="propagate")

偏度的示意图

峰度

峰度描述的是分布集中趋势高峰的形态,通常与标准正态分布相比较。

在归一化到同一方差时,若分布的形状比标准正态分布更瘦高,则称为尖峰分布,若分布的形状比标准正态分布更矮胖,则称为平峰分布。

峰度系数的计算公式如下

当峰度系数为 0 则为标准正态分布,大于 0 为尖峰分布,小于 0 为平峰分布。

Python代码: scipy.stats.kurtosis

1
scipy.stats.kurtosis(a, axis=0, fisher=True, bias=True, nan_policy="propagate")

Share