【数据挖掘】金融风控 Task02 数据分析


学习地址:https: //github.com/datawhalechina/team-learning-data-mining/tree/master/FinancialRiskControl
天池竞赛地址:https://tianchi.aliyun.com/competition/entrance/531830/introduction


由于之前已经参与过数据分析的入门教程,一些基础的知识点不在重复记录
本次组队内容的优点在于其系统性,通过函数实现代码封装 及整体的处理思路都值得日后去借鉴


1. 探索性数据分析(EDA)概述

1. 1 探索性数据分析概念

探索性数据分析所谓探索性数据分析( Exploratory Data Analysis )以下简称EDA,是指对已有的数据( 特别是调查或观察得来的原始数据 )在尽量少的先验假定下进行探索通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法。

1.2 探索性数据分析目的

  • 了解整个数据集的基本情况(缺失值,异常值),对数据集进行验证是否可以进行接下来的机器学习或者深度学习建模。
  • 了解变量间的相互关系,变量与预测值之间的存在关系。
  • 为特征工程做准备

1.3 探索性数据分析(EDA)与传统统计分析(Classical Analysis)的区别

  • 传统的统计分析方法通常是先假设样本服从某种分布,然后把数据套入假设模型再做分析。但由于多数数据并不能满足假设的分布,因此,传统统计分析结果常常不能让人满意。

  • 探索性数据分析方法注重数据的真实分布,强调数据的可视化,使分析者能一目了然看出数据中隐含的规律,从而得到启发,以此帮助分析者找到适合数据的模型。“探索性”是指分析者对待解问题的理解会随着研究的深入不断变化。

传统数据分析步骤
在这里插入图片描述
在这里插入图片描述


2. 金融风控实战

参数表,已根据本节分析所得结果进行描述补充

变量 含义 数据量及类型 类型
id 为贷款清单分配的唯一信用证标识 800000 non-null int64 连续型数值特征
loanAmnt 贷款金额 800000 non-null float64 连续型数值特征
term 贷款期限(year) 800000 non-null int64 离散型数值特征
interestRate 贷款利率 800000 non-null float64 连续型数值特征
installment 分期付款金额 800000 non-null float64 连续型数值特征
grade 贷款等级 800000 non-null object 类别特征:用A、B、C、D、E、F、G表示的
subGrade 贷款等级之子级 800000 non-null object 类别特征:每类有五个子类用如A1、A2…A5表示
employmentTitle 就业职称 799999 non-null float64 连续型数值特征 :用一串编码的数字来表示的
employmentLength 就业年限(年) 753201 non-null object 类别特征:格式为如2 year
homeOwnership 借款人在登记时提供的房屋所有权状况 800000 non-null int64 有0、1、2、3、4、5六种
annualIncome 年收入 800000 non-null float64 连续型数值特征
verificationStatus 验证状态 800000 non-null int64 有0、1、2三种
issueDate 贷款发放的月份 800000 non-null object 非数值特征:2014-07-01形式
isDefault 是否违约 0或者1
purpose 借款人在贷款申请时的贷款用途类别 800000 non-null int64 离散型数值特征:0~13
postCode 借款人在贷款申请中提供的邮政编码的前3位数字 799999 non-null float64 连续型数值特征
regionCode 地区编码 800000 non-null int64 连续型数值特征
dti 债务收入比 799761 non-null float64 连续型数值特征
delinquency_2years 借款人过去2年信用档案中逾期30天以上的违约事件数 800000 non-null float64 连续型数值特征
ficoRangeLow 借款人在贷款发放时的fico所属的下限范围 800000 non-null float64 连续型数值特征
ficoRangeHigh 借款人在贷款发放时的fico所属的上限范围 800000 non-null float64 连续型数值特征
openAcc 借款人信用档案中未结信用额度的数量 800000 non-null float64 连续型数值特征
pubRec 贬损公共记录的数量 800000 non-null float64 连续型数值特征
pubRecBankruptcies 公开记录清除的数量 799595 non-null float64 连续型数值特征
revolBal 信贷周转余额合计 800000 non-null float64 连续型数值特征
revolUtil 循环额度利用率,或借款人使用的相对于所有可用循环信贷的信贷金额 799469 non-null float64 连续型数值特征
totalAcc 借款人信用档案中当前的信用额度总数 800000 non-null float64 连续型数值特征
initialListStatus 贷款的初始列表状态 800000 non-null int64 离散型数值特征:0或者1
applicationType 表明贷款是个人申请还是与两个共同借款人的联合申请 800000 non-null int64 离散型数值特征
earliesCreditLine 借款人最早报告的信用额度开立的月份 800000 non-null object 非数值型特征:Aug-2001
title 借款人提供的贷款名称 799999 non-null float64 离散型数值特征:0或1
policyCode 公开可用的策略_代码=1新产品不公开可用的策略_代码=2 800000 non-null float64 离散型数值特征
n0 759730 non-null float64 连续型数值特征
n1 759730 non-null float64 连续型数值特征
n2 759730 non-null float64 连续型数值特征
n2.1 759730 non-null float64 连续型数值特征
n4 766761 non-null float64 连续型数值特征
n5 759730 non-null float64 连续型数值特征
n6 759730 non-null float64 连续型数值特征
n7 759730 non-null float64 连续型数值特征
n8 759729 non-null float64 连续型数值特征
n9 759730 non-null float64 连续型数值特征
n10 766761 non-null float64 连续型数值特征
n11 730248 non-null float64 离散型数值特征
n12 759730 non-null float64 离散型数值特征
n13 759730 non-null float64 连续型数值特征
n14 759730 non-null float64 连续型数值特征

