译者序
这几年,大数据、人工智能都是计算机学科中非常热门的话题,数据科学也越来越受到各公司的关注。我接触到的很多不同行业的公司都对大数据与人工智能的应用跃跃欲试,甚至部分公司早已尝到其中的甜头。不过还有很多公司并没有真正用上它们那些本应蕴含着无穷价值的数据,也有很多公司已经学会从数据中挖掘信息,但得到的信息无法及时转化为真正的价值。毕竟大数据还是比较新的技术,大多数公司还在探索中前进。很多公司早就拥有了自己的应用开发团队,雇佣一些数据科学的专家也并不难,难的是如何让开发工程师和数据科学家理解对方的工作,把他们整合到一个团队中,从而真正创造出价值。
本书作者对数据有天生的热情,且通过在各种行业的工作经历形成了对不同角色的理解,更拥有多年的实际数据分析应用开发经验。在他的职业生涯中,也曾遇到过很多公司在尝试运用数据分析时会遇到的各种问题。如今,他在咨询公司工作,专门帮助各种公司进行大数据方面的数据分析。本书正是作者多年经验的总结与升华,涵盖了从团队建设、工作制度到工具选择、任务划分与执行的方方面面。本书还以一个完整的项目为例,贯穿全书,展示了敏捷数据科学的整个流程,这也是我最喜欢本书的地方。从具体案例出发,让有需求的读者能够更快地依葫芦画瓢,也让初学者能够从做中学,让读者能根据自己的感受,更好地领会作者提出的“敏捷数据科学”的精髓。
Spark 是当前大数据领域最为主流的项目,有着远超Hadoop MapReduce 的性能,可以说是大数据领域的事实标准。能有今天的地位,Spark 的易用性功不可没。正因此,作者在本书中选择了Spark 作为大数据处理框架。易于上手的Spark 确实是敏捷项目的不二选择。
不过,Spark 虽然兼具易用与高性能的特点,但不代表Spark 的性能不会在实际应用中出现问题。事实上,随着业务日趋复杂,Spark 应用也会遇到各种不能通过扩展集群规模来解决的问题,并不是用上Spark 就代表算法能够适用于海量数据的场景了,这也是本书缺失的部分。不过不用过于担心,高性能的算法与集群架构也都是慢慢演进出来的,不妨让我们在下一个敏捷冲刺中不断完善我们的应用吧!
翻译本书的时候我还在英特尔工作,英特尔是我工作的第一家公司,在这里我有幸从2012年起接触大数据,并从2014 年起就接触到Spark。虽然我已经离开,但我会始终感激和怀念在英特尔成长的时光。本书的翻译主要在周末和假期完成,感谢家人和朋友们对我的关心和理解。感谢博文视点的刘恩惠老师和顾慧芳老师在本书审校工作中的辛勤付出,感谢张玲老师引荐我翻译本书,也感谢刘恩惠老师和张玲老师在我拖稿时对我的宽容和鼓励。
这是一个发展迅猛的领域,本书出版时,书中的许多工具(比如Spark)可能已经又有了很多更新;本书所涉及的远远不止大数据和数据分析,还包括前端开发、团队管理等内容。由于我水平有限,难免有纰漏之处,希望读者能不吝指正,有疑惑之处,不妨也与我探讨。我的邮箱是me@daoyuan.wang。
王道远
2018 年夏
前言
写作本书第1 版的那段日子里,我刚好因为一次车祸而残疾,每天忍受疼痛折磨,双手也有些不听使唤。当时,一个叫作“职业浏览器”的项目的失败经历正困扰着我,为了从阴影中走出来,我用iPad 在床上和沙发上写完了本书,尽管那时我的手都没办法切菜了。我在那个项目发布前几周受了伤,还想着坚持把项目做上线,日夜奋战,非常痛苦。在做项目的过程中,我们犯了许多低级错误,让我一直垂头丧气。最终产品糟透了。项目失败的挫折感不时让我难受,而我背部的慢性疼痛更是很少放过我。我的心脏也出了一些问题,心率下降了三分之一,记忆力也出现了衰退。我仿佛进入了一个幽暗的空间,难以找到出路。我要恢复起来,与失败抗争。说来有些奇怪,为了让自己恢复,我写了第1 版书。我要把我能给团队同事的指导写下来,确保下一个项目成功。我想让自己摆脱这段经历。更重要的是,我想通过帮助别人,让我的人生重新获得意义,不让自己被残疾击垮。这样一件为大众服务以确保其他人不会重复我的错误的好事,我认为是值得去做的。那个失败项目暴露出了一个比我自身的处境更严重的问题,那就是大多数研究都停留在纸面上,从未让能够获益的人实际使用到。这本书就是一剂良方,是应用性研究的方法论,让研究成果能以产品的形式真正面世。
虽然听起来有些戏剧性,但我还是想在介绍第2 版之前提一提写第1 版时的个人情况。尽管那一版书对我来说有特殊的意义,但对于数据科学这个欣欣向荣的领域而言只做出了很小的贡献。但是我为它而自豪。我在那本书中获得了救赎,它让我重新找回了感觉,让我及时从病痛中恢复,让我摆脱失败的痛苦而获得了成就的喜悦,这就是第1版的情况。
在第2 版中,我希望能做到更多。简单地说,我希望能引导初出茅庐的数据科学家,让其快速成长为数据分析应用开发者。我把自己在三个Hadoop 团队与一个Spark 团队中获得的构建分析应用的经验进行了总结和提炼。这次改版中,编程语言使用的是数据科学的通用语言Python,而选择的大数据平台是Spark。希望本书能成为读者的必备指南,让读者快速学会如何构建足以应对各种数据规模的分析应用。
Spark 取代Hadoop/MapReduce 成为了处理大规模数据的主流方式,因此我们在这一版中使用Spark 来讲解。不仅如此,根据我们团队在工作中对敏捷数据科学的进一步理解,本书对敏捷数据科学方法论的理论和发展也做了进一步完善。希望第1版的读者还可以从第2版中获得提高,也希望比起相对更适合Hadoop 用户阅读的第1 版,这一版能更好地服务于Spark 用户。
敏捷数据科学有两大目标:一是为了使用Python 和Spark 搭建出任意规模的数据分析应用,二是帮助产品团队学会使用敏捷的方式协作开发分析应用来保障工作成效。
本书目标读者
本书的目的是帮助初学者和初出茅庐的数据科学家成长为数据科学与数据分析团队的主力成员。本书想要帮助工程师、分析师、数据科学家以敏捷的方式来使用Hadoop 在大数据上进行工作。本书介绍的敏捷方法论很适合大数据领域。
本书是为需要开发软件来分析数据的程序员而写的。设计师和产品经理可能更适合第1 章、第2 章和第5 章,这些章节主要作为敏捷过程的导论,没有专注于编码运行。
本书假设你在类UNIX 环境中工作,没有为Windows 用户提供示例,不过Windows 用户可以使用Cygwin 尝试。
本书主要结构
本书分为两个部分。第Ⅰ部分介绍的是我们在第Ⅱ部分中需要用到的数据集和工具集。第Ⅰ部分故意写得简明扼要,只是为了尽可能快地介绍这些工具。第Ⅱ部分会更深入地探讨这些工具的使用,所以如果在读第Ⅰ部分时感觉有些不知所措也不用担心。第Ⅰ部分的章节如下。
第1 章 理论
介绍敏捷数据科学的方法论。
第2 章 敏捷工具
介绍要用的工具集,并且讲解工具如何上手与安装。
第3 章 数据
描述本书中使用的数据集。
第Ⅱ部分是我们使用敏捷数据科学来构建一个分析应用的教程。这是一份笔记本式的分析应用构建指南。我们逐层攀登数据价值金字塔,始终应用敏捷的原则。这一部分会展示在敏捷迭代进程中一步一步发掘数据价值的方法。第Ⅱ部分由以下所列章节组成。
第4 章 记录收集与展示
帮你下载航班数据,并且通过网络应用展示航班记录。
第5 章 使用图表进行数据可视化
一步步引导你如何在网络应用中加入一些简单的图表来展示数据。
第6 章 通过报表探索数据
教你如何从数据中提取出实体关系,将其参数化并相互关联以创建交互式的报表。
第7 章 进行预测
在先前所做的基础上对某一航班准点与否进行预测。
第8 章 部署预测系统
展示如何部署预测系统来确保真正发挥作用。
第9 章 改进预测结果
不断迭代提高我们的准点航班预测应用的表现。
附录A 安装手册
展示如何安装所需工具。