用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析。
平均水平的指标是对个体集中趋势的度量,使用最广泛的是均值和中位数;反映变异程度的指标则是对个体离开平均水平的度量,使用较广泛的是标准差(方差)、四分位间距。
1.集中趋势度量
(1)均值
均值是所有数据的平均值。
如果求n个原始观察数据的平均数,计算公式为:
有时,为了反映在均值中不同成分所占的不同重要程度,为数据集中的每一个xi赋予wi,这就得到了加权均值的计算公式:
类似地,频率分布表(见表3-4)的平均数可以使用下式计算:
式中,x1, x2, …, xk分别为k个组段的组中值;f1, f2,…, fk分别为k个组段的频率。这里的fi起了权重的作用。
作为一个统计量,均值的主要问题是对极端值很敏感。如果数据中存在极端值或者数据是偏态分布的,那么均值就不能很好地度量数据的集中趋势。为了消除少数极端值的影响,可以使用截断均值或者中位数来度量数据的集中趋势。截断均值是去掉高、低极端值之后的平均数。
(2)中位数
中位数是将一组观察值按从小到大的顺序排列,位于中间的那个数。即在全部数据中,小于和大于中位数的数据个数相等。
将某一数据集x:{x1, x2,…, xn}按从小到大排序:{x(1) , x(2) , …, x(n) }。
当n为奇数时
当n为偶数时
(3)众数
众数是指数据集中出现最频繁的值。众数并不经常用来度量定性变量的中心位置,更适用于定性变量。众数不具有唯一性。当然,众数一般用于离散型变量而非连续型变量。
2.离中趋势度量
(1)极差
极差=最大值-最小值
极差对数据集的极端值非常敏感,并且忽略了位于最大值与最小值之间的数据的分布情况。
(2)标准差
标准差度量数据偏离均值的程度,计算公式为:
(3)变异系数
变异系数度量标准差相对于均值的离中趋势,计算公式为:
变异系数主要用来比较两个或多个具有不同单位或不同波动幅度的数据集的离中趋势。
(4)四分位数间距
四分位数包括上四分位数和下四分位数。将所有数值由小到大排列并分成四等份,处于第一个分割点位置的数值是下四分位数,处于第二个分割点位置(中间位置)的数值是中位数,处于第三个分割点位置的数值是上四分位数。
四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。其值越大,说明数据的变异程度越大;反之,说明变异程度越小。
前面已经提过,DataFrame对象的describe()方法已经可以给出一些基本的统计量,根据给出的统计量,可以衍生出我们所需要的统计量。针对餐饮销量数据进行统计量分析,其Python代码如代码清单3-2所示。
代码清单3-2 餐饮销量数据统计量分析代码
#-*- coding: utf-8 -*- #餐饮销量数据统计量分析 from __future__ import print_function import pandas as pd catering_sale = '../data/catering_sale.xls' #餐饮数据 data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列 data = data[(data[u'销量'] > 400)&(data[u'销量'] < 5000)] #过滤异常数据 statistics = data.describe() #保存基本统计量 statistics.loc['range'] = statistics.loc['max']-statistics.loc['min'] #极差 statistics.loc['var'] = statistics.loc['std']/statistics.loc['mean'] #变异系数 statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距 print(statistics)
代码详见:demo/code/statistics_analyze.py
运行上面的程序,可以得到下面的结果,此结果为餐饮销量数的统计量情况。
销量
count 195.000000
mean 2744.595385
std 424.739407
min 865.000000
25% 2460.600000
50% 2655.900000
75% 3023.200000
max 4065.200000
range 3200.200000
var 0.154755
dis 562.600000