数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值等。
1.缺失值
处理缺失值的方法可分为3类:删除记录、数据插补和不处理。
*缺失值的处理方法
插补方法 | 方法描述 |
---|---|
均值/中位数/众数插补 | 根据属性值的类型,用该属性取值的平均数/中位数/众数进行插补 |
使用固定值 | 将缺失的属性值用一个常量替换。如广州一个工厂普通外来务工人员的“基本工资”属性的空缺值可以用2015年广州市普通外来务工人员工资标准1895元/月,该方法就是使用固定值 |
最近临插补 | 在记录中找到与缺失样本最接近的样本的该属性值插补 |
回归方法 | 对带有缺失值的变量,根据已有数据和与其有关的其他变量(因变量)的数据建立拟合模型来预测缺失的属性值 |
插值法 | 插值法是利用已知点建立合适的插值函数 f ( x ) f(x) f(x),未知值由对应点 x i x_i xi,求出的函数值 f ( x i ) f(x_i) f(xi)功近似代替 |
*如果通过简单的删除小部分记录达到既定的目标,那么删除含有缺失值的记录的方法是最有效的。然而,这种方法却有很大的局限性。它是以减少历史数据来换取数据的完备,会造成资源的大量浪费,将丢弃了大量隐藏在这些记录中的信息。尤其在数据集本来就包含很少记录的情况下,删除少量记录可能会严重影响到分析结果的客观性和正确性。
*一些模型可以将缺失值视作一种特殊的取值,允许直接在含有缺失值的数据上进行建模。
缺省值填充案例:
SimpleImputer(*, missing_values=nan, strategy=‘mean’, fill_value=None, verbose=0, copy=True, add_indicator=False)
fit(X) 返回值为SimpleImputer()类,通过fit(X)方法可以计算X矩阵的相关值的大小,以便填充其他缺失数据矩阵时进行使用。 transform(X) 填补缺失值,一般使用该方法前要先用fit()方法对矩阵进行处理。
from sklearn.impute import SimpleImputer
import numpy as np
X = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
X1 = np.array([[1, 2, np.nan],
[4, np.nan, 6],
[np.nan, 8, 9]])
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp.fit(X)
print(imp.transform(X1))
#由于fit(X)和strategy='mean',所以填补值为X矩阵各列的均值
X1 = np.array