数据挖掘化功大法(9)——R语言

编辑时间: 2016-08-30 16:08:16    关键字:

 R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。

一、基本介绍:

1. 警告:在输入命令前请切换到英文模式。否则你的一大段代码可能因为一个中文状态的括号而报错,R语言的报错并不智能无法指出错误的具体位置。最可怕的是不报错但就是无法输出正确结果。

2. 警告:R语言区别大小写,所以对象A与对象a并不一样,在调用函数、R包时也要注意大小写。

3. R软件由R包组成,每个包里有各种函数。命令“library()”【注意输入命令时不包含双引号,下同】查看原装的几十个R包列表。对于非原装的R包,可以通过命令“install.packages(’RCurl’)”【其他包把名字把RCurl替换就是了,注意不要忘了括号里的引号】,选择任意镜像安装RCurl包。以后在调用此包的函数之前应先输入命令“library(RCurl)”【原装包的中函数不需要此命令】

4. 打开R软件,光标左侧的“>”符号表示等待输入,“+”表示承接上一行的代码。如果一句代码很长,可敲击回车继续输入。而当你输入完毕回车无输出结果并显示“+”时,很可能是你少输入了一个括号

5. R语言中“<-”表示赋值,如“x <- 3”表示赋予对象x的值为3。请不要用等号!

6. R代码中“#”后边的都表示注释,不会被执行此时可输入中文。在代码中R语言支持中文但并不好,建议全英环境。

7. R的编辑器。在R环境下编码时不要碰到“上”和“下”两个方向键。“上”会自动复制上一行的代码,“下”键会清除改行代码。另外:换行后,已经输入的代码不可更改,只有再重新输入更改赋值。

8. R语言强大的帮助功能:输入命令“?all”或者“help(all)”查看函数all的用法,其他函数自行替换名称。有时候不能得到查询结果,会自动提示使用“??”或者“help.search(‘’)”查询。还得不到结果的话请检查是否输入有误。

9. 关闭R软件,使用命令“q()”或者直接点击右上角的关闭。此时会提示“是否保存工作空间影像”,如果保存下次打开时会自动加载映像,上次操作中的已赋值的对象、数据可继续使用

二、数据操作

1.对象内在属性

在R中,所有对象的数据都有两个属性:mode 和 length 即类型【包含数值型(numeric)、字符型(character)、复数性(complex)、逻辑型(logical)】和长度【包含元素个数】,可分别用函数“mode()”、“length()”得到。同时可以用“x <- numric(2)”定义x为一个长度为2的数值型数据,其他数据类型也同样,“logical(2)”表示长度为2的逻辑型数据。长度为2表示其x包含了两个数据值,用线代语言说就是x是一个2维行向量。

2.数据形式

在线性代数里有向量、矩阵和行列式等数据形式,R语言也有不同的数据形式以应对各种数据处理。包括:向量、数组、矩阵、列表、数据框和时间序列。

2.1 向量

向量是由一组同样类型(mode)的数据构成。数值向量、字符向量和逻辑向量。在统计学中数据有分类数据、顺序数据、数值数据之分,有时候看似数字但实际表示一个组别,比如在SPSS中输入数据定义0为男,1为女。由此在R中又有一种因子向量,表示类别。下面一一介绍四种向量。向量的通用赋值函数“c()”,用穷举法列出向量所有的元素。

【数值型向量赋值】:

列举法:

“x <- c(1,2,3,4,5) ”表示5维行向量,分别等于1到5,也可以写成“ x<- c(1:5)”【此用法只适用于数值型数据,且等差为1。那“c(1.4:5)”生成的数据是怎样的?just try~】

在函数“c()”中列举时也可以包含已经赋值的向量,比如上个命令我们已经对x赋值,那么“y <- c(x,x,x)”表示什么?试试看,我想你能很轻易的发现规律。

重复法:

对于命令“y <-c (x,x,x)” 还有更简单的写法,“y <- rep(x,times=3)”【当然参数x是单个元素也可以,比如“rep(1,times3)”,而且此函数在也实用于其他数据类型哦~】

函数“rep(x,time= ,each= ,length.out=)”中的“times”参数表示x的重复次数,参数“each”表示每个元素重复的次数,试试

y <- rep(x,times=3,each=2)

参数“length.out”表示截取前多少个元素,试试y<-rep(x,times=3,each=2,length.out=2)

【by the way:是不是觉着参数多的时候输入很麻烦?】

