打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
✪​ 教程 | 如何用R进行数据挖掘?(上)

文 | 薛丽丹

引言

R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。

也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。

我们所说的机器学习和R有什么关系呢?我对R的第一印象是,它只是一个统计计算的一个软件。但是后来我发现R有足够的能力以一个快速和简单的方式来实现机器学习算法。

这是用R来学习数据科学和机器学习的完整教程,读完本文,你将有使用机器学习的方法来构建预测模型的基本能力。

注:这篇文章对于之前没有很多数据科学知识的同学们是特别值得一看的,同时掌握一定的代数和统计知识将会更有益于您的学习。

一、初识R语言

1、为什么学R ?

事实上,我没有编程经验,也没有学过计算机。但是我知道如果要学习数据科学,一个人必须学习R或Python作为开始学习的工具。我选择了前者,同时在学习过程中我发现了一些使用R的好处:

  •  用R语言编码非常的简单;

  • R是一个免费的开源软件,同时它可以直接在官网上下载;

  • R语言中有来自于全世界爱好者贡献的即时访问超过7800个用于不同计算的R包。

  • R语言还有遍布全世界的学习社区及论坛,你能很轻松的获取帮助;

  • 我们凭借R包能够获得高性能的计算体验;

  • 它是,数据分析公司高度寻求技能之一。

2、如何安装R / Rstudio?

你可以https://www.r-project.org/官网下载并安装R,需要注意的是R的更新速度很快,下载新版本的体验会更好一些。

另外,我建议你从RStudio开始,因为RStudio的界面编程体验更好一些。你可以通过https://www.rstudio.com/products/rstudio/download/ 在“支持的平台上安装”部分中, 根据您的操作系统选择您需要的安装程序。

点击桌面图标RStudio,就开始你的编程体验,如下图所示:

让我们快速的了解:一下R界面

  • R script::在这个空间里可以写代码,要运行这些代码,只需选择的代码行和按下Ctrl R即可或者,你可以点击“运行”按钮位置在右上角R的脚本。

  •  R console:这个区域显示的输出代码运行:,同时你可以在控制台直接写代码。但是代码直接进入R控制台无法追踪。

  •  R环境:这个空间是显示设置的外部元素补充道。这里面包括数据集、变量向量,还可以检查R数据是否被正确加载。

  • 图形输出窗口:这个空间显示图表中创建的探索性数据分析。不仅仅输出图形,您可以选择包,寻求帮助和嵌入式R的官方文档。

3、如何安装包?

R的计算能力在于它拥有强大的R包。在R中,大多数数据处理任务可以从两方面进行,使用R包和基本功能。在本教程中,我们将介绍最方便的和强大的R包。

特别的,一般不太建议直接在R软件的中直接安装加载包,因为这样可能会影响你的计算速度。我们建议你直接在R的官网上下载好您所需要的R包,通过本地安装的形式进行安装,如下:

在软件中安装:install.packages(“package name”)

本地安装: install.packages(“E:/r/ggplot2_2.1.0.zip”)

4、用R进行基本的统计计算

让我们开始熟悉R的编程环境及一些基本的计算,在R编程脚本窗口中输入程序,如下:

类似地,您也可以自己尝试各种组合的计算形式并得到结果。但是,如果你做了太多的计算,这样的编程未免过于麻烦,在这种情况下,创建变量是一个有用的方法。

在R中,您可以创建变量的形式来简化。创建变量时使用< -或=符号,例如我想创建一个变量x计算7和8的总和,如下:

特别的,一旦我们创建一个变量,你不再直接得到的输出,此时我们需要输入对应的变量然后再运行结果。

注意,变量可以是字母,字母数字而不是数字,数字是不能创建数值变量的。

二、编程基础概念及R包

1、R中的数据类型和对象

  •  数据类型

R中数据类型包括数值型,字符型,逻辑型,日期型及缺省值,这个数据类型我们在运用数据的过程中,大家很容易可以自行了解,在此不做详细解释。

  • 数据对象

R中的数据对象主要包括向量(数字、整数等)、列表、数据框和矩阵。让具体的进行了解:

○1 向量

正如上面提到的,一个向量包含同一个类的对象。但是,你也可以混合不同的类的对象。当对象的不同的类混合在一个列表中,这种效应会导致不同类型的对象转换成一个类。例如:

注:1、检查任何对象的类,使用class()函数的功能。

2、转换一个数据的类,使用as.()函数

类似地,您可以自己尝试改变其他任何的类向量

○2 列表

一个列表是一种包含不同的数据类型的元素特殊类型的向量。例如

可以看出,,列表的输出不同于一个向量。这是因为不同类型的所有对象。第一个双括号[1]显示了第一个元素包括的索引内容,依次类推。另外的,您自己还可以尝试:

