2.3 代码示例
2.3.1 导入数据分析及可视化过程需要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
import warnings
warnings.filterwarnings('ignore')
2.3.2 读取文件
#读取数据时相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录
data_train = pd.read_csv(os.getcwd()+'//零基础入门金融风控-贷款违约预测//data//train.csv')
data_test_a = pd.read_csv(os.getcwd()+'//零基础入门金融风控-贷款违约预测//data//testA.csv')
运行结果:
2.3.2.1读取文件的拓展知识
- TSV与CSV的区别:
- 从名称上即可知道,TSV是用制表符(Tab,'\t')作为字段值的分隔符;CSV是用半角逗号(',')作为字段值的分隔符;
- Python对TSV文件的支持: Python的csv模块准确的讲应该叫做dsv模块,因为它实际上是支持范式的分隔符分隔值文件(DSV,delimiter-separated values)的。 delimiter参数值默认为半角逗号,即默认将被处理文件视为CSV。当delimiter='\t'时,被处理文件就是TSV。
- 读取文件的部分(适用于文件特别大的场景)
- 通过nrows参数,来设置读取文件的前多少行,nrows是一个大于等于0的整数。
- 分块读取
data_train_sample = pd.read_csv(data_train_path,nrows=5)
print(data_train_sample)
#设置chunksize参数,来控制每次迭代数据的大小
chunker = pd.read_csv(data_train_path,chunksize=5)
for item in chunker:
print(type(item))
print(len(item))
break
运行结果:
2.3.3总体了解
2.3.3.1 查看数据集的样本个数和原始特征维度
data_train.shape
data_test.shape
data_train.columns
运行结果:
2.3.3.2 查看一下具体的列名,赛题理解部分已经给出具体的特征含义,这里方便阅读再给一下:
-
id 为贷款清单分配的唯一信用证标识
-
loanAmnt 贷款金额
-
term 贷款期限(year)
-
interestRate 贷款利率
-
installment 分期付款金额
-
grade 贷款等级
-
subGrade 贷款等级之子级
-
employmentTitle 就业职称
-
employmentLength 就业年限(年)
-
homeOwnership 借款人在登记时提供的房屋所有权状况
-
annualIncome 年收入
-
verificationStatus 验证状态
-
issueDate 贷款发放的月份
-
purpose 借款人在贷款申请时的贷款用途类别
-
postCode 借款人在贷款申请中提供的邮政编码的前3位数字
-
regionCode 地区编码
-
dti 债务收入比
-
delinquency_2years 借款人过去2年信用档案中逾期30天以上的违约事件数
-
ficoRangeLow 借款人在贷款发放时的fico所属的下限范围
-
ficoRangeHigh 借款人在贷款发放时的fico所属的上限范围
-
openAcc 借款人信用档案中未结信用额度的数量
-
pubRec 贬损公共记录的数量
-
pubRecBankruptcies 公开记录清除的数量
-
revolBal 信贷周转余额合计
-
revolUtil 循环额度利用率,或借款人使用的相对于所有可用循环信贷的信贷金额
-
totalAcc 借款人信用档案中当前的信用额度总数
-
initialListStatus 贷款的初始列表状态
-
applicationType 表明贷款是个人申请还是与两个共同借款人的联合申请
-
earliesCreditLine 借款人最早报告的信用额度开立的月份
-
title 借款人提供的贷款名称
-
policyCode 公开可用的策略代码=1新产品不公开可用的策略代码=2
-
n系列匿名特征 匿名特征n0-n14,为一些贷款人行为计数特征的处理
2.3.3.3 通过info()来熟悉数据类型
data_train.info()
运行结果:
2.3.3.4 总体粗略的查看数据集各个特征的一些基本统计量
data_train.describe()
运行结果:
id | loanAmnt | term | interestRate | installment | employmentTitle | homeOwnership | annualIncome | verificationStatus | isDefault | ... | n5 | n6 | n7 | n8 | n9 | n10 | n11 | n12 | n13 | n14 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 800000.000000 | 800000.000000 | 800000.000000 | 800000.000000 | 800000.000000 | 799999.000000 | 800000.000000 | 8.000000e+05 | 800000.000000 | 800000.000000 | ... | 759730.000000 | 759730.000000 | 759730.000000 | 759729.000000 | 759730.000000 | 766761.000000 | 730248.000000 | 759730.000000 | 759730.000000 | 759730.000000 |
mean | 399999.500000 | 14416.818875 | 3.482745 | 13.238391 | 437.947723 | 72005.351714 | 0.614213 | 7.613391e+04 | 1.009683 | 0.199513 | ... | 8.107937 | 8.575994 | 8.282953 | 14.622488 | 5.592345 | 11.643896 | 0.000815 | 0.003384 | 0.089366 | 2.178606 |
std | 230940.252015 | 8716.086178 | 0.855832 | 4.765757 | 261.460393 | 106585.640204 | 0.675749 | 6.894751e+04 | 0.782716 | 0.399634 | ... | 4.799210 | 7.400536 | 4.561689 | 8.124610 | 3.216184 | 5.484104 | 0.030075 | 0.062041 | 0.509069 | 1.844377 |
min | 0.000000 | 500.000000 | 3.000000 | 5.310000 | 15.690000 | 0.000000 | 0.000000 | 0.000000e+00 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
25% | 199999.750000 | 8000.000000 | 3.000000 | 9.750000 | 248.450000 | 427.000000 | 0.000000 | 4.560000e+04 | 0.000000 | 0.000000 | ... | 5.000000 | 4.000000 | 5.000000 | 9.000000 | 3.000000 | 8.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
50% | 399999.500000 | 12000.000000 | 3.000000 | 12.740000 | 375.135000 | 7755.000000 | 1.000000 | 6.500000e+04 | 1.000000 | 0.000000 | ... | 7.000000 | 7.000000 | 7.000000 | 13.000000 | 5.000000 | 11.000000 | 0.000000 | 0.000000 | 0.000000 | 2.000000 |
75% | 599999.250000 | 20000.000000 | 3.000000 | 15.990000 | 580.710000 | 117663.500000 | 1.000000 | 9.000000e+04 | 2.000000 | 0.000000 | ... | 11.000000 | 11.000000 | 10.000000 | 19.000000 | 7.000000 | 14.000000 | 0.000000 | 0.000000 | 0.000000 | 3.000000 |
max | 799999.000000 | 40000.000000 | 5.000000 | 30.990000 | 1715.420000 | 378351.000000 | 5.000000 | 1.099920e+07 | 2.000000 | 1.000000 | ... | 70.000000 | 132.000000 | 79.000000 | 128.000000 | 45.000000 | 82.000000 | 4.000000 | 4.000000 | 39.000000 | 30.000000 |
2.3.4 查看数据集中特征缺失值,唯一值等
2.3.4.1 查看缺失值
data_train.isnull()
运行结果:
id | loanAmnt | term | interestRate | installment | grade | subGrade | employmentTitle | employmentLength | homeOwnership | ... | n5 | n6 | n7 | n8 | n9 | n10 | n11 | n12 | n13 | n14 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
1 | False | False | False | False | False | False | False | False | False | False | ... | True | True | True | True | True | False | True | True | True | True |
2 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
3 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
4 | False | False | False | False | False | False | False | False | True | False | ... | False | False | False | False | False | False | False | False | False | False |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
799995 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
799996 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
799997 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
799998 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
799999 | False | False | False | False | False | False | False | False | False | False | ... | False | False | False | False | False | False | False | False | False | False |
#isnull().any()会判断哪些列包含缺失值,该列存在缺失值则返回True,反之False
data_train.isnull().any()
运行结果:
print(f'There are {data_train.isnull().any().sum()} columns in train dataset with missing values.')
结果分析:上面得到训练集有22列特征有缺失值,进一步查看缺失特征中缺失率大于50%的特征
2.3.4.2 具体的查看缺失特征及缺失率
#纵向了解哪些列存在 “nan”
missing = data_train.isnull().sum()
print(missing)
运行结果:
- 纵向,找到存在 “nan”,的列, 并可以把nan的个数打印,主要的目的在于查看某一列nan存在的个数是否真的很大,如果nan存在的过多,说明这一列对label的影响几乎不起作用了,可以考虑删掉。如果缺失值很小一般可以选择填充。
- 横向,如果在数据集中,某些样本数据的大部分列都是缺失的且样本足够的情况下可以考虑删除
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
运行结果:
2.3.4.3 查看训练集测试集中特征属性只有一值的特征
- nunique()函数由pandas库提供,返回DataFrame数据中每列不重复数值的个数
one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]
one_value_fea_test = [col for col in data_test_a.columns if data_test_a[col].nunique() <= 1]
one_value_fea
one_value_fea_test
运行结果:
2.3.4.4 总结
- 47列数据中有22列都缺少数据。‘policyCode’具有一个唯一值(或全部缺失)。
欲知后事如何,且听下回分解……………………