KDD 数据预处理之数据标准化和缺失值补充
数据预处理
在数据清洗过程中,主要处理的是缺失值、异常值和重复值。所谓清洗,是对数据集通过丢弃、填充、替换、去重等操作,实现去除异常、纠正错误、补足缺失的目的。
缺失值
数据缺失分为两种:一是行记录的缺失,也定义为数据记录丢失;二是数据列值的缺失,指由于各种原因导致的数据记录中某些列的值空缺。
不同的数据存储和环境中对于缺失值的表示结果不同,例如数据库中是Null、Python返回对象是None、Pandas或Numpy中是NaN。
缺失值处理方法
-
删除 : 如果每列或者行数据缺失值达到一定比例, 删除整行或整列。减少缺失数据记录对总体数据的影响。但丢弃意味着会消减数据特征。
-
补全 :
- 统计法:对于数值型的数据,使用均值、加权均值、中位数等方法补足;对于分类型数据,使用类别众数最多的值补足。
- 向前/向后填充:forward imputation / backward imputation
data = df.fillna(method='ffill').fillna(method='bfill')
- 热卡填补(Hot deck imputation):热卡填充法是在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。通常会找到超出一个的相似对象,在所有匹配对象中没有最好的,而是从中随机的挑选一个作为填充值。这个问题关键是不同的问题可能会选用不同的标准来对相似进行判定,以及如何制定这个判定标准。该方法概念上很简单,且利用了数据间的关系来进行空值估计,但缺点在于难以定义相似标准,主观因素较多。
- K最近距离邻法(K-means clustering):利用无监督机器学习的聚类方法。通过K均值的聚类方法将所有样本进行聚类划分,然后再通过划分的种类的均值对各自类中的缺失值进行填补。归其本质还是通过找相似来填补缺失值。
- 模型法:如,随机森林。基于已有的其它字段,将缺失字段作为目标变量进行预测,从而得到较为可能的补全值。如果带有缺失值的列是数值变量,采用回归模型补全;如果是分类变量,则采用分类模型补全。
- 专家补全:对于少量且具有重要意义的数据记录,专家补足也是非常重要的一种途径。
- 其他方法:例如随机法、特殊值法、多重填补等。
Demo
部分代码
用每列平均值补充缺失值
import pandas as pd
import numpy as np
from sklearn.preprocessing import Imputer, StandardScaler
df = pd.DataFrame()
df['x0'] = [1,2,3,4,5,np.nan]
df['x1'] = [np.nan,7,8,1,2,5]
df = np.array(df)
mean_imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
mean_imputer = mean_imputer.fit(df)
imputed_df = mean_imputer.transform(df)
print(imputed_df )
数据标准化
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。在已有样本足够多的情况下比较稳定,适合嘈杂的大数据场景。
scaler = StandardScaler()
scaler.fit(imputed_df)
transform_df = scaler.transform(imputed_df)
print(transform_df)