二、编程基础概念及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...来源: http://www.92to.com/bangong/2017/07-20/25434140.html