数据预处理-异常值

一.查看

方法1

train_data.describe([0.01,0.1,0.25,0.5,0.75,0.9,0.99]).T

# 右偏:求log  主要针对于标签
# 左偏:指数

方法2-作图

    散点图

train_data.columns

columns = ['NumberOfTime30-59DaysPastDueNotWorse',
          'NumberOfTime60-89DaysPastDueNotWorse',
          'NumberOfTimes90DaysLate']
train_data[columns].plot.box(vert=False)

二.处理

1.删除过滤

# 年龄
train_data = train_data.loc[train_data.age>0]

train_data.shape #查看删除了几行
#画完散点图,已定位异常值
for i in columns:
    train_data = train_data.loc[train_data[i]<90]   # 过滤掉数值大于90的样本

2.盖帽法

   自定义函数

def block(x,lower=True,upper=True):
# x是输入的Series对象,lower表示是否替换1%分位数,upper表示是否替换99%分位数
    ql = x.quantile(.1)
    qu = x.quantile(.9)
    if lower:
        out = x.mask(x<ql,ql)
    if upper:
        out = x.mask(x>qu,qu)
    return(out)

block(train_data['RevolvingUtilizationOfUnsecuredLines']).max()

train_data['RevolvingUtilizationOfUnsecuredLines'].quantile(0.9)#比较

 

posted @ 2020-02-20 21:49  少年奶油喵  阅读(435)  评论(0编辑  收藏  举报