描述统计量通常包括三大类:
- 描述数据水平的统计量
如样本平均数、样本中位数等,用于反映全部数据的数值大小。 - 描述数据差异的统计量
如样本方差等,用于反映各数据间的离散程度。 - 描述数据分布形状的统计量
如偏度系数和峰度系数等,用于反映数据分布的偏度和峰度。
描述水平的统计量
数据的水平是指其数值的大小,描述数据水平的统计量有平均数、分位数和众数等。
平均数
什么是平均数
平均数,也称均值(mean),是一组数据相加后除以数据个数得到的结果。
假设存在一组样本效据为,,,,样本量(样本数据的个数)为,样本平均效用表示,计算公式为如下。也被称为算术(普通)平均数(simple mean)。
如果样本数据被分成组,各组的平均数分别用,,,表示,各组的频数分别用,,,表示,则样本平均数的计算公式如下。也被称为加权平均数(weighted mean)。
基于Python求解
求算术平均数的方法有:
df[【列名】].mean()
np.mean(【数据】)
np.average(【数据】)
求加权平均数的方法有:
np.average(a=【数据】, weights=【权重】)
示例代码:
1 | import pandas as pd |
运行结果:
1 | 5.0 |
分位数
一组数据按从小到大的顺序排序后,可以找出排在某个位置上的数值,该数值可以代表数据水平的高低。这些位置上的数值就是相应的分位数(quantie)。常用的分位数有中位数、四分位数、百分位数等。
中位数
什么是中位数
中位数(median),一组数据排序后处于中间位置上的数值。一般用,或者表示。
中位数用一个点将全部数据等分成两部分,每部分包含的数据,其中一部分数据比中位数大,另一部分比中位数小。中位数用中间位置上的值代表数据的水平,其特点是不受极端值的影响,具有统计上的稳健性(robustess)。
计算中位数时,要先对n个数据从小到大排序,然后确定中位数的位置,最后计算中位数的具体数值。
基于Python求解
求中位数的方法有:
df[【列名】].median()
np.median(【数据】)
示例代码:
1 | import pandas as pd |
运行结果:
1 | 5.0 |
四分位数
什么是四分位数
四分位数(quartile),一组数据排序后处在和位置上的数值。例如,我们用表示处于位置的数,用表示处于位置的数,则有一半的数会处于和之间。
与中位数的计算方法类似,计算四分位数时,首先对数据从小到大排序,然后确定四分位数所在的位置,该位置上的数值就是四分位数。
基于Python求解
求解四分位数的方法有:
df[【列名】].quantile(q=【四分位数选项】)
np.quantile(a=【数据】, q=【四分位数选项】)
示例代码:
1 | import pandas as pd |
运行结果:
1 | 0.25 3.0 |
解释说明:Pandas和Numpy的quantile
都有一个参数interpolation
,表示确定四分位方法,默认的都是linear
,插值法。
百分位数
上文的四分位数特指和这几个位置的数,百分位数(percentile),包含之间的所有数字。
基于Python求解的方法,也没有区别。
不赘述。
众数
什么是众数
众数(mode),一组数据中频数最多的数值。一般用或者表示。
在《机器学习实战方法(Python):特征工程-2.特征衍生 [1/2]》,我们提到过,一般不把众数作为一种特征衍生的方法,并且解释了原因,这里再补充关于众数的两个特点
- 只有在数据量较大时众数才有意义。
- 从数值数据分布的角度看,众数是一组数据分布的峰值点对应的数值。如果数据的分布没有明显的峰值,众数可能不存在,或者没有意义。如果有两个或多个峰值,众数可以有两个或多个。
基于Python求解
求解众数的方法有:
stats.mode(【数据】)
df[【列名】].mode()
示例代码:
1 | import pandas as pd |
运行结果:
1 | stats.mode(l) |
比较
实际应用中,应该用哪个统计量来代表一组数据的水平取决于数据的分布特征。平均数易被多数人理解和接受,实际中使用得也较多,但其缺点是易受极端值的影响。当数据的分布对称或偏斜程度不大时,可选择使用平均数。而对于严重偏斜分布的数据,平均数的代表性则较差。由于中位数不受极端值的影响,因此,当数据分布的偏斜程度较大时,可以选择使用中位数,其代表性要优于平均数。
描述差异的统计量
数据之间的差异反映了数据的离散程度。
各水平统计量对该组数据的代表程度取决于数据的离散程度,离散程度越大,其代表性越差;离散程度越小,其代表性越好。
描述样本数据离散程度的统计量主要有极差、四分位差、方差和标准差以及度量相对离散程度的变异系数等。
极差
极差(range)是一组数据的最大值与最小值之差,也称全距,一般用表示,计算公式为:
由于极差只利用了一组数据两端的信息,因此容易受到极端值的影响,不能全面反映数据的差异状况。
虽然极差可以作为分析数据离散程度的一个参考值,但在实际中很少单独使用。
关于基于Python的求解方法,略,用最大值减去最小值即可。
四分位差
四分位差,也称四分位距(interquarile range),是一组数据位置上的四分位数与位置上的四分位数之差。
四分拉差反映了中间数据的离散程度,其数值越小,说明中间的数据越集中;数值越大,说明中间的数据越分散。
四分位差不受极值的影响。
由于中位数处于数据的中间位置,因此,四分位差的大小在一定程度上反映了中位数对一组数据的代表程度。
关于基于Python的求解方法,略,用数减去数即可。
方差和标准差
什么是方差和标准差
如果我们考虑每个数据,与其平均数之间的差异,并以此作为一组数据离散程度的度量,那么结果要比极差和四分位差更为全面和准确。
此时就需要计算每个数据,与其平均数离差的平均数,有两种方法:
- 将离差取绝对值,求和后再平均,这一结果称为平均离差(mean deviation)或平均绝对离差(mean absolute deviation)
- 将离差平方后再求平均数,这一结果称为方差(variance)。
方差开平方后的结果称为标准差(standard deviation),它是一组数据与其平均数相比平均相差的数值。
方差(或标准差)是实际中应用最广泛的度量数据离散程度的统计量。
设样本方差次,计算公式为:
样本标准差的计算公式为:
如果原始数据被分成组,各组的组中值分别为,,,,各组的频数分别为,,,,则加权样本方差的计算公式为:
加权样本标准差的计算公式为:
与方差不同的是,标准差与原始数据的计量单位相同,其实际意义比方差更清楚。因此,在分析实际问题时通常使用标准差。
基于Python求解
求解方差的方法有:
df[【列名】].var()
np.var(【数据】)
求解标准差的方法有:
df[【列名】].std()
np.std(【数据】)
需要注意的是,方差和标准差的自由度由函数的参数ddof
(自由度)设置,不同Python包函数的默认设置不同。
- Numpy中的函数默认
ddof=0
,即分母是而非, - Pandas中的函数默认
ddof=1
,即自由度为,分母是。
示例代码:
1 | import pandas as pd |
运行结果:
1 | np.var(l) |
变异系数
标准差是反映数据离散程度的绝对值,其数值的大小受原始数据大小的影响,原始数据的观测值越大,标准差的值通常也就越大。此外,标准差与原始数据的计量单位相同, 采用不同计量单位计量的数据,其标准差的值也就不同。因此,对于不同样本的数据,如果原始数据的观测值相差较大或计量单位不同,就不能直接用标准差比较其离散程度,这时就需要计算变异系数。
变异系数(coeficient of variation,CV),也被称为离散系数,是一组数据的标准差与其相应的平均数之比。由于变异系数消除了数值大小和计量单位对标准差的影响,因而可以反映一组数据的相对离散程度。其计算公式为:
变异系数主要用于比较不同样本或不同变量的数据的离散程度。其数值越大,说明数据的相对离散程度越大;数值越小,说明数据的相对离散程度越小。对于只有一个样本或变量的数据集,计算变异系数的意义不大。
关于基于Python的求解方法,略,用标准差除以均值即可。
描述分布形状的统计量
我们利用直方图或核密度图可以大致看出数据的分布是否对称。但是如果要想知道不对称程度,则需要计算相应的描述统计量。偏度系数和峰度系数就是对分布的不对称程度和峰值高低的一种度量。
偏度系数
什么是偏度系数
偏度(skewness),指数据分布的不对称性。描述数据分布不对称性的统计量称为偏度系数(cocfficient of skewness),一般表示。
三种计算方法
设为样本的阶中心矩,偏度系数的计算方法有以下三种:
Scipy中stats.skew
函数采用的是这个。
Pandas中DataFrame.skew
函数的采用的是这个,也是SPSS、SAS、Excel软件中的默认算法。
含义
- 当数据对称分布时,偏度系数等于0。
偏度系数越接近于0,偏斜程度越小,数据也就越接近于对称分布。
如果偏度系数明显不等于0,则表示分布是不对称的。 - 若偏度系数大于或小于,则视为严重偏斜分布。
若偏度系数在$[0.5,1]或[-1,-0.5]之间,则视为中等偏斜分布。
若偏度系数小于或大于,则视为轻微偏斜。 - 其中负值表示左偏分布(在分布的左侧有长尾)。
正值则表示右偏分布(在分布的右侧有长尾)。
基于Python求解
求解偏度的方法有:
stats.skew(【数据】)
df[【列名】].skew()
示例代码:
1 | import pandas as pd |
运行结果:
1 | stats.skew(l) |
峰度系数
什么是峰度系数
峰度(kurtosis),数据分布峰值的高低。描述数据分布峰值高低的统计量称为峰度系数(coefficient of kurtosis),一般用表示。
三种计算方法
设为样本的阶中心矩,峰度系数的计算方法有以下三种:
- - 3
Scipy中stats.kurtosis
函数采用的是这个。 - 将第一种方法的""记作,则方法二的计算公式为
Pandas模块中DataFrame.kurt
函数采用的是这个,也是SPSS、SAS、Excel软件中的默认方法。
是标准差
含义
- 峰度通常是与标准正态分布相比较而言的。
- 标准正态分布的峰度系数为0,当时,称为尖峰分布,数据分布的峰值比标准正态分布高,数据相对集中。
- 当时,为扁平分布,数据分布的峰值比标准正态分布低,数据相对分散。
基于Python求解
求解峰度的方法有:
stats.kurtosis(【数据】)
df[【列名】].kurt()
df[【列名】].kurtosis()
其中df[【列名】].kurt()
和df[【列名】].kurtosis()
是等价的,我们点进源代码,会发现这个
1 | kurtosis = kurt |
示例代码:
1 | import pandas as pd |
运行结果:
1 | stats.kurtosis(l) |