数据分析与挖掘实例(1)-数据预处理

数据预处理

  • 问题分析
  • 无关特征删除
  • 数据类型转换
  • 缺失值处理

问题分析

此次要处理的数据是预测贷款用户是否会逾期。数据中共有89个field,其中 “status” 是结果标签:0表示未逾期,1表示逾期,其余的数据可以看做是变量。故将其归类为分类预测问题。在做数据分类之前,先对数据进行分析与预处理。通过对数据的观测,可见预处理的部分包括:无关特征删除、数据类型转换、缺失值处理、特征优化

无关特征删除

在88个变量中,经过整理,首先删除对于是否逾期还贷无贡献的变量以及太多缺失值的无效数据,包括:custid、trade_no、bank_card_no、source、id_name、student_feature。代码如下:

import pandas as pd

OriginalData=pd.read_csv('data.csv',encoding = 'gbk')
UseData=OriginalData.drop(['student_feature','custid','trade_no','bank_card_no','source','id_name'],axis=1,inplace=True)

数据类型转换

在进行分类预测时,输入的特征变量只能是数据,但是实际的特征数据可能会存在字符串形式,如下面的变量:

针对此类数据,可以将其转化为特定数值,代码如下:

OriginalData.ix[OriginalData['reg_preference_for_trad']=='一线城市','reg_preference_for_trad']=0
OriginalData.ix[OriginalData['reg_preference_for_trad']=='二线城市','reg_preference_for_trad']=1
OriginalData.ix[OriginalData['reg_preference_for_trad']=='三线城市','reg_preference_for_trad']=2
OriginalData.ix[OriginalData['reg_preference_for_trad']=='其他城市','reg_preference_for_trad']=3
OriginalData.ix[OriginalData['reg_preference_for_trad']=='境外','reg_preference_for_trad']=4

另外关于时间戳的变量也需要进行相应的处理,例如特征latest_query_time等,将这些数据转化为具体的时间段,代码如下:

#时间数据转换
OriginalData['latest_query_time'].fillna('2019-1-1', inplace=True)
refrence_time = time.mktime(time.strptime("2019-1-1", "%Y-%m-%d"))
OriginalData['latest_query_timestamp'] = OriginalData['latest_query_time'].apply(lambda x:refrence_time-time.mktime(time.strptime(x,'%Y-%m-%d')))
TimeProcessData=OriginalData[~(OriginalData['latest_query_timestamp'].isin([0]))]
TimeProcessData.drop(['latest_query_time'],axis=1,inplace=True)

TimeProcessData['loans_latest_time'].fillna('2019-1-1', inplace=True)
refrence_time = time.mktime(time.strptime("2019-1-1", "%Y-%m-%d"))
TimeProcessData['loans_latest_timestamp'] = TimeProcessData['loans_latest_time'].apply(lambda x:refrence_time-time.mktime(time.strptime(x,'%Y-%m-%d')))
TimeProcessData=TimeProcessData[~(TimeProcessData['loans_latest_timestamp'].isin([0]))]
TimeProcessData.drop(['loans_latest_time'],axis=1,inplace=True)

缺失值处理

最后针对数据存在的缺失值进行处理,经过观察发现有少量的行存在很多的空值将这些行进行删除,同时对于其余部分缺失值使用均值填充处理,代码如下:

#缺失值处理
TimeProcessData['loans_long_time']=TimeProcessData['loans_long_time'].fillna(999)
FillProcessData=TimeProcessData[~(TimeProcessData['loans_long_time'].isin([999]))]

for column in list(FillProcessData.columns[FillProcessData.isnull().sum() > 0]):
    mean_val = FillProcessData[column].mean()
    FillProcessData[column].fillna(mean_val, inplace=True)
FillProcessData.to_csv('DFGdata.csv')

你可能感兴趣的:(机器学习)