R大数据分析实用指南

978-7-115-50925-3
作者: [英]西蒙·沃克威克(Simon Walkowiak)
译者: 顾星竹 刘见康
编辑: 胡俊英

图书目录:

详情

本书从大数据的基础知识及相关行业标准开始讲解,陆续介绍了R语言处理大数据的相关知识。书中不仅包含R语言的语法结构、开发技巧及R语言的特色等,还包含一系列实用的开发技巧。本书包含丰富的代码示例,以理论和示例相结合的方式帮助读者更好地学习和掌握大数据分析的方方面面。

图书摘要

版权信息

书名:R大数据分析实用指南

ISBN:978-7-115-50925-3

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


著    [英]西蒙•沃克威克(Simon Walkowiak)

译    顾星竹 刘见康

责任编辑 胡俊英

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


Copyright ©2016 Packt Publishing. First published in the English language under the title Big Data Analytics with R.

All rights reserved.

本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


R是一个强大的、开源的、函数式编程语言,可以用于广泛的编程任务。一般来讲,R语言的应用主要在数据统计与分析、机器学习、高性能计算等方面。R语言已经在多个领域赢得了认可,同时也基于其开源、免费的特点不断地发展壮大。

本书通过9章内容,循序渐进地揭示了大数据的概念,介绍了如何使用R进行数据处理,如何创建Hadoop虚拟机,如何建立和部署SQL数据库,同时还介绍了MongoDB、HBase、Spark、Hive相关的内容,并在本书的最后介绍了R的潜在应用场景。

本书适合中级数据分析师、数据工程师、统计学家、研究人员和数据科学家阅读,需要读者具备数据分析、数据管理和大数据算法的基本知识。


Simon Walkowiak是Mind Project公司的认知神经系统科学家和总经理,Mind Project公司是一家位于英国伦敦的大数据预测分析咨询公司。在此之前,Simon 是欧洲最大的社会经济数据库—— 英国科研数据服务(UKDS,位于埃塞克斯大学)的数据主管人。Simon在处理和管理大规模数据集方面拥有丰富的经验,例如普查、传感器、智能电表数据、电信数据和众所周知的政治和社会调查。Simon在公共机构和国际公司开设了大量的数据科学和 R 培训课程。他还在英国的几所主要的大学以及由分析与数据科学研究所(Institute of Analytics and Data Science,IADS)组织的著名大数据分析暑期班教授大数据方法课程。


本书的灵感主要是由许多R开发人员和用户激发的。我首先要感谢创建这个充满活力和高支持度社区的人们,是他们促进了开源数据分析和R语言的发展。然后,我还要感谢我的搭档Ignacio,没有他无条件的支持就不会有这本书。他总是知道如何鼓励和激励我,尤其是在我脆弱和缺乏动力的时候。

我还要感谢我的家庭成员,尤其是我的父亲 Peter,尽管他对我的数据科学毫无兴趣,但是他总是耐心地倾听我讲述关于新兴大数据技术和各种案例的故事。

此外,我要将本书献给埃塞克斯大学的英国科研数据服务的朋友和前同事们,在那里我遇到了超棒的同事,体验到了非常好的健壮的数据管理和处理。

最后,我非常感激 Packt 出版社为本书的出版付出辛勤劳动、提供专业知识和反馈意见的工作人员。特别是我的内容编辑 Onkar Wani以及出版商和评审,正是他们贡献了自己的专业知识,才促成了这本高质量、受欢迎的图书的诞生。


Zacharias Voulgaris 博士出生于希腊雅典。他在克里特科技大学学习生产工程和管理学,在研究生阶段转入伦敦城市大学的信息系统和技术的计算机科学专业,在博士阶段转入伦敦大学的机器学习方向的数据科学专业。他曾在Georgia Tech 担任研究员,在塞浦路斯的电子营销创业公司担任SEO经理,并担任Elavon(GA)和G2(WA)的数据科学家。他还担任过微软必应的数据分析流方向的项目经理。

Zacharias撰写过两本关于机器学习的图书、几篇机器学习的文章和几篇有关 AI 的文章。他的第一本书《数据科学家修炼之道》(Data Scientist——The Definitive Guide to Becoming Data Scientist)(中文翻译版由人民邮电出版社出版)已经被翻译成了韩文和中文,他还有一本新的著作—— Julia for Data Science。除此之外他还审阅了一些主要涉及 Python 和R语言的数据科学图书。他对新技术、文学和音乐充满热情。

感谢Packt出版社的朋友们邀请我来审阅这本书,也感谢他们的书促进了数据科学特别是Julia的发展。此外,也格外感谢所有默默无闻的作者们,保持知识共享需要更多人的不懈努力。

Dipanjan Sarkar是Intel公司的一名数据科学家。Intel是世界知名的公司,一直致力于使世界的联系更紧密、更高效。Dipanjan 主要从事分析、商业智能、应用开发和构建大型智能系统,他从班加罗尔信息技术国际研究所获得了信息技术硕士学位,他的专业领域包括软件工程、数据科学、机器学习和文本分析。

