中云网胜 旗下CPDA数据分析师福建授权中心

“21世纪最性感的职业”:数学、编程、沟通和商业技能一个都不能少!_厦门大

发布作者:
发布时间:2018-10-08 09:19:53
浏览次数:37

数据科学这个词给出一个一致认可的定义,就像品尝红酒然后在朋友之间分辨其口感一样,每个人都不一样。每个人都会有他自己的定义,没有谁的更准确。

然而就其本质而言,数据科学是向数据提问的艺术:问聪明的问题,得到聪明的有用的回答。不幸的是,反过来也是成立的:笨的问题将得到糟糕的回答!因此,认真构造你的问题是从数据中提取出有价值洞见的关键。因为这个原因,公司现在都雇佣数据科学家来帮助构建这些问题。

据估计,到2018年,全世界的公司在大数据有关的项目上花费将达到1140亿美元,相比2013年大约增长300%。

▲持续增长的大数据和数据科学Google Trend

01 数据科学家:21世纪最性感的职业

要给出一个典型数据科学家的古板肖像是很容易的:T恤衫,宽松的运动裤,边框厚厚的眼镜,在IntelliJ里调试大段的代码……大致如此。不过,除了外表之外,数据科学家的特征还有哪些?下图是我们最喜欢的海报之一,它描述了这个角色:

▲现代数据科学家

数据科学家,21世纪最性感的职业,需要各学科的复合技能,包括数学,统计学,计算机科学,沟通力以及商业技能。找到一位数据科学家是不容易的。找到一位伯乐也同样困难。为此这里提供了一个表格来描述什么是真正的数据科学家。

数学和统计学

机器学习

统计建模

实验设计

贝叶斯推断

监督学习:决策树,随机森林,逻辑回归

非监督学习:聚类,降维

优化:梯度下降及其变种

编程和数据库

计算机科学基础

脚本语言,如Python

统计计算包,如R

数据库:SQLNoSQL

关系代数

并行数据库和并行查询处理

MapReduce概念

HadoopHive/Pig

自定义reducers

xaaS经验,如AWS

领域知识和软技能

对于业务的激情

对于数据的好奇

无权威影响力

骇客精神

问题解决者

有策略,前瞻性和创造力,有创新性和合作精神

沟通力和视野

能与资深经理合作

讲故事的能力

转换数据视野为决策和行动

可视化艺术设计

R包如ggplot或是lattice

任何可视化工具的知识,如FlareD3.jsTableau

数学、统计学和计算机科学的一般知识都列出了,但是一个常常在职业数据科学家中见到的困难是对业务问题的理解。这又回到向数据提问的问题上来,这一点怎么强调也不为过:一个数据科学家只有理解了业务问题,理解了数据的局限性,才能够向数据问出更多聪明的问题;没有这些根本的理解,即使是最聪明的算法也无法在一个脆弱的基础上得出可靠的结论。

1. 数据科学家的一天

