1、特征构造
1.1特征构造的目的
对特征(属性)做进一步分析,对数据进行处理,可以对数据进行一些图表总结
1.2 常用操作
1.2.1清除异常值
1.2.1.1 箱型图
在Q3+1.5IQR和Q1-1.5IQR处画两条与中位线一样的线段,这两条线段为异常值截断点,称其为内限;在Q3+3IQR和Q1-3IQR处画两条线段,称其为外限。处于内限以外位置的点表示的数据都是异常值,其中在内限与外限之间的异常值为温和的异常值(mild outliers),在外限以外的为极端的异常值(extreme outliers)。四分位距IQR=Q3-Q1。
def extreme_outliers(data,col,scale):
def box_outliers(data_series,box_scale):#箱型图寻找异常值,box_scale控制异常值范围
iqr=box_scale*(data_series.quantile(0.75)-data_series.quantile(0.25))#
low=data_series.quantile(0.25)-iqr
high=data_series.quantile(0.75)+iqr
rule_low=data_series<low
rule_high=data_series>high
return (rule_low,rule_high),(low,high)#返回的是两个元组,一个是有异常值的行索引,一个是异常值内限
rule,number=box_outliers(data[col],scale)
index=np.arange(data[col].shape[0])[rule[0]|rule[1]]
print('异常数据数量:'+str(len(index)))
index_1=np.delete(np.arange(data[col].shape[0]),index)#删除异常值后的下标
data_p=data.iloc[index_1]#在全数据范围内删除带有异常值的记录
fig,ax=plt.subplots(1,2,figsize=(10,8))
sns.boxplot(y=data[col],ax=ax[0])#原始数据
sns.boxplot(y=data_p[col],ax=ax[1])#异常值删除后的数据
plt.show()
return data_p
extreme_outliers(train,'price',1.5)
函数参考教程,按自己的理解重新写了一遍,就是删除指定倍数的异常值,然后结果能通过箱型图直观地表现出来,删除异常值后的数据更直观更聚集。
1.2.2 构造新特征
1.汽车使用时间
data['time']=(pd.to_datetime(data['creatDate'],format='%Y%m%d',errors='coerce')-
pd.to_datetime(data['regDate'],format='%Y%m%d',errors='coerce')).dt.days
注意点:errors=‘coerce’,无法转换的情况使其成为空值
2.城市信息
data['city']=data['regionCode'