具体描述
本书介绍了作者提出的敏捷数据科学的方法论,结合作者在行业中多年的实际工作经验,为数据科学团队提供了一套以类似敏捷开发的方法开展数据科学研究的实践经验。全书基于Spark做全栈数据分析,书中展示了工业界一些常见工具的使用,包括从前端显示到后端处理的各个环节,手把手帮助数据科学家快速将理论转化为真正面向用户的应用程序,从而让读者在利用数据创造真正价值的同时,也能不断完善自己的研究。本书适合初学者阅读,数据科学家、工程师、分析师都能在本书中有所收获。
作者简介
Russell Jurney在赌场游戏中练出了数据分析的技能,构建了网络应用程序分析美国和墨西哥的老虎机的表现。在涉足创业、互动媒体、记者等行业后,他搬到硅谷,在Ning和LinkedIn构建分析型应用。Russell现在是Data Syndrome的首席顾问,他帮助公司使用本书所介绍的原则和方法构建分析性产品。
目录信息
前言 .................................................................................................. xiv
第Ⅰ部分 准备工作
第1章 理论 ..........................................................................................3
导论 .............................................................................................................................3
定义 .............................................................................................................................5
方法学 ................................................................................................................5
敏捷数据科学宣言 ............................................................................................6
瀑布模型的问题 .......................................................................................................10
研究与应用开发 ..............................................................................................11
敏捷软件开发的问题 ...............................................................................................14
最终质量:偿还技术债 ....................................................................................14
瀑布模型的拉力 ..............................................................................................15
数据科学过程 ...........................................................................................................16
设置预期 ..........................................................................................................17
数据科学团队的角色 ......................................................................................18
认清机遇与挑战 ..............................................................................................19
适应变化 ..........................................................................................................21
过程中的注意事项 ...................................................................................................23
代码审核与结对编程 ......................................................................................25
敏捷开发的环境:提高生产效率 ....................................................................25
用大幅打印实现想法 ......................................................................................27
第2章 敏捷工具 ................................................................................29
可伸缩性=易用性 ...................................................................................................30
敏捷数据科学之数据处理 .......................................................................................30
搭建本地环境 ...........................................................................................................32
配置要求 ..........................................................................................................33
配置Vagrant .....................................................................................................33
下载数据 ..........................................................................................................33
搭建EC2环境 ............................................................................................................34
下载数据 ..........................................................................................................38
下载并运行代码 .......................................................................................................38
下载代码 ..........................................................................................................38
运行代码 ..........................................................................................................38
Jupyter笔记本 ...................................................................................................39
工具集概览 ...............................................................................................................39
敏捷开发工具栈的要求 ..................................................................................39
Python 3 ...........................................................................................................39
使用JSON行和Parquet序列化事件 .................................................................42
收集数据 ..........................................................................................................45
使用Spark进行数据处理 .................................................................................45
使用MongoDB发布数据 .................................................................................48
使用Elasticsearch搜索数据 .............................................................................50
使用Apache Kafka分发流数据 .......................................................................54
使用PySpark Streaming处理流数据 ...............................................................57
使用scikit-learn与Spark MLlib进行机器学习 ................................................58
使用 Apache Airflow(孵化项目)进行调度 ....................................................59
反思我们的工作流程 ......................................................................................70
轻量级网络应用 ..............................................................................................70
展示数据 ..........................................................................................................73
本章小结 ...................................................................................................................75
第3章 数据 ........................................................................................77
飞行航班数据 ...........................................................................................................77
航班准点情况数据 ..........................................................................................78
OpenFlights数据库 ...........................................................................................79
天气数据 ...................................................................................................................80
敏捷数据科学中的数据处理 ...................................................................................81
结构化数据vs.半结构化数据 ..........................................................................81
SQL vs. NoSQL .........................................................................................................82
SQL ...................................................................................................................83
NoSQL与数据流编程 ......................................................................................83
Spark: SQL + NoSQL ......................................................................................84
NoSQL中的表结构 ..........................................................................................84
数据序列化 ......................................................................................................85
动态结构表的特征提取与呈现 ......................................................................85
本章小结 ...................................................................................................................86
第Ⅱ部分 攀登金字塔
第4章 记录收集与展示 ......................................................................89
整体使用 ...................................................................................................................90
航班数据收集与序列化 ...........................................................................................91
航班记录处理与发布 ...............................................................................................94
把航班记录发布到MongoDB .........................................................................95
在浏览器中展示航班记录 .......................................................................................96
使用Flask和pymongo提供航班信息 ...............................................................97
使用Jinja2渲染HTML5页面............................................................................98
敏捷开发检查站 .....................................................................................................102
列出航班记录 .........................................................................................................103
使用MongoDB列出航班记录 .......................................................................103
数据分页 ........................................................................................................106
搜索航班数据 .........................................................................................................112
创建索引 ........................................................................................................112
发布航班数据到Elasticsearch ......................................................................113
通过网页搜索航班数据 ................................................................................114
本章小结 .................................................................................................................117
第5章 使用图表进行数据可视化 .................................................... 119
图表质量:迭代至关重要 .......................................................................................120
用发布/装饰模型伸缩数据库 ................................................................................120
一阶形式 ........................................................................................................121
二阶形式 ........................................................................................................122
三阶形式 ........................................................................................................123
选择一种形式 ................................................................................................123
探究时令性 .............................................................................................................124
查询并展示航班总数 ....................................................................................124
提取“金属”(飞机(实体)) .....................................................................................132
提取机尾编号 ................................................................................................132
评估飞机记录 ................................................................................................139
数据完善 .................................................................................................................140
网页表单逆向工程 ........................................................................................140
收集机尾编号 ................................................................................................142
自动化表单提交 ............................................................................................143
从HTML中提取数据 .....................................................................................144
评价完善后的数据 ........................................................................................147
本章小结 .................................................................................................................148
第6章 通过报表探索数据 ............................................................... 149
提取航空公司为实体 .............................................................................................150
使用PySpark把航空公司定义为飞机的分组 ...............................................150
在MongoDB中查询航空公司数据 ...............................................................151
在Flask中构建航空公司页面 ........................................................................151
添加回到航空公司页面的链接 ....................................................................152
创建一个包括所有航空公司的主页 ............................................................153
整理半结构化数据的本体关系 .............................................................................154
改进航空公司页面 .................................................................................................155
给航空公司代码加上名称 ............................................................................156
整合维基百科内容 ........................................................................................158
把扩充过的航空公司表发布到MongoDB ...................................................159
在网页上扩充航空公司信息 ........................................................................160
调查飞机(实体) .....................................................................................................162
SQL嵌套查询vs.数据流编程 ........................................................................164
不使用嵌套查询的数据流编程 ....................................................................164
Spark SQL中的子查询...................................................................................165
创建飞机主页 ................................................................................................166
在飞机页面上添加搜索 ................................................................................167
创建飞机制造商的条形图 ............................................................................172
对飞机制造商条形图进行迭代 ....................................................................174
实体解析:新一轮图表迭代 ..........................................................................177
本章小结 .................................................................................................................183
第7章 进行预测 ............................................................................. 185
预测的作用 .............................................................................................................186
预测什么 .................................................................................................................186
预测分析导论 .........................................................................................................187
进行预测 ........................................................................................................187
探索航班延误 .........................................................................................................189
使用PySpark提取特征............................................................................................193
使用scikit-learn构建回归模型 ...............................................................................198
读取数据 ........................................................................................................198
数据采样 ........................................................................................................199
向量化处理结果 ............................................................................................200
准备训练数据 ................................................................................................201
向量化处理特征 ............................................................................................201
稀疏矩阵与稠密矩阵 ....................................................................................203
准备实验 ........................................................................................................204
训练模型 ........................................................................................................204
测试模型 ........................................................................................................205
小结 ................................................................................................................207
使用Spark MLlib构建分类器.................................................................................208
使用专用结构加载训练数据 ........................................................................208
处理空值 ........................................................................................................210
用Route(路线)替代FlightNum(航班号) .....................................................210
对连续变量分桶以用于分类 ........................................................................211
使用pyspark.ml.feature向量化处理特征 ......................................................219
用Spark ML做分类 ........................................................................................221
本章小结 .................................................................................................................223
第8章 部署预测系统 ...................................................................... 225
把scikit-learn应用部署为网络服务 .......................................................................225
scikit-learn模型的保存与读取 ......................................................................226
提供预测模型的准备工作 ............................................................................227
为航班延误回归分析创建API ......................................................................228
测试API .........................................................................................................232
在产品中使用API ..........................................................................................232
使用Airflow部署批处理模式Spark ML应用 ........................................................234
在生产环境中收集训练数据 ........................................................................235
Spark ML模型的训练、存储与加载 ..............................................................237
在MongoDB中创建预测请求 .......................................................................239
从MongoDB中获取预测请求 .......................................................................245
使用Spark ML以批处理模式进行预测 ........................................................248
用MongoDB保存预测结果 ...........................................................................252
在网络应用中展示批处理预测结果 ............................................................253
用Apache Airflow(孵化项目)自动化工作流 ...............................................256
小结 ................................................................................................................264
用Spark Streaming部署流式计算模式Spark ML应用 ..........................................264
在生产环境中收集训练数据 ........................................................................265
Spark ML模型的训练、存储、读取 ................................................................265
发送预测请求到Kafka ..................................................................................266
用Spark Streaming进行预测 ..........................................................................277
测试整个系统 ................................................................................................283
本章小结 .................................................................................................................285
第9章 改进预测结果 ...................................................................... 287
解决预测的问题 .....................................................................................................287
什么时候需要改进预测 .........................................................................................288
改进预测表现 .........................................................................................................288
黏附试验法:找出黏性好的 ..........................................................................288
为试验建立严格的指标 ................................................................................289
把当日时间作为特征 ....................................................................................298
纳入飞机数据 ................................................................................................302
提取飞机特征 ................................................................................................302
在分类器模型中纳入飞机特征 ....................................................................305
纳入飞行时间 .........................................................................................................310
本章小结 .................................................................................................................313
附录A 安装手册 ............................................................................. 315
安装Hadoop ...........................................................................................................315
安装Spark ...............................................................................................................316
安装MongoDB .......................................................................................................317
安装MongoDB的Java驱动 .....................................................................................317
安装mongo-hadoop ................................................................................................318
编译mongo-hadoop .......................................................................................318
安装pymongo_spark ......................................................................................318
安装 Elasticsearch ..................................................................................................318
安装Elasticsearch的Hadoop支持库 .......................................................................319
配置我们的Spark环境 ...........................................................................................320
安装 Kafka .............................................................................................................320
安装scikit-learn ......................................................................................................320
安装Zeppelin ..........................................................................................................321
· · · · · · (收起)
读后感
用户评价
当我在咖啡馆翻开这本书时,我的脑海里充斥着关于Spark集群部署、SQL查询优化、以及机器学习算法实现的各种技术细节。然而,这本书却以一种非常温情的方式,讲述了主人公杰克,一位年过花甲的退休工程师,如何通过学习数据分析,重拾生活的热情,并与他的孙女们建立更深厚联系的故事。书中杰克并没有接触到任何实际的Spark编程,他学习的是数据分析背后的逻辑和思考方式。他学习如何从海量的信息中提取有用的知识,如何用数据来理解世界,如何将这些理解分享给他的家人。我尤其喜欢书中描写他如何帮助孙女们解决学校的科学项目,例如通过分析天气数据来预测下雨的可能性,或者通过分析植物生长数据来优化种植方案。这些场景虽然简单,却充满了智慧和父女(祖孙)之间的温情。这本书没有给我任何硬核的技术指导,但它却让我看到了数据分析的另一面:它是一种生活技能,一种与世界沟通的方式,一种连接人与人情感的桥梁。它让我明白,技术的力量,最终体现在它能为人们的生活带来怎样的积极影响。
这本书的开篇,我就被主角肖恩在一家互联网巨头公司的数据科学团队中的经历深深吸引。我期待着能深入了解Spark在实时推荐系统、大规模日志分析等方面的具体应用。然而,书中更多的是聚焦于肖恩在团队协作、项目管理以及技术伦理方面的成长。他如何与产品经理、工程师、甚至法务部门紧密合作,确保数据分析的成果既能带来商业价值,又能遵守隐私法规,这一点让我印象深刻。书中详细描绘了他与同事之间在数据治理、模型可解释性问题上的讨论,以及他如何平衡技术追求与实际落地之间的矛盾。我尤其欣赏书中关于“数据驱动决策的陷阱”的探讨,作者通过肖恩的经历,揭示了数据科学家在面对有偏数据、错误指标时可能犯下的错误,以及如何通过严谨的方法论来规避这些风险。例如,书中提到肖恩如何发现一个看似有效的AB测试结果背后,隐藏着样本选择偏差,并最终修正了测试方案,从而避免了公司损失。虽然书中并未提供详细的Spark代码示例,但它却让我看到了一个成熟的数据科学家是如何思考问题、如何处理复杂场景的。这种对职业素养和实践智慧的深刻洞察,远比单纯的技术堆砌来得更有价值。
我原本满心期待地认为,这本书将是一本详细介绍Spark在金融风控、量化交易等领域应用的实操指南。然而,书中主人公本杰明的故事,却将我带入了一个截然不同的视角。本杰明是一位对数据充满好奇心的历史学家,他利用现代数据分析技术,去重新解读和理解历史事件。书中他如何从海量的历史文献、地图、考古数据中提取信息,并利用这些数据来验证或推翻原有的历史观点,让我大开眼界。我尤其对其中一章印象深刻,本杰明利用文本分析技术,研究了不同时期政治家演讲稿中的词汇使用频率和情感倾向,从而揭示了当时政治气候和社会思潮的变化。虽然书中没有出现任何Spark的代码,但本杰明严谨的学术态度,他对数据来源的审慎考量,以及他如何通过数据重构历史叙事,都让我对“数据”有了全新的认识。它让我看到,数据分析不仅是技术问题,更是一种思维方式,一种探究未知、理解世界的强大工具。这本书打破了我对数据分析仅限于商业应用的刻板印象,也让我对历史学与数据科学的结合产生了浓厚的兴趣。
我拿到这本书的时候,以为会看到大量的Spark性能调优、分布式算法的实现细节。然而,这本书的主角,一位名叫艾米莉的独立游戏开发者,却让我看到了Spark在游戏行业的另一种可能性。艾米莉并没有使用Spark来分析玩家的行为数据来优化游戏机制,而是将Spark的概念和哲学,融入到了她独立游戏的叙事和玩法设计中。书中她如何通过“分布式”的概念来构思游戏中的世界观,如何通过“容错”的思想来设计游戏的剧情分支,如何通过“流式处理”来模拟游戏世界中瞬息万变的动态,都让我感到耳目一新。我印象最深刻的是,她设计的一款游戏,玩家的选择会像数据流一样,在游戏世界中不断扩散和影响,最终形成一个完全由玩家行为塑造的独特世界。虽然这本书并没有教授任何Spark的编程技巧,但它却让我看到了技术与艺术结合的无限可能。艾米莉用一种极其巧妙的方式,将一个大数据处理框架的内在逻辑,转化成了富有创意和感染力的艺术表达。这本书让我重新思考,技术究竟是什么,它是否只能局限于工具的范畴,还是可以成为创意的源泉。
这本书的封面上那个奔腾的Spark图形,让我以为会是一本关于大数据处理架构和算法优化的硬核技术书籍。然而,当我阅读时,我被主人公克洛伊的经历深深吸引。她是一名在一家非营利组织工作的数据科学家,致力于用数据来改善社区服务。书中并没有过多地涉及Spark的具体技术细节,而是着重描写了克洛伊如何将数据分析的理念和方法,应用到解决社会问题中。例如,她如何分析城市的犯罪数据,找出高风险区域,并为社区治安提供建议;她如何通过分析教育资源的数据,为弱势儿童争取更多的学习机会。我特别喜欢书中关于“数据伦理”的探讨,克洛伊在收集和使用数据时,始终将保护用户隐私放在首位,并积极参与到关于数据透明度和公平性的讨论中。她与社区居民的互动,她如何将复杂的数据分析结果,用简单易懂的方式解释给非技术背景的人听,都让我看到了数据科学家在社会责任方面的担当。这本书让我明白,数据分析的力量不仅仅在于技术本身,更在于它能够为人类社会带来积极的改变。它让我对数据科学家这个职业有了更深刻的理解和敬意。
我最初被这本书吸引,是因为封面上那个醒目的“Spark”字样,我期待着能了解到它在构建复杂数据管道、实现大规模机器学习模型方面的具体应用。然而,这本书的主人公,一位名叫大卫的旅行博主,却让我看到了“数据”在旅行规划和故事讲述中的独特作用。大卫并没有使用Spark来分析他的旅行数据,而是将他旅行过程中遇到的各种信息,比如GPS轨迹、照片元数据、当地的维基百科条目、甚至天气记录,以一种数据化的方式进行整理和呈现,来讲述他的旅程。他通过分析自己旅行的足迹,发现了一些有趣的规律,比如他对特定类型风景的偏好,或者他在不同季节选择不同目的地的原因。我印象特别深刻的是,他如何将他旅行路线中的地理坐标数据,与当地的节庆活动、历史事件数据相结合,从而创作出极具吸引力的旅行故事。这本书并没有提供任何Spark的编程技巧,但它却让我看到了“数据”作为一种叙事工具的强大力量。大卫用一种极具创意的方式,将旅行的经历变成了一段段由数据串联起来的精彩故事。这本书让我对“数据”有了全新的认识,它不仅仅是分析的工具,更是生活和艺术的组成部分。
在我翻开这本书时,我抱着学习大数据处理框架的强烈期待,尤其是“Spark”这个名字,对我来说意味着高效、分布式计算的强大能力。然而,这本书却以一种出人意料的方式展开,它讲述了一个名叫李明的年轻数据分析师,在一家传统制造企业中推动数字化转型的故事。故事的核心并非他熟练运用Spark进行ETL或者模型训练,而是他如何凭借对业务流程的深刻理解,以及对数据潜力的敏锐嗅觉,说服了层层保守的管理层,逐步引入新的数据采集和分析工具。书中花了大量篇幅描写李明与生产部门、销售部门的沟通,他如何将抽象的数据分析结果转化为能够被业务部门理解和采纳的 actionable insights。我记得其中一个场景,李明为了证明个性化推荐系统的价值,亲自去车间与一线工人交流,了解他们的工作习惯和痛点,然后将这些访谈结果与用户点击数据相结合,最终构建了一个能够提升生产效率的预测模型。虽然书中没有给出具体的模型代码,但李明那种“将技术落地”的精神,那种“用数据解决实际问题”的决心,却深深地打动了我。这本书让我意识到,即使拥有最先进的技术,如果不能与业务紧密结合,其价值也会大打折扣。它传递了一种重要的信息:数据分析师不仅仅是技术专家,更是业务的赋能者,是变革的推动者。这种叙事方式,比任何技术文档都更能激发我对数据分析职业的热情。
这本书绝对是一次彻底的冒险,它并没有真正地介绍“Spark全栈数据分析”的任何技术细节,而是巧妙地编织了一个关于数据科学家职业生涯的史诗。我从封面上的那个酷炫的Spark图标开始,就预感这会是一次不寻常的阅读体验。第一章,我本以为会是Spark的安装指南或者基础概念,结果却是一段关于主角艾莉丝如何在一家初创公司从零开始构建数据基础设施的生动描述。艾莉丝面对的挑战,那些令人头疼的数据清洗、模型选择的犹豫不决,以及在无数次失败中寻找突破的韧性,都让我感同身受。书中对她与团队成员之间的技术讨论、思想碰撞的描绘,虽然没有深入到具体的算法参数,但却真实地展现了数据科学工作中最具挑战性的部分——协作与沟通。我发现自己会不自觉地在脑海中想象那些命令行界面、那些充满代码的屏幕,但作者却用极其富有画面感的语言,将这些抽象的概念具象化了。比如,艾莉丝如何通过一次非预期的观察,发现了隐藏在用户行为模式中的一个关键洞察,这部分简直是技术小说的高潮,让人屏息。我特别喜欢书中对“数据驱动决策”的哲学性探讨,它不仅仅是关于技术工具的使用,更是关于如何用数据去理解世界、改变世界。即使这本书没有教我一个Spark的函数,它却让我深刻理解了数据分析师的核心价值所在:用洞察力驱动变革。这种体验,比单纯的技术手册更能激发我继续探索的欲望。
我拿到这本书的时候,脑海中浮现的是各种Spark的性能调优、分布式计算的原理。然而,这本书却通过一个名为“数据侦探”的系列故事,将我带入了一个由数据构建的神秘世界。主角亚历克斯,并非一个精通Spark语法的大牛,而是一位善于从海量数据中挖掘线索、揭示真相的独立分析师。每一章节都围绕一个独立的“案件”展开,亚历克斯需要分析不同来源的数据,比如社交媒体的评论、电子商务的交易记录、甚至是物联网设备上传的数据,来破解一个个谜团。我特别喜欢其中一个案件,亚历克斯需要调查一起网络诈骗案,他通过分析用户行为的细微异常,比如登录时间、IP地址的规律性变化,以及异常的交易模式,最终锁定了犯罪嫌疑人。书中对亚历克斯分析思路的描绘,充满了逻辑推理和创造性联想,让我看到了数据分析在侦查领域的神奇应用。虽然书中没有展示任何Spark的代码,但它却让我体验到了数据分析的“侦探”魅力。它教会我,技术是工具,而真正的力量在于如何运用这些工具去洞察、去发现、去解决问题。这种叙事方式,将枯燥的数据分析过程变得异常引人入胜。
我购买这本书的初衷,是想深入了解Spark如何处理实时流数据,并在金融交易领域实现高频分析。然而,这本书却以一个名叫玛丽的独立研究员的故事,将我带入了一个关于“信息茧房”和“认知偏差”的深刻探讨。玛丽并没有利用Spark进行数据分析,而是通过分析她所处的小镇居民的社交媒体行为、新闻阅读习惯,来揭示信息如何在人群中传播,以及用户是如何被算法塑造的。书中她如何观察到小镇居民的信息获取渠道越来越单一,观点越来越趋同,并最终意识到这种现象背后隐藏的社会风险。我特别喜欢书中她如何用朴素的统计学方法,来量化信息传播的效率和偏见,并与镇上的图书管理员、教师一起,尝试通过提供多样化的信息来源来打破这种“茧房效应”。虽然这本书没有任何与Spark相关的技术内容,但它却让我深刻反思了我们所处的信息时代。它让我看到,即使没有复杂的工具,对信息流动和传播的洞察,也能带来深刻的社会意义。这本书让我对“数据”的理解,从技术工具上升到了社会现象的层面。
一本让前端也可以做大数据的书。
spark,sklearn和flask的结合,可以看到数据分析的全过程,还行吧,要深入学习还得看专注某一方面的书!
就当练手吧,讲的不深,流程走了一遍
就当练手吧,讲的不深,流程走了一遍
比较浅,迅速翻完,适合初学者