○3 矩阵

当一个向量与行和列即维度属性,它变成了一个矩阵。一个矩阵是由行和列组成的,让我们试着创建一个3行2列的矩阵:

正如你所看到的,一个矩阵的维度你可以通过dim()或attributes()命令获得,从一个矩阵中提取一个特定元素,只需使用上面矩阵的形式。例如

同样的,,您还可以从个一个向量开始创建所需要的矩阵,我们,需要做的是利用dim()分配好维度。如下所示:

另外,你也可以加入两个向量使用cbind()和rbind()函数。但是,需要确保两向量相同数量的元素。如果没有的话,它将返回NA值。

○4 数据框

这是最常用的一种数据类型,它是用来存储列表数据的。它不同于矩阵,在一个矩阵中,每一个元素必须有相同的类。

但是,在一个数据框里你可以把向量包含不同类别的列表。这意味着,每一列的数据就像一个列表,每次你在R中读取数据将被存储在一个数据框中。例如:

让我们解释一下上面的代码。df是数据框的名字。dim()返回数据框的规格是4行2列,str()返回的是一个数据框的结构,nrow()和ncol()返回是数据框的行数和列数。

特别的,我们需要理解一下R中缺失值的概念,NA代表缺失值,这也是预测建模的关键部分。现在,我们示例检查是否一个数据集有缺失值。

2 jane NA

缺失值的存在严重阻碍了我们正常计算数据集。例如,因为有两个缺失值,它不能直接做均值得分。例如:

na.rm = TRUE告诉R计算时忽略缺失值,只是计算选定的列中剩余值的均值(得分)。删除在数据中的行和NA,您可以使用na.omit

2、R中的控制语句

正如它的名字一样,这样的语句在编码中起控制函数的作用,写一个函数也是一组多个命令自动重复编码的过程。

例如:你有10个数据集,你想找到存在于每一个数据集中的“年龄”列。

这可以通过两种方法,一种需要我们运行一个特定的程序运行10次,另外一种就需要通过编写一个控制语句来完成。我们先了解下R中的控制结构简单的例子:

If.else,这个结构是用来测试一个条件的,下面是语法:

例子:

For语句,这个结构是当一个循环执行固定的次数时使用。下面是语法:

 while,语句

它首先测试条件,并只有在条件是正确的时才执行,一旦执行循环,条件是再次测试,直到满足指定的条件然后输出。下面是语法

当然,还有其他的控制结构,但不太常用的比上面的解释。例如:

  • Repeat 它执行一个无限循环

  • break——它打破循环的执行

  • next——它允许跳过一个迭代循环

  • return——它帮助退出函数

注意:如果你发现这部分的控制结构难以理解,不用担心。R语言中来自于众多人贡献的包,会帮助你很多。

3、常用的R包

在R的镜像(CRAN)中,有超过7800个包可供大家调用,其中很多包可以用来预测建模在本文中,我们在下面会简单的介绍其中几个。

之前,我们已经解释了安装包的方法,大家可以根据自己的需要去下载安装。

导入数据

R为数据的导入进口提供了广泛的包,并且可以接入任何格式的数据。如txt,,csv,,sql等均可快速导入大文件的数据,。

数据可视化

R同样可以用来构建绘图命令并且是创建简单的图表非常好用。但是,当创建的图形变得较为复杂时,你应该安装ggplot2。

数据操作

R中有很多关于数据操作集合的包,他们可以做基本的和先进的快速计算、例如dplyr,plyr ,tidyr,lubricate,stringr等。

建模学习/机器学习

对于模型学习,caret包是强大到足以满足大多创建机器学习模型的必要。当然,您也可以安装算法包,例如对于随机森林,决策树等等。

到这里为止,你会觉得对于R的相关组件都相对熟悉啦,从现在开始我们开始介绍一些关于模型预测的知识。

三、用R进行数据预处理

从这一节开始,我们将深入阅读预测建模的不同阶段。对于数据的预处理是非常重要的,这一阶段学习将强化我们的对数据操作的应用,让我们在接下来的R中去学习和应用一下。

在本教程中,我们以这个大市场销售预测数据集为例。首先,我们先理解一下数据结构,如下图:


1、数据集中基础概念

○1最后一列ItemOutlet_Sales为响应变量(因变量y),是我们需要做出预测的。前面的变量是自变量xi,是用来预测因变量的。

○2数据集

预测模型一般是通过训练数据集建立,训练数据总是包括反变量;测试数据。

一旦模型构建,它在测试数据集中的测试是较为准确的,这个数据总是比训练数据集包含更少数量的观察值,而且是它不包括反应变量的。

数据的导入和基本探索

○1在使用R语言时一个重要设置是定义工作目录,即设置当前运行路径(这样你的全部数据和程序都将保存在该目录下)

