R 多变量数据预处理_数据预处理——一步搞定数据清洗

1 关于数据清洗

无论是数据分析还是模型开发都绕不开准备数据这一环。有人说,整个数据科学的工作有70%甚至80%的时间都花在了数据准备上。

我将数据准备分为四个环节——数据整合、数据清洗、数据转换、探索性数据分析,这是一个互相迭代的闭环过程,例如,我们做完探索性数据分析后,可能又要进行数据转换或者数据清洗工作,之后又开始探索性数据分析。

143c6a0a3a2544cf0ac1ccc09981f80c.png

数据准备过程是从数据收集开始的,通常我们将其称为ETL过程(Extract Transform Load)。我们可能需要操作多个一对一,一对多或多对多的关系表,将不同来源的数据整合在一起,通过KEY 键将数据汇聚成所需的分析级别。

数据清洗是整合数据后所需要进行的数据预处理工作。在这一步,我们将脏数据清理为相对比较规整的数据,数据如果不清洗,那很可能是garbage in & garbage out了。

不同的数据,可能有不同的清洗方法,但无论是何种数据,在整个数据清洗过程中,总是有那么一些步骤和方法是通用的,例如缺失值分析和处理。

那有没有一种工具,可以完成数据清洗的这些通用流程,减少数据清洗的时间和简化繁琐的清洗流程呢?答案当然是有的,那就是R语言creditmodel包里的数据清洗模块。

如果掌握了这一数据清洗神器,你就可以鄙视那些在数据预处理阶段花了70%的时间的人了。

2 creditmodel包的data_cleansing模块简介

creditmodel是汉森老师开发的一个强大的R语言数据科学工具包,有数据预处理、变量衍生、数据分析、数据可视化、自动化建模五大功能模块。

code{data_cleansing}函数是数据清洗模块的主函数,这是一个简单的数据清理函数,封装了creditmodel包里面的众多数据清洗函数,例如remove_duplicated,null_blank_na, entry_rate_na, low_variance_filter, process_nas, process_outlierschar_to_num,time_transfer

这个函数所能做的数据清洗工作如下:

  • 检查数据表和目标变量的格式
  • 删除所有值都缺失的变量
  • 删除低方差的变量
  • 用NA替换空、NULL或blank,-9999或其他代表缺失的值
  • 将唯一值比例大于一定阈值(95%)的变量二值化
  • 对缺失值比例大于一定阈值的变量进行二值化处理
  • 合并类别个数超过一定数目(10)的变量类别
  • 将字符变量(实际是时间的变量)转换为时间格式
  • 将字符变量(实际上是包含字符串的数值型)转换为数值变量
  • 删除重复的观察样本
  • 处理异常值
  • 处理缺失值

3 data_cleansing 函数简介

Data Cleaning

Description

The data_cleansing function is a simpler wrapper for data cleaning functions, such as remove_duplicated,null_blank_na, entry_rate_na, low_variance_filter, process_nas, process_outlierschar_to_num,time_transfer and so on.

Usage

data_cleansing(dat, target = NULL, obs_id = NULL, occur_time = NULL,
pos_flag = NULL, x_list = NULL, ex_cols = NULL,
miss_values = NULL, remove_dup = TRUE, outlier_proc = TRUE,
missing_proc = "median", low_var = 0.999, missing_rate = 0.98,
merge_cat = 30, note = TRUE, parallel = FALSE, save_data = FALSE,
file_name = NULL, dir_path = tempdir())

4 如何使用data_cleansing进行数据清洗?

4.1 示例数据集介绍

我们使用creditmodel默认数据集lendingclub来演示数据清洗模块。lendingclub原始数据如下图所示,其实是比较脏的一个数据集。例如,日期数据issue_d是string类型的,dti_joint变量本来是数据类型变量却是string格式。缺失值有用"Missing"表示的,也有NA表示的,有的甚至是空格表示缺失,然后zip_code变量类别过多,很多类别只有十几个样本,还有一些变量有明显的异常值,例如年annual_inc。

d69f0392d3da236da19d6606e9a50edb.png

4.2 使用data_cleansing进行数据清洗

只需要加载安装creditmodel包,然后使用data_cleansing()函数进行清洗数据就可以了。你需要设置一些关键的参数,这些参数的具体解释,可以参考第3小节。

具体如下所示:

#安装和加载creditmodel包
install.packages("creditmodel")
library(creditmodel)
#数据清洗
lendingclub_cl = data_cleansing(dat = lendingclub, 
                             target = "loan_status",
                             obs_id = "id", 
                             occur_time = "issue_d", 
                             pos_flag = "1|bad", 
                             x_list = NULL, 
                             ex_cols = "^mo_sin_",
                             miss_values = c("Missing",-1,-9999),
                             remove_dup = TRUE, 
                             outlier_proc = TRUE,
                             missing_proc = "median",
                             low_var = 0.999, 
                             missing_rate = 0.99, 
                             merge_cat = 20,
                             note = TRUE,
                             parallel = FALSE,
                             save_data = FALSE, 
                             file_name = "lendingclub",
                             dir_path = tempdir())

44953661241de8c8cc86fa37b313cd31.png

e8a4a8b0caca29d919dff587e7d2e9fd.png

4.3 结果展示

运行完程序,我们发现清洗后的数据已经相当规整,issue_d这一时间变量被识别,并转换为时间格式;本来为类别变量的dti_joint也被识别,而转换为数值型变量;缺失值经过了缺失值分析和处理,对于信息缺失的类别变量,缺失值被填充为"missing",而数值型变量填充为 -1。异常值也进行了分析和处理,zip_code的样本数过少的类别被统一归到"other"等等。

bf6aed78a1a106a5aa0dd5df79ee36fa.png

都看到这里了,双击屏幕点个赞,再走吧!

5总结
creditmodel包的数据清洗模块让数据预处理更简单和省时。
下一步,我将逐步分解数据清洗的各个子模块的步骤和原理,例如缺失值分析与处理、异常值分析与处理等。
R语言creditmodel包是集变量衍生、数据预处理、数据分析、建模、数据可视化为一体的强大的数据科学工具包,关于该包的更深入的使用,还请关注汉森老师的公众号hansenmode
觉得本文有参考意义的同学请点个赞或者转发,以鼓励汉森老师出产更多的作品。
历史文章:
R语言creditmodel包:快速构建信用评分模型
使用R语言creditmodel包进行Vintage分析或留存率分析
如何进行客群细分以提升信用评分模型的性能
LBS包——地理位置数据加工处理神器
告别996,开源的机器学习自动化建模工具包,你值得拥有

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值