最全!!数据挖掘准备工作1——数据探索

数据探索

​ 通过检验数据集的数据质量、绘制图表、计算某些特征量等手段,对样本数据集的结构和规律进行分析的过程就是数据探索。数据探索有助于选择合适的数据预处理和建模方法。

1.1数据质量分析

​ 数据质量分析的主要任务是检查原视数据中是否存在缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、$、*)的数据

1.1.1缺失值分析

​ 数据的确实主要包括记录的确实和记录中某个字段信息的缺失。

​ 使用简单的统计分析,可以得到含有缺失值的属性的个数,以及每个属性的未缺失数、缺失数与确实率等。对缺失值的处理,从总体上来说分为删除存在缺失值的记录、对可能值进行插补和不处理三种情况,后续会介绍。

1.1.2异常值分析

​ 异常值分析是检验数据是否有录入错误以及含有不合常理的数据。异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称为离群点,异常值分析也称为离群点分析。

1.简单统计量分析

​ 对变量进行一个描述性统计,查看哪些数据是不合理的,。最常用的统计量是最大值、最小值,用来判断这个变量的取值是否超出了合理的范围,比如:一个人的年龄的最大值是208岁或者一个成年人的重量的最小值是3斤,则该变量的取值就是存在异常。

2. 3σ原则(栓Q原则哈哈哈哈)

​ 如果数据服从正态分布,在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。

3.箱型图分析

​ 箱型图提供了识别异常值的一个标准:异常值通常被定义为小于 Q L − 1.5 I Q R Q_L-1.5IQR QL1.5IQR或大于 Q U + 1.5 I Q R Q_U+1.5IQR QU+1.5IQR的值。 Q L Q_L QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小; Q U Q_U QU称为上四分位数。IQR称为四分位数间距,是上四分位数与下四分位数之差,其间包含了全部观察值的一半。

​ 箱型图依据实际数据绘制,不对数据做任何要求。多大25%的数据可以变得任意远而不会很大地扰动四分位数,因此箱型图识别异常值的结果比较客观。

在这里插入图片描述

例子:餐饮日销(完整数据可私聊找我要)

在这里插入图片描述

​ 分析数据可发现,数据有缺失,则需要检测出含有缺失值的记录和属性以及确实率个数和确实率等。在pandas中可以使用describe()函数查看数据的基本情况。

其中:count(非空值数),mean(平均值),std(标准差),min(最小值),max(最大值),以及(1/4,1/2,3/4)分位数。

import pandas as pd
data=pd.read_excel("catering_sale.xls",index_col=u'日期')
data.describe()
'''
销量
count	200.000000
mean	2755.214700
std	751.029772
min	22.000000
25%	2451.975000
50%	2655.850000
75%	3026.125000
max	9106.4400
'''

​ 检测异常值的方法是用箱线图,给个demo

import pandas as pd

#导入数据
data=pd.read_excel("catering_sale.xls",index_col=u'日期')

import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

plt.figure() #建立图像
p=data.boxplot(return_type='dict') #画箱线图
x=p['fliers'][0].get_xdata() #'flies'即位异常值的标签
y=p['fliers'][0].get_ydata()
y.sort() #从小到大排序,该方法直接改变原对象

#用annotate添加注释
#其中有些相近的点,注解会出现重叠,因此需要一些技巧来控制,以下代码需要具体问题具体调试修改
for i in range(len(x)):
	if i>0:
		plt.annotate(y[i], xy=(x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
	else:
		plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.08,y[i]))
plt.show()

在这里插入图片描述

​ 由箱线图可知,可以将22、51、60、6607.4、9106.44归为异常值,但4065.2和4060.3可以视情况而定。

1.1.3一致性分析

​ 数据不一致性是指数据的矛盾性、不相容性。

1.2数据特征分析

​ 对数据进行质量分析之后,接下来可通过绘制图表、计算某些特征量等手段进行数据的特征分析。

1.2.1分布分析

​ 分布分析能揭示数据的分布特征和分布类型。对于定量数据,想要了解其分布形式是对称的还是非对称的,发现某些特大或特小的可疑值,可通过绘制频率分布表、绘制频率分布直方图、绘制茎叶图进行直观性分析;对于定性分类数据,可用饼图或条形图直观地显示分布情况。

