拿到样本数据集之后,我们在进行数据挖掘之前,需要对样本数据集进行一个初步的了解。我们想要知道,这个样本数据集中,是否存在某些明显的规律或者是趋势,是否存在某些异常的数据值。
我们可以通过验证数据集的数据质量、以图形的方式展示数据,或者计算某些重要的特征值来了解数据集。整个了解数据集的过程就是探索数据的过程。
在进行数据预处理之前,我们需要了解数据的质量情况,这样才能有效地开展数据预处理。数据的质量分析,主要是检查抽样数据集走过来是否存在一些垃圾数据或者称为脏数据。如果数据集中的脏数据得不到很好地处理,就会严重影响分析地结果。在企业中常见的脏数据分为以下几种类型:
- 数据缺失
- 数据异常
- 数据不一致
- 数据重复等
数据缺失处理
在企业数据集中,往往因为某种原因导致保存下来的数据是不完整的。某些字段可能丢失。此时,在进行数据挖掘时,会极大影响数据分析的结果。针对数据缺失的常见处理方式有以下两种:
- 直接删除缺失值
- 补上缺失值
- 不进行处理
数据异常处理
在企业数据集中,因为可能存在人为的录入,导致某些数据可能不合常理。异常值对数据结果的影响非常大,如果没有在预处理过程将这样的一些数据处理掉,将会造成很大的不良影响。我们可以通过以下几种方式来分析异常数据。
- 简单统计分析
- 3δ原则
- 箱型图分析
1、简单统计分析
可以对数据集进行简单的统计分析来发现数据集中的异常值。例如:最大值、最小值等。
2、3δ原则
如果数据符合正态分布,如果某组被测值超过平均值的3倍标准差,此类数据为异常值数据。如果数据不符合正态分布,我们也可以通过计算与平均值的标准差来判断是否为异常值
3、箱型图分析
箱型图提供了识别异常值的标准。通过对被测值的分析,可以计算出来一个下四分位数、上四分位数。下四分位数和上四分位数之间为四分位数间距。被测数据值一半的数据分布在下四位数、和上四位数之间。
箱型图分析对数据没有任何限制要求,可以直观地反馈数据分部的原本面貌。高达25%的数据并不会很大地影响四分位数,异常值不会对该标准产生影响。在识别异常值方面有一定的优越性。
数据探索案例
有以下数据集,保存了某个企业每天的销量数据。我们将对这些销量数据进行统计分析,来发现其中的异常值。
文件已经上传到百度网盘:https://pan.baidu.com/s/1aiFN3GdAngD4ylN3bvPKoA
注意:代码不要放在中文路径中!!!
#-*- coding: utf-8 -*- # 1. 导入pandas库,用来读取测试数据集,并将pandas库的别名为pd import pandas as pd # 2. 使用read_excel方法读取测试数据集 # read_excel函数说明 # 1) excel文件名 # 2) index_col索引列(因为pandas将数据读取出来为DataFrame,类似于表结构。相当于指定一个主键 data = pd.read_excel('catering_sale.xls', index_col=u'日期')
print(u'原始值' + str(len(data)))
# 3. 通过describe方法进行简单统计分析 describe = data.describe() # 4. 打印描述信息 print describe
运行结果如下:
销量
count 200.000000
mean(平均值) 2755.214700
std(标准差) 751.029772
min(最小值) 22.000000
25%(1/4分位数) 2451.975000
50%(1/2分位数) 2655.850000
75%(3/4分位数) 3026.125000
max(最大值) 9106.440000
count统计的是非空值,此处非空值为200,但原始值为201,表示存在一条数据存在数据缺失。
我们接着使用matplotlib来绘制箱型图,来发现异常值
""" 需求二: 使用matplotlib来绘制箱型图,发现异常值 """ # 1. 导入matplotlib绘图库 import matplotlib.pyplot as plot # 2. 配置matplotlib绘图参数 plot.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示中文标签 plot.rcParams['axes.unicode_minus'] = False # 正常显示负号 # 3. 建立图像 plot.figure() # 4. 绘制箱型图 boxplot = data.boxplot() plot.show()
通过箱型图,我们可以找到以下这些异常值:
结合具体业务,我们可以发现22、51、60、6607、9106均为异常值。后续我们可以确定过滤规则。