一、引入基础包及文件
#-*- coding:utf-8 –*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
from sklearn.preprocessing import LabelEncoder, MinMaxScaler, Imputer
pd.set_option("display.max_columns", None)
warnings.filterwarnings("ignore")
df_train = pd.read_csv('F:\credit\\application_train.csv')
df_test = pd.read_csv('F:\credit\\application_test.csv')
二、探索清洗数据
查看train文件基本信息,由于特征列数太多,这里就不详细列出了。重要的特征包括姓名、性别、收入、工作形式、工作年限等
print df_train.shape
(307511, 122)
print df_train.head()
print df_train.describe()
查看test文件基本信息,同样不列出详细列
print df_test.shape
(48744, 121)
train中,TARGET值为1的,说明未按时归还贷款,值为0的,说明按时归还贷款
print df_train['TARGET'].value_counts()
0 282686
1 24825
df_train['TARGET'].plot.hist()
plt.show()
显示只有8%左右的人群是未能按时归还贷款的。
# 遍历所有特征,查看特征中的空值
def mis_val_counts(df):
mis_val = df.isnull().sum()
mis_val_pec = 100*df.isnull().sum()/len(df)
missing_val_counts = pd.concat([mis_val,mis_val_pec],axis=1)
missing_val_counts_colnums = missing_val_counts.rename(columns={0: 'Missing Values', 1: '% of Total Values'})
missing_val_counts_colnums = missing_val_counts_colnums[missing_val_counts_colnums.iloc[:,1]!=0].sort_values('% of Total Values').round(1)
return missing_val_counts_colnums
print mis_val_counts(df_train)
DAYS_LAST_PHONE_CHANGE 1 0.0
CNT_FAM_MEMBERS 2 0.0
AMT_ANNUITY 12 0.0
AMT_GOODS_PRICE 278 0.1
EXT_SOURCE_2 660 0.2
DEF_60_CNT_SOCIAL_CIRCLE 1021 0.3
OBS_60_CNT_SOCIAL_CIRCLE 1021 0.3
DEF_30_CNT_SOCIAL_CIRCLE 1021 0.3
OBS_30_CNT_SOCIAL_CIRCLE 1021 0.3
NAME_TYPE_SUITE 1292 0.4
AMT_REQ_CREDIT_BUREAU_MON 41519 13.5
AMT_REQ_CREDIT_BUREAU_WEEK 41519 13.5
AM