前言
这本书的初衷是教会你用R编程,从基本的加载数据到编写自定义函数(编写出比其他R用户更好的函数)。但是从内容上来说,这本书并不同于市面上其他的R导论类型的书籍,其更高远的目标是帮助你成为数据科学家和计算机科学家。因此这本书着重传授的R编程技能更贴近数据科学的要求。
本书内容分为三大块,其中每一块都对应一个实际的项目。考虑到每一个项目的内容都比较多,因此每一块又细分为几章。选择这三个项目是基于两个方面的原因。首先,它们基本涵盖了R语言编程的方方面面。具体来说,你将学到如何加载数据,组合与拆解数据对象,玩转R的系统环境,编写自己的R函数,以及使用R的所有编程工具,比如if else语句、for循环、S3类、R的包系统以及调试工具等。这三个项目也会涉及如何编写向量化的R代码,这种代码风格的好处在于其速度较快,并且能够最大化地发挥R的潜能。
更为重要的是,数据科学中涉及很多“数据物流问题”,而这三个精心挑选的项目将教你如何解决这些问题。在和数据打交道的时候,所谓的数据物流问题指的是如何高效无误地存储、检索和操作大规模的数据。读完这本书,你会发现我们的目标不仅在于学习如何利用R语言进行编程,更在于如何利用编程技术解决数据科学家在工作中会遇到的各种实际问题。
并非所有程序员都需要成为数据科学家,因此这本书并不一定适合所有程序员。但是,如果你属于以下两类人之一,一定会发现这本书很有助益。
(1) 已经把R当作一个统计研究的工具,并且想要使用R编写自己的函数和模拟。
(2) 想自学编程,并且感到有必要学习一门与数据科学相关的编程语言。
R语言的传统强项是建模与作图,市面上关于R语言的书籍基本都以这两点为主线。相比之下,本书最大的特色之一就在于将R视为一门纯粹的编程语言,而不是统计软件。因此我们将淡化这两大主线,将视角集中在编程语言特色上。这样的视角看似有些偏颇,因为R设计之初是作为一个开源的统计软件,其宗旨是帮助科学家解决数据分析问题。它内置了许多精良的数据分析函数,并且在数据可视化和统计模型方面有着明显的优越性。因此,许多统计学家将R视为一个软件,需要哪个函数就学习哪个函数,而忽视其他的部分。
这样的视角和学习方法其实也是有道理的,数据科学家在统计模型和数据可视化上的确应该倾注大量的精力。想要从数据中得出可靠的结论,数据科学家需要具备扎实的专业知识、敏锐的洞察力和专注精神。我并不建议你在了解基本的数据科学理论和工具之前,就把大量精力放在学习计算机编程上。鉴于此,如果你想学习数据科学的基础知识,我向你推荐本书的姊妹篇R for Data Science。
即便如此,编程也应该成为每一个数据科学家的必修课。学会编程不仅能够让你在分析数据时游刃有余,还能够从各个方面提升你掌握数据科学的能力。关于这一点,Greg Snow在2006年5月的R帮助邮件列表中有过一段十分精妙的比喻。使用R中现成的函数好比是乘坐公共汽车,而编写自己的R函数则类似于自己驾驶汽车。
搭乘公共汽车再容易不过了。你只需要知道该搭乘哪一路车,在哪里上车,又在哪里下车(当然,上车后你得投币或者刷卡)。但是自己驾车就远没有这么简单了:你需要一张地图或者起码是一条明确的导航信息(即使你已将路线记在脑子里);你还需要不时地给汽车加油,了解并遵守交通规则(你得有驾照)。相比于搭乘公共汽车,自己驾车的优点是更加自由,你可以去公共汽车去不了的许多地方。并且对于某些需要换乘公共汽车的旅程来说,自驾往往能够更快地到达目的地。
使用类似SPSS这样的统计软件就好比是搭乘公共汽车。对于某些基本和传统的统计分析来说,SPSS简单易用。但是,当你想做一些SPSS没有内置模块支持的分析时,就十分无助了。
R就好比一辆4驱SUV(当然,R不需要汽油,因此环保),车背驮了一辆山地自行车,车顶备了一艘小型皮艇,车内还有慢跑鞋、登山装备和洞穴探险装备。你想去哪儿,R都能做到,只要你肯花时间学习如何使用各种装备。但是,与像公共汽车的SPSS相比,学习R需要更多的时间和精力。
——Greg Snow
Greg做这个对比的时候,是默认大家把R当作一门编程语言来使用的;换句话说,你知道如何用R语言编程以实现自己想要的分析。如果你只是使用R的众多包提供的现成函数的话,那么R对于你来说只相当于另一个版本的SPSS;也就是说,你把它当作了一辆公共汽车,因此你能到达的地方也十分有限。
灵活性对于数据科学家来说至关重要。对于不同的数据,统计模型和数据模拟在细节上会有差异。如果不能因地制宜地使用合适的方法,你就可能设定不现实的模型假设,而使用现成的但又不太匹配手头数据的方法。
这本书的目的恰恰是要帮助你从公共汽车的乘客转变为SUV的驾驶员。本书面向广大的编程初学者。书中既不会讨论关于计算机科学的任何理论知识,比如大O()和小o()的区别,也不会讨论编程语言的底层细节,比如惰性求值(lazy evaluation)机制。如果想学习计算机科学的理论知识,这些高阶的细节固然重要,但是对于初学编程的人来说不是必需的。
我所准备做的,是通过三个精心挑选的例子,把R编程所需要的方方面面的知识都传授给你。这些例子不会过于冗长,并且易于理解。
作为RStudio的高级培训师,我已多次使用这些例子讲授R课程。我发现,实例教学有利于学习者快速理解和掌握抽象的编程概念。通过实例学习编程的另一个好处是,它提供了绝佳的练习机会。学习编程就像学习一门新的语言。通过学习书中提供的这些例子,并动手实践,你的R编程学习之路将变得更加平坦。
本书的姊妹篇叫作R for Data Science,即将出版。这本书详细介绍了如何用R作图、建模、编写报表,等等。它更注重数据科学的实用技能,并要求读者具备一定的数据科学基础知识。本书则侧重于如何使用R编程。它并不要求读者具有数据科学技能,当然如果具备一定的基础知识对于学习本书的内容也是大有裨益的。如果你同时掌握了数据科学和编程技能,那么恭喜你,你已经成为一位响当当的数据科学家,不仅可以挺直腰板找老板加薪了,还在数据科学领域更具话语权。
排版约定
本书使用下列排版约定。
· 楷体
表示新术语。
· 等宽字体(constant width)
表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。
· 加粗等宽字体(constant width bold)
表示应该由用户输入的命令或其他文本。
· 斜体等宽字体(constant width italic)
表示应该用用户输入的值或者根据上下文确定的值替换的文本。
该图标表示此处有提示或建议
该图标表示一般性注解
该图标表示警告或者需要额外注意
Safari®Books Online
Safari Books Online(http://www.safaribooksonline.com)是应运而生的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。技术专家、软件开发人员、Web设计师、商务人士和创意专家等,在开展调研、解决问题、学习和认证培训时,都将Safari Books Online视作获取资料的首选渠道。
对于组织团体、政府机构和个人,Safari Books Online提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology以及其他几十家出版社的上千种图书、培训视频和正式出版之前的书稿。要了解Safari Books Online的更多信息,我们网上见。
联系我们
请把对本书的评价和问题发给出版社。
美国:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
O'Reilly的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是:
http://shop.oreilly.com/product/0636920028574.do
对于本书的评论和技术性问题,请发送电子邮件到:
bookquestions@oreilly.com
要了解更多O'Reilly图书、培训课程、会议和新闻的信息,请访问以下网站:
我们在Facebook的地址如下:http://facebook.com/oreilly
请关注我们的Twitter动态:http://twitter.com/oreillymedia
我们的YouTube视频地址如下:http://www.youtube.com/oreillymedia
致谢
本书的写作和出版得到了很多优秀人士的支持和帮助,包括本书的两位编辑Courtney Nash和Julie Steele,以及负责版面设计、校对及书页索引的O'Reilly团队成员。另外,Greg Snow慷慨地允许我在前言中引用他的话,在此表示感谢。
我还要感谢Hadley Wickham,他帮助我形成了自己思考R和传授R的方式。这本书中的很多想法和内容都来自“统计405”这门课。我在莱斯大学读博士的时候是这门课的助教,而Hadley正是这门课的讲师。
此外,我代表RStudio举办过主题为“R与数据科学简介”的研讨会,参与研讨会的学生和老师都给了我很多灵感与建议,在此向他们表示感谢。还要特别感谢我的助教们,他们是Josh Paulson、Winston Chang、Jaime Ramos、Jay Emerson和Vivian Zhang。
感谢JJ Allaire以及我在RStudio的其他同事,他们创造并分享了著名的RStudio IDE(RStudio集成开发环境),极大地简化了人们使用、传授和编写R的方式。
最后,我要感谢我的妻子Kristin,在本书的写作过程中给予我莫大的支持与理解。