R高性能编程.pdf

R高性能编程.pdf
 

书籍描述

内容简介
本书对R语言做了简要描述,配以大量编程实践和代码样例,适合于想要提高R语言性能的程序员和开发者,对大量数据的处理、R语言的实际应用、基准测试均有指导意义。现代社会面对越来越庞大的数据和数据分析,R语言正是分析和处理大数据的有效方式,本书正是全面解析R语言的优秀书目。

编辑推荐
从本书你将学到什么
√ 对R程序进行基准测试和性能分析以解决性能瓶颈
√ 理解CPU、内存和磁盘I/O是如何限制R程序的性能的
√ 优化R代码使其运行更快并消耗更少内存
√ 在R中使用编译代码和C这样的其他语言以加快计算速度
√ 利用GPU提升计算速度
√ 使用基于磁盘的内存和块技术处理超过内存容量的数据集
√ 通过并行计算接入多个CPU
√ 在R中利用高级数据库系统和大数据工具
这本书的读者是谁
这本书可以帮助那些想要提升R程序性能的程序员和开发者,使R程序在处理大型数据集的时候运行更快;也适合那些试图解决某个讨厌的性能问题的程序员和开发者。

作者简介
Aloysius Lim
擅长将复杂的数据和模型表述为简单易懂的见解。作为About People的联合创办者、数据科学家及设计顾问,他喜欢解决问题,以及帮助他人寻找利用数据解决业务难题的实践方案。在政府、教育和零售行业长达7年的丰富经验,造就了他寻找具有创造性的解决办法的独特视角。
衷心地感谢上帝给我机会撰写本书,让我分享这些知识。在这个过程中,我亲爱的妻子Bethany给予了极大的支持和鼓励。谢谢你全部的爱,亲爱的。非常感谢我的搭档William,他是我灵感和洞察力的来源。

William Tjhi
数据科学家,在学术、政府及工业界具有多年的工作经验。他自读博期间开始了数据科学之旅,研究了一些新算法以提高高维数据聚类的健壮性。取得博士学位之后,他从基础研究转向了应用研究,致力于采用机器学习方法解决分子生物学和传染病学中的各种问题。他在一些同行评审的期刊和会议上发表了部分研究成果。随着大数据的兴起,William离开了学术界,转而投入工业界,开始了商业和公共部门领域的数据科学实践。William热衷于R,从他搞研究的那天开始就一直使用R作为主要的分析工具。他曾经是Revolution Analytics的一员,那时候他做了很多使R更加适合大数据的贡献。

目录
前言
1 理解R的性能:为什么R程序有时候很慢?1
计算性能的三个限制因素:CPU、RAM和磁盘I/O2
R是运行时解释的4
R是单线程的5
R需要将全部数据加载到内存5
算法设计影响时间和空间复杂度6
小结9
2 性能分析:衡量代码的性能11
衡量总运行时间11
使用system.time衡量运行时间12
使用rbenchmark重复衡量运行时间13
使用microbenchmark衡量运行时间的分布15
分析运行时间16
使用Rprof分析函数的性能16
性能分析的结果18
分析内存使用情况20
使用OS工具监控内存使用情况、CPU使用情况和磁盘I/O22
瓶颈的发现及解决23
小结26
3 加快R运行的简单方法27
向量化27
使用内置函数29
预分配内存30
使用更简单的数据结构33
使用哈希表进行大型数据上的频繁查找34
去CRAN寻找更快的包35
小结36
4 使用编译代码加快运行速度37
在运行之前编译R代码37
编译函数38
即时编译(JIT)R代码41
在R中使用编译语言41
前提条件42
以内联形式包含编译代码42
调用外部编译代码46
使用编译代码的注意事项49
小结52
5 使用GPU让R运行得更快53
GPU上的通用计算53
R和GPU54
安装gputools55
使用gputools实现快速统计建模55
小结59
6 减少内存使用的简单方法61
重用对象而不多占用内存61
删除不再需要的中间数据66
运行时计算值而不是永久性存储值69
交换活跃数据和非活跃数据71
小结71
7 使用有限的内存处理大型数据集73
使用节约内存的数据结构73
更小的数据类型76
稀疏矩阵77
对称矩阵78
比特向量79
使用内存映射文件并以块的形式处理数据80
bigmemory包81
ff包85
小结89
8 使用并行计算加倍提升性能91
数据并行性 v.s.任务并行性91
实现数据并行的算法95
实现任务并行的算法98
集群节点运行同一个任务时98
集群节点运行多个不同任务时100
计算机集群并行执行多个任务102
共享内存并行性 v.s.分布式内存并行性104
优化并行的性能108
小结109
9 将数据处理交给数据库系统111
将数据抽取到R v.s.在数据库中处理数据111
在关系型数据库中使用SQL进行数据预处理112
将R表达式转化为SQL116
使用dplyr117
使用PivotalR119
在数据库中运行统计和机器学习算法122
使用列式数据库提升性能125
使用数据库阵列最大化科学计算的性能128
小结129
10 R和大数据131
理解Hadoop131
在Amazon Web Services上配置Hadoop133
使用Hadoop批量处理大型数据集136
将数据上传到HDFS136
使用RHadoop分析HDFS数据138
R中的其他Hadoop包142
小结143

