数据预处理
1. 前言
数据质量分析是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。其主要任务是检查原始数据中是否存在脏数据。脏数据一般指的是不符合要求的,以及不能直接进行相应分析的数据。 常见的脏数据包括:
- 缺失值
- 异常值
- 不一致的值
- 重复数据及含有特殊符号(如#、¥、*)的数据
2. 数据探索
2.1 缺失值分析
在进行深入分析前,首先需要了解数据的整体分布情况。可以使用以下命令查看数据的基本情况:
data.describe() # 查看数据的基本情况
len(data) # 查看数据的总条数
通过描述性统计,可以快速识别数据中可能存在的空值或缺失模式。
2.2 异常值分析
检查数据中是否有录入错误以及含有不合理的数据。忽视这些异常值是十分危险的,可能会导致数据整体分析产生明显偏离观察值的影响。
2.2.1 简单统计量分析
通过一个简单的描述性估计,进而查看哪些数据是不合理的。需要的统计量可以是最大值和最小值,判断这个变量的极值是否不在现实合理范围之中。
import pandas as pd
# 读取数据,指定'日期'列为索引列
data = pd.read_excel('catering_sale.xls', index_col='日期')
data.describe() # 对数据进行描述性估计
输出结果通常包含 count, mean, std, min, 25%, 50%, 75%, max 等信息,帮助定位极端值。
2.2.2 3σ 原则
如果数据服从正态分布,在 3σ 原则下,异常值被定义为一组测定值中与平均值的偏差超过三倍标准差的值。在正态分布的假设下,距离平均值 3σ 之外的值出现的概率小于 0.003,属于极个别的小概率事件。
2.2.3 箱线图分析
箱形图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的鲁棒性:多达 25% 的数据可以变得任意远而不会很大地扰动四分位数,其结果比较客观,在识别异常值时有一定优越性。
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') # 画箱线图,直接使用 DataFrame 的方法
# 获取异常值,'fliers'为箱线图中异常值的标签
x = p['fliers'][0].get_xdata()
y = p['fliers'][].get_ydata()
y.sort()
i ((x)):
i > :
plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i]+ - /(y[i]-y[i-]), y[i]))
:
plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i]+, y[i]))
plt.show()


