文章目录

  • 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:数据分析相关推荐

  1. 【数据挖掘】金融风控 Task02 数据分析

    [数据挖掘]金融风控 Task02 数据分析 1. 探索性数据分析(EDA)概述 1. 1 探索性数据分析概念 1.2 探索性数据分析目的 1.3 探索性数据分析(EDA)与传统统计分析(Classi ...

  2. 金融风控 Task02 数据分析

    [数据挖掘]金融风控 Task02 数据分析 探索性数据分析(EDA)概述 1 探索性数据分析概念 1.2 探索性数据分析目的 1.3 探索性数据分析(EDA)与传统统计分析(Classical An ...

  3. 数据挖掘之金融风控-贷款违约预测 02数据分析

    数据挖掘之金融风控-贷款违约预测 02数据分析 数据挖掘之金融风控-贷款违约预测 02数据分析 1. 学习目标 2. 学习内容 3. 学习过程 3.1 导入库并读取数据集 3.2 数据集基本信息 3. ...

  4. 零基础入门数据挖掘之金融风控-贷款违约预测

    零基础入门数据挖掘之金融风控-贷款违约预测 摘要 1.数据概况 2.数据读取 3.分类指标评价计算 摘要 在实践中学,很高兴有这次机会,与志同道合的小伙伴一起学习,本次主要通过天池实际比赛项目学习数据 ...

  5. 【数据挖掘】金融风控 Task01 赛题理解

    [数据挖掘]金融风控 Task01 赛题理解 1.赛题介绍 1.1赛题概况 1.2 数据概况 1.3 预测指标 1.3.1 混淆矩阵 1.3.2 准确率.精确率.召回率.F1 Score 1.3.3 ...

  6. 金融风控 Task02

    查看数据集中特征缺失值,唯一值 具体的查看缺失特征及缺失率 查看训练集测试集中特征属性只有一值的特征 查看特征的数值类型有哪些,对象类型有哪些 特征一般都是由类别型特征和数值型特征组成,而数值型特征又 ...

  7. 金融风控-贷款违约预测项目记录

    一.项目介绍 阿里天池数据挖掘学习赛:贷款违约预测 学习赛主要为初学者准备的,论坛里有详细的项目建模过程.这里,仅记录一下自己在做这个项目时的一些思路. 二.数据分析 这里的数据分析过程主要参考有: ...

  8. 数据挖掘实践(金融风控-贷款违约预测)(二):数据分析

    数据挖掘实践(金融风控-贷款违约预测)(二):数据分析 目录 数据挖掘实践(金融风控-贷款违约预测)(二):数据分析 1.引言 2.基本知识点 2.1缺失值(Missing data) 2.1.1缺失 ...

  9. 数据挖掘实践(金融风控-贷款违约预测)(三):特征工程

    数据挖掘实践(金融风控-贷款违约预测)(三):特征工程 目录 数据挖掘实践(金融风控-贷款违约预测)(三):特征工程 1.引言 2.特征预处理 2.1缺失值填充 2.2时间格式处理 2.3类别特征处理 ...

最新文章

  1. java怎么接收多选框多数据_表id关联数据获取至页面,制作下拉框多选进行数据多项获取(字段处理)...
  2. FPGA的设计艺术(8)最佳的FPGA开发实践之严格遵循过程
  3. 分布式存储的三个基本问题
  4. 消息队列-ActiveMQ
  5. 用计算机算出鞋子的鞋码,【鞋子尺码对照】鞋子尺码怎么算_鞋子尺码怎么量 - 妈妈网百科...
  6. CentOS 5打造全功能Web服务器
  7. Redis五种数据类型介绍
  8. linux重置root密码_重置丢失的Linux root密码,错误密码的历史记录,Python,Ruby,课堂解决方案等
  9. Zoom创始人袁征转让约1800万股股票 价值超过60亿美元
  10. w3c标准的网页内嵌播放器代码
  11. VS2019如何修改字体大小
  12. Python 类和实例
  13. yarn依赖管理工具,和fis3构建工具 gulp详细用法
  14. mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame教程步骤详解
  15. 国内Docker镜像加速汇总
  16. 【bug解决】上传图片后,取消这次上传 再次执行上传,上次的图片还存在
  17. 介绍Hosts文件和DNS及DNS的解析过程
  18. 力扣解法汇总838-推多米诺
  19. OpenWrt操作系统移植SIM7600CE驱动及调试
  20. 鼠标灵敏度调多少合适

热门文章

  1. SDUT OJ 效率至上(线段树)
  2. linux 使用expect 实现自动登录
  3. 集中云数据加密能否填补安全漏洞?
  4. sysstat工具的用法
  5. Java文件编码格式转换
  6. 设计模式 - 观察者模式(Observer Pattern) Java内置 用法
  7. 9月30号后新版CCNA考试要点
  8. poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
  9. java dom_Java DOM 解析 XML详解
  10. 自动化测试基础(一):字符串的取值、切割、替换、去除、拼接