1.Lending Club数据处理初步处理

  • 1.1 借贷状态数据处理
    1、借贷状态分为:Fully Paid:,Charged Off和Current,Default等。
    2、处理的规则:如果借贷状态为Fully Paid, 结果返回0,否则返回1,实现的代码如下图所示:
  • 1.2 借贷期限预处理
    1、在Lending club数据中,借贷期限的数据内容为:‘n/a’,‘1 year’,‘2 years’,’>2 years’,'10+ years’等,需要根据不容期限,将期限转化为对应的数字。
    2、处理的规则如下:
    ‘< 1 year’ -> 0.5
    ‘n/a’ -> 0.5
    ‘2 years’ -> 2
    ‘10+ years’ -> 10
    根据对应的转换规则,转化的实现代码如下图所示:

2 探索性数据分析的方法

  • 2.1 数字化探索-查看数据基本信息和统计信息

  • 2.2 数字化探索-查看不同借贷状态的数据量
    1、使用数据:used_cols = [‘loan_amnt’, ‘term’, ‘int_rate’, ‘grade’, ‘issue_d’, ‘addr_state’, 'loan_status’]
    2、不同借贷状态的数据量:
    print(used_data['loan_status'].value_counts())

  • 2.3 数字化探索-按地区州统计借贷总额
    data_group_by_state = used_data.groupby(['addr_state'])['loan_amnt'].sum()

  • 2.4 数字化探索-按月统计借贷总额
    print(loan_amount_group_by_month_df.head()

  • 2.5 图像化探索-按月统计借贷总额预览
    loan_amount_group_by_month_df.plot()
    plt.xlabel('日期')
    plt.ylabel('借贷总量')
    plt.title('日期 vs 借贷总量')
    plt.tight_layout()
    plt.savefig('./pics/loan_amount_vs_month.png')
    plt.show()

  • 2.6 图像化探索-按地区(州)统计借贷总额预览
    data_group_by_state.plot(kind='bar')
    plt.xlabel('州')
    plt.ylabel('借贷总量')
    plt.title('州 vs 借贷总量')
    plt.tight_layout()
    plt.savefig('./pics/loan_amount_vs_state.png')
    plt.show()

  • 2.7 图像化探索 -正负样本比例

    proc_filter_data['label'].value_counts().plot(kind='pie', autopct='%.2f%%')
    plt.title('正负样本比例')
    plt.tight_layout()
    plt.savefig('./pics/label_pie.png')
    plt.show()

3 数据介绍

3.1 数据集详情

  1. https://www.kaggle.com/wendykan/lending-club-loan-data
  2. 数据集包含2007-2015年间的借贷数据,包含当前借贷状态(current,Late,Paid,等)以及最新的付账信息
  3. 额外的信息包括:信用评分、金融咨询次数、住址邮政编码、所在州等
  4. 该数据集包括约890,000条记录,75列数据

3.2 资源和工具库

Python资源库
cycler==0.10.0
husl==4.0.3
joblib==0.14.1
matplotlib==1.5.3
numpy==1.18.0
pandas==0.23.0
pyparsing==2.4.6
python-dateutil==2.8.1
pytz==2019.3
scikit-learn==0.22.1
scipy==1.1.0
seaborn==0.7.1
six==1.14.0
sklearn==0.0

3.3 数据清洗的步骤

  1. 读取数据集
  2. 数据处理
  3. Lending Club数据数字化探索
  4. Lending Club图像化探索

4 完成代码

6.1 项目的目录结构

6.2 完成代码

  • 6.2.1 data_proc_tools.py
from __future__ import division, print_functiondef insepct_data(df_data):print('\n数据预览:')print(df_data.head())print('\n数据统计信息:')print(df_data.describe())print('\n数据集基本信息:')print(df_data.info())
  • 6.2.2 main.py
# -*- coding: utf-8 -*-"""作者:     Guangzhan版本:     1.0项目名称:Lending Club借贷数据处理及初步分析Lending Club借贷数据探索性分析及可视化
"""from __future__ import division, print_function # python2,python3
import os
import pandas as pd
import zipfile  # 压缩文件的工具from day02.unit11.data_proc_tools import insepct_data # 导入对应的审查数据import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import stylestyle.use('ggplot')  # 设置图片显示的主题样式# 解决matplotlib显示中文问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题dataset_path = './dataset'
zip_file_name = 'loan.csv.zip'
csv_file_name = './loan.csv'def analyze_lending_club_data(lc_data):# 选择列used_cols = ['loan_amnt', 'term', 'int_rate', 'grade', 'issue_d', 'addr_state', 'loan_status']used_data = lc_data[used_cols]# 查看数据集信息print('\n分析数据预览:')print(used_data.head())# 1. 查看不同借贷状态的数据量print('\n各借贷状的态数据量')print(used_data['loan_status'].value_counts())# 2. 按月份统计借贷金额总量# 转换数据类型print('时间数据类型转换...')used_data['issue_d2'] = pd.to_datetime(used_data['issue_d'])print('\n分析数据预览:')print(used_data.head())print('\n分析数据集基本信息:')print(used_data.info())data_group_by_date = used_data.groupby(['issue_d2']).sum()data_group_by_date.reset_index(inplace=True)data_group_by_date['issue_month'] = data_group_by_date['issue_d2'].apply(lambda x: x.to_period('M'))loan_amount_group_by_month = data_group_by_date.groupby('issue_month')['loan_amnt'].sum()# 结果转换为DataFrameloan_amount_group_by_month_df = pd.DataFrame(loan_amount_group_by_month).reset_index()# Porj 2.2: 可视化 借贷总量 vs 日期loan_amount_group_by_month_df.plot()plt.xlabel('日期')plt.ylabel('借贷总量')plt.title('日期 vs 借贷总量')plt.tight_layout()plt.savefig('./pics/loan_amount_vs_month.png')plt.show()print('\n按月统计借贷总额预览:')print(loan_amount_group_by_month_df.head())# 保存结果loan_amount_group_by_month_df.to_csv('./output/loan_amount_by_month.csv', index=False)# 3. 按地区(州)统计借贷金额总量data_group_by_state = used_data.groupby(['addr_state'])['loan_amnt'].sum()# Porj 2.2: 可视化 借贷总量 vs 州data_group_by_state.plot(kind='bar')plt.xlabel('州')plt.ylabel('借贷总量')plt.title('州 vs 借贷总量')plt.tight_layout()plt.savefig('./pics/loan_amount_vs_state.png')plt.show()# 结果转换为DataFramedata_group_by_state_df = pd.DataFrame(data_group_by_state).reset_index()print('\n按州统计借贷总额预览:')print(data_group_by_state_df.head())# 保存结果data_group_by_state_df.to_csv('./output/loan_amount_by_state.csv', index=False)# 4. 借贷评级、期限和利率的关系data_group_by_grade_term = used_data.groupby(['grade', 'term'])['int_rate'].mean()data_group_by_grade_term_df = pd.DataFrame(data_group_by_grade_term).reset_index()print('\n借贷评级、期限和利率关系预览:')print(data_group_by_grade_term_df.head())# 保存结果data_group_by_grade_term_df.to_csv('./output/intrate_by_grade_term.csv', index=False)# 转换为透视表data_group_by_grade_term_pivot = data_group_by_grade_term_df.pivot(index='grade', columns='term', values='int_rate')# 保存结果data_group_by_grade_term_pivot.to_csv('./output/intrate_by_grade_term2.csv')def create_label(status_val):"""根据status创建0, 1标签status_val: loan_status值返回=======label:  如果loan_status是'Fully Paid',返回0,否则返回1"""label = 1if status_val == 'Fully Paid':label = 0return labeldef proc_emp_length(emp_length_val):if emp_length_val == '< 1 year' or emp_length_val == 'n/a':emp_length_feat = 0.5elif emp_length_val == '10+ years':emp_length_feat = 10else:emp_length_val = str(emp_length_val)emp_length_feat = float(emp_length_val.rstrip(' years'))return emp_length_featdef run_main():"""主函数"""zip_file_path = os.path.join(dataset_path, zip_file_name)csv_file_path = os.path.join(dataset_path, csv_file_name)if not os.path.exists(csv_file_path):# 如果不存在csv文件,解压zip文件with zipfile.ZipFile(zip_file_path) as zf:zf.extractall(dataset_path)# 读取数据集raw_data = pd.read_csv(csv_file_path)# 审查数据集insepct_data(raw_data)# 对lending club数据进行分析analyze_lending_club_data(raw_data)# Porj 2.2: 可视化 借贷状态分布df_status = raw_data.loc[raw_data['loan_status'].isin(['Current', 'Charged Off', 'Default', 'Fully Paid', 'In Grace Period', 'Late (16-30 days)','Late (31-120 days)'])]plt.xticks(rotation=90)plt.xlabel('借贷状态')sns.countplot(df_status['loan_status'], palette='Set2')plt.tight_layout()plt.savefig('./pics/loan_status.png')plt.show()# 数据处理及转换,用于后续模型的输入# 根据借贷状态筛选数据,只保留借贷状态为'Fully Paid', 'Charged Off'和'Default'的数据# 'Charged Off'和'Default'的解释请参考:https://help.lendingclub.com/hc/en-us/articles/216127747filter_mask = raw_data['loan_status'].isin(['Fully Paid', 'Charged Off', 'Default'])filter_data = raw_data[filter_mask]print(filter_data['loan_status'].value_counts())# 为数据添加 0, 1 标签,'Fully Paid' -> 0, Otherwise -> 1proc_filter_data = filter_data.copy()proc_filter_data['label'] = filter_data['loan_status'].apply(create_label)# Porj 2.2: 可视化 正负样本比例proc_filter_data['label'].value_counts().plot(kind='pie', autopct='%.2f%%')plt.title('正负样本比例')plt.tight_layout()plt.savefig('./pics/label_pie.png')plt.show()# 保存处理结果proc_filter_data.to_csv('./output/proc_loan.csv', index=False)if os.path.exists(csv_file_path):# 如果存在csv文件,删除csv文件,释放空间os.remove(csv_file_path)if __name__ == '__main__':run_main()t.savefig('./pics/label_pie.png')plt.show()# 保存处理结果proc_filter_data.to_csv('./output/proc_loan.csv', index=False)if os.path.exists(csv_file_path):# 如果存在csv文件,删除csv文件,释放空间os.remove(csv_file_path)

十一、探索性数据分析应用案例相关推荐

  1. 机器学习笔记 - 探索性数据分析(EDA) 入门案例五

    1.Kaggle比赛 - 泰坦尼克号 泰坦尼克号的沉没是历史上最著名的沉船事件之一.1912 年 4 月 15 日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,2224 名乘客和船员中有 1502 ...

  2. R语言SVM支持向量机模型数据分类实战:探索性数据分析、模型调优、特征选择、核函数选择

    R语言SVM支持向量机模型数据分类实战:探索性数据分析.模型调优.特征选择.核函数选择 目录 R语言SVM支持向量机模型数据分类实战:探索性数据分析.模型调优.特征选择.核函数选择 ​ #SVM基本原 ...

  3. 统计思维:程序员数学之概率统计(第2版):第1章 探索性数据分析

    第1章 探索性数据分析 如果能将数据与实际方法相结合,就可以在存在不确定性时解答问题并指导决策,这就是本书的主题. 举个例子.我的妻子在怀第一胎时,我听到了一个问题:第一胎是不是经常晚于预产期出生?下 ...

  4. 九、探索性数据分析的应用

    1.探索性数据分析概述 探索性数据分析主要包括以下方面的内容: 探索性数据分析的概念 探索性数据分析的目的 探索性数据分析的常见工具 探索变量关系及其可视化 2 探索性数据分析的概念 1977年Joh ...

  5. 泰坦尼克数据集预测分析_探索性数据分析—以泰坦尼克号数据集为例(第1部分)

    泰坦尼克数据集预测分析 Imagine your group of friends have decided to spend the vacations by travelling to an am ...

  6. 数据挖掘:探索性数据分析(EDA)(补充)

    数据挖掘:探索性数据分析(EDA)(补充) 在上一篇文章数据挖掘:探索性数据分析(EDA)中,已经讨论了一些探索性分析的方法,但去敏数据的处理方式和一些多元统计的方法没有做介绍.本篇文章主要讲这两方面 ...

  7. 数据科学的原理与技巧 五、探索性数据分析

    五.探索性数据分析 原文:DS-100/textbook/notebooks/ch05 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 探索性数据分析是一种态度,一种灵活的状态, ...

  8. 基于Spark的银行直销电话数据探索性数据分析

    基于Spark的银行直销电话数据探索性数据分析 一.业务场景 二.数据集说明 三.操作步骤 阶段一.启动HDFS.Spark集群服务和zeppelin服务器 阶段二.准备案例中用到的数据集 阶段三.对 ...

  9. 探索性数据分析:银行信贷数据集

    作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 前言 本文为 ...

最新文章

  1. .net中excel遇到的一些问题
  2. [Idea Fragments]2013.08.08
  3. mysql管理数据 并上传至云端_怎样将MySQL数据库上传到服务器
  4. 笔记系列------sqlloader的使用
  5. 内存映射机制(mmap)
  6. 智慧农业:农业物联网实施方案
  7. 欧拉函数计算公式的推导
  8. Win10 System进程占用硬盘100%,Microsoft IME 占用CPU高
  9. 【概念】椭球面在球面上的投影
  10. docker CMD 命令
  11. 网管必修课 中小企业安全路由器配置
  12. 青青子佩(朋友写给我的)
  13. WiFi认证过程需要的协议和服务
  14. 疫情大考之后 企业数字化转型或将出现报复性增长
  15. github项目管理和贡献代码
  16. Mac 使用Jad 反编译class文件
  17. Altium Designer的几种常用布线技巧
  18. CSS三大布局之“定位”的使用场景 要懂得学以致用
  19. Swin-Transformer-Object-Detection训练自己的数据集
  20. App崩溃原因定位分析

热门文章

  1. Java 基础 - 面向对象(不错)
  2. 我为什么从 Google 辞职?
  3. Java学习_int和Integer的区别+包装类
  4. 我是一名黑客我也是一名程序员
  5. Yii的各种render
  6. Linux的Nginx六:源码|安装
  7. c语言case无参,如何使用可变参数模板构建switch-case
  8. 用html5做一个简单网页_用Python做一个简单的翻译工具
  9. jAVA not find main_java编程时出现Could not find the main class 怎么解决???
  10. html action不起作用,Html.ActionLink做为按钮或图像,而不是连接