广东工业天池龙珠计划-金融风控训练营
本文学习与引用的是天池龙珠计划 金融风控训练营的Task Two内容,链接如下:
https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.20850282.J_3678908510.4.637f4d57HISd8D&postId=170949
学习知识点概要
通过可视化图了解数据的基本情况
并且分析出离散型的变量
了解变量间的相互关系
以及pandas的一些简单的方法
学习内容
读取csv文件的方法:data_train = pd.read_csv(‘train.csv’)
读取时候的注意事项:
- TSV与CSV的区别:
- 从名称上即可知道,TSV是用制表符(Tab,’\t’)作为字段值的分隔符;CSV是用半角逗号(’,’)作为字段值的分隔符;
- Python对TSV文件的支持: Python的csv模块准确的讲应该叫做dsv模块,因为它实际上是支持范式的分隔符分隔值文件(DSV,delimiter-separated values)的。 delimiter参数值默认为半角逗号,即默认将被处理文件视为CSV。当delimiter=’\t’时,被处理文件就是TSV。
- 读取文件的部分(适用于文件特别大的场景)
- 通过nrows参数,来设置读取文件的前多少行,nrows是一个大于等于0的整数。
- 分块读取
具体学习内容:
- 读取文件后需要进行数据的迭代 具体使用for循环进行
- 可以用shape查看维度和样本个数
- .colums方法查看列名
- 可以通过.info()查看每一列的数据类型
- .describe方法可以查看一些基本的统计数据如平均值,方差最大值等
- head(3)查看前三列,.append(data_train.tail(3)) 加上查看尾巴的后三列
缺失值:
data_train.isnull().any().sum()
只要每一列有一个缺少值就把这一列找出来,再算出总共有多少列有缺少值
- 进一步查看确实特征值大于50%的特征
然后进行数据可视化
# nan可视化
missing = data_train.isnull().sum()/len(data_train)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
- 纵向了解哪些列存在 “nan”, 并可以把nan的个数打印,主要的目的在于查看某一列nan存在的个数是否真的很大,如果nan存在的过多,说明这一列对label的影响几乎不起作用了,可以考虑删掉。如果缺失值很小一般可以选择填充。
- 另外可以横向比较,如果在数据集中,某些样本数据的大部分列都是缺失的且样本足够的情况下可以考虑删除。
还需要查看特征的数值类型:
- 数值型特征本是可以直接入模的,但往往风控人员要对其做分箱,转化为WOE编码进而做标准评分卡等操作。从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定
然后需要过滤数值型类别特征:
#过滤数值型类别特征
def get_numerical_serial_fea(data,feas):
numerical_serial_fea = []
numerical_noserial_fea = []
for fea in feas:
temp = data[fea].nunique()
if temp <= 10:
numerical_noserial_fea.append(fea)
continue
numerical_serial_fea.append(fea)
return numerical_serial_fea,numerical_noserial_fea
numerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(data_train,numerical_fea)
并且分析离散型变量
最后进行数据可视化处理
数值连续型变量分析需要注意:
- 查看某一个数值型变量的分布,查看变量是否符合正态分布,如果不符合正太分布的变量可以log化后再观察下是否符合正态分布。
- 如果想统一处理一批数据变标准化 必须把这些之前已经正态化的数据提出
- 正态化的原因:一些情况下正态非正态可以让模型更快的收敛,一些模型要求数据正态(eg. GMM、KNN),保证数据不要过偏态即可,过于偏态可能会影响模型预测结果。
然后需要进行非数值类型的变量分析。
最后我们得到特征属性分布,再使用数据可视化进行处理,使结果更加可观
最后还需要把单一变量分布可视化:
根绝y值不同可视化x某个特征的分布
- 首先得查看类别型变量在不同y值上的分布
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 8))
train_loan_fr.groupby('grade')['grade'].count().plot(kind='barh', ax=ax1, title='Count of grade fraud')
train_loan_nofr.groupby('grade')['grade'].count().plot(kind='barh', ax=ax2, title='Count of grade non-fraud')
train_loan_fr.groupby('employmentLength')['employmentLength'].count().plot(kind='barh', ax=ax3, title='Count of employmentLength fraud')
train_loan_nofr.groupby('employmentLength')['employmentLength'].count().plot(kind='barh', ax=ax4, title='Count of employmentLength non-fraud')
plt.show()
还要进行透视图,这样才能让我们更好的了解数据
#透视图 索引可以有多个,“columns(列)”是可选的,聚合函数aggfunc最后是被应用到了变量“values”中你所列举的项目上。
pivot = pd.pivot_table(data_train, index=['grade'], columns=['issueDateDT'], values=['loanAmnt'], aggfunc=np.sum)
最后我们可以用三行代码来生成数据报告
import pandas_profiling
pfr = pandas_profiling.ProfileReport(data_train)
pfr.to_file("./example.html")
学习问题与解答
- 什么是离散型的变量?
-
一、获取方式不同
离散型变量:离散型变量则是通过计数方式取得的,即是对所要统计的对象进行计数,增长量非固定的。
连续型变量:连续型变量是一直叠加上去的,增长量可以划分为固定的单位。
二、域不同
离散型变量:离散型变量的域(即对象的集合S)是离散的。
连续型变量:连续型变量的域(即对象的集合S)是连续的。
二、分组方式不同
离散型变量:如果变量值的变动幅度小,就可以一个变量值对应一组,称单项式分组。如果变量值的变动幅度很大,变量值的个数很多,则把整个变量值依次划分为几个区间,各个变量值则按其大小确定所归并的区间,区间的距离称为组距,这样的分组称为组距式分组。
连续型变量:连续型变量由于不能一一列举其变量值,只能采用组距式的分组方式,且相邻的组限必须重叠。
- pandas_profiling的具体功能?
pandas_profiling简介
如果你想更方便快捷地了解数据的全貌,泣血推荐一个python库:pandas_profiling,这个库只需要一行代码就可以生成数据EDA报告。
pandas_profiling基于pandas的DataFrame数据类型,可以简单快速地进行探索性数据分析。
对于数据集的每一列,pandas_profiling会提供以下统计信息:
1、**概要:**数据类型,唯一值,缺失值,内存大小
2、**分位数统计:**最小值、最大值、中位数、Q1、Q3、最大值,值域,四分位
3、**描述性统计:**均值、众数、标准差、绝对中位差、变异系数、峰值、偏度系数
4、最频繁出现的值,直方图/柱状图
5、**相关性分析可视化:**突出强相关的变量,Spearman, Pearson矩阵相关性色阶图
并且这个报告可以导出为HTML,非常方便查看。
学习思路与总结
首先这次Task 2 是对数据的可视化以及查看缺少值和分析离散型的变量
本次Task运用了特别多类型的数据可视化的方法
让我们更加了解这些数据以及数据的特征