Dipanjan的兴趣包括学习新技术、发现新领域、数据科学以及最近感兴趣的深度学习。业余时间他喜欢阅读、写作、游戏和观看流行的情景喜剧。他还撰写了一本关于机器学习的书,书名为R Machine Learning by Example,由Packt出版社出版,他同时也是 Packt 出版社出版的几本关于机器学习和数据科学图书的技术评审。


我们生活在一个物联网的时代,有着庞大的全球互联设备、传感器、应用、环境和网络。它们每天产生、交换并消耗大量的数据,利用这些数据可以为我们提供对物理与社会环境的新的理解。

各种开源和专用大数据技术的迅速发展使得深度探索大量的数据成为可能。然而它们中有许多技术在统计和数据分析功能方面的能力是有限的,其他一些技术实现和编程语言对于很多受传统教育的统计学家和数据分析师来说是陌生的,很难在现实场景中使用。

R 编程语言是一个开源的、免费的、极具通用统计环境的语言,可以为用户提供各种高度优化的数据处理方法、聚合方法、统计测试和机器学习算法,相对用户友好且易于定制的。

本书挑战了关于R这门编程语言不支持大数据流程和分析的偏见。在本书中,你将会了解到各种核心R功能和大量的第三方软件包,使得R用户能够从较新、较尖端的大数据技术和框架(如 Hadoop、Spark、H2O,传统基于SQL的数据库如SQlite、MariaDB和PostgreSQL,还有更灵活的NoSQL数据库如MongoDB或者HBase等)中受益。通过学习本书,你将从数据导入和管理到高级分析和预测建模的大数据产品周期的所有阶段中亲身体验各种工具与R的整合。

第1章简单地介绍大数据的概念,大规模分析工具日益增长的现状,以及R编程语言和统计环境的起源。

第2章阐述R中最基本的数据管理和数据处理方法。本章教你使用大量R的探索数据分析和假设检验方法,例如相关分析、差异检验、ANOVAs和广义线性模型。

第3章探索使用R语言进行大规模分析以及处理单机中超出内存大小的数据集的可能性。本章展现一系列第三方包和核心R方法,用以解决R在大数据处理领域的传统局限性。

第4章说明如何创建一个云托管的Hadoop虚拟机,如何将 HDFS和MapReduce框架与R编程语言相结合。在本章的第二部分,你将会使用R控制台对多节点的Hadoop集群和大规模的电力相关数据进行分析。

第5章指导你建立和部署传统SQL数据库,如SQLite、PostgreSQL和MariaDB或MySQL,可以很容易地与基于R数据分析流程相结合。本章还介绍如何构建和使用高可扩展的Amazon关系型数据库服务实例,以及如何直接用R对其进行查询。

经过前几章的学习积累,你可以通过第6章很轻松地掌握如何连接两个流行的非关系型数据库,一个是快速且用户友好的运行在Linux虚拟机上的MongoDB,另一个是在 Azure HDInsight 服务器的Hadoop集群上的HBase 数据库。

第7章展示一个实例用以说明如何将Apache Spark与R相结合,用以更快地对大数据进行操作和分析。本章还介绍如何将Hive数据库用于多节点部署了 Spark 的 Hadoop集群的数据源。

第8章带你领略尖端的R预测分析。首先,你会在多节点Spark HDInsight集群上使用 Spark MLlib 库进行快速而高度优化的广义线性模型。然后,你会使用一个开源大数据分布式机器学习平台H2O实现朴素贝叶斯和多层神经网络算法。

第9章讨论R语言开发所遇到的潜在场景,可以看出R语言能快速应对大量的数据做智能分析。R是新兴的大数据领域工具。

书中出现的所有代码片段已经在配置为2.3GHz Intel Core i5处理器、1TB的固态硬盘, 16GB内存的Mac OS X (Yosemite) 上测试过。强烈建议各位读者将代码运行在至少4GB内存的Mac OS X或者Windows 机器上。同时也建议各位读者安装新版本的R和RStudio以及至少一款浏览器如Mozilla Firefox、Chrome、Safari或Internet Explorer,以确保可以获得最佳的学习体验。

本书适合中级数据分析师、数据工程师、统计学家、研究人员和数据科学家,希望并计划将当前或未来的大数据分析流程与R编程语言相结合。

本书假定读者已有一些数据分析、数据管理和大数据算法的经验,有可能只是欠缺一些与R相关的开源大数据工具的使用技能。

在本书中,你会发现各种不同的文本格式用于区分不同类别的信息。以下是一些示例以及相关含义详解。

代码文本、数据表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入以及Twitter handle的显示方式如下。

“- getmerge指令允许合并HDFS上指定某个目录的所有数据文件”。

任何命令行输入或输出显示如下。

 $ sudo –u hdfs hadoop fs –ls /user

任何术语和重要单词显示为粗体。你在屏幕上看到的词语,例如在菜单或者下拉框中看到的显示如下。

“点击继续按钮以进入下一步”。

 

 

警告或者重要提示显示在如下的方框中。

 

 

 

 

小贴士与小技巧在这里。

 


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供配套代码,要获得该配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

如果您是教师,希望获得教学配套资源,请在社区本书页面中直接联系本书的责任编辑。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

