数据预处理的过程包括数据清洗、数据集成、数据变换和规约。获取到数据后的第一步,是要进行数据清洗,主要是删除原始数据集中的无关数据,重复数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值。
缺失值处理
缺失值处理的方法可以分为三类:删除记录、数据插补和不处理。
删除记录,如果记录是空行,可以在读取数据之前通过Pandas来过滤:
df.dropna(how='all',inplace=True) # 删除全空的行
数据中是否存在重复记录。如果存在重复记录,就使用 Pandas 提供的 drop_duplicates() 来删除重复数据。
df.drop_duplicates(how='all',inplace=True) # 删除重复数据行
常见的插补方法如下:
插补方法 | 方法描述 |
---|---|
均值/中位数/众数插补 | 根据属性值的类型,用该属性取值的均值/中位数/众数插补 |
使用固定值 | 将缺失值用常量替换 |
最近临插补 | 在记录中找到与缺失样本最接近的样本的该属性值插补 |
回归方法 | 对含有缺失值的变量,根据已有数据和与有关的其他变量(因变量)的数据建立拟合模型来预测缺失值 |
插值法 | 插值法是利用已知点建立合适的插值函数f(x),未知值由对应点Xi求出的函数值f(Xi)近似代替 |
如果是使用均值进行插补,可以使用:
df['column'].fillna(df['column'].mean(), inplace=True)
如果用最高频的数据或是众数(如果列数据时数值)进行填充,可以先通过value_counts获取column字段最高频次column_maxf,然后再对字段中缺失的数据用column_maxf进行填充:
column_maxf = train_features['cloumn'].value_counts().index[0]
train_features['column'].fillna(column_maxf, inplace=True)
</