这里顺便介绍下函数参数的写法。首先声明在函数内部对参数赋值习惯用等号【虽然“<-”也可以吧】“rep(x,times=3,each=2,length.out=2)”也可以简单的写“rep(x,3,3,2)”,不用输入参数名称直接按顺序输入其值就可以了。那如何查看参数的顺序?前边是不是提到过R语言强大的帮助系统?输入命令“?rep”敲回车看看。

等差数列赋值函数:

函数“c(1:3)”的等差为1【其实是符号“:”的等差为1,可将其称为等差符】,那等差为0.5或者2怎么办?用更一般的函数“seq(from=,to=,by=,length.out=)”从“from”为第一个元素开始,最大的元素不大于“to”。

参数“by”表示等差,参数“length.out”表示等差数列元素的个数,两个参数任给一个。在参数“length.out”给定参数“by”自动按“by = ((to – from)/(length.out – 1))”计算。

不明白? 那就试试“seq(1,5,1)”跟“seq(1,5,length.out=5)”

【数值型向量运算】:向量的运算规则:

向量的运算实质是多个向量中对应的每个元素的运算,即向量a的第n个元素与向量b的第n个元素运算。如:

1:5 * 1:5

[1] 1 4 9 16 25 #最前边的“[1]”不用管它

如果你足够敏锐,应该会问两个长度不等的向量运算怎么办?答案是短向量会拉长到与另一向量的长度相等。拉伸的规则同“rep()”函数。如:

1:2 * 1:6

[1] 1 4 3 8 5 12

这里就相当与:

rep(1:2,times=3)* 1:6

注意到向量 1:6 刚好是 1:2 的倍数。如果不成倍的话,短向量重复次数不成倍,会得到一个警告信息。如:

1:5 * 1:6

[1] 1 4 9 16 25 6

警告信息:In 1:5 * 1:6 : 长的对象长度不是短的对象长度的整倍数

这里短向量 1:5 在运算时只增加了一个元素1.相当于:

rep(1:5,times=2,length.out=6) * 1:6 #这个结果是一样的,但不会得到警告信息

向量的运算函数:

运算符: +、-、*、/、^ 不解释。 %% 表示求余数、%/% 表示整除,即留整。四舍五入咋个办?我也不知道,你知道这个运算符或者函数告诉我哈~

数学函数: exp()、sqrt()、sin()、cos()、tan()、cot() 【自行回想其他三角函数】

统计函数: min()、max()、range()、mean()、sum()、median()、var()、sd()、sort()

索引,引用,随便你怎么称呼,其实就是借来别的对象的数据用。在此慎重提醒一下,既然是借别的对象来用,那这个对象就应该是已经存在的,或者已经人为定义过的。

假设我们已经定义“x <- 1:5”,那下次你再需要一个 1:5 这样一个向量时直接用x来代替就是索引。但很多时候我们是只需要某个对象中的部分信息,比如你只想在成绩单里找到自己的成绩。

来到重点:

索引分为位置索引和逻辑索引【这对所有的索引都是成立的,与对象无关,管它是数值型还是字符型,管它向量还是列表】

所有的索引都是装在一个中括号里的,“[]”.【注意是英文状态下的中括号】

位置索引就是找到某个位置的数据,比如你知道你的排名是第一,那就看成绩单里的第一个成绩吧。

x <- 1:4

x[2] #就表示对象x的第二个元素,很简单吧。

逻辑索引就是在“[]”写一个表达式,找到符合表达式的元素。如: x[x>2] 就是找到x中大于2的元素.

介绍几个常用逻辑符号: <、>、>=、<=、==【表示两个对象恒相等】 != 不等

【数值型向量处理】

直接举例说明。首先定义: “x <- 1:5” 一个五维行向量

1.判断是否为数值型向量

is.numeric(x)

其他向量转换为数值型向量: as.numeric()

同样判断是否为字符、逻辑的函数: is.character()、is.logical()

转化为字符、逻辑的函数: as.character()、as.logical()

2.增加一个元素为6.

x[6] <- 6如果直接写“ x[8] <- 6 ”那么x的第六和第七个元素自动赋值为“NA”,表示缺失值。

3.接上,删除向量中的缺失值。

x[is.na(x)=F]

函数 is.na() 判断是否为缺失值。 “x[is.na(x)=F]”表示索引出x中不是缺失值的元素。“length(x[is.na(x)])”返回x中缺失值的个数。

4.删除最后一个元素

x <- x[1:(length(x)-1)]

很简单,不解释了,应该可以看懂的

5.更改某个元素,如第三个元素改为8

