Lending Club贷款数据分析——数据清洗

数据集来源 :kaggleLending Club Loan Data

数据集包含了2007-2015年Lending Club平台的贷款数据,所以数据量非常庞大
大概有90W行*74列

本来想用EXCEL进行分析,但是看到连打开都需要1分钟之后我放弃了这样的想法
本次主要使用pandas进行数据清理

思路为:

  1. 读取数据, 分别查看object 和 float64 的缺失比例
  2. 缺失值比例达到25%以上的列直接剔除,低于25%的列视其意义进行空值填充
  3. 处理后含有缺失值的行剔除
#导入相关库
import numpy as np  
import pandas as pd  
import matplotlib.pyplot as plt
import seaborn as sns
#读取数据
loanData = pd.read_csv('../input/loan.csv')
loanData.shape

查看数据集原始大小:

out:(887379, 74)

loan_status实际就也是我们的建模目标,据此查看贷款情况:

loanData.loan_status.value_counts()  
    Current                                                601779
    Fully Paid                                             207723
    Charged Off                                             45248
    Late (31-120 days)                                      11591
    Issued                                                   8460
    In Grace Period                                          6253
    Late (16-30 days)                                        2357
    Does not meet the credit policy. Status:Fully Paid       1988
    Default                                                  1219
    Does not meet the credit policy. Status:Charged Off       761
    Name: loan_status, dtype: int64

明显可以看到正负样本数量差距悬殊,估计 9:1,对于后面建模而言需要考虑这个问题

#查看Object类型数据的缺失情况
loanData.select_dtypes(include=['O']).describe()\
.T.assign(missing = loanData.apply(lambda x : (1 - x.count() /len(x)))).sort_values(by = 'missing',ascending = False)
1_output217.png
#查看float64类型数据的缺失情况
loanData.select_dtypes(include=['float64']).describe()\
.T.assign(missing = loanData.apply(lambda x : (1 - x.count() /len(x)))).sort_values(by = 'missing',ascending = False)
2_outpu_218.png
#缺失值处理1,这里按照25%的阈值处理,缺失超过25%的列直接删除
loanData.dropna(
    axis=1, thresh=int(0.75 * len(loanData)),
    inplace=True) 
#查看处理效果
loanData.describe().T.assign(
    missing_pct=loanData.apply(
        lambda x: (1 - x.count() / len(x)))).sort_values(
            by='missing_pct', ascending=False)
3_output_220.png
#缺失值处理2

#针对数据集缺失值列的意义进行填充或其他出来
#total_rev_hi_lim:总周转高信用/信用额度。以0填充
#tot_cur_bal:所有帐户的当前总余额。 以0填充
#tot_coll_amt:欠款总额。以0填充
#revol_util:循环利用率,或借款人相对于所有可用循环信贷使用的信贷额度。以均值填充
#collections_12_mths_ex_med:除医疗账单外12个月的欠款数量。以0填充
#inq_last_6mths:过去6个月的征信查询数目(不包括汽车及按揭查询)。以0填充
#acc_now_delinq: 借款人现在欠款的账户数量。以0填充
#pub_rec: 贬损公共记录的数量。以0填充
#open_acc;借款人信用档案中的未结信用额度。以均值填充
#total_acc:借款人信用档案中当前信用额度的总数。以均值填充
#delinq_2yrs:过去两年借款人信用档案中逾期30天以上的拖欠次数。以0填充
#annual_inc:借款人在注册期间自行报告的年收入。以均值填充。

cols_fill_with_zero = [
    'total_rev_hi_lim', 'tot_cur_bal', 'tot_coll_amt',
    'collections_12_mths_ex_med', 'inq_last_6mths', 'acc_now_delinq',
    'pub_rec', 'delinq_2yrs'
]
cols_fill_with_mean = ['revol_util', 'open_acc', 'total_acc', 'annual_inc']
for col in cols_fill_with_zero:
    loanData[col] = loanData[col].fillna(0)

for col in cols_fill_with_mean:
    mean_of_col = loanData[col].mean()
    loanData[col] = loanData[col].fillna(mean_of_col)

loanData.dropna(axis=0, inplace=True)  #剔除有空值的行
#loanData.isnull().sum().sort_values(ascending = False)
loanData.shape

查看处理后的数据集大小

out (819022, 52)

看起来效果还可以

#查看正负样本情况
loanData.loan_status.value_counts()  
Current                                                558269
Fully Paid                                             197119
Charged Off                                             41288
Late (31-120 days)                                      10683
In Grace Period                                          5778
Late (16-30 days)                                        2155
Does not meet the credit policy. Status:Fully Paid       1862
Default                                                  1131
Does not meet the credit policy. Status:Charged Off       697
Issued                                                     40
Name: loan_status, dtype: int64

可以看到正负样本差距依然悬殊
数据清理到这里就结束了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容