Fork me on GitHub

数据清洗

数据清洗一是为了解决数据质量问题,二是让数据更适合做挖掘

数值类数据

缺失值

在处理缺失值之前,首先要理解为什么数据会有缺失。

丢弃

直接丢弃含有缺失值的行或者列

# 丢弃有缺失值的列
df.dropna(axis=1,how='all'|'any',subset=[''])
适用情况
  1. 错误导致的数据缺失(GSP中跑步速度的缺失)
  2. 要建模预测的数据列有数据缺失
  3. 无用数据(调查车辆的价格,要排除无车的样本)
缺点
  1. 经常丢弃数据会导致Biased Models
  2. 人们不愿意分享的敏感数据(亲密关系、经济情况)导致缺失,如果直接丢弃会影响模型效率
特殊情况

如果一列中有大量数据缺失,可以建立一个只含01的列,来区分样本是否有数据缺失

插值

用统计值(平均数、众数、中位数)填充缺失值

# 冒号:之前的a,b,c表示它们是这个函数的参数

# 匿名函数不需要return来返回值,表达式本身结果就是返回值
fill_mean = lambda col: col.fillna(col.mean())

df[['A','B','D']].apply(fill_mean, axis=0)

无论采用什么方法来插值,都需要小心Bias。尽管插值是一种常用的方法而且能让模型有更好的预测效果,但常常会导致模型过拟合。

建模预测

AMELIA library中包含很多运用机器学习和贝叶斯统计的方法来填补缺失值的方法

目录类数据

One-Hot Encoding

有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。

for col in cat_cols:
    df = pd.concat([df.drop(col,axis=1),pd.get_dummies(df[col],prefix=col,dummy_na=dummy_na,drop_first=True)],axis=1)

好处

  • 易于翻译
  • 使非偏序关系的变量取值不具有偏序性

缺点

  • 特征空间会变得非常大(可用PCA来减少维度)

特殊情况

[用回归模型时要少编码一类](

posted @ 2019-09-30 20:54  JasonBUPT  阅读(217)  评论(0编辑  收藏  举报