如果您使用过 JavaScript 或其他脚本语言,您就会情不自禁地爱上使用 R。这个免费的开源语言功能全面,有着长达 25 年的历史,如果您尚未试用过,现在就是开始着手使用的大好时机。以下是您应立即接触并开始使用 R 的 5 大令人信服的理由!

1.受益于完整的文档和支持

包括留言板在内的 R 在线资源都得到良好支持,并且有着完备的记录。若干重要的 R 开发人员积极参与他们所设计的工具和软件包的在线讨论。这一点很重要,因为 R 编程包含许多社区软件包,从用于解析 JSON 和 XML 文件的软件包,到用于帮助创建随机效应回归模型的软件包,一一涵盖在内。

由于 R 开发人员社区的不懈努力,R 的功能有时看起来无穷无尽。R 开发人员编写的出色文档以及他们的积极参与,让刚刚起步的人员更容易上手。

2. 让自己更加吸引雇主

雇主们认为 R 本身就是一项有用且有价值的技能。在依赖于数据分析的各行各业中,这种情况尤为突出。流行的统计软件包(尤其是企业级)的价格非常高。许多雇主都明白,如果他们雇用可以使用 R 的人员,那么就不必购买享有专利权的统计软件包,由此便能节省数千美元。因此,赶快学习 R,让自己变得出类拔萃,进而大大增加自己被录用的几率。

3. 一站式采集、清理和分析数据

通过使用 R,您可以一站式采集、清理和分析数据。我们看一个简单示例,了解一下这意味着什么。

清单 1 显示了一个加载必需库的脚本。第 4 行到第 14 行用于对 NFL 统计信息站点执行 GET 请求,然后解析 JSON 响应。在执行更多格式化细节之后,数据被加载到数据帧中,并且可供分析(第 15-16 行)。

清单 1.一个简单示例

library(httr)

library(xml2)

library(mongolite)

