金融风控


此部分为零基础入门金融风控的task2数据分析部分,带你了解数据,熟悉数据,为后续的特征工程做准备。

1.数据分析的目的

  • 1.EDA(探索性数据分析exploratory data analysis)的价值在于熟悉了解整个数据集的基本情况(缺失值,异常值),对数据进行验证是否可以进行接下来的机器学习或者深度学习建模
  • 2.了解变量之间的相互关系data.corr()、变量与预测值之间的存在关系。
  • 3.为特征工程做准备。

2.内容介绍

  • 数据总体了解:
    • 读取数据并了解数据大小,原始特征唯独;
    • 通过info熟悉数据类型;
    • 粗略查看数据集中个特征基本统计量;
  • 缺失值和唯一值:
    • 查看数据缺失值情况和查看唯一值特征情况
  • 深入数据-查看数据类型
    • 类别行数据
    • 数值型数据:离散数值数据,连续数值型数据
  • 数据间相关关系:特征与特征之间的关系,特征和目标变量之间的关系

3.代码示例

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’)
以上这些库安装anaconda就完事了,但是也可以直接pip install pandas (类似的命令),pycharm中还可以在settings中直接install。

3.2 读取文件

data_train = pd.read_csv(‘train.csv’) #这是train.csv这个文件就在当前工作目录之下,当然也可以使用绝对路径
在read_csv()这个方法中,有许多的参数,delimiter可以设置分隔符的类别。nrows可以设置读取前n行,当然如果还比较大,类别在2020华为云大数据挑战赛中20G的训练集,还可以加入chunksize,产生迭代器进行读取。(有钱的话,弄个大内存的计算机也不是不行)

3.3 总体了解

查看数据的样本个数和原始特征维度。
data.shape

查看数据特征的名称
data.columns

熟悉数据类型
data.info() # 默认verbose=True,即打印出所有特征的详细信息,包括non-null count dtype,如果仅需要了解有多少列,多少行,则可设置verbose=False。

数值型数据的描述性统计
data.describe() #可以 ,T 进行转置,便于查看。

3.4查看缺失值和唯一值。

缺失值
data.isnull().any().sum() #isnull和isna功能类型,统计每列缺失值,返回bool类型,any取每列的并集。sum,将series类型的True当成1进行求和。因此这个命令就是求data中有多少列特征含有缺失值。

进一步查看缺失率大于50%的特征
(data.isnull().sum() / len(data)).to_dict()
data.isnull().sum()统计每列特征缺失值的个数。
to_dict(), series的index作为key,value做为dict的value。

可视化缺失率及其特征。
series.sort_values() #默认ascending=True,并且pandas的方法并不会改变原始的数据结构,除非显式地指明需要修改,inplace=True。

series.plot.bar() 柱状图绘制命令

tips:lgb模型可以自动处理缺失值,这是因为它将缺失看成是一个取值,然后再进行最优特征选取以及最优划分点的时候将其分到一个bin钟。并且lgb可以处理类别性特征(或许是因为它的 互斥特征捆绑算法 ?)。

3.5 查看特征的数值类型,对象类型

numerical_fea = list(data.select_dtypes(exclude=[‘object’]).columns)
select_dtypes() # 里面的参数包括include——用于指明包含哪些特征,exclue——用于指明不需要哪些特征,而取出剩下的特征。
category_fea = list(filter(lambda x: x not in numerical_fea, list(data.columns)))
filter(func, iterable) # 过滤器函数,前面是函数表达式,后面是可迭代对象。

  • 数值型变量分析,分为连续变量和离散型变量。在本次方案中,以取值的多少作为划分的依据,但是在计算机科学中是基于有穷观点来看待问题。所以我认为这样的划分也是有一定道理的。剩下的内容无非就是value_counts(),得到不同取值,以及它们的个数。
  • 连续性变量的可视化。给定画幅plt.figure().给定suptitle这是整个图的标题。plt.subplot(221),2行2列的第一个位置,左上角。sns.distplot出了会画出柱状图来,还会做一个分布的拟合,封装性能,但是可自主修改的空间较小。plt.set_title 和plt.title的区别在于什么地方?(还没有试验过)

3.6 变量分布可视化

单一变量分布可视化

可以使用sns.barplot()来绘制barh图,需要注意value_counts(dropna=False)表示并不将na值去掉。

根据y值的不同可视化某个特征的分布

也就是将欺诈用户和正常用户分开,分别统计这些用户中特征值的分布情况。
首先需要注意groupby这个分组函数,里面的level参数和by参数是针对不同特征or index进行分组,by用于特征 和 特征and index的混合分组, 而level= 只适用于index。 count() 或者说series后面直接跟plot还是第一次见,需要重点掌握。 plot(kind, ax, title,color)等等参数都可以自己制定。
还有就是plt.subplots(2, 2) 会返回fig和2个(ax1, ax2)元组。fig用于保存图像, ax的返回时按每行的个数来进行返回,ax用于图像的定制描述。

3.7时间格式数据处理及查看

pd.to_datatime(str, format) #这是一个向量化的方法,将满足format形式的str转换成datatime64类型的数据。

也可以导入 datetime包,调用datetime.datetime.strptime方法,将str转换成 datetime64

调用apply(lambda x: x-startdate),将datetime64格式转换成timedelta类型的数据,这时候就可以调用 向量化的方法 .dt accessor ,可以使dt.days; dt.hours等。

3.8 透视图(pivot_table)可以帮助我们更好了解数据

pd.pivot_table(data, index, columns, values, aggfunc)
index是data的特征列,用于表征透视图的index,如果是一个str类型,则index就是单一索引。如果index参数加了[],哪怕里面只有一个str,最后的透视图的index也是multiIndex复合索引。其他参数类似。

3.9 并没有使用pandas_profiling生成报告,但是pip install这个包。

4.EDA不仅仅只有这些内容,以后会将其他的方法,都放在这个博客上。

以上这些内容,均来自https://github.com/datawhalechina/team-learning-data-mining/blob/master/FinancialRiskControl/Task2%20%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90.md
本人只是对一些内容,进行了自我标注,如有纰漏,万望斧正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值