1.定量数据的分布分析

​ 对于定量变量而言,选择“组数”和“组宽”是做频率分布分析时最主要的问题,一般按照以下步骤进行。

​ 1)求极差

​ 2)决定组距与组数

​ 3)决定分点

​ 4)列出频率分布表

​ 5)绘制频率分布直方图

2.定性数据的分布分析

​ 对于定性变量,常常根据变量的分类类型来分组,可以采用饼图和条形图来描述定性变量的分布。

​ 饼图的每一个扇形部分代表每一个类型的百分比或频数,根据定性变量的类型数目将饼图分为几个部分,大小与频数成正比。条形图则用高度代表百分比或频数。

1.2.2对比分析

​ 对比分析是指把两个相互联系的指标进行比较,从数量上展示和说明研究对象的一些问题。特别适用于指标间的横纵向比较、时间序列的比较分析。主要分为:

(1)绝对数比较

​ 绝对数比较是利用绝对数进行对比,从而寻找差异的一种方法。

(2)相对数比较

​ 由两个有联系的指标对比计算,用以反映客观现象之间数量联系程度的综合指标。

​ 1)结构相对数:将同一总体内的部分数值与全部数值对比

​ 2)比例相对数:将同一总体内不同部分的数值进行对比

​ 3)比较相对数:将同一时期两个性质相同的指标数值进行对比

​ 4)强度相对数:将两个性质不同但有一定联系的总量指标进行对比

​ 5)计划完成程度相对数:是某一时期实际完成数与计划数的对比,用以说明计划完成程度。

​ 6)动态相对数:将同一现象在不同时期的指标数值进行对比,用以说明发展 方向和变化的速度

1.2.3统计量分析

​ 用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势进行分析。常用的统计量指标有均值、中位数、标准差(方差)、四分位间距。

​ 接着使用餐饮销量的数据


import pandas as pd

data=pd.read_excel("catering_sale.xls",index_col=u'日期')
data=data[(data[u'销量'] > 400) & (data[u'销量'] < 5000)]#过滤异常数据
sta=data.describe()

sta.loc['range']=sta.loc['max']-sta.loc['min'] #极差
sta.loc['var']=sta.loc['std']/sta.loc['mean'] #变异系数,度量标准差相对于均值的离中趋势
sta.loc['dis']=sta.loc['75%']-sta.loc['25%'] #四分位数间距

print(sta)
'''
销量
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
'''

1.2.4周期性分析

​ 周期性分析是探索某个变量是否随着时间变化而呈现出某种周期变化趋势。时间尺度相对较长的周期性趋势有年度周期性趋势、季节性周期趋势,相对较短的有月度周期性趋势、周度周期性趋势,甚至更短的天、小时等。可以通过绘制时序图来观察,常用于时间序列等。

1.2.5贡献度分析

​ 又称帕累托分析,原理是帕累托法则,又称20/80定律。即同样的投入放在不同的的地方会产生不同的收益。
数据:
在这里插入图片描述帕累托图:
在这里插入图片描述
​ 上图即为帕累托图,由图可知,菜品A1A7共七个菜品,占菜品种类数的70%,总盈利额占该月盈利额的85.0033%。根据帕累托法则,应该增加对菜品A17的成本投入,减少对菜品A8~A10的投入以获得更高的盈利。

import pandas as pd

#初始化参数
data1 = pd.read_excel('catering_dish_profit.xls', index_col = u'菜品名')
data1 = data1[u'盈利']
data1.sort_index(ascending = False)

import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

plt.figure()
data1.plot(kind='bar')
plt.ylabel(u'盈利(元)')
p = 1.0*data1.cumsum()/data1.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()

1.2.6相关性分析

​ 分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来。

1.直接绘制散点图

​ 判断两个变量是否具有相关关系的最直观的方法。

2.绘制散点图矩阵

​ 需要同时考察多个变量间的相关关系时,可利用散点图矩阵同时绘制各变量间的散点图,从而快速发现多个变量间的主要相关性,在多元线性回归时显得很重要。

3.计算相关系数