异步社区

微信服务号


每当里奥·梅西在巴塞罗那诺坎普足球场得分的时候,总有十多万的巴萨球迷为他们这位进球最多的前锋欢呼喝彩。社交媒体,诸如推特、Instagram和脸书会立刻被有关这位阿根廷球员的这个奇迹进球的评论、意见、看法、分析、照片和视频淹没。其中一个进球,发生在2015年5月对阵拜仁慕尼黑的比赛中,它帮助球队打进了欧洲冠军联赛的半决赛,单单在英国就创造了每分钟25000条推特微博的记录,成为了该国2015年度“最微博”体育时刻。这样一个进球不仅仅是足球迷和体育记者之间广为流传的兴奋时刻,而且还驱动着全球数量众多的运动服饰门店的市场营销部,这些市场营销部每天都在以高精度预测着店铺和网络销售的梅西衬衫和其他巴塞罗那俱乐部相关纪念品的数量。与此同时,各大电视台都在努力竞标即将到来的巴萨比赛,并且通过在半场休息播放广告吸金数百万。对于一些行业而言,这个进球的潜在价值超过了梅西2000万欧元的年薪。这个进球时刻创造了大量的信息,需要被收集、存储、转换、分析,以及以另一种形式重新传递,例如体育新闻对梅西这致命一射的慢动作回放,更多的衬衫被派送到运动服专卖店,一份销售电子表单,或者一份概述巴萨电视转播收入的营销简报。这样的类似于梅西进球击败拜仁慕尼黑的时刻,每天都在发生。事实上,当你正在看这本书的时候,它可能就正在发生。如果你想知道现在全世界都在关注什么,上推特网页,打开时刻标签页,看看现在最受欢迎的标签和话题就知道了。每一个事件,或者比这个更重要,或者不那么重要,但是它们都会产生大量的不同形式的数据,社交媒体、YouTube 视频和博客文章都只包含了其中一小部分。这些数据可以很容易地和该事件相关的其他信息联系在一起,建立一个复杂的非结构化的数据存储,从不同的角度、使用不同的分析方法来解释一个特定的问题。但是问题来了:互联网领域的数据挖掘是如此简单、方便,以至于我们很快就会把这些数据集塞满硬盘,或者用完处理能力或内存资源。如果你管理数据的时候遇到了这些问题,那你很有可能就是在处理大数据了。

大数据可能是受传统培训的分析人员和研究人员听到过的最可怕、最致命和最令人沮丧的词语了。第一个问题就在于大数据这个概念的定义。如果你随机抽选10个学生,问他们对大数据这个概念的理解,那么你很有可能得到10个完全不同的答案。通常,大部分人都会立刻总结出大数据这个概念和数据集的大小、和行数列数有关系。不同领域的人会给出相类似的论述。事实上,在某种意义上他们是对的。但是,如果我们要开始深究,什么情况下正常的数据会变成大数据,那可就打开了争论的大门。有些人(也许是心理学家?)会努力说服你说即使是100MB也大到吓人的程度了。也有些人(社会科学家?)很有可能会说1GB的数据就很让他们焦虑了。而见习精算师呢,则会说5GB以上就会成为令人头疼的大小了,因为这是Excel 能够流畅处理数据的上限。事实上,在医药科学的许多领域(例如人类基因组的研究),文件大小很容易就会超过100GB,而大多数行业的数据中心需要同时处理2TB~10TB的数据量。领头羊公司或者独角兽公司例如谷歌、脸书或YouTube每天管理着PB级的信息。那么到底什么是大数据和普通数据量的阈值呢?

答案并不简单、直接,定义大数据的确切数字也并非一成不变。为了给出大概的估计值,我们首先需要区分简单的数据存储和数据的处理分析。如果你的目标是在硬盘上存储1000个YouTube视频,那估计并不困难。现在数据存储已经很便宜了,而且新技术的快速出现使得价格愈加便宜。20年前,300美元只能购买2GB的个人电脑硬盘;10年前,同样的钱可以购买200倍大小的存储装置。到了2015年12月,300美元的预算可以很轻松地负担一个1TB的SATA III内置固态硬盘—— 一款快速且稳定的硬盘,个人用户所能用到的最好的硬盘之一。显然你可以选择更便宜、更传统的硬件来存储你的1000个YouTube 视频;不管什么样的预算,都有很多种选择。但是,如果你需要处理这1000个视频,选择就不能那么随心所欲了,例如为每个视频制作一个短视频,或者增加字幕。如果你需要分析每个视频的实际画面并量化就更糟了。例如,每个视频中大小超过20×20px的红色物体出现的时间是多少秒。这些任务不仅仅需要考虑存储容量,最主要的是要考虑处理器的计算处理性能。你可能还需要处理和分析每一个视频,不过就算你使用最好的个人电脑,当要处理1000个视频文件时,性能也会不够用,你的耐心也一样会耗尽。为了加速处理这些任务,你可能需要赶快找到一些资金用于升级硬件设备,不过这并不能长久解决问题。目前,个人计算机的扩展程度十分有限。如果你的任务不涉及繁重的数据处理,并且仅限于使用文件存储,那么一台计算机就足够了。然而目前,我们的集群除了需要足够大的硬件存储之外,还需要确保足够的随机存取存储器(RAM),以及能够快速处理大量任务的处理器。因为不断推陈出新的技术,单台机器上的独立组件的升级,可能是昂贵且短效的,而且很难给复杂的数据处理任务带来真正的改变。严格说来,这至少不是大数据分析中最灵活有效的方法。前面我故意提到了集群,正因为我们很有可能在计算机集群中并行处理数据。先不讨论过多的细节,数据处理任务可能会需要我们的系统可以横向扩展,这意味着我们可以按照意愿很容易增加(或减少)集群中连接的设备数量。横向扩展而非纵向扩展的一个显著优点是任务需要多少节点,我们就可以用多少节点并行工作,并且不会被我们集群中的单台计算机的配置问题所干扰。