x[3] <- 8

【字符串向量】

【赋值】: 字符串赋值时把内容都写在 “” 里,同其他软件是一致的,事实上”单引号也可以,两者有何区别我也不太清楚。再次强调下:引号都是英文状态下的函数“c()”“rep()”仍然适用。另介绍函数“paste()”。一部电视剧有数十集,文件名一般为:“水浒传1”“水浒传2”…“水浒传n”…下面就用 paste() 函数来建立一个字符向量:paste(“水浒传”,1:30) # 30集水浒传的文件名

其运算规则就是把逗号隔开的两个向量按顺序组合了一下,跟数值型向量的向量计算规则是一样的。当然也可以多个向量组合:paste(“水浒传”,1:30,”集”)

注意到两个细节:

1.函数内部有字符有数字,是的,这家伙能把所有类型的东西全部按字符串组合起来。

2.在输出结果中【”水浒传 1″】发现两个元素之间有个空格,如何取消?

paste() 函数里有一个参数“sep=” “”,表示将不同对象组合时默认用空格隔开,修改这个参数就ok了。

paste(“水浒传”,1:30,sep=””)

当然“sep”这个参数可以定义成任意一个字符串,发挥你的想象吧~~~

 

让我们看下R语言的学习路线图:

 

1.初级入门

《R语言实战》,这是高涛、肖楠等翻译的一本书详细全面介绍了入门、图形、统计、回归、方差、功效分析、广义线性模型、主成分、因子分析、缺失值处理等。除此之外,还可以去读刘思喆的《153分钟学会R》。这本书收集了R初学者提问频率最高的153个问题。为什么叫153分钟呢?因为最初作者写了153个问题,阅读一个问题花费1分钟时间,全局下来也就是153分钟了

2.高级入门

读了上述书籍之后,你就可以去高级入门阶段了。这时候要读的书有两本很经典的。《Statistics with R》和《The R book》。之所以说这两本书高级,是因为这两本书已经不再限于R基础了,而是结合了数据分析的各种常见方法来写就的,比较系统的介绍了R在线性回归、方差分析、多元统计、R绘图、时间序列分析、数据挖掘等各方面的内容,看完之后你会发现,哇,原来R能做的事情这么多,而且做起来是那么简洁。读到这里已经差不多了,剩下的估计就是你要专门攻读的某个方面内容了。下面大致说一说。

3.绘图与可视化

亚里斯多德说,“较其他感觉而言,人类更喜欢观看”。因此,绘图和可视化得到很多人的关注和重视。那么,如何学习R画图和数据可视化呢?再简单些,如何画直方图?如何往直方图上添加密度曲线呢?我想读完下面这几本书你就大致会明白了。

首先,画图入门可以读《R Graphics》,个人认为这本是比较经典的,全面介绍了R中绘图系统。该书对应的有一个网站,google之就可以了。更深入的可以读《Lattice:Multivariate Data Visualization with R》。上面这些都是比较普通的。当然,有比较文艺和优雅的——ggplot2系统,看《ggplot2:Elegant Graphics for Data Analysis》。还有数据挖掘方面的书:《Data Mining with Rattle and R》,主要是用Rattle软件,个人比较喜欢Rattle!当然,Rattle不是最好的,Rweka也很棒!再有就是交互图形的书了,著名的交互系统是ggobi,这个我已经喜欢两年多了,关于ggobi的书有《Interactive and Dynamic Graphics for Data Analysis With R and GGobi》,不过,也只是适宜入门,更多更全面的还是去ggobi的主页吧,上面有各种资料以及包的更新信息!

4.计量经济学

关于计量经济学,首先推荐一本很薄的小册子:《Econometrics In R》,做入门用。然后,是《Applied Econometrics with R》,该书对应的R包是AER,可以安装之后配合使用,效果甚佳。计量经济学中很大一部分是关于时间序列分析的,这一块内容在下面的地方说。

5.时间序列分析

