第1章 探索数据分析
在本书深入研究复杂的数据分析方法之前,先来关注一些基本的数据探索任务,这些任务几乎会占据数据科学家80%~90%的工作时间。据估计,每年仅仅是数据准备、清洗、转换和数据聚合就有440亿美元的产值(Data Preparation in the Big Data Era by Federico Castanedo; Best Practices for Data Integration, O?Reilly Media, 2015)。即便如此,人们最近才开始把更多的时间花费在如何科学地开发最佳实践,以及为整个数据准备过程建立文档、教学材料的良好习惯上,这是一件令人惊讶的事情(Beautiful Data: The Stories Behind Elegant Data Solutions, edited by Toby Segaran and Jeff Hammerbacher, O?Reilly Media, 2009;Advanced Analytics with Spark: Patterns for Learning from Data at Scale by Sandy Ryza et al., O?Reilly Media, 2015)。
很少有数据科学家会对数据分析的具体工具和技术看法一致,因为有多种方式可进行数据分析,从UNIX命令行到使用非常流行的开源包,或商业的ETL和可视化工具等。本章重点介绍在笔记本电脑上如何通过Scala进行函数式编程。后面的章节会讨论如何利用这些技术在分布式框架Hadoop/Spark下进行数据分析。
那函数式编程有什么用呢?Spark用Scala开发是有原因的。函数式编程的很多基本原则(比如惰性求值、不变性、无副作用、列表推导式和单子(monad)),在分布式环境下做数据处理都表现得很好,特别是在大数据集上做数据准备和转换等任务时更是如此。也可在PC或笔记本上使用这些技术。通过笔记本电脑连接到分布式存储/处理集群就可处理多达数十TB的超级数据集。可以一次只涉及一个主题或关注一个领域,但通常进行数据采样或过滤时,不必考虑分区是否合适。本书使用Scala作为基本工具,必要时也会采用其他工具。
从某种意义上讲,Scala能实现其他语言所能实现的一切功能。Scala从根本上讲是一种高级语言,甚至可称其为脚本语言。Scala有自己的容器,并且实现了一些基本的算法,这些功能已经通过大量的应用程序(比如Java或C++)和时间的测试,程序员不必关心数据结构和算法实现的底层细节。本章也只会关注如何用Scala/Spark来实现高级任务。
本章会涉及如下主题:
安装Scala
学习简单的数据挖掘技术
学习如何下采样(downsample)原始数据集来提高效率
探讨在Scala上实现基本的数据转换和聚合
熟悉大数据处理工具,比如Spark和Spark Notebook
通过编程实现对数据集的简单可视化