R 中的数据预处理:终极教程 [2022]
已发表: 2021-03-01在我们以下 R 教程中的数据预处理中,您将学习如何执行数据预处理的基础知识。 本教程要求您熟悉 R 和编程的基础知识:
目录
1. 步骤:查找和修复问题
我们将通过首先导入数据集在 R 教程中开始我们的数据预处理。 毕竟,如果一开始就没有数据,就无法对数据进行预处理。
在我们的例子中,数据存储在工作目录的 data.csv 文件中。 您可以使用命令 setwd(“desired location”) 并设置工作目录。
以下是您将如何开始该过程:
数据集 <- read.csv(“Data.csv”)
这是我们的数据集:
## | 国家 | 年龄 | 薪水 | 已购买 | |
## | 1 | 法国 | 44 | 72000 | 不 |
## | 2 | 西班牙 | 27 | 48000 | 是的 |
## | 3 | 德国 | 30 | 54000 | 不 |
## | 4 | 西班牙 | 38 | 61000 | 不 |
## | 5 | 德国 | 40 | 不适用 | 是的 |
## | 6 | 法国 | 35 | 58000 | 是的 |
## | 7 | 西班牙 | 不适用 | 52000 | 不 |
## | 8 | 法国 | 48 | 79000 | 是的 |
## | 9 | 德国 | 50 | 83000 | 不 |
## | 10 | 法国 | 37 | 67000 | 是的 |
如您所见,我们数据集的 Salary 和 Age 列中存在缺失值。 我们已经确定了数据集中存在的问题,因此我们现在可以开始修复相同的问题。
我们的数据集中似乎没有其他问题,因此我们只需要处理缺失值。 我们可以通过将 NA 值替换为相应列的平均值来解决此问题。 这是如何做:
数据集$Age <- ifelse(is.na(dataset$Age),
ave(dataset$Age, FUN = function(x)
平均值(x,na.rm = TRUE)),
数据集$年龄)
数据集$Salary <- ifelse(is.na(dataset$Salary),
ave(dataset$Salary, FUN = function(x)
平均值(x,na.rm = TRUE)),
数据集$薪水)
注意我们在这里是如何使用 ave() 函数的。 它取您输入的特定列的平均值,其中 FUN 是 x 的函数,计算不包括 NA 值的平均值 (na.rm=TRUE)。
别的,
获取 dataset$Age 中的任何内容
我们现在将使用 mean() 函数:
#定义 x = 1 2 3
x <- 1:3
#引入缺失值
x[1] <- 不适用
# 均值 = NA
均值(x)
## [1] 不适用
# 平均值 = 不包括 NA 值的平均值
均值(x,na.rm = T)
## [1] 2.5
识别并修复问题后,我们的数据集如下所示:
## | 国家 | 年龄 | 薪水 | 已购买 | |
## | 1 | 法国 | 44 | 72000.00 | 不 |
## | 2 | 西班牙 | 27 | 48000.00 | 是的 |
## | 3 | 德国 | 30 | 54000.00 | 不 |
## | 4 | 西班牙 | 38 | 61000.00 | 不 |
## | 5 | 德国 | 40 | 63777.78 | 是的 |
## | 6 | 法国 | 35 | 58000.00 | 是的 |
## | 7 | 西班牙 | 38 | 52000.00 | 不 |
## | 8 | 法国 | 48 | 79000.00 | 是的 |
## | 9 | 德国 | 50 | 83000.00 | 不 |
## | 10 | 法国 | 37 | 67000.00 | 是的 |
另请阅读: R 编程语言的职业机会
2.步骤:分类数据
分类数据是属于特定类别的非数字数据。 我们数据集中的 Country 列是分类数据。 R 中的 read.csv() 函数会将所有字符串变量作为分类变量。 但是,我们不能在所有情况下都使用它。
以下是创建特定变量作为因子变量的方法:
数据集$Country = 因子(数据集$Country,
水平 = c('法国', '西班牙', '德国'),
标签 = c(1, 2, 3))
数据集$Purchased = 因子(数据集$Purchased,
级别= c('否','是'),
标签 = c(0, 1))
3. 步骤:拆分数据
现在,我们必须将数据集拆分为两个单独的数据集。 一个用于训练我们的机器学习模型,另一个用于测试相同的模型。
为此,我们将首先安装 caTools 包(如果不可用)并将其添加到我们的库中。 之后,我们将使用 set.seed() 函数来确保拆分是随机完成的。 使用以下代码:
库(caTools)
set.seed(123)
split = sample.split(dataset$Purchased,SplitRatio = 0.8)
training_set = 子集(数据集,拆分 == TRUE)
test_set = 子集(数据集,拆分 == FALSE)
您一定注意到我们将分流比保持为 80:20。 这是因为它是训练集和测试集最常规的分割比例。 我们的 sample.split() 方法获取了该列并根据拆分比率创建了一个具有随机真假值的数字数组。
4. 步骤:特征缩放或过拟合
当数据集中的不同特征具有不同的范围时,需要进行特征缩放。 在我们的例子中,Age 和 Salary 列有不同的范围,这可能会导致训练我们的 ML 模型时出现问题。
当一个特征的范围明显高于另一个特征时,欧几里德距离会显着增加,从而导致模型给出错误的结果。
请注意,R 中的大多数库会自动修复此问题,但了解如何解决此问题很重要。 请执行下列操作:
training_set[,2:3] = scale(training_set[,2:3])
test_set[,2:3] = scale(test_set[,2:3])
它将解决问题,并且您的训练集的特征将具有相同的范围,从而最大限度地减少机器学习实施过程中出现任何错误的机会。
获得世界顶尖大学的数据科学认证。 学习行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
结论
我们希望您发现我们在 R 教程中的数据预处理对您有所帮助。 在您尝试自己测试之前,最好先了解本教程。 理解这些概念比使用它们重要得多。
您对我们在 R 教程中的数据预处理有何看法? 在下面的评论中分享它们。
如果您想了解 R(数据科学),请查看我们的数据科学执行 PG,它是为在职专业人士创建的,提供 10 多个案例研究和项目、实用的实践研讨会、行业专家指导、一对一1 与行业导师,400 多个小时的学习和顶级公司的工作协助。
在 Python 中,多态性是指可用于多种用途的通用函数名称。 这种思想在面向对象的 Python 编程概念中很常用。 鸭子类型是一个多态概念。 鸭打字这个短语来自一句谚语,它指出任何像鸭子一样走路、嘎嘎叫和游泳的东西都被称为鸭子,不管它是什么。 简单来说,它表示如果某事物的行为与其他事物相匹配,它将被视为该类别的成员。 当在派生类和基类或超类中使用具有相同名称和参数的方法时,派生类方法被称为覆盖基类中提供的方法。 当被覆盖的方法被调用时,派生类的方法总是被调用。 基类中使用的方法现在已隐藏。python中有多少种多态性?
多态性在 Python 中实现有多种用途,例如 Duck Typing、运算符重载、方法重载和方法覆盖,就像在 Java 和 C++ 等其他编程语言中一样。 重载和覆盖是实现多态性的两种主要方法。
具有许多具有相同名称但不同参数的方法的类称为方法重载。 尽管 Python 默认不支持方法重载,但有很多技术可以做到这一点。 什么是鸭子打字?
什么是重载和覆盖?
另一方面,Python 不提供基于方法参数的类型、数量或顺序的方法重载。 方法重载是一种 Python 方法,用于定义一个可以以多种方式调用的方法。 与其他编程语言不同,这是独一无二的。