《R for Everyone: Advanced Analytics and Graphics》 是一本关于R编程语言以及用R来完成数据分析和可视化的书,它的作者是Jared P. Lander。
这本书从如何下载、安装R语言和配置环境开始讲述,环境配置包括命令行和RStudio IDE。
Jared接着在书中讲述了R的数据结构,如帧(data.frames)、列表(lists)、矩阵(matrices)和数组(arrays)。这其中也包括了从CSV、EXCEL文档、数据库表和其他统计工具中来读取数据。
在书中作者继续讲述了基本的统计方法、线性和非线性模型。线性模型包括逻辑回归和泊松回归,而非线性模型则包括非线性最小二乘法(non-linear least squares),决策树( Decision Trees )和随机森林( Random Forests )。
Jared同时也讲述了聚类模型如 K-means (基于距离的聚类算法)、PAM(Partitioning Around Medoids,围绕中心点划分算法)和Hierarchical Clustering(分级聚类算法)。
InfoQ采访了Jared,内容包括R编程语言、这本书的情况、大数据分析和可视化等。
InfoQ:什么时候我们应该用R来进行数据探索而不是用其它的方案,如Hadoop和MapReduce呢?
Jared P. Lander:这并不是非此即彼的情况。R可以处理内存中的数据,也可以被用作Hadoop和MapReduce作业中的编程语言。如果数据可以轻松放到一个合理大小的机器上,那就应该直接用R来探索;如果不是这样的情况,也可以在Hadoop上用R来进行数据探索。
InfoQ:你能谈谈一些流行的机器学习算法以及它们可以解决的用例或商业问题吗?
Jared :最近看到的最流行的算法和模型包括弹性网络(Elastic Net)、决策树和随机森林。当有多个预测器(predictors)时弹性网络表现非常好,这是因为它可以在保持广义线性模型解释能力(interpretability)的前提下执行不同的选择和规则化(regularization)。它最著名的实现是R中的glmnet包,这个包是Jerome Friedman、Trevor Hastie和Rob Tibshirani用非常高效的FORTRAN代码编写的。当预测器和响应之间存在非线性关系时决策树模型就是一个好的方案。决策树可以非常有解释性并且有很好的预测能力,这依赖于如何去修剪它。决策树的自然扩展就是随机森林,它把成千上万的树合并到一起来获得更强的预测能力,代价是牺牲了解释能力。这三种模型在需要预测的场景下执行效果都很好,比如定向广告、欺诈检测和运动分析。
InfoQ:如何去比较R语言和其它的机器学习框架,如Spark MLlib呢?
Jared :R既是一种语言,也是统计算法实现的集合,相比而言,其它的机器学习框架的功能是预定义好的。所以,如果某个方法在R中还没有实现(这种情况很少见),那么完全可能用R这种语言去创建它。
InfoQ:你讲述了关于时间序列数据的分析,这种数据每天都由越来越多的设备生成。你能谈谈在分析这些时间序列数据时一些好的实践吗?
Jared :对于时间序列很重要的是说明其自相关性(autocorrelation),这意味着标准的方法不再适用。这个特性进一步延伸下去,就是要确保交叉验证(cross-validation)时数据的连续性。对于时间序列数据的分析可以应用几种不同的模型方法,包括自回归移动平均线(ARMA:autoregressive moving average)、广义自回归条件异方差(GARCH:generalized autoregressive conditional heteroskedasticity)和隐式马尔科夫模型(HMM:Hidden Markov model)。时间序列的群集(Clustering)也是需要特殊关注的,这里动态时间规整(dynamic time warping)用于测量序列间的距离。时间序列数据存储效率是处理时的另一个重要步骤,而InfluxDB(开源、分布式的时间序列数据库)是个很好的解决方案。
InfoQ:你能大概谈谈数据可视化,以及R在可视化领域所扮演的角色吗?
世界上最复杂的分析如果它揭示的信息不能被有效交流和可视化,那么它也近乎无用,而数据可视化可能是最好的信息分享方式。一个图通常总会比一个数字表格能提供更好的解释。R最大的一个卖点就是它的可视化能力。多年来它的标杆是Hadley Wickham的ggplot2包,它用令人惊奇少量代码提供了惊人的图形能力。Hadley还创建了ggivs包,它本质上是ggplot2的版本但可以生成Vega(基于Web的可视化语法)图形。Ramnath Vaidyanathan编写了rCharts包,这样就可以在R中容易地创建D3(Data-Driven Documents)图形。通过上述这些选择,R可以非常容易和专业的进行数据的可视化。
InfoQ:对于想学习R的应用开发者来说,你有什么建议吗?是依据教程或者工具和IDE吗?
Jared :使用R最重要的工具就是RStudio IDE,这个集成开发环境使得R的编码是如此简单和易于上手。它提供了如此多的便利和功能,所以说到它的益处绝不是夸大其词。R非常好的一点还在于它是完全开源的,这样就有可能通过查看其他人的工作来学习R。当然,我的书《 R for Everyone 》也是一个非常好的起点。
InfoQ:那么R作为编程语言有什么局限性吗?
Jared :大多数情况下,数据是要求保存在内存中的,所以数据的大小会受到计算机中RAM数量的限制。避开这个限制,传统的做法是使用计算机集群,然后可以通过foreach语句和parallel包来比较容易地实现。也有一些包是工作于磁盘上的数据,比如bigmemory和 dplyr,这些都非常有帮助。过去R的内存管理有一些问题,但在最近的版本中都有了相当大的改进。
InfoQ:在你看来,R编程语言有哪些改进或新的特性呢?
Jared :在数据量不断增长的情况下,依然能用R去操作和分析那些保存在数据库中的数据是至关重要的。只要保证这个功能,那么我们就能乐见在更多的数据库中去应用R。
InfoQ:请你对统计编程和大数据分析前景给些意见和思路吧,一般性的或者是针对R的。
Jared :有能力针对数据进行编程而不是依赖于那些点击操作工具可以帮助你改进生产效率,每个人都应努力成为有编程能力的人。他们的产出从数量和质量上将会有相当大的改进,所以为此投入时间肯定是非常值得的。这些适用于还在整天用电子表格工作的任何人士,他们的下一步应该是利用统计和机器学习从数据中提取更多的信息。这个技能将会有益于使用者及其听众。
Jared P. Lander 是纽约城的统计顾问。他是纽约开放统计编程聚会(New York Open Statistical Programming Meetup)的组织者,以及纽约R、预测分析和机器学习聚会的演讲者。Jared专门研究数据管理、 多层模型(multilevel models)、机器学习、广义线性模型和统计计算。他的咨询范围从音乐、基金到金融和人道主义救援。他同时也在哥伦比亚大学教授R这门课程。作为哥伦比亚大学统计学专业硕士和数学专业学士,Jared在学术研究和业界实践上都富有经验。
查看英文原文: R for Everyone: Advanced Analytics and Graphics – Book Review and Interview