数据挖掘实践(金融风控)——task02:数据分析
文章目录
- 1.读入数据
- 2.总体了解
- 3.查看数据集中特征缺失值,唯一值等
- 1.缺失值
- 2.唯一值
- 4.查看特征的数值类型和对象类型
- 5.变量分布可视化
- 单一变量分布可视化
- 根据y值不同可视化x某个特征的分布
- 时间格式数据处理及查看
- 透视图
- 用pandas_profiling生成数据报告
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')data_train = pd.read_csv('./train.csv')
data_test_a = pd.read_csv('./testA.csv')
- 1.TSV与CSV的区别:
- 从名称上即可知道,TSV是用制表符(Tab,’\t’)作为字段值的分隔符;CSV是用半角逗号(’,’)作为字段值的分隔符;
- Python对TSV文件的支持: Python的csv模块准确的讲应该叫做dsv模块,因为它实际上是支持范式的分隔符分隔值文件(DSV,delimiter-separated values)的。 delimiter参数值默认为半角逗号,即默认将被处理文件视为CSV。当delimiter=’\t’时,被处理文件就是TSV。
- 2.通过nrows参数,来设置读取文件的前多少行,nrows是一个大于等于0的整数。
- 3.分块读取
data_train_sample = pd.read_csv("./train.csv",nrows=5)
#设置chunksize参数,来控制每次迭代数据的大小
chunker = pd.read_csv("./train.csv",chunksize=5)
for item in chunker:print(type(item))#<class 'pandas.core.frame.DataFrame'>print(len(item))#5
2.总体了解
# 查看维度
data_train.shape#查看列名
data_train.columns# 查看数据类型
data_train.info()# 查看基本统计量
data_train.describe()# 查看数据的前三行和后三行
data_train.head(3).append(data_train.tail(3))
3.查看数据集中特征缺失值,唯一值等
1.缺失值
# 判断数据是否为缺失值
data_train.isnull()# 存在缺失值的列数
data_train.isnull().any().sum()# nan可视化
missing = data_train.isnull().sum()/len(data_train)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
2.唯一值
# nunique方法输出选定列不同值的列表
data_train[col].nunique()# 查看存在唯一值的列
one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]
- 比赛大杀器lgb模型可以自动处理缺失值
4.查看特征的数值类型和对象类型
# 选择排除对象类型的列
data_train.select_dtypes(exclude=['object']).columns# 两种类型变量划分
numerical_fea = list(data_train.select_dtypes(exclude=['object']).columns)
category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))# 数值变量分为离散变量和连续变量,以nunique方法划分
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)continuenumerical_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)# 变量分析,value_counts方法记录出现的值及次数
data_train['term'].value_counts()# 可视化分析
plt.figure(figsize=(16,12))
plt.suptitle('Transaction Values Distribution', fontsize=22)
plt.subplot(221)
sub_plot_1 = sns.distplot(data_train['loanAmnt'])
sub_plot_1.set_title("loanAmnt Distribuition", fontsize=18)
sub_plot_1.set_xlabel("")
sub_plot_1.set_ylabel("Probability", fontsize=15)plt.subplot(222)
sub_plot_2 = sns.distplot(np.log(data_train['loanAmnt']))
sub_plot_2.set_title("loanAmnt (Log) Distribuition", fontsize=18)
sub_plot_2.set_xlabel("")
sub_plot_2.set_ylabel("Probability", fontsize=15)
- 离散型变量相差悬殊时用不用再分析
- 查看某一个数值型变量的分布,查看变量是否符合正态分布,如果不符合正太分布的变量可以log化后再观察下是否符合正态分布。
- 如果想统一处理一批数据变标准化 必须把这些之前已经正态化的数据提出
- 正态化的原因:一些情况下正态非正态可以让模型更快的收敛,一些模型要求数据正态(eg. GMM、KNN),保证数据不要过偏态即可,过于偏态可能会影响模型预测结果。
5.变量分布可视化
单一变量分布可视化
plt.figure(figsize=(8, 8))
sns.barplot(data_train["employmentLength"].value_counts(dropna=False)[:20],data_train["employmentLength"].value_counts(dropna=False).keys()[:20])
plt.show()
根据y值不同可视化x某个特征的分布
# 首先查看类别型变量在不同y值上的分布
train_loan_fr = data_train.loc[data_train['isDefault'] == 1]
train_loan_nofr = data_train.loc[data_train['isDefault'] == 0]
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()# 其次查看连续型变量在不同y值上的分布
fig, ((ax1, ax2)) = plt.subplots(1, 2, figsize=(15, 6))
data_train.loc[data_train['isDefault'] == 1] \['loanAmnt'].apply(np.log) \.plot(kind='hist',bins=100,title='Log Loan Amt - Fraud',color='r',xlim=(-3, 10),ax= ax1)
data_train.loc[data_train['isDefault'] == 0] \['loanAmnt'].apply(np.log) \.plot(kind='hist',bins=100,title='Log Loan Amt - Not Fraud',color='b',xlim=(-3, 10),ax=ax2)total = len(data_train)
total_amt = data_train.groupby(['isDefault'])['loanAmnt'].sum().sum()
plt.figure(figsize=(12,5))
plt.subplot(121)##1代表行,2代表列,所以一共有2个图,1代表此时绘制第一个图。
plot_tr = sns.countplot(x='isDefault',data=data_train)#data_train‘isDefault’这个特征每种类别的数量**
plot_tr.set_title("Fraud Loan Distribution \n 0: good user | 1: bad user", fontsize=14)
plot_tr.set_xlabel("Is fraud by count", fontsize=16)
plot_tr.set_ylabel('Count', fontsize=16)
for p in plot_tr.patches:height = p.get_height()plot_tr.text(p.get_x()+p.get_width()/2.,height + 3,'{:1.2f}%'.format(height/total*100),ha="center", fontsize=15) percent_amt = (data_train.groupby(['isDefault'])['loanAmnt'].sum())
percent_amt = percent_amt.reset_index()
plt.subplot(122)
plot_tr_2 = sns.barplot(x='isDefault', y='loanAmnt', dodge=True, data=percent_amt)
plot_tr_2.set_title("Total Amount in loanAmnt \n 0: good user | 1: bad user", fontsize=14)
plot_tr_2.set_xlabel("Is fraud by percent", fontsize=16)
plot_tr_2.set_ylabel('Total Loan Amount Scalar', fontsize=16)
for p in plot_tr_2.patches:height = p.get_height()plot_tr_2.text(p.get_x()+p.get_width()/2.,height + 3,'{:1.2f}%'.format(height/total_amt * 100),ha="center", fontsize=15)
时间格式数据处理及查看
# 转化成时间格式 issueDateDT特征表示数据日期离数据集中日期最早的日期(2007-06-01)的天数
data_train['issueDate'] = pd.to_datetime(data_train['issueDate'],format='%Y-%m-%d')
startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')
data_train['issueDateDT'] = data_train['issueDate'].apply(lambda x: x-startdate).dt.days# 转化成时间格式
data_test_a['issueDate'] = pd.to_datetime(data_train['issueDate'],format='%Y-%m-%d')
startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')
data_test_a['issueDateDT'] = data_test_a['issueDate'].apply(lambda x: x-startdate).dt.days
plt.hist(data_train['issueDateDT'], label='train');
plt.hist(data_test_a['issueDateDT'], label='test');
plt.legend();
plt.title('Distribution of issueDateDT dates');
透视图
pivot = pd.pivot_table(data_train, index=['grade'], columns=['issueDateDT'], values=['loanAmnt'], aggfunc=np.sum)
用pandas_profiling生成数据报告
import pandas_profiling
pfr = pandas_profiling.ProfileReport(data_train)
pfr.to_file("./example.html")
以上内容来自datawhale金融风控组队学习
数据挖掘实践(金融风控)——task02:数据分析相关推荐
- 【数据挖掘】金融风控 Task02 数据分析
[数据挖掘]金融风控 Task02 数据分析 1. 探索性数据分析(EDA)概述 1. 1 探索性数据分析概念 1.2 探索性数据分析目的 1.3 探索性数据分析(EDA)与传统统计分析(Classi ...
- 金融风控 Task02 数据分析
[数据挖掘]金融风控 Task02 数据分析 探索性数据分析(EDA)概述 1 探索性数据分析概念 1.2 探索性数据分析目的 1.3 探索性数据分析(EDA)与传统统计分析(Classical An ...
- 数据挖掘之金融风控-贷款违约预测 02数据分析
数据挖掘之金融风控-贷款违约预测 02数据分析 数据挖掘之金融风控-贷款违约预测 02数据分析 1. 学习目标 2. 学习内容 3. 学习过程 3.1 导入库并读取数据集 3.2 数据集基本信息 3. ...
- 零基础入门数据挖掘之金融风控-贷款违约预测
零基础入门数据挖掘之金融风控-贷款违约预测 摘要 1.数据概况 2.数据读取 3.分类指标评价计算 摘要 在实践中学,很高兴有这次机会,与志同道合的小伙伴一起学习,本次主要通过天池实际比赛项目学习数据 ...
- 【数据挖掘】金融风控 Task01 赛题理解
[数据挖掘]金融风控 Task01 赛题理解 1.赛题介绍 1.1赛题概况 1.2 数据概况 1.3 预测指标 1.3.1 混淆矩阵 1.3.2 准确率.精确率.召回率.F1 Score 1.3.3 ...
- 金融风控 Task02
查看数据集中特征缺失值,唯一值 具体的查看缺失特征及缺失率 查看训练集测试集中特征属性只有一值的特征 查看特征的数值类型有哪些,对象类型有哪些 特征一般都是由类别型特征和数值型特征组成,而数值型特征又 ...
- 金融风控-贷款违约预测项目记录
一.项目介绍 阿里天池数据挖掘学习赛:贷款违约预测 学习赛主要为初学者准备的,论坛里有详细的项目建模过程.这里,仅记录一下自己在做这个项目时的一些思路. 二.数据分析 这里的数据分析过程主要参考有: ...
- 数据挖掘实践(金融风控-贷款违约预测)(二):数据分析
数据挖掘实践(金融风控-贷款违约预测)(二):数据分析 目录 数据挖掘实践(金融风控-贷款违约预测)(二):数据分析 1.引言 2.基本知识点 2.1缺失值(Missing data) 2.1.1缺失 ...
- 数据挖掘实践(金融风控-贷款违约预测)(三):特征工程
数据挖掘实践(金融风控-贷款违约预测)(三):特征工程 目录 数据挖掘实践(金融风控-贷款违约预测)(三):特征工程 1.引言 2.特征预处理 2.1缺失值填充 2.2时间格式处理 2.3类别特征处理 ...
最新文章
- java怎么接收多选框多数据_表id关联数据获取至页面,制作下拉框多选进行数据多项获取(字段处理)...
- FPGA的设计艺术(8)最佳的FPGA开发实践之严格遵循过程
- 分布式存储的三个基本问题
- 消息队列-ActiveMQ
- 用计算机算出鞋子的鞋码,【鞋子尺码对照】鞋子尺码怎么算_鞋子尺码怎么量 - 妈妈网百科...
- CentOS 5打造全功能Web服务器
- Redis五种数据类型介绍
- linux重置root密码_重置丢失的Linux root密码,错误密码的历史记录,Python,Ruby,课堂解决方案等
- Zoom创始人袁征转让约1800万股股票 价值超过60亿美元
- w3c标准的网页内嵌播放器代码
- VS2019如何修改字体大小
- Python 类和实例
- yarn依赖管理工具,和fis3构建工具 gulp详细用法
- mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame教程步骤详解
- 国内Docker镜像加速汇总
- 【bug解决】上传图片后,取消这次上传 再次执行上传,上次的图片还存在
- 介绍Hosts文件和DNS及DNS的解析过程
- 力扣解法汇总838-推多米诺
- OpenWrt操作系统移植SIM7600CE驱动及调试
- 鼠标灵敏度调多少合适