数据特征分析
对数据进行质量分析以后,接下来可以通过绘制图表、计算某些特征等手段进行数据的特征分析。
分布分析
分布分析能揭示数据的分布特征和分布类型。
- 对于定量数据:欲了解分布形式是对称的还是非对称,发现某些特大或特小的可疑值,可通过绘制频率分布表、绘制频率分布直方图、绘制茎叶图进行直观地分析;
- 对于定性分析数据,可以用饼状图直观地显示分布情况。
1.定量数据的分布分析
对于定量变量而言,选择“数组”和“数宽”是做频率分布分析时最主要的问题,一般按照以下步骤进行。
(1)求极差
(2)决定组距与组数
(3)决定分点
(4)列出频率分布表
(5)绘制频率分布直方图
遵循的主要原则如下:
(1)各组之间必须是相互排斥的
(2)各组必须将所有的数据包含在内
(3)各组的组宽最好相等
2.定性数据的分布分析
对于定性变量,常常根据变量的分类类型来分组,可以采用饼状图和条形图来描述定性变量的分布。
- 饼图的每一个扇形部分代表每一类型的百分比或频率,根据定性变量的类型数目将饼图分成几个部分,每一部分的大小与每一类型的频数成正比;
- 条形图的高度代表每一类型的百分比或频数,条形图的宽度没有意义。
对比分析
对比分析是指把两个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小,水平的高低,速度的快慢,以及各种关系是否协调。
特别适用于指标间的纵横向比较、时间序列的比较分析。
在对比分析中,选择合适的对比标准是十分关键的步骤,只有选择合适,才能做出客观的评价,选择不合适,评价可能得出错误评价。
(1)绝对数据比较
绝对数比较是利用绝对数进行对比,从而寻找差异的一种方法。
(2)相对数比较
相对数比较是有两个有联系的指标对比计算的,用以反映客观现象之间数量联系成都的综合指标,其数值表现为相对数。
1)结构相对数
将同一总体内的部分数值与全部数值对比求得比重,用以说明事物的性质、结构或质量。如居民食品支出额占消费支出总额比重、产品合格率等。
2)比例相对数
将同一总体内不同部分的数值进行对比,表明总体内各部分的比例关系。如人口性别比例、投资与消费比例等。
3)比较相对数
将同一时期两个性质相同的指标数值进行对比,说明同类现象在不同空间条件下的数量对比关系。如不同地区商品价格对比,不同行业、不同企业间某项指标对比等。
4)强度相对数
将两个性质不同但有一定联系的总量指标进行对比,用以说明现象的强度、密度和普遍程度。如人均国内生产总值用“元/人”表示,人口密度用“人平方公里”表示,也有用百分数或千分数表示的,如人口出生率用‰表示
5)计划完成程度相对数
是某时期实际完成数与计划数的对比,用以说明计划完成程度
6)动态相对数
将同一现象在不同时期的指标数值进行对比,用以说明发展方向和变化的速度。如发展速度、增长速度等。
统计量分析
用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析。
- 平均水平的指标是对个体集中趋势的度量,使用最广泛的是均值和中位数;
- 反映变异程度的指标则是对个体离开平均水平的度量,使用较广泛的是标准差(方差)、四分位间距。
1、集中趋势度量
(1)均值
均值是所有数据的平均值。
- 如果求n个原始观察数据的平均数,计算公式为:
- 为了反映在均值中不同成分所占的不同重要程度,为数据集中的每一个X,•赋予 叫,这就得到了加权均值的计算公式:
- 频率分布表(见表3-4)的平均数可以使用下式计算:
作为一个统计量,均值的主要问题是对极端值很敏感。如果数据中存在极端值或者数据是偏态分布的,那么均值就不能很好地度量数据的集中趋势。为了消除少数极端值的影响,可以使用截断均值或者中位数来度量数据的集中趋势。截断均值是去掉高、低极端值之后的平均数。
(2)中位数
中位数是将一组观察值按从小到大的顺序排列,位于中间的那个数。即在全部数据中,小于和大于中位数的数据个数相等。
将某一数集按从小到达排序
当n为奇数时:
当n为偶数时:
(3)众数
众数是指数据集中出现最频繁的值。
众数并不经常用来度量定性变量的中心位置,更适用于定性变量。
众数不具有唯一性。
当然,众数一般用于离散型变量而非连续型变量。
2、离中趋势度量
(1)极差
极差=最大值一最小值
(2)标准差
标准差度量数据偏离均值的程度,计算公式为:
(3)变异系数
变异系数度量标准差相对于均值的离中趋势,计算公式为:
(4)四分位数间距
四分位数包括上四分位数和下四分位数。将所有数值由小到大排列并分成四等份,处于第一个分割点位置的数值是下四分位数,处于第二个分割点位置(中间位置)的数值是中位数,处于第三个分割点位置的数值是上四分位数。
四分位数间距,是上四分位数0,与下四分位数QL之差,其间包含了全部观察值的一半。其值越大,说明数据的变异程度越大;反之,说明变异程度越小。
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)
餐饮销量数据统计量分析代码
周期性分析
周期性分析是探索某个变量是否随着时间变化而呈现出某种周期变化趋势。时间尺度相对较长的周期性趋势有年度周期性趋势、季节性周期趋势,相对较短的有月度周期性趋势、周度周期性趋势,甚至更短的天、小时周期性趋势。
贡献度分析
贡献度分析又称帕累托分析,它的原理是帕累托法则,又称20/80定律。同样的投入放在不同的地方会产生不同的效益。
import pandas as pd
#初始化参数
dish_profit = '../data/catering_dish_profit.xls' #餐饮菜品盈利数据
data = pd.read_excel(dish_profit, index_col = u'菜品名')
data = data[u'盈利'].copy()
data.sort_values(ascending = False)
import matplotlib.pyplot as plt #导入图像库
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.figure()
data.plot(kind='bar')
plt.ylabel(u'盈利(元)')
p = 1.0*data.cumsum()/data.sum()
p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2)
plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加注释,即85%处的标记。这里包括了指定箭头样式。
plt.ylabel(u'盈利(比例)')
plt.show()
菜品盈利帕累托图代码
由上图可知,菜品A1-A7共7个菜品,占菜品中类的70%,总盈利额占该月盈利额的85.003%。根据帕累托法则,应该增加对菜品A1-A7的成本投入,减少A8-A10的投入以获得更高的盈利额。
相关性分析
分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来的过程称为相关分析。
1、直接绘制散点图
判断两个变量是否具有线性相关关系的最直观的方法是直接绘制散点图。
2、绘制散点图矩阵
需要同时考察多个变量间的相关关系时,一一绘制它们间的简单散点图是十分麻烦的。此时可利用散点图矩阵同时绘制各变量间的散点图,从而快速发现多个变量间的主要相关性,这在进行多元线性回归时显得尤为重要。
3、计算相关系数
为了更加准确地描述变量之间的线性相关程度,可以通过计算相关系数来进行相关分析。在二元变量的相关分析过程中比较常用的有Pearson相关系数、Spearman秩相关系数和判定系数。
(1)Pearson相关系数
一般用于分析两个连续性变量之间的关系,其计算公式如下:
相关系数r的取值范围:-1<=r<=1
0<|r|<1表示存在不同程度线性相关:
(2)Spearman秩相关系数
Pearson线性相关系数要求连续变量的取值服从正态分布。不服从正态分布的变量、分类或等级变量之间的关联性可采用Spearman秩相关系数,也称等级相关系数来描述。
其计算公式如下:
对两个变量成对的取值分别按照从小到大(或者从大到大小)顺序编秩,代表的秩次,代表的秩次,为的秩次之差。
(3)判定系数
判定系数是相关系数的平方,用表示;用来衡量回归方程对y的解释程度。判定系数取值范围:。越接近于1,表明x与y之间的相关性越强;越接近于0,表明两个变量之间几乎没有直线相关关系。
import pandas as pd
catering_sale = '../data/catering_sale_all.xls' #餐饮数据,含有其他属性
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
data.corr()[u'百合酱蒸凤爪'] #只显示“百合酱蒸凤爪”与其他菜式的相关系数
餐饮销量数据相关性分析
从上面的结果可以看到,如果顾客点了“百合酱蒸凤爪”,则和点“翡翠蒸香茜饺”“金银蒜汁蒸排骨”“香煎萝卜糕”“铁板酸菜豆腐”“香煎韭菜饺”等主食类的相关性比较低,反而点“乐膳真味鸡”“生炒菜心”“原汁原味菜心”的相关性比较高。