让我们暂时回到前面提到的学生们关于普通数据和大数据的临界点的回答。在众多的关于大数据的定义中,有一个特别一致且广泛适用的答案。“比容易处理的量多 1字节”是大数据会议的人士们之间广为流传的短语,不可否认,它对大数据的定义非常精确。每一个人都有判断什么时候、怎样的数据可以被称为大数据的主观自由。事实上,我们所有的学生,无论他们说大数据是少则100MB或高达10PB的,他们的回答或多或少都是正确的。只要一个人(以及他的设备)并不能舒适地处理一定规模的数据,我们就可以认为对他们而言,这就是大数据了。然而,数据的规模并不是判断是否是大数据的唯一因素。虽然前文提及的大数据的简单定义中,明确指出来 1字节的尺寸大小,但是我们还必须用几句话剖析定义的第二部分,以便更深入地理解大数据的真正含义。数据并不仅仅是出现并存入一个文件这么简单。如今,许多数据变化非常迅速。大数据的准实时分析,即使在国际大型金融机构或能源公司,依然是让数据科学部门头痛的事情。虽然股市数据或传感器数据都很不错,但是依然是毫秒时间间隔的高维数据存储分析中的非常极端的例子。在准实时信息系统中,数据分析那几秒的延迟,可能就会花费投资者显著的资金,并导致他们的投资损失,因此移动数据的处理速度绝对是当前很需要考虑的问题。此外,现在的数据比以往任何时候都更加复杂。网站会通过 API服务产生大量碎片化信息,如非结构化文本、JSON格式、HTML文件等。Excel电子表格和诸如逗号分隔值(CSV)或制表符分割文件等传统结构化数据文件格式已经不占多数了。认为数据仅仅是数值或文本格式的想法是非常局限的。现在有大量的可选格式用于存储诸如音频和视频信息、图形、传感器和信号、3D渲染图像文件或使用专业的科学软件、分析软件包如Stata或社会科学统计包(SPSS)等收集和解析的数据。

数据的大小、数据的输入输出速度以及数据的不同格式和类型实际被称为3V:流量(Volume)、流速(Velocity)和种类(Variety)。最早在由Doug Laney于2001年发表的《3D数据管理:控制数据的流量、流速和种类》一文中提出。现已成为处理大数据的主要控制条件。Doug的著名3V理论已经被其他数据科学家扩展了很多,以包含更具体、更定性的因素,例如数据的变化(variability)(数据流的周期性峰值数据)、复杂度(complexity)(相关数据的多个数据源)、准确性(veracity)(由IBM提出,表示数据一致性的置信度)。无论我们用多少个V或者 C来形容大数据,它本质上依然取决于现有IT基础设施的局限性,处理大数据集的人们的技能以及收集、存储和处理这些数据的方法。正如我们先前的结论所说,不同组织(例如个人用户、学术部门、政府部门和大型金融企业或技术领导者)对大数据的定义不尽相同,我们依然可以将之前提到的定义重述为下面这句话:

大数据是指引起值得关注的处理、管理、分析和解释问题的任意数据。

另外,对本书而言,我们将会假设这样的数据大小通常是4GB~8GB,也是2014~2015年个人电脑所配内存的标准容量。当我们在本章稍后位置阐述R语言的传统局限性,以及在本书之后的章节中讲述大数据内存内处理方法时,这个阈值会更有意义。

就像医生不能统一使用扑热息痛和布洛芬治疗所有的医疗症状一样,数据科学家们需要使用更有效的方法来存储和管理大量的数据。我们已经知道了大数据的定义以及定义大数据所需要的条件,可以进一步了解一系列专为处理这些大数据集而生的工具了。虽然传统技术在某些情况下可能依然有用,但是大数据有其自身的包含可扩展框架和应用的生态系统,可以更便利的处理和管理超大或超快速的数据。在本章中,我们将会简要介绍几种最常见的大数据工具,详细的探索将在本书之后的章节中进行。

