准备使用 R 进行建模的数据
介绍
在数据科学项目中,数据准备通常占用数据科学家 80% 的时间。这表明了它在机器学习生命周期中的重要性。在本指南中,您将学习 R 中几种数据准备技术的基础知识和实现:
处理错误条目
缺失值处理
编码分类标签
处理异常值
对数变换
标准化
转换列类型
数据
在本指南中,我们将使用一个虚构的贷款申请人数据集,其中包含 600 个观测值和 10 个变量,如下所述:
Marital_status:申请人是否已婚(“1”)或未婚(“0”)
受抚养人:申请人声称的受抚养人人数
Is_graduate:申请人是否为毕业生(“1”)或不是(“0”)
收入:申请人的年收入(百美元)
Loan_amount:提交申请的贷款金额(以百美元为单位)
Term_months:贷款期限(以月为单位)
Credit_score:申请人的信用评分是良好(“1”)还是不良(“0”)
年龄:申请人的年龄(岁)
性别:申请人是女性(“F”)还是男性(“M”)
Approval_status:贷款申请是否已获批准(“1”)或未获批准(“0”)
让我们首先加载所需的库和数据。
library(plyr)
library(readr)
library(dplyr)
library(caret)
library(ggplot2)
library(repr)
dat <- read_csv("data_prep.csv")
glimpse(dat)
输出:
Observations: 600
Variables: 10
$ Marital_status <int> 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, ...
$ Dependents <int> 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, ...
$ Is_graduate <int> 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, ...
$ Income <int> 5635, 2708, 3333, 5324, 12677, 50292, 9523, 3685, 3107...
$ Loan_amount <int> 122, 126, 107, 230, 208, 169, 153, 122, 111, 107, 98, ...
$ Term_months <int> 384, 504, 504, 384, 384, 384, 384, 384, 384, 384, 384,...
$ Credit_score <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, ...
$ approval_status <int> 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, ...
$ Age <int> 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23,...
$ Sex <chr> "M", "F", "M", "M", "M", "M", "F", "F", "F", "M", "F",...
输出显示数据集有九个数值变量(标记为int)和一个字符变量(标记为chr)。我们将在后续部分分析数据类型。现在,让我们看一下数据的摘要。
summary(dat)
输出:
Marital_status Dependents Is_graduate Income
Min. :0.0000 Min. :0.0000 Min. : 0.000 Min. : 200
1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.: 1.000 1st Qu.: 3832
Median :1.0000 Median :0.0000 Median : 1.000 Median : 5075
Mean :0.6517 Mean :0.7308 Mean : 2.449 Mean : 7211
3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.: 1.000 3rd Qu.: 7642
Max. :1.0000 Max. :3.0000 Max. :999.000 Max. :108000
NA's :2 NA's :1
Loan_amount Term_months Credit_score approval_status
Min. : 10.0 Min. : 36.0 Min. :0.0000 Min. :0.0000
1st Qu.:111.0 1st Qu.:384.0 1st Qu.:1.0000 1st Qu.:0.0000
Median :140.0 Median :384.0 Median :1.0000 Median :1.0000
Mean :161.6 Mean :367.1 Mean :0.7883 Mean :0.6867
3rd Qu.:180.5 3rd Qu.:384.0 3rd Qu.:1.0000 3rd Qu.:1.0000
Max. :778.0 Max. :504.0 Max. :1.0000 Max. :1.0000
Age Sex
Min. : 0.00 Length:600
1st Qu.: 36.00 Class :character
Median : 51.00 Mode :character
Mean : 51.77
3rd Qu.: 64.00
Max. :200.00
处理错误条目
上面的输出显示变量Age的最小值和最大值分别为0和200。此外,变量Is_graduate 的最大值是999,而不是二进制值0和1。这些条目不正确,需要更正。一种方法是删除这些记录,但相反,我们将这些记录视为缺失值,并用集中趋势的度量(平均值、中位数或众数)替换它们。
从Age变量开始,下面的前两行代码将错误值0和200转换为缺失记录。我们在第三行代码中对变量Is_graduate重复相同的过程。第四行和第五行打印有关变量的信息。
dat[, 9][dat[, 9] == 0] <- NA
dat[, 9][dat[, 9] == 200] <- NA
dat[, 3][dat[, 3] == 999] <- NA
summary(dat$Age)
summary(dat$Is_graduate)
输出:
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
22.00 36.00 50.50 50.61 64.00 80.00 6
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.0000 1.0000 1.0000 0.7826 1.0000 1.0000 2
现在,变量Age和Is_graduate分别有 594 条和 598 条记录。遗漏的条目已被标记为缺失,我们将在下一节中处理。
缺失值处理
缺失值填补是最常见的数据准备步骤之一。使用sapply()函数可以轻松计算每个变量中的缺失值数量。
sapply(dat, function(x) sum(is.na(x)))
输出:
Marital_status Dependents Is_graduate Income Loan_amount
0 2 2 0 0
Term_months Credit_score approval_status Age Sex
0 0 0 6 5
处理缺失值的方法有很多种。最广泛使用的方法是使用集中趋势度量来替换值。下面的第一行代码将Age变量的缺失值替换为剩余值的中位数。第二行将Is_graduate变量的缺失值替换为值 '1',这表明申请人的教育状况为研究生。最后两行打印变量的汇总统计数据。
dat$Age[is.na(dat$Age)] <- median(dat$Age, na.rm = TRUE)
dat$Is_graduate[is.na(dat$Is_graduate)] <- 1
summary(dat$Age)
table(dat$Is_graduate)
输出:
Min. 1st Qu. Median Mean 3rd Qu. Max.
22.00 36.00 50.50 50.61 64.00 80.00
0 1
130 470
两个变量的缺失值处理都已完成。数据中还有一个变量Sex,它有 5 个缺失值。由于这是一个分类变量,我们将检查标签的分布,这在下面的代码行中完成。
table(dat$Sex)
输出:
F M
111 484
输出显示 595 名申请人中有 484 名是男性,因此我们将用标签M替换缺失值。下面的第一行代码执行此任务,而第二行打印变量的分布。输出显示Sex变量有 600 条记录,表明缺失值已被填补。
dat$Sex[is.na(dat$Sex)] <- "M"
table(dat$Sex)
输出:
Length Class Mode
600 character character
现在,我们将使用下面的代码行检查是否还有缺失值。输出显示变量Dependents中仍然有两个缺失值。
sapply(dat, function(x) sum(is.na(x)))
输出:
Marital_status Dependents Is_graduate Income Loan_amount
0 2 0 0 0
Term_months Credit_score approval_status Age Sex
0 0 0 0 0
数据集中剩下两个缺失值,我们将使用另一种方法处理缺失值,即删除记录。下面的第一行代码使用 complete.cases ()函数删除任何缺失值的行,而第二行检查数据集中缺失值的信息。第三行打印数据的结果维度。
dat = dat[complete.cases(dat), ]
sapply(dat, function(x) sum(is.na(x)))
dim(dat)
输出:
Marital_status Dependents Is_graduate Income Loan_amount
0 0 0 0 0
Term_months Credit_score approval_status Age Sex
0 0 0 0 0
LogIncome
0
[1] 598 10
编码分类标签
某些机器学习算法(例如xgboost)要求所有变量都是数字。在此数据中,变量Sex具有标签(M和F),因此我们必须将它们更改为数字格式。由于有两个标签,我们可以进行二进制编码,这在下面的第一行代码中完成。第二行的输出显示我们已成功执行编码。
dat$Sex <- ifelse(dat$Sex == "M",1,0)
table(dat$Sex)
输出:
0 1
111 487
处理异常值
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~