×

数据预处理——一步搞定数据清洗

hqy hqy 发表于2025-02-27 12:51:57 浏览10 评论0百度已收录

抢沙发发表评论

1 关于数据清洗

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

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

数据准备过程是从数据收集开始的,通常我们将其称为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_outliers,char_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_outliers,char_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())

Arguments

参数参数解释datA data frame with x and target.targetThe name of target variable.obs_idThe name of ID of observations. Default is NULL.occur_timeThe name of occur time of observations. Default is NULL.pos_flagThe value of positive class of target variable, default: "1".x_listA list of x variables.ex_colsA list of excluded variables. Default is NULL.miss_valuesOther extreme value might be used to represent missing values, e.g: -9999, -9998. These miss_values will be encoded to -1 or "missing".remove_dupLogical, if TRUE, remove the duplicated observations.outlier_procLogical, process outliers or not. Default is TRUE.missing_procIf logical, process missing values or not. If "median", then NAs imputation with k neighbors median. If "avg_dist", the distance weighted average method is applied to determine the NAs imputation with k neighbors. If "default", assigning the missing values to -1 or "missing", otherwise ,processing the missing values according to the results of missing analysis.low_varThe maximum percent of unique values (including NAs) for filtering low variance variables.missing_rateThe maximum percent of missing values for recoding values to missing and non_missing.merge_catThe minimum number of categories or the minimum percent of samples in a category for merging categories of character variables.noteLogical. Outputs info. Default is TRUE.parallelLogical, parallel computing or not. Default is FALSE.save_dataLogical, save the result or not. Default is FALSE.file_nameThe name for periodically saved data file. Default is NULL.dir_pathThe path for periodically saved data file. Default is tempdir().

Value

A preprocessed data.frame

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

4.1 示例数据集介绍

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

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())

4.3 结果展示

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

5总结

creditmodel包的数据清洗模块让数据预处理更简单和省时。

下一步,我将逐步分解数据清洗的各个子模块的步骤和原理,例如缺失值分析与处理、异常值分析与处理等。

R语言creditmodel包是集变量衍生、数据预处理、数据分析、建模、数据可视化为一体的强大的数据科学工具包,关于该包的更深入的使用,还请关注汉森老师的公众号hansenmode。

觉得本文有参考意义的同学请点个赞或者转发,以鼓励汉森老师出产更多的作品。

历史文章:

R语言creditmodel包:快速构建信用评分模型

使用R语言creditmodel包进行Vintage分析或留存率分析

如何进行客群细分以提升信用评分模型的性能

LBS包——地理位置数据加工处理神器

告别996,开源的机器学习自动化建模工具包,你值得拥有