只要你在大数据行业呆过,哪怕一天,你肯定会听过一个不常见的词汇:Hadoop,在你和你的同事或同学进行茶歇座谈会的时候,一定三句话不离Hadoop 这个词。Hadoop原本是Doug Cutting的孩子最喜欢的玩具(一只黄色大象)的名字,现在已经面世快11年了。它起源于2002年前后Doug Cutting领导Apache Nutch项目(一个可扩展的开源搜索引擎)期间。项目进行了几个月后,Cutting和他的同事Mike Cafarella(彼时还是华盛顿大学的研究生)遇到了由于Nutch平台数据量的增长和处理需求引发的扩展性和健壮性问题。该解决方法来源于谷歌,更确切地说,是来自于Ghemawat、Gobioff和Leung在19届操作系统原理ACM研讨会(19th ACM Symposium on Operating Systems Principles)发表的名为《Google文件系统》(The Google File System)的论文。文章重现了Larry Page和Sergey Brin发明的大文件(Big Files)的原始构思,并提出了使用廉价商用硬件组成集群将大量文件分割为64MB固定大小跨集群节点进行存储的革命性新方法。为防止故障,并改善这种设置的效率,文件系统创建出这些文件块的副本并将它们分布存储在一系列节点上,这些节点由主服务器连接和管理。几个月后,谷歌又发表了一篇名为 《Mapreduce:简化大集群上的数据存储》(MapReduce: Simplified Data Processing on Large Clusters)的论文,作者是Dean和Ghemewat,发表在《操作系统设计与实施第六次会议论文集》(6th Conference on Symposium on Operating Systems Design and Implementation)中,又一次震惊了Cutting和Cafarella。

MapReduce框架成为了粘合剂,粘合了存储在文件系统的大量节点上的分布式数据与数据转换和任务处理的输出文件。

MapReduce模型包含3个主要阶段。第一阶段是Mapping 过程,按照mapper(即进行mapping操作的脚本)指定的键值对将数据索引和排序到指定结构。第二阶段Shuffle 负责将mapper 输出在节点间重新分布,分布依据是键值;也就是说,同一个键值的输出会被存储到同一个节点上。第三阶段Reduce 输出之前map和shuffle过的数据的某种汇总信息,例如每个键值所对应的连续测量值的算术平均值等诸如此类的描述性统计。在谷歌和分布式文件系统中使用MapReduce框架的一个简单数据处理工作流如图1-1所示。

图1-1 简化的分布式文件系统架构和MapReduce框架的各个阶段

谷歌文件系统模型和MapReduce模式的想法与Cutting和Cafarella的计划非常吻合,因此他们将两者都引入了自己的Nutch的研究。第一次,他们的网络爬虫算法可以在几台商用计算机上并行运行,并且只需要一位人类工程师的简单监督。

2006年,Cutting加入了雅虎。2008年,Hadoop成为了独立于Nutch的Apache 项目。从那时起,它就走上了更可靠和可扩展的永无止境的旅程,通过逐渐增加节点数量有效实现更大、更快的数据工作负载。与此同时,Hadoop也成为了诸如微软 Azure、亚马逊弹性计算云(EC2)以及谷歌云平台等云计算平台的附加服务的领头羊。这种新的、不受限制的、灵活的访问共享和负担得起的商用硬件的方式,使得大量公司以及个体数据科学家和开发人员大大减少了他们的生产花销,并且以更有效和健壮的方式处理着更大的数据。值得一提的是Hadoop创造了一些破纪录的里程碑。在2007年底的一个知名现实例子中,纽约时报使用在亚马逊EC2上构建的100个节点,在不到24小时的时间内,转换了超过4TB的图片,仅花费了不到200美元;这原本需要好几周的辛勤劳动和大量工作时长才能完成,而现在只需要在极短的时间内花费原始成本的一小部分就能实现了。在一年后的2009年,1TB的数据可以在短短209秒内完成排序,而雅虎仅仅使用了62秒来排序同样大小的数据,创造了新纪录。在2013年,Hadoop创造了Gray Sort Benchmark最快纪录并维持至今(译者注:有兴趣可以去sortbenchmark网站查看,该纪录已多次被打破)。来自雅虎的Thomas Graves在4328秒内排序了102.5TB的数据,大约每分钟1.42TB。

近年来,Hadoop和MapReduce框架已经被诸如脸书、谷歌、雅虎、大型金融和保险公司、研究机构、Academia以及大数据爱好者广泛使用。很多提供Hadoop商业版的公司,例如Cloudera(由Tom Reilly领导,Doug Cutting担任首席架构师)和Hortonworks(目前由Rob Bearden主管,他是前甲骨文公司的资深主管,多个成功开源项目如SpringSource和JBose的CEO;之前由Eric Baldeschwieler主管,他是曾经和Cutting一起工作的雅虎前员工),它们从原本的Hadoop项目中分离出来,发展成独立的实体,提供额外的大数据专有工具,扩展了Hadoop生态圈的应用和可用性。虽然MapReduce和Hadoop彻底改变了我们处理大数据的方式,并在商业领域和个人用户中大规模传播其大数据分析方式,但是他们依然收到很多关于性能局限性、可靠性问题和编程困难度的批评。我们将在第4章中使用实例深度探索这些局限性以及解释 Hadoop和MapReduce的其他特性。

