1.3 数据科学项目的生命周期

1.3.1 创建项目

在创建项目步骤中,需要确定项目目标和人员分配情况。

在项目开始之初,要明白这个项目是什么,为什么要做这个项目,以及这个项目将以什么形式存在。回答完以上问题,便可以考虑人员分配了。数据科学项目是团队项目,因此要打造混合团队并确认每种技术人才介入和离开项目的恰当时机,这一点非常重要。

1.3.2 获取数据

数据科学项目的第二步是获取数据,即从业务系统或从外部获取所需的数据。

许多公司已经收集并存储了数据,如果仍然缺乏数据,通常可以从第三方购买。不要害怕从公司之外获得数据,如今已经有越来越多的第三方公司在免费提供公共的、商用的高质量数据。

1.数据集

在介绍如何获取数据之前,需要先了解什么是数据集。简而言之,数据集是数据获取阶段的输出结果。

数据集是创建在数据连接上的,数据集中的数据可以看作数据连接中的子集,两者的关系如图1-3所示。通常来说,数据集和数据库中表的概念类似,数据集中的记录拥有相同的字段格式。如果数据连接代表了一个MySQL数据库,那么数据集通常是这个数据库中的一个表;如果数据连接是一个HDFS集群,那么数据集可能是其中的一个目录或者文件。

图1-3 数据连接与数据集

2.从存储在公司内的数据开始

首先应该评估公司内现有数据的相关性和质量。这些数据可以存储在官方数据存储库中,如存储在数据库、数据集市、数据仓库以及由 IT 专业人员维护的数据湖中。数据湖中包含的是原始格式的数据;数据仓库中的是经过预处理的数据,主要用于读取和分析;数据集市是数据仓库的一个子集,面向特定的业务部门提供服务。

但有时在公司内部查找数据也是一个挑战,因为随着公司业务的增长,数据会分散在许多地方。访问数据是另一项艰巨的任务,因为每个公司都知道数据的价值和敏感性,并且会出台相应的政策限制每个人只能访问他们所需的内容,而不能访问其他内容。这些都是查找和访问数据的障碍。

3.寻找外部数据

如果公司内部没有数据,则需要寻找外部数据。

许多公司专门收集有价值的信息,例如在零售行业中广为人知的尼尔森和GFK。有些公司提供的数据可以达到丰富公司的服务和生态系统的目的,比如Twitter、LinkedIn和Facebook。目前已经有越来越多的政府和组织向世界免费提供他们拥有的数据,表1-1列举了一部分开放数据提供者。

表1-1 开放数据提供者

4.数据质量

从公司内部以及外部获取到足够的数据集以后,要对收集到的数据集进行质量检查,以防出现问题,即进行数据检索。

数据检索过程中会检查数据是否与源文档中的数据相同,并查看数据类型是否正确。这不会花费很长时间,当有足够多的证据表明数据与源文档中的数据相同时,这个过程即可停止。

还可以在数据准备和数据探索步骤中进行更详细的检查,如检查拼写错误、查看数据的统计特性等。

了解了如何在数据获取过程中提高数据的质量,接下来我们将介绍数据准备的步骤。

1.3.3 数据准备

数据准备是指对获取到的数据进行清洗、整合,并将其由原始表单转换为可在模型中直接使用的数据的过程。为了实现这一点,我们将检测并纠正数据中的各种错误,合并来自不同数据源的数据,然后进行转换。下面我们具体来看一下数据准备的各个环节中需要注意的事项。

1.数据清洗

数据清洗是数据科学流程的一个子流程,专注于消除数据中的错误。数据中的错误通常有以下两种类型。

解释错误。这一类错误是指,不加以分辨地认为数据中的值是没有问题的,比如不加以思考地说一个人的年龄大于300岁。

数据不一致,即数据源之间不一致或标准化值不一致。例如,当表示一个人的性别为“女”时,在一张表中使用“Female”表示,而在另一张表中使用“F”表示。

2.数据整合

数据整合是指对来自不同数据源的数据进行整合。模型使用的数据来自多个不同的源头,因此数据的大小、类型和结构可能各不相同。

我们可以执行两个操作将来自不同数据集的信息组合起来。第一个操作是关联(JOIN),即通过一个表中的信息丰富另一个表中的信息。第二个操作是追加(APPENDING),即将一个表中的信息添加到另一个表中。

3.数据转换

某些模型要求数据具有某种格式。我们已经清洗并整合了数据,接下来我们将执行下一个任务:转换数据,生成符合模型要求的数据格式。

大部分模型要求我们将数据集加工成“宽表”,即按样本组织数据,使一个样本占据一行,每行又由若干列组成,每列数据被标识为该样本的一个指标(或属性、特征)。数据转换就是将宽表加工出来的过程。

1.3.4 数据可视化

数据可视化是指将相对晦涩的数据通过可视的、交互的方式进行展示,从而形象直观地表达数据中蕴含的信息和规律的方法。本质上,任何能够借助于图形展示事物原理、规律、逻辑的方法都属于数据可视化方法,数据科学中的可视化要求更加灵活地将晦涩的模型结果以及算法结果展现出来,提供给数据使用者,在数据科学场景中,自助可视化分析(Self-Service Analysis)越来越成为一种趋势。

数据可视化元素越来越多样化,除了朴素的柱状图、饼状图、折线图,还有气泡图、树图等各种样式。

一般而言,完整的可视化流程包括以下几步。

1.可视化输入:输入的内容对可视化任务的描述,数据的来源与用途,数据的基本属性、概念模型等。

