未加星标

教你如何用R进行数据挖掘

字体大小 | |
[大数据技术 所属分类 大数据技术 | 发布者 店小二05 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

数据分析师,拒绝孤军奋战。加入2万大数据交流QQ群
引言

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界面
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

1

2

3

4

5

6

7

8

9

10

> 2 + 3

> 5

> 6 / 3

> 2

> (3*8)/(2*3)

> 4

> log(12)

> 1.07

> sqrt (121)

> 11

类似地,您也可以自己尝试各种组合的计算形式并得到结果。但是,如果你做了太多的计算,这样的编程未免过于麻烦,在这种情况下,创建变量是一个有用的方法。在R中,您可以创建变量的形式来简化。创建变量时使用< -或=符号,例如我想创建一个变量x计算7和8的总和,如下:

R

1

2

3

> x <– 8 + 7

> x

> 15

特别的,一旦我们创建一个变量,你不再直接得到的输出,此时我们需要输入对应的变量然后再运行结果。注意,变量可以是字母,字母数字而不是数字,数字是不能创建数值变量的、

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

R

1

2

3

> a <– c(1.8, 4.5) #数值型

> b <– c(1 + 2i, 3 – 6i) #混合型

> c <– c(“zhangsan”,”lisi” ) #字符型

数据对象
R中的数据对象主要包括向量(数字、整数等)、列表、数据框和矩阵。让具体的进行了解: ○1向量
正如上面提到的,一个向量包含同一个类的对象。但是,你也可以混合不同的类的对象。当对象的不同的类混合在一个列表中,这种效应会导致不同类型的对象转换成一个类。例如:

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

> qt <– c(“Time”, 24, “October”, TRUE, 3.33) #字符型

> ab <– c(TRUE, 24) #数值型

> cd <– c(2.5, “May”) #字符型

> qt

[1] “Time” “24” “October” “TRUE” “3.33”

> ab

[1] 1 24

> cd

[1] “2.5” “May 注:1、检查任何对象的类,使用class()函数的功能。
2、转换一个数据的类,使用as.()函数

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

> class(qt)

>“character”

> bar <– 0:5

> class(bar)

> “integer”

> as.numeric(bar)

> class(bar)

> “numeric”

> as.character(bar)

> class(bar)

> “character”

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

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

> my_list <– list(22, “ab”, TRUE, 1 + 2i)

> my_list

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

R

1

2

3

4

5

6

7

8

9

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

> my_matrix <– matrix(1:6, nrow=3, ncol=2)

> my_matrix

[,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6

> dim(my_matrix)

[1] 3 2

> attributes(my_matrix)

$dim

[1] 3 2

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

R

1

2

3

4

5

6

7

> my_matrix[,2] #提取出第二列 > my_matrix[,1] #提取出第二列 > my_matrix[2,] #提取出第二行 > my_matrix[1,] #提取出第二行

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

> age <– c(23, 44, 15, 12, 31, 16)

> age

[1] 23 44 15 12 31 16

> dim(age) <– c(2,3)

> age

[,1] [,2] [,3] [1,] 23 15 31 [2,] 44 12 16

> class(age)

[1] “matrix”

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

> x <– c(1, 2, 3, 4, 5, 6)

> y <– c(20, 30, 40, 50, 60)

> cbind(x, y)

> cbind(x, y)

x y

[1,] 1 20 [2,] 2 30 [3,] 3 40 [4,] 4 50 [5,] 5 60 [6,] 6 70

> class(cbind(x, y))

[1] “matrix ○4数据框
这是最常用的一种数据类型,它是用来存储列表数据的。它不同于矩阵,在一个矩阵中,每一个元素必须有相同的类。但是,在一个数据框里你可以把向量包含不同类别的列表。这意味着,每一列的数据就像一个列表,每次你在R中读取数据将被存储在一个数据框中。例如:

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

> df <– data.frame(name = c(“ash”,“jane”,“paul”,“mark”), score = c(67,56,87,91))

> df

name score

1 ash 67

2 jane 56

3 paul 87

4 mark 91

> dim(df)

[1] 4 2

> str(df)

‘data.frame’: 4 obs. of 2 variables:

$ name : Factor w/ 4 levels “ash”,“jane”,“mark”,..: 1 2 4 3

$ score: num 67 56 87 91

> nrow(df)

[1] 4

> ncol(df)

[1] 2

让我们解释一下上面的代码。df是数据框的名字。dim()返回数据框的规格是4行2列,str()返回的是一个数据框的结构,nrow()和ncol()返回是数据框的行数和列数。特别的,我们需要理解一下R中缺失值的概念,NA代表缺失值,这也是预测建模的关键部分。现在,我们示例检查是否一个数据集有缺失值。

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

> df[1:2,2] <– NA #令前两行第二列的数值为NA

> df

name score

1 ash NA

2 jane NA

3 paul 87

4 mark 91

> is.na(df) #检查整个数据集缺失值和返回逻辑输出值

name score

[1,] FALSE TRUE [2,] FALSE TRUE [3,] FALSE FALSE [4,] FALSE FALSE

> table(is.na(df)) #返回逻辑值各类的数量

FALSE TRUE

6 2

> df[!complete.cases(df),] #返回缺失值所在的行值

name score

1 ash NA

2 jane NA

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

R

1

2

3

4

5

6

7

mean(df$score)

[1] NA

> mean(df$score, na.rm = TRUE)

[1] 89

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

R

1

2

3

4

5

6

7

8

9

> new_df <– na.omit(df)

> new_df

name score

3 paul 87

4 mark 91

2、R中的控制语句
正如它的名字一样,这样的语句在编码中起控制函数的作用,写一个函数也是一组多个命令自动重复编码的过程。例如:你有10个数据集,你想找到存在于每一个数据集中的“年龄”列。这可以通过两种方法,一种需要我们运行一个特定的程序运行10次,另外一种就需要通过编写一个控制语句来完成。我们先了解下R中的控制结构简单的例子:
If.else,这个结构是用来测试一个条件的,下面是语法:

R

1

2

3

4

5

6

7

8

9

if (<condition>){

##do something

} else {

##do something

}

例子:

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#initialize a variable

N <– 10

#check if this variable * 5 is > 40

if (N * 5 > 40){

print(“This is easy!”)

} else {

print (“It’s not easy!”)

}

[1] “This is easy!”

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

for (<search condition>){

#do something

}

Example

#initialize a vector

y <– c(99,45,34,65,76,23)

#print the first 4 numbers of this vector

for(i in 1:4){

print (y[i])

}

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#初始化条件

Age <– 12

#检验年龄是否小于17

while(Age < 17){

print(Age)

Age <– Age + 1 }

[1] 12 [1] 13 [1] 14 [1] 15 [1] 16 当然,还有其他的控制结构,但不太常用的比上面的解释。例如:
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中去学习和应用一下。在本教程中,我们以这个大市场销售预测数据集为例。首先,我们先理解一下数据结构,如下图:
教你如何用R进行数据挖掘
1、数据集中基础概念
○1最后一列ItemOutlet_Sales为响应变量(因变量y),是我们需要做出预测的。前面的变量是自变量xi,是用来预测因变量的。
○2数据集
预测模型一般是通过训练数据集建立,训练数据总是包括反变量;测试数据:一旦模型构建,它在测试数据集中的测试是较为准确的,这个数据总是比训练数据集包含更少数量的观察值,而且是它不包括反应变量的。 数据的导入和基本探索
○1在使用R语言时一个重要设置是定义工作目录,即设置当前运行路径(这样你的全部数据和程序都将保存在该目录下)

R

1

2

3

#设定当前工作目录

setwd(“E:/r”)

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

R

1

2

3

4

5

#载入数据集

train <– read.csv(“E:/r/Train_UWu5bXk.csv”)

test <– read.csv(“E:/r/Test_u94Q5KV.csv”)

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

R

1

2

3

4

5

6

7

8

9

#查看数据的维度

> dim(train)

[1] 8523 12

> dim(test)

[1] 5681 11

从结果我们可以看到训练集有8523行12列数据,测试集有5681行和11列训练数据,并且这也是正确的。测试数据应该总是少一列的。现在让我们深入探索训练数据集

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

#检查训练集中的变量和类型

> str(train)

‘data.frame’: 8523 obs. of 12 variables:

$ Item_Identifier : Factor w/ 1559 levels “DRA12”,“DRA24”,..: 157 9 663 1122 1298 759 697 739 441 991 ...

$ Item_Weight : num 9.3 5.92 17.5 19.2 8.93 ...

$ Item_Fat_Content : Factor w/ 5 levels “LF”,“low fat”,..: 3 5 3 5 3 5 5 3 5 5 ...

$ Item_Visibility : num 0.016 0.0193 0.0168 0 0 ...

$ Item_Type : Factor w/ 16 levels “Baking Goods”,..: 5 15 11 7 10 1 14 14 6 6 ...

$ Item_MRP : num 249.8 48.3 141.6 182.1 53.9 ...

$ Outlet_Identifier : Factor w/ 10 levels “OUT010”,“OUT013”,..: 10 4 10 1 2 4 2 6 8 3 ...

$ Outlet_Establishment_Year: int 1999 2009 1999 1998 1987 2009 1987 1985 2002 2007 ...

$ Outlet_Size : Factor w/ 4 levels “”,“High”,“Medium”,..: 3 3 3 1 2 3 2 3 1 1 ...

$ Outlet_Location_Type : Factor w/ 3 levels “Tier 1”,“Tier 2”,..: 1 3 1 3 3 3 3 3 2 2 ...

$ Outlet_Type : Factor w/ 4 levels “Grocery Store”,..: 2 3 2 1 2 3 2 4 2 2 ...

$ Item_Outlet_Sales : num 3735 443 2097 732 995 ...

2、图形表示
当使用图表来表示时,我想大家会更好的了解这些变量。一般来讲,我们可以从两个方面分析数据:单变量分析和双变量分析。对于单变量分析来讲较为简单,在此不做解释。我们本文以双变量分析为例:
(对于可视化,我们将使用ggplot2包。这些图可以帮助我们更好理解变量的分布和频率的数据集)

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

R

1

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


教你如何用R进行数据挖掘

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

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

R

1

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


教你如何用R进行数据挖掘

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

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

R

1

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


教你如何用R进行数据挖掘

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

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

R

1

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

R

1

2

3

4

5

> table(is.na(train))

FALSE TRUE

100813 1463

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

tags: gt,Item,lt,数据,Outlet,df,变量,my,matrix,TRUE,Sales,缺失,dim
分页:12
转载请注明
本文标题:教你如何用R进行数据挖掘
本站链接:http://www.codesec.net/view/444031.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 大数据技术 | 评论(0) | 阅读(198)