对你们中间的一些人来说,这个事实可能会让你惊讶 - 数据科学家不只是喝着浓缩咖啡忙于阅读学术论文、研究新工具和建模直到凌晨;事实上,这些只占数据科学家相当少的一部分时间(浓缩咖啡倒是100%真的)。一天中的绝大部分时间,都花在各种会议里,以更好地理解业务问题,分析数据的局限性(打起精神,无数特征工程(feature engineering)和特征提取(feature extraction)的任务,以及如何能够把结果最好地呈现给非数据科学家们,是个繁杂的过程,最好的数据科学家也需要能够乐在其中;因为这样才能更好地理解需求和衡量成功。事实上,要从头到尾描述这个过程,我们完全能够写一本新书!

那么,向数据提问到底涉及哪些方面呢?有时,只是把数据存到关系型数据库里,运行一些SQL查询语句:“购买这个产品的几百万消费者同时购买哪些其他产品?找出最多的前三种。”有时问题会更复杂,如“分析一个电影评论是正面的还是负面的?”对这些复杂问题的回答是大数据项目对业务真正产生影响的地方,同时我们也看到新技术的快速涌现,让这些问题的回答更加简单,功能加更丰富。

一些试图帮助回答数据问题的最流行的开源框架包括R、Python、Julia和Octave,所有这些框架在处理小规模(小于100GB)数据集时表现良好。在这里我们对数据规模(大数据VS小数据)给出一个清晰的界定,在工作中一个总的原则是这样的:

如果你能够用Excel来打开你的数据集,那么你处理的是小规模数据。

2. 大数据处理

如果要处理的数据集太大放不进单个计算机的内存,从而必须分布到一个集群的多个节点上,该怎么处理?比方说,难道不能仅仅通过修改扩展一下原来的R代码,来适应多个计算节点的情况?要是事情能这么简单就好了。把单机算法扩展到多台机器的困难原因有很多。设想如下一个简单的例子,一个文件包含了一系列名字:

B

D

X

A

D

A

我们想算出文件中每个名字出现的次数。如果这个文件能够装进单机,你可以通过Unix命令组合sort和uniq来解决:

输出如下:

然而,如果文件很大需要分布到多台机器上,就有必要采用一种稍微不同的策略,比如把文件进行拆分,每个分片能够装入内存,对每个分片分别进行计算,最后将结果进行汇总。因此,即使是简单的任务,像这个统计名字出现次数的例子,在分布式环境中也会变得复杂。

3. 分布式环境下的机器学习算法

机器学习算法把简单任务组合为复杂模式,在分布式环境下变得更为复杂。以一个简单的决策树算法为例。这个算法创建一个二叉树来拟合训练数据和最小化预测错误。要构造这个二叉树,必须决定树有哪些分支,这样每个数据点都能够分派到一个分支上。我们用一个简单的示例来阐述这个算法:

这是什么颜色?

▲二维空间上的红色和蓝色数据点示例

考虑这张图所描述的情况:一个二维平面上分布着一些数据点,着色为红色和蓝色。决策树的目标是学习和概括数据的特征,帮助判断新数据点的颜色。在我们这个例子里,可以很容易地看出来这些数据点大致遵循一种国际象棋棋盘的模式,但是算法必须靠自己学习出来。它从找到一个最佳的能把红点和蓝点划分开的水平线或者竖直线开始。将这条线存储在决策树的根节点里,然后递归地在分块中执行这个步骤,直到分块中只有一个数据点时算法结束。

▲最终的决策树及其预测与原空间数据点的映射

4. 将数据拆分到多台机器

现在我们假设数据点非常多,单机内存容纳不下,因此我们必须把数据分片,每台机器都只包含一部分数据点。这样我们解决了内存问题,但这也意味着我们现在需要把计算分布到一个集群的机器上。这是和单机计算的第一个不同点。如果数据能够装进一个单机的内存,对数据做决策会比较容易,因为算法能够同时访问所有数据,但是在分布式算法的情况下,这一点就不再成立了,算法就访问数据而言必须足够“聪明”。既然我们的目标是构造一个决策树来预测平面上新数据点的颜色,因此我们需要设法构造出一个和单机上一样的树。

最原始的解决方案是构造一个简单树,把数据点按照机器边界分片。不过很显然不好,因为数据点分布完全没有考虑到数据点的颜色。

另一种解法是在X轴和Y轴方向上尝试所有的分片可能,找到把颜色区分开的最佳划分,也就是说,能够把数据点分为两组,每组中一种颜色尽可能多而另一种颜色尽可能少。设想算法正在测试按照X = 1.6这条线来分割数据。这意味着算法需要询问集群中的每一台机器,得到每台机器按照这条线分片的结果,然后汇总决定这条线是不是合适。当它找到了一个最佳的分片方法,它也需要把这个决定通知集群里所有的机器,这样每台机器才能够知道自己本地每个数据点现在的分片情况。

和单机情况相比,这个分布式决策树构造算法更复杂,而且需要一种分布式计算方式。如今,随着集群的普及和对大数据集分析需求的增长,这已经是一个基本需求了。

即便是这样两个简单的例子也可以说明,对于大数据集,合适的分布式计算框架是必须的。具体包括:

  • 分布式存储,即,如果单个节点容纳不下所有的数据,需要一种方式来把数据分布到多台机器上处理
  • 一个计算范式(paradigm),用于处理和转换分布式数据,使用数学(和统计学)算法和工作流
  • 支持持久化和重用定义好的工作流和模型
  • 支持在生产环境中部署统计模型

简言之,我们需要一个框架来支持常见的数据科学任务。有人会觉得这不是必需的,因为数据科学家更喜欢用一些已有的工具,比如R、Weka,或者Python scikit。但是,这些工具并不是为大规模分布式数据处理和并行计算设计的。即便R和Python有一些库提供了分布式和并行计算的有限支持,这些库都受到一个根本性的限制,那就是它们的基础平台,R和Python,根本不是为这种大规模数据处理和计算而设计的。

5. 从Hadoop MapReduce到Spark

随着数据量的增长,单机工具已不再能够满足工业界的需求,这给新的数据处理方法和工具提供了机会,尤其是Hadoop MapReduce。MapReduce是基于Google一篇论文提出的想法,MapReduce: Simplified Data Processing on Large Clusters (https://research.google.com/archive/mapreduce.html)。另一方面,MapReduce是一个通用框架,没有为创建机器学习工作流提供库或者任何显式支持。经典MapReudce实现的另一个局限是在计算过程中有很多磁盘I/O操作,没有充分利用大内存带来的益处。

你已经看到了,虽然已经有了几个机器学习工具和分布式平台,但没有哪个能充分满足在分布式环境下进行大数据机器学习的需求。这为Apache Spark打开了大门。

▲进屋来吧,Apache Spark!

Spark在2010年创建于UC Berkeley AMP(Algorithms, Machines, People,算法,机器,人)实验室,在创建时就考虑了速度、易用性和高级分析功能。Spark和其他分布式框架如Hadoop的一个关键区别在于数据集可以缓存在内存里,这让它很适合用作机器学习,因为机器学习天然需要迭代计算,而且数据科学家总是需要对同一块数据进行多次访问。

Spark能够以多种方式运行,包括:

  • 本地模式:在一个单独的主机上运行单个Java虚拟机(JVM)
  • 独立Spark集群:在多台主机上运行多个JVM
  • 通过资源管理器,如Yarn/Mesos:应用部署由资源管理器管理。资源管理器负责控制节点的分配、应用、分发和部署

6. 什么是Databricks