序言
前言
随着数据越来越重要,商家和科学家们也越来越需要高效分析和处理大规模数据的工具。近年来,R这一工具越来越普遍地应用于数据处理、统计分析和数据科学。虽然R最初源自学术界,但如今已经被工业界各个组织广泛使用。
然而,由于R本身的设计问题,它能够有效处理的数据规模和计算复杂度有限。这对于需要处理日益增长的大规模数据的R用户来说,是个极大的障碍。
《R高性能编程》这本书有助于理解R的性能难题,比如内存和计算方面的限制。本书还给出了很多克服这些难题的技术。你可以根据需求和计算环境选择其中一种技术或者混合使用不同的技术。
这本书是关于如何提升R程序性能的实用指南,并适当地解释了使你能够理解每一个解决方案背后的原因。同样,对于本书提到的每一个技术我们都提供了代码示例,以及在我们的机器上生成的性能分析结果以展示性能的提升情况。我们建议大家根据自己的实际环境敲写和运行这些代码,然后自己看看性能提升情况。
如果想要知道R的设计原理并理解其性能限制的原因,R内部文档中提供了有用的线索。
本书是基于开源R编写的,因为开源版本的R是最为广泛使用的,而且任何人都可以免费获得。如果你用的是商业版的R,请跟软件提供商确认一下他们都做了哪些性能优化。
R社区有很多提升R性能的新包,可从CRAN获取。鉴于CRAN有成千上万个包,我们不可能逐一分析,来确定哪个包针对哪个操作提供了性能改善。相反,本书重点关注R程序员最常见的任务,介绍那些任何R项目都可以使用的技术。
本书的内容
第1章 理解R的性能:为什么R程序有时候很慢?从窥探R的底层原理开始,探索R程序达到性能极限的几种方式。我们讲述某些时候R的设计是如何给R程序造成计算(CPU)、内存(RAM)和磁盘输入/输出(I/O)上的性能瓶颈的。
第2章 性能分析:衡量代码的性能 介绍衡量R代码性能的几个技术,从而理解性能问题的本质。这些技术贯穿全书使用。
第3章 加快R运行的简单方法 介绍如何提升R代码的计算速度。这些基本技术在任何R程序中均可使用。
第4章 使用编译代码加快运行速度 讨论利用以另一种语言编写的编译代码,比如使用C编译的代码,来最大程度优化计算的性能。我们会看到编译代码是怎样加快R运行的,以及如何将编译代码集成到R程序中。
第5章 使用GPU让R运行得更快 这一章把我们带入现代加速器领域,利用GPU高速运行复杂计算。
第6章 减少内存使用的简单方法 介绍管理和优化RAM使用情况的基本技术,使R程序能够处理更大的数据集。
第7章 使用有限的内存处理大型数据集 解释怎样使用节约内存的数据结构和磁盘常驻的数据格式,处理超过可用内存大小的数据集。
第8章 使用并行计算加倍提升性能 介绍R中的并行性。我们会探索如何在单个机器和多个机器上并行地执行R代码。此外,还会讨论设计并行代码需要考虑哪些因素。
第9章 将数据处理交给数据库系统 描述如何将某些计算转交给外部数据库系统。这有助于将进出数据库的大数据(Big Data)迁移开销最小化,特别是当你已经拥有一个强大的数据库系统,你就可以利用它的计算能力和速度。
第10章 R和大数据 介绍利用大数据技术达到R的性能极限,并总结全书。
如果你赶时间,我们推荐优先阅读以下几个章节,然后再根据具体情况补充阅读其他相关章节:
? 第1章 理解R的性能:为什么R程序有时候很慢?
? 第2章 性能分析:衡量代码的性能
? 第3章 加快R运行的简单方法
? 第6章 减少内存使用的简单方法
阅读本书需要什么
本书中的所有代码都是在Mac OS X 10.9上编写的,使用64位的R 3.1.1版本。我们还尽可能地在Ubuntu 14.04 LTS和Windows 8.1上进行了测试。所有代码示例都可以到网站下载。
要使用代码示例,建议安装R 3.1.1 64位版本,或者更高版本。
我们还建议在UNIX环境(包括Linux和Mac OS X)中运行R。因为如果在Windows上运行R,有些示例中的包,比如bigmemory只能在Unix环境下运行。示例代码中凡是UNIX和Windows环境下存在差异的,我们都会予以说明。
需要使用64位的R,因为有些操作(比如创建一个包含231个或更多元素的向量)在32位版本上是不可实现的。而且,64位版本能够尽可能多地利用系统的可用内存,而32位版本只能使用至多4GB的内存(有些操作系统最多只有2GB)。
此外,还需要安装一些R包。有些章节中的例子需要使用额外的包。
有些章节中的示例需要其他软件和包才能运行。这些在相应章节中都有说明,还给出了它们的安装指南。
如果无法获得示例中需要的那些软件和工具,可以在Amazon Web Services (AWS)上运行这些示例。例如,第5章的例子需要支持CUDA的NVIDIA GPU,第9章的例子需要几种数据库系统,第10章的例子需要Hadoop。
使用Amazon账号登录就可以使用AWS。如果还没有账号,就创建一个账号。创建账号是免费的,但是使用服务器、存储和其他资源是收费的。请咨询AWS网站了解你所在地区的最新收费情况。
全球不同区域都提供AWS服务。截至本书编写之时,AWS有8个服务区域,其中3个在美国,1个在欧洲,3个在亚太地区,还有1个在南美。任选一个区域,比如选择离你最近的或者价格最低的。进入AWS控制台,在右上角选择区域。选好区域以后,使用本区域内的AWS资源实现书中的示例代码。
在配置任何计算资源之前,比如配置服务器或者Hadoop集群,首先需要登入服务器的密钥对。如果还没有AWS Elastic Cmpute Cloud (EC2)的密钥对,按照以下步骤生成密钥对:
1.进入AWS控制台,单击EC2。
2.单击左侧菜单的密钥对。
3.单击创建密钥对。
4.输入新密钥对的名字(例如mykey)。
5.一旦单击创建以后,私有密钥(例如mykey.pem)就会下载到本地电脑。
在Linux和Mac OS X上,修改私有密钥文件的权限,只允许读操作。具体操作是在终端窗口中对mykey.pem文件执行chmod 400。
本书的读者对象
如果你已经是一个R程序员,想要寻找提升代码性能的方法,那么这本书适合你。你需要熟悉并舒适地使用R,但却不需要很高深的技术。阅读本书需要的技能包括:
? 安装、升级和运行R
? 在R环境中安装和升级CRAN包
? 创建和操纵基本的数据结构,例如向量、矩阵、列表和数据框
? 使用和转换不同的R数据类型
? 执行算术、逻辑和其他基本的R操作
? 使用R控制语句,例如if、for、while和repeat
? 编写R函数
? 使用R Graphics画图
如果你是R新手,想学习如何编写R程序,有很多书籍、在线课程、教程和其他资源可供参考。用你喜欢的搜索引擎搜一下就可以了。
约定
本书中使用了很多格式的文本,以区分各种不同的信息。这里我们举例说明这些格式,并解释它们的含义。
正文中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、URL、用户输入以及Twitter用户名的格式是这样的,例如:“要编译这个函数,我们在编译包中使用cmpfun()函数。”
代码块像这样表示:
fibonacci_rec \<- function(n) {
if (n \<= 1) {
return(n)
}
return(fibonacci_rec(n - 1) + fibonacci_rec(n - 2))
}
新术语和重要词汇用黑体表示。屏幕上出现的词,例如,菜单或对话框,像这样表示:“在安装向导中一定要勾选‘制作安装包’和‘编辑系统路径’两个选项。”

警告或重要事项以这种方式表示。

技巧和提示像这样表示。
下载示例代码
你可以从“下载专区”,下载所有已购买的博文视点书籍的示例代码文件。
勘误表
虽然我们已经尽力谨慎地确保内容的准确性,但错误仍然存在。如果你发现了书中的错误,包括正文和代码中的错误,请告诉我们,我们会非常感激。这样,你不仅帮助了其他读者,也帮助我们改进后续的出版。如发现任何勘误,可以在博文视点网站相应图书的页面提交勘误信息。一旦你找到的错误被证实,你提交的信息就会被接受,我们的网站也会发布这些勘误信息。你可以随时浏览图书页面,查看已发布的勘误信息。

文摘
版权页:



插图:

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多