不管是基于SQL的关系型数据库管理系统(RDBMS),还是更现代的非关系型数据库,或者说不仅仅是SQL(NoSQL),都有大量很优秀的在线和离线资源及出版物供读者选择。本书不会详细介绍它们,不过会提供一些关于如何使用已知的、经过测试的R包在此类系统中存储大量数据,执行必要的数据处理,并将数据从数据库直接提取到R处理会话中的实例。

正如之前提到的,在第5章,我们将首先简单介绍标准的建立在由牛津教育英语计算机科学家,同时在IBM圣何塞实验室工作的Edgar Codd在20世纪70年代发明的关系型模型基础上的标准传统型数据库。如果你没有太多的数据库经验,也不用担心,此时,你只需要知道在RDBMS中,数据以带有字段和条目的表格形式存储。根据不同行业,字段可以理解为变量或者列,条目可以理解为观察值或数据行。也就是说,字段是信息的最小单元,条目是字段的集合。字段像变量一样具有一些分配的属性,例如它们只包含数据型、字符串型、双精度浮点型或长整型的值等。这些属性可以在输入数据到数据库中的时候设置。RDBMS已被证明是非常受欢迎的,当今几乎所有企业都在使用某种关系型数据库收集和存储数据。结构化查询语言(SQL)可以轻松查询 RDBMS,SQL是一种可访问的、相当自然的数据库管理编程语言,由来自IBM的Donald Chamberlin和Raymond Boyce 首先发明,然后由甲骨文公司进行商业化和进一步开发。自从第一个RDBMS 诞生以来,甲骨文、IBM和微软控制了带有完整售后支持的商业化RDBMS产品将近90%的市场份额。在本书的R与RDBMS的连接实例(位于第5章)中,我们将会使用一系列最流行的关系型开源数据库,包括MySQL、PostgreSQL、SQLite以及MariaDB。

然而,这不是我们游览令人兴奋的数据库以及大数据应用的终点。虽然RDBMS在繁重的事务负载情况下表现很好,并且具有可以处理相当复杂的SQL 语句的巨大优势,但是它们对于(准)实时和流数据的处理并不擅长。同时它们通常也不支持非结构化和分层数据,也不容易水平扩展。为了响应这些需求,一种新型数据库发展了起来,或者更准确地说,它复活了。因为非关系型数据库与RDBMS在长达40年的时间里一直齐头并进,但是它们之前从未如此流行过。NoSQL与非关系型数据库不同于基于SQL的RDBMS,它没有预定义的格式,从而给予用户很大的灵活性,并且不用改变数据。它们通常有很好的横向拓展性,处理速度很快,是零售、营销和金融服务等行业理想的(近)实时分析存储方案。它们也有类似于SQL的查询语言。其中一些,例如MongoDB NoSQL语言,允许用户执行大多数数据转换操作以及复杂的数据聚合和MapReduce操作,非常具有表现力。交互式基于Web的服务、社交媒体和流数据产品的快速增长促生了大量特定目的的NoSQL数据库的诞生。在第6章中我们将会介绍一些使用R来进行大数据分析的例子,其中会介绍3种主流开源非关系型数据库,分别是一个流行的基于文档的NoSQL、MongoDB以及一个分布式Apache Hadoop式的HBase数据库。

在1.2.1节中,我们介绍了Hadoop、Hadoop分布式文件系统(HDFS)以及MapReduce的一些基础概念。尽管Hadoop在学术界和工业界已经被广泛使用,仍然有很多用户抱怨说 Hadoop太缓慢了,有一些计算要求高的数据处理操作可能需要花费几个小时才能完成。Spark利用并部署在现有的HDFS之上,专为快速迭代计算而生,比Hadoop的内存性能快100倍,并且运行在快10倍的磁盘上。

Spark拥有着相对小型但是不断增长的生态系统,包含各种工具和应用程序,通过为Spark增加SQL 脚本(通过Spark SQL)的方式以支持大规模结构化数据的处理,对流数据(Spark Streaming)启用容错操作,允许用户执行复杂的机器学习模型(MLlib),并通过GraphX模块提供可以直接使用的并行集群检测算法,例如PageRank、标签传播以及许多其他图形和集合算法。由于在Apache上开源并且经营社区,大量数据分析和机器学习者已经对Spark产生了极大的兴趣。截至 2016年7月底,由独立Spark开发者开发的第三方软件包已经超过了240个,可以在Spark网站上找到这些包。其中大多数或多或少允许与市场上其他常见的大数据工具进一步集成。请随意访问该网站并查阅检索目录查看你所熟悉的工具或编程语言。

在第7章以及第8章中,我们将会讨论在使用R语言的大数据分析工作流中使用Apache Spark方法。不过在这之前,我们需要首先熟悉这本书最重要的部分—— R语言本身。

