第3章、数据探索 之二
3.2 数据特征分析
3.2.1 分布分析
分布分析能解释数据的分布特征和分布类型。
定量数据,欲了解其分布形式是对称还是非对称的,发现某些特大或特小的可疑值,通过绘制频率分布表、绘制频率分布直方图、茎叶图进行直观分析;
定性数据,用饼图和条形直方图直观地显示分布情况。
3.2.2 对比分析
对比分析是把两个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小,水平的高低,速度的快慢,以及各种关系是否协调。
对比分析适用于指标间的横纵向比较、时间序列的比较分析。
对比分析的两种主要形式
1、绝对数比较
2、相对数比较
相对数可以分为:
(1)结构相对数:将同一总体内的部分数值与全部数值对比求得比重,用以说明事物的性质、结构或质量。
(2)比例相对数:将同一总体内不同部分的数值进行对比,表示总体内各部分的比例关系 。
(3)比较相对数:将同一时期两个性质相同的指标数值进行对比,说明同类现象在不同空间条件下的数量对比关系。
(4)强度相对数:将两个性质不同但有一定联系的总量指标进行对比,庸医说明现象的轻度、密度和普遍程度。
(5)计划完成程度相对数:是某一时期实际完成数与计划数的对比,用以说明计划完成程度。
(6)动态相对数:将同一现象在不同时期的指标数值进行对比,用以说明发展方向和变化的速度。
3.2.3 统计量分析
用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析。
平均水平的指标是对个体集中趋势的度量,使用最广泛的是均值和中位数,
反映变异程度的指标则是对个体离开平均水平的度量,使用较为广泛的是标准差(方差)、四分位距
1、集中趋势度量
(1)均值
(2)中位数
(3)众数
2、离散趋势度量
(1)极差
极差=最大值-最小值
(2)标准差
标准差度量数据偏离均值的程度
(3)变异系数
变异系数度量标准差相对于均值的离中趋势
变异系数CV=标准差/均值*100%
(4)四分位数间距
是上四分位数与下四分位数之差。
3.2.4 周期性分析
周期性分析是探索某个变量是否随着时间变化而呈现出某种周期变化趋势。
时间尺度较长的周期性趋势有年度周期性趋势、季节性周期趋势,相对较短的有阅读周期性趋势、周度周期性趋势,甚至更短的天、小时周期性趋势。
3.2.5 贡献度分析
贡献度分析又称帕累托分析,它的原理是帕累托法则,又称20/80定律。
对餐饮企业来讲,应用贡献度分析可以重点改善某菜系盈利最高的前80%的菜品,或者重点发展综合影响最高的80%的部门。
从图中可知,菜品A1~A7共7个菜品,占菜品种类数的70%,总盈利额占该月盈利额的85.0033%.根据帕累托法则,应该增加对菜品A1~A7的成本投入,减少对A8~A10的投入以获得更高的盈利额。
代码实现:
1 #将代码做了一些改动 2 import pandas as pd 3 4 data=pd.read_excel(r'C:\Users\Administrator\Desktop\chapter3\demo\data\catering_dish_profit.xls') 5 6 data1=data[u'盈利'].copy() 7 data1.sort_values(ascending=False) 8 Out[5]: 9 0 9173 10 1 5729 11 2 4811 12 3 3594 13 4 3195 14 5 3026 15 6 2378 16 7 1970 17 8 1877 18 9 1782 19 Name: 盈利, dtype: int64 20 21 import matplotlib.pyplot as plt 22 plt.rc('font', family='STXihei', size=10) 23 plt.figure() 24 data1.plot(kind='bar') 25 plt.ylabel(u'盈利') 26 plt.xticks([0,1,2,3,4,5,6,7,8,9],data[u'菜品名']) 27 p=1.0*data1.cumsum()/data1.sum() 28 p.plot(color='r',secondary_y=True,style='-o',linewidth=2) 29 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.")) 30 plt.ylabel(u'盈利(比例)') 31 plt.show()
3.2.6 相关性分析
分析连续变量之间线性关系程度的强弱,并用适当的统计指标表示出来的过程称为相关分析。
1、直接绘制散点图
2、绘制散点图矩阵
需要同时考察多个变量之间的相关关系。
3、相关系数
(1)Pearson相关系数
一般用于分析连续性变量之间的关系,其计算公式:
相关系数r的取值范围:-1≤ r ≤1
r>0为正相关,r<0为负相关
|r|=0表示不存在线性关系
|r|=1表示完全线性关系
0<|r|<1表示存在不同程度线性相关:
|r|≤0.3为不存在线性相关
0.3<|r|≤0.5为低度线性相关
0.5<|r|≤0.8为显著线性相关
|r|>0.8 为高度线性相关
(2)Spearman秩相关系数
(3)判定系数
1 import pandas as pd 2 data=pd.read_excel(r'C:\Users\Administrator\Desktop\chapter3\demo\data\catering_sale_all.xls') 3 4 #相关系数矩阵 5 data.corr() 6 7 #只显示“百合酱蒸凤爪”与其他菜式的相关系数 8 data.corr()[u'百合酱蒸凤爪'] 9 10 #计算'百合酱蒸凤爪'与'翡翠蒸香茜饺'的相关系数 11 data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺'])
3.3 Python主要数据探索函数
Python中用于数据探索的库主要是Pandas和Matplotlib。
3.3.1 基本统计特征函数
统计特征函数用于计算数据的均值、方差、标准差、分位数、相关系数和协方差。
Pandas主要统计特征函数:
方法名 | 函数功能 |
sum() | 计算数据样本的总和(按列计算) |
mean() | 计算数据样本的算术平均数 |
var() | 计算数据样本的方差 |
std() | 计算数据样本的标准差 |
corr() | 计算数据样本的Spearman(Pearman)相关系数矩阵 |
cov() | 计算数据样本的协方差矩阵 |
skew() | 样本值的偏度(三阶矩) |
kurt() | 样本值的峰度(四阶矩) |
describe() | 给出样本的基本描述(基本统计量如均值、标准差等) |
3.3.2 拓展统计特征函数
计算统计特征的函数,主要有累计计算(cum)和滚动计算(pd.rolling_)
cumsum() | 依次给出前1、2、... 、n个数的和 |
cumprod() | 依次给出前1、2、... 、n个数的积 |
cummax() | 依次给出前1、2、... 、n个数的最大值 |
cummin() | 依次给出前1、2、... 、n个数的最小值 |
rolling_sum() | 计算数据样本的总和(按列计算)??? |
rolling_mean() | 数据样本的算术平均数 |
rolling_var() | 计算数据样本的方差 |
rolling_std() | 计算数据样本的标准差 |
rolling_corr() | 计算数据样本的Spearman(Pearman)相关系数矩阵 |
rolling_cov() | 计算数据样本的协方差矩阵 |
rolling_skew() | 样本值的偏度(三阶矩) |
rolling_kurt() | 样本值的峰度(四阶矩) |
1 #cum 2 #cum系列函数是作为DataFrame或Series对象的方法出现的 3 D.cumsum() 4 5 #rolling_ 6 #rolling_系列是pandas的函数,不是DataFrame或Series对象的方法 7 pd.rolling_mean(D,k) #每k列计算一次平均值,滚动计算 8 9 10 #实例 11 D=pd.Series(range(0,20)) 12 13 D.cumsum() 14 Out[14]: 15 0 0 16 1 1 17 2 3 18 3 6 19 4 10 20 5 15 21 6 21 22 7 28 23 8 36 24 9 45 25 10 55 26 11 66 27 12 78 28 13 91 29 14 105 30 15 120 31 16 136 32 17 153 33 18 171 34 19 190 35 dtype: int64 36 37 #依次对相邻两项求和 38 pd.rolling_sum(D,2) 39 __main__:1: FutureWarning: pd.rolling_sum is deprecated for Series and will be removed in a future version, replace with 40 Series.rolling(window=2,center=False).sum() 41 Out[15]: 42 0 NaN 43 1 1.0 44 2 3.0 45 3 5.0 46 4 7.0 47 5 9.0 48 6 11.0 49 7 13.0 50 8 15.0 51 9 17.0 52 10 19.0 53 11 21.0 54 12 23.0 55 13 25.0 56 14 27.0 57 15 29.0 58 16 31.0 59 17 33.0 60 18 35.0 61 19 37.0 62 dtype: float64
3.3.3 统计作图函数
作图函数名 | 作图函数功能 | 所属工具箱 |
plot() | 绘制线性二维图、折线图 | Matplotlib/Pandas |
pie() | 绘制饼形图 | Matplotlib/Pandas |
hist() | 绘制二维条形直方图,可显示数据的分配情况 | Matplotlib/Pandas |
boxplot() | 绘制样本数据的箱形图 | Matplotlib/Pandas |
plot(logy=True) | 绘制y轴的对数图形 | Pandas |
plot(yerr=error) | 绘制误差条形图 | Pandas |
1 #plot 2 plt.plot(x,y,S) 3 #绘制y对于x(即以x为横轴的二维图形),字符串参量S指定绘制时图形的类型、样式和颜色 4 5 #使用DataFrame或Series对象内置的方法作图,默认以Index为横坐标,每列数据为纵坐标自动作图,通过kind参数指定作图类型,支持line、bar、barh、hist、box、kde、area、pie等,同时也能够接受plt.plot()中接受的参数。 6 D.plot(kind='box') 7 8 #pie 9 plt.pie(size) 10 #size是一个列表,记录各个扇形的比例 11 #hist 12 plt.hist(x,y) 13 14 #其中,x是待绘制直方图的一维数组,y可以是整数,表示均匀分为n组,也可以是列表,列表各个数字为分组的边界点。 15 16 #boxplot 17 D.boxplot()/D.plot(kind='box') 18 #有两种比较简单的方式绘制D的箱形图, 19 #其中一种是直接调用DataFrame的boxplot()方法 20 #另外一种是调用Series或DataFrame的plot()方法 21 22 #plot(logx=True)/plot(logy=True) 23 D.plot(logx=True)/D.plot(logy=True) 24 #对x轴(y轴)使用对数刻度(以10为底),y轴(x轴)使用线性刻度,进行plot函数绘图,D为Pandas的DataFrame或Series 25 26 #对x轴(y轴)使用对数刻度(以10为底),y轴(x轴)使用线性刻度,进行plot函数绘图,D为Pandas的DataFrame或Series