缺失值分析
缺失值产生的原因
- 有些信息暂时无法获取,或者获取信息的代价太大。
- 有些信息是被遗漏的。可能是因为输入时认为不重要、忘记填写或对数据理解错误等一些人为因素而遗漏,也可能是由于数据采集设备的故障、存储介质的故障、传输媒体的故障等非人为原因而丢失。
- 属性值不存在。在某些情况下,缺失值并不意味着数据有错误。对一些对象来说某些属性值是不存在的,如一个未婚者的配偶姓名、一个儿童的固定收入等。
使用描述性统计分析,可以得到含有缺失值的属性的个数,以及每个属性的未缺失数、缺失数与缺失率等。
异常值分析
异常可能由于测量、输入错误或系统运行错误而造成,也可能是由数据内在特性引起的,或异常行为所导致。异常值分析是检验数据是否含有不合理的数据。由于异常产生的机制是不确定的,因此,异常检测算法检测出的“异常”是否真正地对应为实际的异常行为,不是由异常检测算法来说明、解释的,只能由领域专家来解释。
异常值分析方法
- 基于统计的方法
- 基于距离的方法
- 基于密度的方法
- 基于聚类的方法
- 基于分类的方法
- 基于深度的方法
- 基于小波变换的方法
- 基于图的方法
- 基于模式的方法
- 基于神经网络的方法
基于统计的方法
- 描述性统计分析
- Z得分
- 箱形图分析
本文只检测缺失值,并使用箱型图检测异常值
数据集
日期 | 销量 |
---|---|
2015/3/1 | 51 |
2015/2/28 | 2618.2 |
2015/2/27 | 2608.4 |
2015/2/26 | 2651.9 |
2015/2/25 | 3442.1 |
2015/2/24 | 3393.1 |
2015/2/23 | 3136.6 |
2015/2/22 | 3744.1 |
2015/2/21 | 6607.4 |
2015/2/20 | 4060.3 |
2015/2/19 | 3614.7 |
2015/2/18 | 3295.5 |
...
缺失值分析
我们使用SPSS进行缺失值分析,设置如下
缺失值分析结果
结论分析
1. 日期没有缺失值2. 销量存在一个缺失值,对应的日志为2015-02-143. 销量的缺失率:0.5%
缺失值替换
箱型图分析
箱型图分析结果
1. 箱型图超过3倍IQR的一共5个值,分别是 22, 51, 60 和 6607.40, 9106.442. 根据具体业务我们把日销量在400以下或5000以上设置为异常数据
Python程序
#coding: utf-8
import matplotlib.pyplot as plt
from numpy import nan as NA
import pandas as pd
# 读取数据源
xlsFilename = "catering_sale.xls"
df = pd.read_excel(xlsFilename)
########################################################
# 缺失值
# 获得缺失值的个数
missingNumCountDf = df.isnull().sum()
print("\n缺失值个数")
print(missingNumCountDf)
# 获得缺失率
missingPercentDf = 100 * (missingNumCountDf / df.count())
print("\n缺失率")
print(missingPercentDf)
# 获得缺失记录
missingDf = df[df.iloc[:,1].isnull()]
print("\n缺失记录")
print(missingDf)
# 过滤掉缺失值
df2 = df.dropna()
# 显示箱图
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
#bp = df2.boxplot()
bp = plt.boxplot(df2.values[:,1], patch_artist=True)
fliers = bp['fliers']
for fly in fliers:
data = fly.get_data()
for (x,y) in fly.get_xydata():
plt.text(x, y, "%.2f" % y, verticalalignment="top", horizontalalignment='right')
print("\n异常值")
print(data[1])
plt.show()
缺失值个数
日期0
销量1
dtype: int6488888888888888888888
缺失率
日期0.0
销量0.5
dtype: float64
![img](http://)
缺失记录
日期 销量
14 2015-02-14 NaN
异常值
[51.0 865.0 22.0 60.0 6607.4 4060.3 9106.44 4065.2]