时间序列书籍的书籍分两类,一种是比较普适的书籍,典型的代表是:《Time Series Analysis and Its Applications :with R examples》。该书介绍了各种时间序列分析的经典方法及实现各种经典方法的R代码,该书有中文版。如果不想买的话,建议去作者主页直接下载,英文版其实读起来很简单。时间序列分析中有一大块儿是关于金融时间序列分析的。这方面比较流行的书有两本《Analysis of financial time series》,这本书的最初是用的S-plus代码,不过新版已经以R代码为主了。这本书适合有时间序列分析基础和金融基础的人来看,因为书中关于时间序列分析的理论以及各种金融知识讲解的不是特别清楚,将极值理论计算VaR的部分就比较难看懂。另外一个比较有意思的是Rmetrics推出的《TimeSeriesFAQ》,这本书是金融时间序列入门的东西,讲的很基础,但是很难懂。对应的中文版有《金融时间序列分析常见问题集》,当然,目前还没有发出来。经济领域的时间序列有一种特殊的情况叫协整,很多人很关注这方面的理论,关心这个的可以看《Analysis of Integrated and Cointegrated Time Series with R》。最后,比较高级的一本书是关于小波分析的,看《Wavelet Methods in Statistics with R》。附加一点,关于时间序列聚类的书籍目前比较少见,是一个处女地,有志之士可以开垦之!

6.金融

金融的领域很广泛,如果是大金融的话,保险也要被纳入此间。用R做金融更多地需要掌握的是金融知识,只会数据分析技术意义寥寥。我觉得这些书对于懂金融、不同数据分析技术的人比较有用,只懂数据分析技术而不动金融知识的人看起来肯定如雾里看花,甚至有人会觉得金融分析比较低级。这方面比较经典的书籍有:《Advanced Topics in Analysis of Economic and Financial Data Using R》以及《Modelling Financial Time Series With S-plus》。金融产品定价之类的常常要用到随机微分方程,有一本叫《Simulation Inference Stochastic Differential Equations:with R examples》的书是关于这方面的内容的,有实例,内容还算详实!此外,是风险度量与管理类。比较经典的有《Simulation Techniques in Financial Risk Management》、《Modern Actuarial Risk Theory Using R》和《Quantitative Risk Management:Concepts, Techniques and Tools》。投资组合分析类和期权定价类可以分别看《Portfolio Optimization with R》和《Option Pricing and Estimation of Financial Models with R》。

7.数据挖掘

现在相关的书籍已经比较多了,可见一文中推荐的几本书。

8.附注

很多书都已经有电子版。可以在一些群或 新浪爱问 csdn等里面去找。

与数据挖掘有关或者有帮助的R包和函数的集合。

1、聚类

常用的包: fpc,cluster,pvclust,mclust

基于划分的方法: kmeans, pam, pamk, clara

基于层次的方法: hclust, pvclust, agnes, diana

基于模型的方法: mclust

基于密度的方法: dbscan

基于画图的方法: plotcluster, plot.hclust

基于验证的方法: cluster.stats

2、分类

常用的包:

rpart,party,randomForest,rpartOrdinal,tree,marginTree,

maptree,survival

决策树: rpart, ctree

随机森林: cforest, randomForest

回归, Logistic回归, Poisson回归: glm, predict, residuals

生存分析: survfit, survdiff, coxph

3、关联规则与频繁项集

常用的包:

arules:支持挖掘频繁项集,最大频繁项集,频繁闭项目集和关联规则

DRM:回归和分类数据的重复关联模型

APRIORI算法,广度RST算法:apriori, drm

ECLAT算法: 采用等价类,RST深度搜索和集合的交集: eclat

4、序列模式

常用的包: arulesSequences

SPADE算法: cSPADE

5、时间序列

常用的包: timsac

时间序列构建函数: ts

成分分解: decomp, decompose, stl, tsr

6、统计

常用的包: Base R, nlme

方差分析: aov, anova

密度分析: density

假设检验: t.test, prop.test, anova, aov

线性混合模型:lme

主成分分析和因子分析:princomp

7、图表

条形图: barplot

饼图: pie

散点图: dotchart

直方图: hist

密度图: densityplot

蜡烛图, 箱形图 boxplot

QQ (quantile-quantile) 图: qqnorm, qqplot, qqline

Bi-variate plot: coplot

树: rpart

Parallel coordinates: parallel, paracoor, parcoord

热图, contour: contour, filled.contour

其他图: stripplot, sunflowerplot, interaction.plot, matplot, fourfoldplot,

assocplot, mosaicplot

保存的图表格式: pdf, postscript, win.metafile, jpeg, bmp, png

8、数据操作

缺失值:na.omit

变量标准化:scale

变量转置:t

抽样:sample

堆栈:stack, unstack

其他:aggregate, merge, reshape

9、与数据挖掘软件Weka做接口

RWeka: 通过这个接口,可以在R中使用Weka的所有算法。

推荐热图

合作推荐

2010-2018 可思数据版权所有 About SYKV | ICP备案:京ICP备14056871号