2.可视化处理:对输入的数据进行加工,包括清洗、筛选、降维、聚类等,并将数据与视觉编码进行映射。

3.可视化输出:基于视觉原理和任务特性,选择合理的生成工具和方法,生成可视化作品。

1.3.5 数据探索

数据探索是指通过各种方法对数据集进行探索,研究各变量的分布以及变量之间的关系等。探索性数据分析的过程既包括使用可视化技术(如简单的线图、直方图,复杂的 Sankey和网络图等)来了解变量,也包括通过写代码完成机器学习模型的训练、机器学习模型的调优等工作。

1.数据探索中的常见问题

数据量的增大也带来了新的问题。例如内存过载以及算法不能停止运行。另外,即使计算机可以执行运算,也应该注意如I/O(输入/输出)和CPU计算资源匮乏等问题,因为这些问题会导致计算速度减慢。

内存过载

计算机只有有限的RAM,当处理大数据集时,操作系统会将内存块换成磁盘,这种情况下的执行效率比将所有数据全部放在内存上要低得多。

算法不能停止运行

解决了内存问题,还需要处理另一个有限资源的问题:时间问题。某些算法不考虑运行时间,永无止尽地运行。有些算法实际上只需要处理几 MB 数据,但不能在合理的时间内结束。

计算速度降低

处理大型数据集时,第三个问题是由于某个计算机组件存在性能瓶颈导致其他组件闲置。尽管这不像无休止地运行算法或内存不足那么严重,但仍然会带来严重的成本问题。某些程序由于必须从硬盘驱动器读取数据,因此不能以足够快的速度为处理器提供数据,因为硬盘驱动器是计算机上速度最慢的组件之一。随着固态硬盘(SSD)的推出,这个问题已经得到解决,但从 SSD读取数据仍然比从内存读取慢,且 SSD 比更普遍的硬盘驱动器(HDD)技术成本高得多。

2.解决经验

问题和解决方案之间并不是一一映射的,一些解决方案无法同时兼顾内存和计算性能。例如,压缩数据集可以帮助解决内存问题,但会影响计算速度,因为需要从慢速硬盘转移到快速CPU。

一般来说,解决方案可以分为三类:使用适合的算法;选择合理的数据结构;使用正确的工具。下面具体说明。

(1)使用适合的算法

选择适合的算法比添加更多更好的硬件更能解决问题。有一类算法非常适合处理大数据问题,不需要将整个数据集加载到内存中进行预测。理想情况下,这类算法还支持并行计算,常见的有在线算法、块算法和MapReduce算法等。

在线算法

在线算法是指以序列化的方式一个个处理输入的算法,即开始时并不需要知道所有输入,因此不需要将所有数据存入内存。在新数据到达后,模型会被训练并且“忘记”观察结果。例如,用于预测天气的模型会在不同地区使用不同的参数(如大气压力或温度)。这种“使用而忘记”的工作方式是针对内存问题的完美解决方案。

块算法

某些使用全矩阵的算法可以转化为使用矩阵块的算法。在这种情况下,可以将较小的矩阵加载到内存中并执行计算,从而避免出现内存不足的问题。

MapReduce算法

我们用一个比喻来说明 MapReduce 算法:假设要统计某国选举活动中的所有选票,该国有25个政党,1500个投票办公室和200万人,我们可以单独收集每个办公室的所有投票并集中统计它们,也可以要求当地办事处统计25个参与方的选票并将结果上交,然后按政党汇总,后者即MapReduce算法思路。MapReduce算法的一个优点是易于并行处理和分发,因此在分布式环境(如 Hadoop)中性能很好,但它也可以在单台计算机上使用。

(2)选择合理的数据结构

为了解决数据探索中的问题,选择合理的存储数据方式同样重要。实际应用中,有许多不同的数据结构可供选择,我们在这里讨论其中的三个:稀疏数据、树数据和散列数据。

稀疏数据

稀疏数据是指,数据集中绝大多数数值缺失或者为零的数据,如图1-4所示。稀疏数据集包含的信息相对较少。

图1-4 稀疏数据

例如在图1-4中,几乎所有的值都是“0”,只有变量9的第二个观察结果为“1”。这样的数据可能看起来很荒谬,但这通常是将文本数据转换为二进制数据时得到的结果。幸运的是,现在许多算法能够通过处理稀疏矩阵来压缩存储空间。

例如,针对图1-4中的情况,可以通过如下代码进行处理,为第2行第9列保存数值1。

树结构

树是数据结构中的一种,检索信息的速度比表更快。树有根节点和子树,运用简单的决策规则可以很容易地找到数据所在的子树。

哈希表

哈希表在数据库中常被作为索引广泛用于快速检索信息,它为数据中的每个值计算一个密钥,并将这些密钥放入一个存储桶。可以通过查看正确的存储桶来快速检索信息。Python中的字典便是一个哈希表实现。

(3)使用正确的工具

有了适合的算法和合理的数据结构,就可以选择正确的工具了,比如 Python 库。Python 中有许多库可以帮助我们处理大数据,从代码优化器的智能数据结构到即时编译器。大多数软件都有Python接口,这使我们能够轻松地使用Python附带的专业软件。通过这种方式,Python能将自己与其他流行的数据科学语言(如R语言和SAS语言)区分开来。

1.3.6 部署上线

数据科学项目的成果可通过数据集、模型及数据应用等形式来展现。此前数据的自由流通和模型应用的计量计价是数据科学家与开发者们面临的难题,现在通过 TalkingData SDMK便可以实现快速上线变现了。