到目前为止我们已经介绍了大数据的概念、特征和特性,以及使用最广泛的大数据分析工具和框架,例如Hadoop、HDFS、MapReduce框架、结构化和非结构化数据库和Apache Spark 项目。在本书接下来的几章中会对它们进行更加深入的探讨,不过现在我们将要介绍本书的主角、真正的英雄——R语言。R语言从20世纪90年代中期作为一门独立的语言一直陪伴我们至今,它源于 20世纪70年代中期从一门更古老的语言——由John Chambers发明的S语言。Chambers在贝尔实验室的日子里,他们小组的目标之一就是设计一种用户友好的、可交互的、可快速部署的用于数据分析和可视化的接口。因为他们经常需要处理分析非结构化数据和不同的数据格式,所以一个拥有灵活接口的、可以充分利用以前使用的Fortran算法的工具成为了最高优先级的需求。此外,该项目还需要满足一些图形化输出的需求以便数值计算的可视化。它的第一版是在安装了Honeywell操作系统的机器上运行的,由于一系列的限制,这并不是一个理想的平台。

S语言的持续开发工作进展得相当迅速,1981年,Chambers和他的同事们发布了S 语言的UNIX实现环境以及题为《S:数据分析的语言和系统》的手册。事实上,S是一个混合环境或者说接口,允许通过一系列的内置方法访问基于Fortran的分析算法,拥有可灵活自定义的语法对数据进行操作,以满足那些希望可以自定义统计方法和实现更复杂的计算的使用人员的愿望。这种混合了面向对象和面向方法的编程语言、统计计算工具,造成了一系列的歧义和困惑,就算对原先的开发人员而言也同样如此。众所周知,John Chambers、Richard Becker以及其他开发S语言的贝尔实验室的工程师们不知道该将他们的软件定义为一个编程语言,还是一个系统或者是一个环节。然而更重要的是,S开垦了学术界和统计研究领域的一片沃土,其用户极速增加,外部贡献越来越多,社区也在不停增长。S的未来版本将允许用户存储数据、子集、计算输出,甚至单独的函数或图,以加强S环境的函数化和对象化的结构。同时,随着1986年S第三版的发布,S环境的核心由C 语言编写,而且与Fortran模块的接口可以通过模拟器从S方法中动态加载,而不是像早期版本那样需要通过预处理器和编译。当然,由Chambers、Becker以及后来的Allan Wilks一同编写的手册也随着全新的S环境一起发布了,其中解释了S语法的结构和经常使用的统计函数。20世纪90年代,来自新西兰奥克兰大学的Robert Gentleman和Ross Ihaka以S环境为基础设计出了 R 编程语言。尽管 S 和 R 有一些差异,但是由S语言编写的代码在R环境中几乎不需要改变。事实上R以及S+语言都是S 语言的演进版本,官方也是这样建议大家的。可能S和R的最大差异在于R还混合了Steele和Sussman的Scheme编程语言中词法作用域的演进模型。R中词法作用域的实现允许你分配自由变量,这取决于引用该变量的函数的环境,而在S中自由变量只能在全局中定义。在R中使用评估模型意味着与S相比,函数更具有表达型、以更自然的方式编写,通过在自己的环境的特定函数中定义变量,给予开发人员或分析人员更大的灵活性和能力。前面提供的链接列出了两种语言之间的微小而微妙的差异,除非在运行R代码中发现明确的错误信息指示,否则很多差异非常不明显。

目前,R有各种变体和形式,因为有好几种开源和商业实现方式。最流行的是本书所采用的免费R GUI,可以从R项目CRAN网页下载,同样免费的RStudio IDE可以从RStudio网站下载。由于它们的流行和多功能性,都值得好好介绍一番。

最通用的R实现是免费的、开源的,由位于奥地利维也纳的统计和数学研究所的统计计算R基金会管理。这是一个非营利组织,由R开发核心小组的成员创建设立,成员包括一些著名的统计研究学者、R专家和在过去几年最多产的R社区贡献者。其中依然有S和R语言的原始作者诸如John Chambers、Robert Gentleman和Ross Ihaka,以及最有影响力的R开发人员:Dirk Eddelbuettel、Peter Dalgaard、Bettina Grun和Hadley Wickham等。该团队负责R核心源代码的监督和管理、批准对源代码的更改以及社区贡献的实施。R开发核心团队通过R全面档案网(CRAN)发布由独立R开发人员和R社区成员开发的最新的基于R的安装和第三方部署包。他们还定期发布面向研究的开放式的R期刊,并组织极其受欢迎的年度userR会议,每年都有上百位激情满满的R用户从世界各地聚集在一起。

通过 RStudio开发,由马萨诸塞州波士顿运营,由首席科学家同时也是很多R的数据分析和可视化包(诸如ggplot2、rggobi、plyr、reshape等)的开发者Hadley Wickham博士领导的企业级开源和商业许可证产品的基础正是R的核心。其IDE可能是R用户当前可用的用户友好度较高的R接口,如果你还没安装的话,我们建议你尽快在你的个人电脑里装上它。RStudio IDE包括一个易于浏览的工作区视图、一个控制台窗口和一个编辑器,包含代码高亮显示和直接代码执行区,除此之外还有额外的视图可以方便用户控制图和可视化、管理工作目录内外的文件、核心和第三方包、使用过的函数和表达式纪录、R对象的管理、代码调试功能以及直接的帮助访问和支持文件。