​ 在二元变量的相关分析过程中比较常用的是Pearson相关系数、Spearman秩相关系数和判定系数。

​ (1)Pearson相关系数(要求连续变量的取值服从正态分布)

​ 一般用于分析两个连续性变量之间的关系,计算公式如下:
r = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) ∑ i = 1 n ( X i − X ˉ ) 2 ∑ i = 1 n ( Y i − Y ˉ ) 2 {\text{r}} = \frac{{\sum\limits_{i = 1}^n {({X_i} - \bar X)({Y_i} - \bar Y)} }}{{\sqrt {\sum\limits_{i = 1}^n {{{({X_i} - \bar X)}^2}\sum\limits_{i = 1}^n {{{({Y_i} - \bar Y)}^2}} } } }} r=i=1n(XiXˉ)2i=1n(YiYˉ)2 i=1n(XiXˉ)(YiYˉ)
​ 相关系数r的取值范围:-1≤r≤1。

r>0为正相关,r<0为负相关
|r|=0表示不存在线性关系
|r|=1表示完全线性相关
|r|<=0.3为不存在线性相关
0.3<|r|<=0.5为低度线性相关
0.5<|r|<=0.8为显著线性相关
|r|>0.8为高度线性相关

​ (2)Spearman秩相关系数(不服从正态分布的变量、分类或等级变量之间)

​ 计算公式如下:
r n = 1 − 6 ∑ i = 1 n ( R i − Q i ) 2 n ( n 2 − 1 )   {{\text{r}}_n} = 1 - \frac{{6\sum\limits_{i = 1}^n {{{({R_i} - {Q_i})}^2}} }}{{n({n^2} - 1)}}\ rn=1n(n21)6i=1n(RiQi)2 
​ 对两个变量成对的取值分布按照从小到大(或从大到小)的顺序编秩, Ri代表xi的秩次,Qi代表yi的秩次,Ri-Qi表示秩次之差。我们认为,只要两个变量具有严格单调的函数关系,那么他们就是完全Spearman相关的。

​ (3)判定系数

​ 判定系数是相关系数的平方,用 r 2 r^2 r2表示,用来衡量回归方程对y的解释程度,越接近于1表面x与y的相关系越强。

4.例子

#-*- coding: utf-8 -*-
#餐饮销量数据相关性分析
import pandas as pd

data = pd.read_excel('catering_sale_all.xls', index_col = u'日期') #读取数据,指定“日期”列为索引列

data.corr() #相关系数矩阵,即给出了任意两款菜式之间的相关系数
data.corr()[u'百合酱蒸凤爪'] #只显示“百合酱蒸凤爪”与其他菜式的相关系数
data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']) #计算“百合酱蒸凤爪”与“翡翠蒸香茜饺”的相关系数

在这里插入图片描述

1.3.1基本统计特征函数

方法名					函数功能					所属库
sum()				计算数据样本的总和(按列)		Pandas
mean()				计算数据样本的算数平均数		 Pandas
var()				计算数据样本的方差			   Pandas
std()				计算数据样本的标准差			  Pandas
corr()		计算数据样本的Spearman(Pearson)相关系数矩阵Pandas
cov()				计算数据样本的协方差矩阵		 Pandas
skew()				样本值的偏度(三阶矩)			  Pandas
kurt()				样本值的峰度(四阶矩)			  Pandas
describe()			给出样本的基本描述			   Pandas

1.3.2拓展统计特征函数

cumsum()		依次给出前1,2……n个数的和			Pandas
cumprod()		依次给出前1,2……n个数的积			Pandas
cummax()		依次给出前1,2……n个数的最大值	   Pandas
cummin()		依次给出前1,2……n个数的最小值	   Pandas

skew() 样本值的偏度(三阶矩) Pandas
kurt() 样本值的峰度(四阶矩) Pandas
describe() 给出样本的基本描述 Pandas


## 1.3.2拓展统计特征函数

cumsum() 依次给出前1,2……n个数的和 Pandas
cumprod() 依次给出前1,2……n个数的积 Pandas
cummax() 依次给出前1,2……n个数的最大值 Pandas
cummin() 依次给出前1,2……n个数的最小值 Pandas

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值