android开发实战 GraphQL 循环 作用域 ipv4 log4j pointers terminal jboss db2 vue网站模板 vue树形菜单 vue自定义组件 bootstrap管理模板 jquery循环 erp项目描述 matlab颜色代码 matlab生成对角矩阵 java手机验证码 js原生点击事件 svn安装后右键不显示 python3下载安装 python程序 搭建java开发环境 java设置 java语言简介 java对象序列化 找茬辅助 制作字幕的软件 c语言表白代码 js延迟加载的方式 笔记本测试软件 怎么设置迅雷为默认下载器 r330不能识别墨盒 php随机数函数 c程序 正则表达式数字 剑灵邪魔铃怎么获得 dnf胜利的证明有什么用 数据库编程软件
当前位置: 首页 > 学习教程  > 编程语言

阿里天池数据挖掘大赛——贷款违约预测之探索性分析(可视化展示)

2021/4/19 23:30:57 文章标签:

项目背景: 选题出自阿里天池大赛——金融风控_贷款违约预测。赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款。 *以下作图基于一个前提假设,认为字段中唯…

项目背景:

选题出自阿里天池大赛——金融风控_贷款违约预测。赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款。

*以下作图基于一个前提假设,认为字段中唯一值较少的特征变量离散型变量,连续性加强的特征变量为连续型变量。

主要分析内容:

第一组图

1、

*展示训练数据集中的各个字段的缺失情况。
#查看有缺失的特征属性
train_null_data=train_data[has_null.index]
train_null_data.isnull().sum().plot(kind='barh')
for x,y in enumerate(has_null):
    plt.text(y+500,x,y,fontsize=9)
plt.title('the number of queshi')
plt.savefig('tmp_pictures/queshi_fenbu.jpg',bbox_inches='tight')

在这里插入图片描述

2、

展示离散型特征变量中各个类别在不同相应变量上的分布情况

def duijizhu_hebing(data,n):
    figure,axes=plt.subplots(10,2,figsize=(12,4*n))
    count_in_feature={}
    for each in data.columns:
        if each not in ['isDefault','policyCode']:
            count_in_feature[each]=data[each].unique().shape[0]            
    #选择不同值最少的n个特征
    min_n=pd.DataFrame([count_in_feature]).T.sort_values(by=0)[:10]
    #画出这n个特征中每个值对应是否违约的分布情况
    for each in min_n.index:
        i=min_n.index.tolist().index(each)
        data.groupby(by=each).isDefault.value_counts().unstack('isDefault').plot(kind='bar',stacked=True,ax=axes[i,0])
        tmp=data.groupby(by=each).isDefault.value_counts().unstack('isDefault')
            #对临时数据集进行规格化
        tmp.div(tmp.sum(1).astype('float'),axis=0).plot(kind='bar',stacked=True,ax=axes[i,1])
    plt.savefig('tmp_pictures/aaaa.jpg')
duijizhu_hebing(train_data,10)

*此处取离散程度最强的前十个特征变量进行作图(数量可以根据自己的需求拟定),输出如下图片
在这里插入图片描述

3、

类似于第二张图,在此基础上添加数值,完整代码如下:

def biliduiji(data,list_,canzhao,path):
    for each in list_:
        #画布
        figure,axes=plt.subplots(1,1,figsize=(8,data[each].unique().shape[0]*0.3))
        #组合
        tmp=data.groupby(each)[canzhao].value_counts().unstack(canzhao)
        tmp['total']=tmp.sum(axis=1)
        tmp=tmp.drop('total',axis=1)
        #归一
        b=tmp.div(tmp.sum(1).astype('float'),axis=0)      
        b=b.round(2)
        b=b.fillna(0)
        #作图
        b.plot(kind='barh',stacked=True,ax=axes,width=0.7)
        plt.yticks(fontsize=10)
        plt.legend(loc='lower right')
        #数据
        for col in b:
            for y,x in enumerate(b[col].values):       
                if x!=0:
                    plt.text(x*0.5+sum(b.iloc[y][:b.columns.tolist().index(col)]),y-0.1,x,fontsize=10)
        plt.title(f'{each} for {canzhao}',fontsize=14)
        plt.savefig(f'{path}/{each} for {canzhao}.jpg',bbox_inches='tight')```

*此函数中一共有四个参数,分别是需要处理的数据集,需要分析的字段,选择的分类参照变量,保存路径。可以根据自己的需要输出任意数据集中的任意字段基于某特征的分类情况。
输出结果如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过以上三组图片已经可以对数据集中蕴含的基本规律做出描述分析。


第二组图

这部分选用数据集较小的tips数据

1、相关关系图

在这里插入图片描述

2、散点图

在这里插入图片描述

总结

两组图之间似乎没有任何衔接关系,但通过第二组图可以联想到,如果同样是seaborn绘制第一组数据中的堆积柱状图,可以一定程度上减少代码的复杂性,但第一组图的代码中包含的功能较多,对于指定的业务场景复用性较强。


本文链接: http://www.dtmao.cc/news_show_942360.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?