第2版前言
一切都说过了,但因为大家都没有听,我们不得不回归原点,从头开始。
—Andre Gide
优秀的科学作家总是抓住机会为早期的作品写一部第2版。无论多么努力地尝试,第1版总是会含有不准确,甚至产生误导的言论。随着时间的推移,那些在第1版中看起来很精彩的句子也变成了夸大智慧的例子。那些由于太过微不足道而在原始手稿中没有包含进去的部分现在似乎成了需要被完整阐释的深刻内容。第2版为懊恼的作者提供了纠正这些的机会。
当2013年本书第1版出版的时候,这个领域还很年轻,很少有科学家知道大数据能够做什么。在世界各处,无时无刻不断涌入的数据被存储起来,就像小麦被保存在筒仓中一样。对于数据管理者来说,很显然这些被存储起来的数据是没有任何科学价值的,除非它们通过元数据、标识符、时间戳和一组基本描述符恰当地注释。在这种情况下,本书第1版指出了在大数据收集、注释、组织并展开过程中那些适当且重要的方法。处理大数据的过程伴随着独特的挑战,第1版充满了警告和劝告,旨在引导读者远离灾难。
自第1版出版至今已有数年了,此后有数百本关于大数据主题的书籍相继出版。作为一名科学家,我很失望地发现,现今关于大数据的主题都聚焦于营销和预测分析(例如,“谁有可能购买产品x,由于他们两周前购买了产品y”),以及机器学习(例如,无人驾驶汽车、计算机视觉、语音识别)等问题上。机器学习在很大程度上依赖于那些大肆宣传的技术,如神经网络和深度学习,这两者并没有简化和拓宽我们理解自然界和物质世界的基本法则和原则。在大多数情况下,这些技术使用的都是相对较新的(即新收集的)、标注较差的(即仅提供一个特定的分析过程所需的最小信息)、不被保存以便于公共评估或重复使用的数据。简而言之,大数据已经走上了阻力最小的道路,避免了本书第1版中提出的大多数棘手问题,例如,与公众共享数据的重要性,探索数据对象之间关系(非相似性)的价值,以及创建鲁棒的、不变的且注释良好的数据这一沉重但不可避免的负担。
我当然希望大数据的伟大进步将成为医学、生物学、物理学、工程学和化学领域的根本性突破。为什么大数据的重点从基础科学转向了机器学习?这可能与这样一个事实有关,即包括本书第1版在内的所有书籍都没能为读者提供将大数据原理付诸实践的方法。回想起来,光描述理论,然后寄期望于读者开拓出自己的方法是不够的。
因此,在第2版中,在介绍理论的同时,亦将提供与之相应的实践手段。读者会发现用于实现大数据准备和分析的所有方法都非常简单。在大多数情况下,为了理解计算机方法,需要对编程语言有一些基本的了解。尽管会有疑虑,但Python将作为本书的首选语言。Python的优点如下:
Python是一种免费的、开源的高级编程语言,易于获取、安装、学习和使用,并且适用于所有主流的计算机操作系统。
Python目前非常受欢迎,并且其受欢迎程度似乎越来越高。
Python发行版(例如Anaconda)绑定了数百个非常有用的模块(例如numpy、matplot和scipy)。
Python有一个庞大而活跃的社群,这为Python方法和模块提供了大量的参考文档。
Python支持一些面向对象的技术,这些技术将在第2版中有所讨论。
事物都有其两面性,Python也有缺点:
最新版本的Python并不向后兼容其早期版本。因此,本书中所包含的脚本和代码块适用于大多数Python 3.x版本,但可能不适用于Python 2.x版本及更早版本,除非读者准备花费一些时间来进行代码调整。当然,这些简短的脚本和代码块旨在作为概念的简单演示,不能用于构建应用程序的代码。
内置的Python方法有时优化了速度以利用随机存取存储器(RAM)来保存数据结构,包括通过循环构建的数据结构。对大数据进行迭代可能会耗尽可用的内存,从而导致那些在小数据集上运行良好的Python脚本失败。
Python面向对象的实现允许多类继承(即,类可以是多个父类的子类)。我们将解释为什么在使用Python对大型复杂数据进行编程操作时使用多类继承会引起麻烦,并且给出所对应的补救措施。
本书中描述的每个算法的核心概念都可以在现代计算机上通过任何操作系统、利用主流的编程语言通过几行代码加以实现。本书会提供许多Python代码,并讲解主流的操作系统上被广泛使用的开源应用。本书强调,对于大型复杂数据集上的数据分析,大部分都可以通过简单的方法加以实现,而不需要专门的软件系统(例如,并行化的计算过程)或硬件(例如,超级计算机)。同时,完全不熟悉Python的读者可能会惊奇地发现,当代码很简短并且附有注释的时候,他们能够轻易地读懂Python代码。当然,对于那些主要关注如何掌握大数据原理的读者,可以跳过代码段,不用担心会错过书中的任何理论概念。
第2版同时包含了那些被大数据分析领域的其他书籍所忽视的方法论,包括:
数据准备。如何使用元数据注释数据以及如何创建由三元组组成的数据对象。作为计算科学意义的基本延伸,三元组的概念将被全面地讲解。
. 与大数据相关的数据结构。涵盖诸如TripleStore、分布式账本、唯一标识符、时间戳、一致性、索引、字典对象、数据持久性、用于数据存储和分布的单向散列的作用以及加密协议等概念。
数据对象的分类。详细讨论如何根据数据对象的共享关系将数据对象分类,以及在大数据分析中分类所起到的计算作用。
内省。如何创建自描述的数据对象,允许数据分析人员对属于同一个类的对象进行分组,并将方法应用于从其祖先类继承的类对象。
在大数据准备和分析中具有特殊效用的算法。如何使用单向散列、唯一标识符生成器、加密技术、计时方法和时间戳协议来创建不可变(永不改变)的、永久的、私有的唯一数据对象,并且创建便于描述具有许多有用功能的数据结构(例如,区块链和分布式账本,用于安全地共享机密信息的协议,以及在不侵犯隐私的情况下用于协调跨数据集合的标识符的方法)。
大数据分析技巧。如何使用一系列简单的技术(例如,近似、所谓的包络技巧、使用随机数发生器的重复采样、蒙特卡罗模拟以及数据简化方法)来克服大数据规模和维度所施加的诸多分析限制。
数据再分析、数据重新利用和数据共享。为什么对于大数据的第一次分析几乎总是不正确的、有误导的或不完整的?为什么数据再分析已成为每个严肃的大数据分析师必须掌握的关键技能?数据再分析的过程通常会激发大数据资源的重新利用。除非克服数据共享的障碍,否则不能实现数据再分析和数据重新利用。该主题将会被详细讨论。
尽管本书第2版希望并且尽最大可能地达到对大数据领域的全面覆盖,但没有办法实现涵盖大数据这一多学科交叉领域的每个概念和方法。为了弥补这些不足,每章都提供扩充的术语表,它定义了文中引入的术语,并对大数据科学家常用的术语提供了进一步的解释。另外,对于所讨论的技术与方法,亦为读者提供了或许有用的参考文献列表,以供进一步阅读。总的来说,第2版包含了大约600个参考文献,其中大多数能够免费下载,以及300多个术语词条,其中许多词条包含了读者可能会觉得有用的简短的Python片段。
最后,第2版通过案例来向读者展示大数据原理如何付诸实践。虽然案例研究来自多个科学领域,涉及物理学、经济学和天文学,但读者会注意到从生物科学(特别是医学和动物学)中汲取了大量例子。其原因在于,对于陆生生物的分类是现存最古老、最佳的大数据分类。数据组织和数据分析过程中出现的所有经典错误都是在生物学领域中发生的。更重要的是,这些错误已被详细记录下来,并且大多数已得到纠正并公布以供公众参考。如果想了解大数据如何用作帮助科学进步的工具,那么你必须学习这些从生物学世界中获取的案例,该领域很好地记录了过去发生、正在发生以及将要发生的一切。我们已尽最大努力采用同类案例中最简单的,并提供尽可能多的背景解释。
本书第2版致力于让读者认识到大数据分析的主要目的是让我们能够提出并回答一系列无法通过小型数据集得到可靠解决方案的问题。我们完全有理由期待本书的读者能够很快取得前几代科学家无法企及的科学突破。祝大家好运!
第1版前言
我们不能用导致问题的方法去解决问题。
—Albert Einstein
数以百万计的电脑每时每刻都有数据注入。在全球范围内,所有计算机上存储的数据总量约为300EB(约3000亿GB),并正以每年28%的速度增加。尽管如此,与未被存储的数据量相比,存储下来的数据量仍是微不足道的。据统计,每年约有1.9ZB的数据传输量(约19 000亿GB)[1]。日益纷繁复杂的数字化信息将引发新一代数据资源的涌现。
现在,我们有能力从各类资源中得到众多不同类型的数据对象,也能够获取来自未来或遥远过去的数据,这要求我们找到能够准确描述每个数据片段的方法,这样就不至于将数据项混淆,进而能够在需要的时候搜索和追踪对应的数据项。精明的信息学专家明白一个道理:如果要在我们的星球上精确地描述每一件事,必然需要一个“辅助星球”来掌控所有信息,同时后者也必然要比我们的物理星球大很多。
急于获取和分析数据时,往往容易忽视数据的准备工作。如果大数据资源中的数据没有得到有效的组织、综合和准确的描述,那么这些数据资源将毫无价值。本书的首要目标是解释大数据资源建立的原理。大数据资源中的所有数据必须具备某种形式以支持搜索、检索和分析,分析方法必须可再现,分析结果必须可验证。
大数据潜在的最大益处也许是它能够连接一些看似无关的学科,从而开发和测试那些无法通过单个学科领域知识完成的假设性想法。我们将评估那些能引导分析人员在不同大数据资源中创建新的合并数据集的方法。
大数据到底是什么?大数据的特征可以通过三个V来描述:Volume(数据体量大)、Variety(数据类型多)和Velocity(数据增长速度快)[2]。大数据相关人士常常也会提出其他V,例如Vision(有目的和计划)、Verification(确保数据符合规范)和Validation(核实目标已完成)。
在有关元数据的文献中已对很多大数据的基本原理进行了描述。这类文献讨论了数据描述形式(即如何描述数据)、数据描述语法(例如各种标记语言,如XML等)、语义(即如何用计算机可理解的陈述方式传达数据的含义)、语义的表达语法(例如架构规范,如资源描述框架(RDF)和Web本体语言(OWL))、包含数据价值和自描述信息的数据对象的建立、本体的调度以及以数据对象为成员的类层次体系。
对于在数据密集型领域已经取得成功的专家而言,研究元数据似乎是在浪费时间,因为他们对元数据的形式化没有诉求。许多计算机科学家、统计学家、数据库管理员和网络专家可以毫不费力地处理大量的数据,也许他们不认为有必要为大数据资源创造一个“奇怪”的新数据模型。他们觉得自己真正需要的是更大的存储容量和更强大的分布式计算机系统,凭借这些,他们就能存储、检索和分析体量越来越大的数据。然而,这种想法只有在系统使用的数据相对简单或者具有统一标准格式时才适用。一旦大数据资源中的数据变得非常复杂多样,元数据的重要性就会凸显。我们将重点讨论元数据中与大数据息息相关的思想和概念,并重点解释这些思想和概念的必要性以及它们之间的相关性,但不会过于深究细节。
当数据的来源不同,形成的形式不同,大小还在增长,价值也在改变,那么当时间延伸到过去和未来时,这场比赛将从数据计算领域转移到数据管理领域。希望本书能说服读者,更快、更强大的计算机是很不错,但这些设备不能弥补在数据准备工作中的不足之处。可以预见,大学、联邦机构和公司将投入大量资金、时间和人力来尝试研究大数据。但如果忽视基础层面的事情,那么他们的项目很可能失败。相反,如果重视大数据的基础知识,则会发现大数据分析能够在普通的计算机上较容易地执行。简单来说,数据本身胜于计算,这也是整本书不断重复的观点。
在其他书籍中,一般会忽略与数据准备过程相关的三个至关重要的主题:标识符、不变性和内省。
完善的标识符系统可以确保属于某个特定数据对象的所有数据能够通过标识符被正确地赋给该对象,而不是其他对象。这看起来很简单,事实也确实如此,但多数大数据资源总是杂乱无章地分配标识符,致使与某个特定对象相关的信息分散在数据源的各个角落,甚至直接被错误地附加到其他对象中,于是当我们需要追踪这些数据的时候已无能为力。对象标识的概念最为重要,因为在面对复杂的大数据资源时,该资源需要被有效地假设为一个唯一标识符集合。
不变性是指被收集到大数据资源中的数据是永久的,不能被篡改的。乍一看,不变性是一个荒诞的和不可能的限制条件。在现实世界中,常有错误发生,信息会发生改变,而且描述信息改变的方法也会发生变化。但一个精明的数据管理员总是知道如何向数据对象中添加信息而不改变当前存在的数据,这些方法在本书中进行了详细描述。
内省这个词借用了面向对象的程序设计用语,在大数据的相关文献中并不常见。它是指当数据对象被访问时其自我描述的能力。借助内省,大数据资源的使用者能够快速确定数据对象的内容和该对象的层次结构。内省允许使用者查看那些可被分析的数据关系类型,并弄清楚不同数据资源之间是如何交互的。
本书的另一个主题是数据索引,这也是在大数据相关文献中常被忽视的内容。尽管有很多书籍是基于所谓的书后索引编写而成的,但是为大而杂的数据资源准备索引需要花费大量精力。因此,多数大数据资源根本没有正式的索引。也许会有一个网页来链接解释性文件,又或者有一个简短且粗糙的“帮助”索引,但很少能找到一个包含完善的、更新过的词条列表和链接的大数据资源。在没有合理索引的情况下,除了少部分行家外,大部分大数据资源对我们根本毫无用处。我很奇怪,有的组织愿意花费数亿美元在大数据资源上,却不愿意投资数千美元来建立合理的索引。
在现有的关于大数据的文献中很难找到上述四个主题,除此之外,本书也涵盖了常见的与大数据设计、架构、操作和分析相关的其他主题,包括数据质量、为非结构化数据提供结构、数据去标识、数据标准和互操作性问题、遗留数据、数据简化和交换、数据分析和软件问题等。针对这些主题,本书将重点讨论其背后的基本原理,而并不关注编程和数学公式。本书给出了一个全面的术语表,涵盖了书中出现的所有技术词汇和专有词汇。该术语表对与大数据实际相关的词条进行了解释说明,读者可以视该术语表为一个独立的文档。
最后4章是非技术性的,内容上与利用大数据资源的后果相关。这4章涉及法律、社会和伦理问题。本书最后以我个人对大数据未来及其对世界的影响的观点作为结束。在准备本书时,我在想这4章放在本书的最前面是不是更合适,因为也许这样能够激发读者对其他技术章节的兴趣。最终,考虑到有些读者不熟悉这些章中的技术语言和概念,因此我将它们放在了接近尾声的地方。
读者也许会注意到本书中所描述的多数案例来自医学信息学。当前,讨论这一领域的时机已经成熟,因为每一个读者在经济和个人层面都深受来自医学领域所产生的大数据政策和行为的影响。除此之外,关于医疗健康的大数据项目的文献十分丰富,但其中很多文献的成果存在争议,我认为选择那些我可以引证的、可靠的素材是非常重要的。因此,本书参考文献非常多,有超过200篇来自期刊、报纸以及书籍的文章,多数文章可从网上下载。
谁应该读这本书?本书是为那些管理大数据资源的专业人士和计算机及信息学领域的学生而写的。专业人士包括:企业和投资机构的领导者,他们必须为项目投入资源;项目主管,他们必须制定一系列可行的目标并管理一个团队,这个团队中的每个人都有一些技能和任务,包括网络专家、数据领域专家、元数据专家、软件程序员、标准专家、互操作专家、数据统计师、分析师以及来自预期用户社区的代表等。来自信息学、计算机科学以及统计学专业的学生会发现,在大学课程中很少讨论大数据面临的挑战,而这些挑战往往是令人惊讶的,有时甚至称得上是令人震惊的。
通过掌握大数据设计、维护、增长和验证的基础知识,读者可以学会如何简化大数据资源产生的无穷无尽的任务。如果数据准备合理,经验老到的分析师就能够发现不同大数据资源中数据对象之间的关系。读者会找到整合大数据资源的方法,这比独立的数据库能够提供的好处多得多。
参考文献