一旦设置了目录,我们可以很容易地导入数据,使用下面的命令导入csv文件:

通过R环境检查数据是否已成功加载,然后让我们来探讨数据

从结果我们可以看到训练集有8523行12列数据,测试集有5681行和11列训练数据,并且这也是正确的。

测试数据应该总是少一列的。现在让我们深入探索训练数据集。

2、图形表示

当使用图表来表示时,我想大家会更好的了解这些变量。一般来讲,我们可以从两个方面分析数据:单变量分析和双变量分析。

对于单变量分析来讲较为简单,在此不做解释。我们本文以双变量分析为例:

(对于可视化,我们将使用ggplot2包。这些图可以帮助我们更好理解变量的分布和频率的数据集)

首先做出Item_Visibility和Item_Outlet_Sales两个变量的散点图

1ggplot(train, aes(x= Item_Visibility, y = Item_Outlet_Sales)) geom_point(size = 2.5, color='navy') xlab('Item Visibility') ylab('Item Outlet Sales') ggtitle('Item Visibility vs Item Outlet Sales')

从图中,我们可以看到大多数销售已从产品能见度小于0.2。这表明item_visibility < 0.2,则该变量必须是确定销售的一个重要因素。

做出Outlet_Identifier和Item_Outlet_Sales两个变量的柱状关系图

1ggplot(train, aes(Outlet_Identifier, Item_Outlet_Sales)) geom_bar(stat = 'identity', color = 'purple') theme(axis.text.x = element_text(angle = 70, vjust = 0.5, color = 'black')) ggtitle('Outlets vs Total Sales') theme_bw()

在这里,我们推断可能是OUT027的销量影响啦OUT35的销量紧随其后。OUT10和OUT19可能是由于最少的客流量,从而导致最少的出口销售。

做出Outlet_type和Item_Outlet_Sales两个变量的箱体图

1ggplot(train, aes(Item_Type, Item_Outlet_Sales)) geom_bar( stat = 'identity') theme(axis.text.x = element_text(angle = 70, vjust = 0.5, color = 'navy'))

从这个图表,我们可以推断出水果和蔬菜最有利于销售零食数量的出口,其次是家用产品。

做出Item_Type和Item_MRP两个变量的箱线图

这次我们使用箱线图来表示,箱线图的好处在于我们可以看到相应变量的异常值和平均偏差水平。

1ggplot(train, aes(Item_Type, Item_MRP)) geom_boxplot() ggtitle('Box Plot') theme(axis.text.x = element_text(angle = 70, vjust = 0.5, color = 'red')) xlab('Item Type') ylab('Item MRP') ggtitle('Item Type vs Item MRP')

在图中,,黑色的点就是一个异常值,盒子里黑色的线是每个项目类型的平均值。

3、缺失值处理

缺失值对于自变量和因变量之间的关系有很大的影响。现在,让我们理解一下缺失值的处理的知识。让我们来做一些快速的数据探索,首先,我们将检查数据是否有缺失值。

我们可以看出在训练数据集中有1463个缺失值。让我们检查这些缺失值的变量在哪里,其实很多数据科学家一再建议初学者在在数据探索阶段应密切关注缺失值。

因此,我们看到列Item_Weight 有1463个缺失的数据。从这个数据我们还可以得到更多的推论:

1> summary(train)

从图中,我们可以看到每列的最小值,最大值,中位数,平均值,缺失值的信息等等。我们看到变量Item_Weight中有缺失值,而且Item_Weight是一个连续变量。

因此,在这种情况下,我们一般用样本中变量的均值或中位数赋值给缺失值。计算变量item_weight的均值和中位数,这是最常用处理缺失值的的方法,其他的方法在此不赘述。

我们可以先把两个数据集合并,这样就不需要编写独立编码训练和测试数据集,这也会节省我们的计算时间。但是合并结合两个数据框,我们必须确保他们相同的列,如下:

我们知道,测试数据集有个少一列因变量。首先来添加列,我们可以给这个列赋任何值。

一个直观的方法是我们可以从训练数据集中提取销售的平均值,并使用$Item_Outlet_Sales作为测试变量的销售列。不过,在此,我们让它简单化给最后一列赋值为1。

接下来我们先来计算中位数,选用中位数是因为它在离散值中很有代表性。

End.

昨日,美国总统特朗普发推文:Did China ask us if it was OK to devalue their currency (making it hard fot our companies to compete), heavily tax our products going into...
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
R语言学习笔记
新学期有新人学R-1
60 个实用的 R 语言技巧(转载)
R语言︱异常值检验、离群点分析、异常值处理
(二)异常值分析
【R分享|实战】科白君教你相关性分析及其绘图
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服