由于R核心是一个多平台工具,所以RStudio也可以在Windows、Mac或者Linux操作系统上使用。我们将在本书中广泛使用RStudio桌面版本以及RStudio Server的开源版本,因此请确保你下载并安装了免费桌面版,以便执行一些第2章和第3章的一些例子。

图1-2是从CRAN下载的Mac OS X上的R的图形用户接口(GUI)的安装。图1-3是桌面RStudio IDE。Windows用户看到的可能会和这两张图有些许差别,不过大多数功能都是一样的。RStudio Server和桌面版的GUI是一样的,只是在选项和设置上有细微差别。

图1-2 Mac OS X上的R核心GUI,带控制台组件(左侧)和代码编辑(右侧)

图1-3 Mac OS X上的RStudio IDE,带执行命令台、代码编辑区以及其他默认视窗,
本例中使用的主题皮肤是Cobalt

多年来,R一直只在学术界和研究中流行,近年来才得到商业客户和金融用户越来越多的关注。因为R的高灵活性和使用简单,像谷歌和微软这样的公司已经转向使用R。在2015年7月微软完成了对Revolution Analytics(一个大数据预测分析公司)的收购,该公司凭借使用R内置支持大数据的处理和分析赢得了声誉。

 

 

根据2014年和2015年TIOBE编程社区索引所述,R 语言的人气爆棚使其成为了20种最常用的编程语言之一。此外,KDnuggets这个数据挖掘和分析的行业领头博客将R与Python和SQL并列为数据科学职业必备的技能之一。

 

R的成长并不令人惊讶,由于社区内的热心用户充满活力并才华横溢,R已经是目前最广泛使用的统计编程语言之一。R拥有近8400个(截至 2016年6月)可以在CRAN下载的第三方包,以及更多的放在BioConductor、forge.net 和其他地方的库,更别提上百个GitHub商的开发包,以及个人博客和个人开发者和组织的网站上才能下载的软件包。

R语言除了一些显而易见的优点,诸如它的开源许可证、没有任何安装费用、有无限多的可以集成的现成统计方法,以及高度活跃的社区用户,其数据可视化能力和多数据格式兼容能力也备受好评。很多受欢迎且有影响力的报纸和杂志,例如《华盛顿邮报》《卫报》《经济学人》及《纽约时报》,每天使用R生成高信息量的图标和信息图片,用于阐述复杂的政治事件、社会或经济现象。通过强大的诸如ggplot2或者 lattice此类的软件包生成静态图片已经无法满足他们的胃口,使用shinny或ggobi框架开发的可交互可视化,一些支持JavaScript库空间分析的外部包(例如Ramnath Vaidyanathan开发和维护的rCharts ),例如leaflet.js或者使用morris.js、D3.js等的交互式数据驱动文档正在涌现。更进一步的是,R用户现在可以使用Google可视化API图标,例如著名的由Markus Gesmann、Diego de Castillo和Joe Cheng开发的googleVis制作的动图。图1-4显示了使用googleVis包的操作图。

图1-4 由Google可视化包创建的动图事例——Google图标的R接口

如前所述,R可以处理不同来源,不同格式的数据,不只局限于物理文件格式,比如传统逗号分隔或者制表符分割的格式,还包括不常见的文件比如JSON(在网页程序和现代NoSQL数据库中广泛使用,我们将在第6章深入探讨)或图片,以及其他统计包和专有格式,比如Excel工作簿、Stata、SAS、SPSS和Minitab文件、网络碎片数据,或者直接连接SQL或NoSQL数据库,还有其他大数据容器(比如Amazon S3),或者 HDFS存储的文件等。我们将在本书的一些例子中探索R的大多数数据导入功能,不过如果你现在就想知道R的数据导入方法,请访问CRAN网站,其中列出了主要的R数据导入、导出的方法。

R 语言编写的代码可以很容易被诸如Python或Julia的编程平台调用。更棒的是,R 自身可以调用C家族、Java、SQL、Python和其他编程语言的方法和语句。使得R 语言更好地为数据科学工作流服务。本书中将会探索许多诸如此类的例子。

第1章我们主要介绍了大数据的定义,强调了它的一些主要特性。同时还介绍了大量的大数据源,并且提到即使是一场单一的事件,例如梅西的一脚射门,也可能雪崩般地立刻迸发出一大堆数据。

然后我们介绍了最常用的大数据工具,也是本书会使用到的,例如Hadoop的分布式文件系统以及并行计算框架MapReduce,传统SQL和NoSQL数据库,比Hadoop数据处理更快(大多数情况下也更简单)的Apache Spark项目。

本章末尾,我们介绍了R语言的起源,它的逐渐被广泛应用的统计计算环境以及它在大数据分析工具中的位置。

在第2章中,你将有机会真正学习使用和修改R的一些在数据管理、转换和分析中最常用的方法。


相关图书

R语言编程:基于tidyverse
R语言编程:基于tidyverse
R语言医学多元统计分析
R语言医学多元统计分析
Python与R语言数据科学实践
Python与R语言数据科学实践
科研论文配图绘制指南——基于R语言
科研论文配图绘制指南——基于R语言
R数据挖掘实战
R数据挖掘实战
R语言机器学习实战
R语言机器学习实战

相关文章

相关课程