2.1 导入所需要的库

import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
"""
python通过调用warnings模块中定义的warn()函数来发出警告。
通过下面两行代码来忽略警告
"""
import warnings
warnings.filterwarnings('ignore')

2.2 文件读取

训练集为47列,测试集为48列,具体包含内容见上面

#导入训练集
data_train=pd.read_csv('./train.csv')
data_train.head()

#导入测试集
data_test_a=pd.read_csv('./testA.csv')

2.2.1 TSV和CSV区别

  • TSV是用制表符(Tab,'\t')作为字段值的分隔符;
  • CSV是用半角逗号(',')作为字段值的分隔符;

2.2.2 读取大文件

  • 对于较大的文件,可以通过nrows来实现部分读取
#通过nrows参数,来设置读取文件的前多少行,nrows是一个大于等于0的整数。
data_train_sample = pd.read_csv("./train.csv",nrows=5)
  • 通过chunksize实现分块读取
#设置chunksize参数,来控制每次迭代数据的大小
chunker = pd.read_csv("./train.csv",chunksize=100)
for item in chunker:
    print(type(item))
    #<class 'pandas.core.frame.DataFrame'>
    print(len(item))
    #100

2.2.3 通过os.getcwd()查看当前工作目录

pandas读取数据时相对路径载入报错时,可使用os.getcwd()查看当前工作目录。


2.3 数据总体了解

  • 查看数据形状df.shape
##查看测试集的shape
data_test_a.shape
#(200000, 48)

##查看训练集的shape 可以发现训练集是测试集的四倍
data_train.shape   
#(800000, 47)
  • 查看列名df.columns
data_train.columns

#Index(['id', 'loanAmnt', 'term', 'interestRate', 'installment', 'grade',
       'subGrade', 'employmentTitle', 'employmentLength', 'homeOwnership',
       'annualIncome', 'verificationStatus', 'issueDate', 'isDefault',
       'purpose', 'postCode', 'regionCode', 'dti', 'delinquency_2years',
       'ficoRangeLow', 'ficoRangeHigh', 'openAcc', 'pubRec',
       'pubRecBankruptcies', 'revolBal', 'revolUtil', 'totalAcc',
       'initialListStatus', 'applicationType', 'earliesCreditLine', 'title',
       'policyCode', 'n0', 'n1', 'n2', 'n2.1', 'n4', 'n5', 'n6', 'n7', 'n8',
       'n9', 'n10', 'n11', 'n12', 'n13', 'n14'],
      dtype='object')
  • info()查看数据类型
data_train.info()

在这里插入图片描述

  • 利用describe()粗略的查看一些统计性数据
#利用describe()粗略的查看数据集的各个特征的一些基本统计量
data_train.describe()

在这里插入图片描述

  • 使用head()tail()查看前n行和后n行数据
data_train.head(3).append(data_train.tail(3))

2.4 查看数据中的缺失值,唯一值等

2.4.1 查看缺失值

【注意】此处用了format的几种表示形式,注意第一种和python的版本有关系,低于3.7版本的无法使用,可以通过import sys sys.version来查看自己的版本

#字符串前加f作用相当于format
#isnull为空显示true不为空显示false
#any函数用法https://www.cjavapy.com/article/297/ 返回为真的
print(f'共有 {data_train.isnull().any().sum()}列存在缺失')
#字符串前加f作用相当于format
#isnull为空显示true不为空显示false
#any函数用法https://www.cjavapy.com/article/297/ 返回为真的
print('存在缺失的列的个数为:{}'.format(data_train.isnull().any().sum()))
print('存在缺失的列的个数为:%s' % format(data_train.isnull().any().sum()))

经过上面操作可以发现训练集有22列特征存在缺失值,可以进一步的去统计下那些特征的缺失值大于50%,对于缺失大于50%的特征在后续的处理中我们可以考虑直接舍弃

#data_train.isnull().sum()统计每列缺失值的个数
#data_train.isnull().sum()/len(data_train)缺失值个数占总量的多少
have_null_fea_dict=(data_train.isnull().sum()/len(data_train)).to_dict()
#创建一个字典来统计
fea_null_moreThanHalf={
   
   }
#Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组
for key,value in have_null_fea_dict.items():
    if value>0.5:
        fea_null_moreThanHalf[key]=value

fea_null_moreThanHalf

结果为{},即在本训练集中没有缺失超过50%的特征

通过可视化直观缺失特征及缺失率

# nan可视化
missing=data_train.isnull().sum()/len(data_train) #计算缺失率
missing=missing[missing>0]  #计算缺失率大于0的,即存在缺失的

#重新排序
missing.sort_values(inplace=True)

#绘制条形图
missing.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值