resp <- GET('http://www.nfl.com/stats/categorystats?tabSeq=

1&statisticPositionCategory=RUNNING_BACK&season=2016&seasonType=REG')

nfltext <- content(resp,as="text")

rad <- read_html(nfltext)

trs <- xml_find_all(rad, ".//tr")

colNames <- xml_text(xml_children(trs[1]),trim = T)

mat <- matrix(nrow = length(trs) - 1,ncol = length(colNames))

for(i in 2:length(trs)){
  
    child <- xml_children(trs[i])
  
    mat[i-1,]<- xml_text(child,trim=T)

}

df <- data.frame(mat)

colnames(df) <- colNames

 

以下脚本更进一步。该代码在运行中的本地 Mongo 实例中创建一个新数据库,并插入包含所需 NFL 统计信息的数据帧。然后,该脚本会输出一些信息,验证数据是否已正确放入数据库中。任何脚本语言都可以执行这些任务,但看一下 R 是如何在保持简洁的同时又非常便于执行。

 

running_backs = mongo(collection = "2016RunningBacks", db = "NFLPlayers")

running_backs$insert(df)

running_backs$count()

running_backs$iterate()$one()

 

当您进入数据分析阶段时,许多必需的工具触手可及。

清单 2 中的脚本显示了足球数据的一些数据分析情况。

清单 2.足球数据分析

library(mongolite)

running_backs = mongo(collection = "2016RunningBacks", db = "NFLPlayers")

df <- running_backs$find(fields='{"_id":0,"Att":1,"Att/G":1,
                         
                            "Yds":1,"Yds/G":1,"TD":1,"1st":1,"FUM":1}')

df[1:7] <- apply(df[,1:7],1,function(x){gsub(",","",x)})

df[1:7] <- apply(df[,1:7],1,as.numeric)

nfl.pc <- prcomp(df,center = TRUE,scale. = TRUE)

print(nfl.pc)

summary(nfl.pc)

plot(nfl.pc, type = "l")

 

此处重新加载了 mongolite 库,以便拉入刚刚添加到数据库中的数据。数据以字符串形式进入,但正如您在脚本中看到的那样,R 的 APPLY 函数可以快速对数据帧执行大规模更改,例如,将字符更改为数字。脚本的剩余部分则执行基本的主要组件分析,以了解如何将这些统计信息归纳或组合到索引中,如图 1 所示。

Sophisticated data analysis
图 1.复杂的数据分析

该图显示,这组变量似乎没有潜在的因素。这当然不是开创性的,真正引人注目的是,在采集和清理数据的同一位置进行复杂的数据分析。通过学习 R,您可以尽享数据分析和一般脚本世界的种种优势。

4. 充分利用 R 卓越的数据可视化潜力

R 的数据可视化工具非常棒。清单 3 中的脚本对足球数据执行了一些数据分析。
清单 3.进一步的足球数据分析

library(ggplot2)

lmod <- lm(`Yds/G`~`FUM`,data=df)

par(mfrow=c(2,2))

plot(lmod)

par(mfrow=c(1,1)

ggplot(df,aes(x=`Yds/G`,y=`TD`))+
  
  geom_point(aes(size = `1st`))+
  
  geom_smooth()+
  
  labs(x = "Yards per Game",y ="Touchdowns",title = "Yards per Game

and Touchdowns")

 

首先,线性模型存储在 lmod 对象中。该模型测量了数据集中每场比赛的码数和跑卫掉球数之间的关系。为了从这个线性模型中获取诊断图,只需在 lmod 对象上调用 plot 函数即可。如果您只是想快速浏览一下线性模型是否适合您正在使用的数据,那么这将节省很多时间。

图 2 显示了这个函数生成的图表。

Diagnostic plots
图 2.诊断图

接下来即调用 ggplot 函数。软件包 ggplot2 可相对容易地实现出版质量级的数据可视化。图 3 显示了通过函数调用创建的图表。

  ggplot2 graph
图 3.– ggplot2 结果

该图表清楚地展示了每场比赛的码数和达阵数之间的复杂关系以及第一次进攻。这可能不是一个重要的发现,但 ggplot 所生成图表的质量非常好。

5. 迅速上手,跟上进度

R 很容易学习。大量在线社区帮助触手可及,甚至还有一些公司提供了高质量的在线课程。 R 很直观的一个原因是,它不是为计算机科学家创建的,而是为数学家创建的,所以对于一些非程序员来说,组织语言的方式可能更容易理解。

清单 4 中的脚本展示了该语言的简单性,结果如图 4 所示。
清单 4 中的脚本创建了三个随机样本,然后创建了数据的条形图。样本函数称为“sample”,因为您正在制作一个样本,并且使用 prob 选项来设置概率。data.frame 指的是数据的保存方式。

清单 4.R 的简单性

library(ggplot2)

ydata <- sample(c(1:100),10000,replace=T)

xdata <- sample(c("Erik","Cooper","Stewart"),10000,replace = T)

zdata <- sample(c("Red","Blue","Green","Yellow","Orange"),10000,replace = 
T,prob=c(0.4,0.2,0.25,0.1,0.05))

df <- data.frame(Marbles=ydata,Person=xdata,Color=zdata)

ggplot(df,aes(x=Person,fill=Color))+
  
    geom_bar(position="dodge")+
  
    scale_fill_manual(values=c("light blue","light 
green","#ff8000","#ff3232","#ffff66"))+
  
    labs(fill="Ball Color")

通过设置基础并在顶部添加元素来生成该图表。这些元素具有直观的名称(例如,用于条形图的 geom_bar),就生成图表所需的工作量而言,该图表看起来非常不错。

balls
图 4.三个随机样本

学习任何语言都绝非易事,但是 R 要比大多数语言都容易。

总结

从有用的文档到强大的数据可视化工具,这些仅仅是您应使用 R 的诸多重要原因中的部分原因。我们期待活跃的 R 社区未来能够作出更多改进,提供更多工具。您准备好了吗?深入探索并发现 R 编程语言到底有多棒!

资源

本文翻译自:5 reasons you should learn R programming language now(2018-03-20)

加入讨论