当数据科学家需要使用某些软件时,其中一部分我们已经在之前的章节中做过介绍,这些软件涵盖了数据科学家所需要的基础专业内容。实际的工作范畴可能会超越求职时候的工作描述,这也是IT工作的常态之一。这在某种程度上是好的,因为它提供了学习新技能的机会,而这也是数据科学领域最引人入胜的方面之一。
在本文中,我们会探索数据科学环境中常用的软件。不是所有在这里提到的软件都会在你的工作中用到,但了解它们会让你拥有更多选择。特别是我们会提到Hadoop套件的一些其他备选工具(例如Spark、Storm等),许多功能强大的面向对象编程语言(Java、C++、C#、Ruby和Python),现有的数据分析软件(R、Matlab、SPSS、SAS或是Stata),你可能会用到的虚拟化程序以及大数据集成系统(例如IBM的BigInsights、Cloudera等)。我们还会看看你可能接触到的其他软件,例如GIT、Excel、Eclipse、Emcien以及Oracle。注意这个列表只是告诉你这一领域的主流软件有哪些,但它们并不一定是你在未来工作中的真实环境下所使用的工具。一些公司可能会用到它所在行业的专业软件,在你入职的时候也许会被要求你去熟悉这些软件。了解这个列表中的大部分软件会让你工作地相对轻松和明确。
Hadoop在过去的几年里,几乎成为大数据的代名词。这是数据科学家的兵器库中的主要支撑。知道Hadoop不只是一个程序是非常重要的,它更像一组工具(类似于微软的Office)。这个套件被用于传输,保存和处理大数据。它还包含有一个调度器(Oozie)、元数据和表格管理架构(HCatalog)。所有在Hadoop中处理数据的任务都是分布在安装了Hadoop的所有机器集群中的,这些任务可以是面向对象程序(OOP)代码、数据分析程序、数据图形化脚本以及其他具有有限处理时间(finite process time)特征和对数据分析有用的任务。Hadoop会确保不管你对数据做什么样的操作都能以高效的方式完成,并以直观的方式呈现。
Hadoop并没有一个对用户友好的软件环境,如图1所示,这是一个典型的Hadoop任务的样子。
图1 Hadoop任务仪表盘(Dashboard)的屏幕截屏
Hadoop套件由以下几个组件组成,所有的组件都很重要。
Hadoop套件还有一些其他的组件用来补充以上这些核心组件。而熟悉它们最好的方法是去下载一个Hadoop玩一下。当需要确定基准(Benchmark)的时候,你可以选择去读一下教程(或者,如果你能读一下用户手册则更好)。
Hadoop并不是进入大数据技术的唯一选择。另有一个也很有意思但并不那么有名的备选方案是Storm(被Twitter、阿里巴巴、Groupon以及其他许多公司所使用)。Storm显著快于Hadoop,同样也是开源,而且使用起来相对简单,是一个值得选用的Hadoop备选方案。不像Hadoop, Storm 不执行MapReduce任务,而是运行topology(拓扑)。核心的差异在于MapReduce最终会将任务结束,而topology会永远运行或直到它被用户终止。(你可以将它类比为操作系统后台一直运行的进程)。topology可以被画成计算图,用以处理数据流。这些数据流的源被称为spout(形象化为“水龙头”),而它们会被接入bolt(形象化为“闪电”)。一个bolt可以使用任意数量的输入源,做一些处理,并输出新的数据流。你可以在图2中看到Storm topology。
如图2所示,Storm软件中的Topology,一个值得选用的Hadoop的备选方案。你可以很容易地创建一个类似这样的Topology,并比MapReduce的流程顺序要直观。
对数据使用Topology方法可以确保即使在出现故障的情况下也能处理出正确的结果(因为topology会持续地运行),也就是说如果计算机集群中的某一台计算机发生了问题也不会危害到在运行在整个集群上任务的一致性。需要注意的是,Storm topology 一般是由Java、Ruby、Python和Fancy语言编写而成。Storm软件则是由Java和Clojure(一个与Java配合良好的函数型语言)编写,同时它的源代码也是这个类型技术中最为流行的项目。
图2 Storm软件中的topology,一个值得选用的Hadoop的备选方案。可以很容易地创建一个类似的topology,并比MapReduce的流程顺序要直观
这个软件的优势在于它处理数据的实时性、简单的API、可扩展性、容错性、简单部署、免费且开源并能够确保数据处理,以及可以在其上使用各种编程语言。它有横跨美国东西海岸、伦敦以及其他地区,并持续壮大的用户社区。
除了Storm这个非常流行并且提供了灵活和简单地操作还很有前景的Hadoop的替代品之外,还有一些其他软件同样宣称自己具有类似特性并尝试挑战Hadoop在大数据世界的支配权。最值得推荐的几个软件(在编写本书的时候)有如下几个。
还有一些并行于这些系统的项目,可以免费便利地开展Hadoop环境下的工作。所以,如果你想学Hadoop,并且把基础的部分都掌握以后可以看看这些工具。这些项目中最著名的有以下几个。
数据科学家需要能够熟练处理面向对象编程(OOP),但比较各种面向对象编程语言已超出了本书所要讨论的范围,所以如果非要举个例子的话,Java是这一节中主要会讨论的语言,因为它被业界熟知。像大多数面向对象一样,Java不包含用户图形界面(GUI),这就是那么多人更爱用Python(它的开发者确实为它编写了一个体面的GUI)的原因。然而,Java运行快而优雅,同时不管是线上还是线下都有大量的学习资源。图3是一个典型的Java程序。
图3 一段典型的Java程序
图3是一段典型的Java程序用于判断这一年是不是闰年。这是一个识别了Java程序的编辑器视图。
注意,部分字句的颜色和高亮显示是由编辑器自动实现的(尽管不总是这样,例如当使用记事本工具打开程序时)。同样,间距也是可选的,用来帮助用户编写语句。注意大多数程序会比这段简单的例子要长一些,也更复杂一些,但它们也可以像例子中一样,被拆散成简单的语句块。
如果你花了大量的时间在编写脚本上面(通常如果你使用文本编辑器,例如Notepad++或者Textpad),编程会让你劳累不堪。为了减轻这种影响,在过去的许多年里,众多集成开发环境(Integrated development environments,IDE)被开发出来。这些IDE为编程语言提供了额外环境,将它的引擎、编译器以及其他组件和舒适的图形界面以更加友好的方式呈现。一个在Java世界里非常著名的IDE就是Eclipse(见图4),同时也可以作为其他语言的运行环境,甚至是像R一样的数据分析包(Data analysis packages)。
图4 Eclipse的界面
图4所示为运行着Java的Eclipse截屏。Eclipse是一个优秀的Java IDE(也适合其他的编程语言)。
其他可供你参考的的面向对象语言包括:
所有这些都是免费而且可以通过免费教程学习的(C#的IDE是Visual Studio,它是商业软件[1])。另外,它们都有一些共同点,如果你对面向对象编程(OOP)的概念很熟悉的话,例如封装、继承以及多态,你就能够处理它们中的任何一个。注意,所有这些编程语言都是命令型语言(相对于最近逐渐出名的声明/函数型编程语言而言)。这个类型编程语言的语句基本上都是在命令计算机采取什么样的行动。而声明/函数型语言,相对来说更多的关注最后的结果而对下一步采取什么动作的具体细节并不关心。
尽管在写作本书时,面向对象编程语言在专业编程领域是一个基本配置,但目前还是有一些向函数型语言变化的趋势(例如Haskell、Clojure、ML、Scala、Erlang、OCaml、Clean等)。这些语言基于另一种哲学,关注函数式表达式的求值而不是变量的使用或者实现它们命令的具体执行。
函数型语言的一个大加分项就在于它便捷的可扩展性(这对于处理大数据极有帮助)以及避免出错,因为它们不使用全局工作空间。不过,它们相比于面向对象编程语言,在大多数数据科学应用下要慢一些。尽管它们中有几个语言(例如OCaml和Clean)在做数值运算时,可以和C语言[2]一样快。如果未来峰回路转之后,函数型语言的情况逐渐好转,为了稳妥起见,那么你可能会希望把函数型语言添加到你的技能树中去。注意函数型语言和我们之前提到的一些传统的面向对象编程语言会有交叉的部分。例如,Scala就是一个函数型面向对象编程语言,这个语言值得大家好好研究。
如果数据科学家耗费时间所参与的编程工作到最后得不到任何认同,或干脆就毫无意义,那数据科学家还有什么可当的?于是,数据分析软件就在此时登场了。在众多选择中,最有名的当属Matlab和R。它们都很棒,但是没有必要去计较谁比谁更好,因为用那一种工具更多是基于个人偏好。有趣的是,这两者之间的语法和功能函数非常相近,以至于如果你精通了其中任意一种,那么学习另一种的时间也就是2~3个星期。
由于R在某种程度上来说更受欢迎,主要由于它免费开源,庞大的用户群体定期地向其贡献新内容,因此,我们在本书中会更关注R。所以希望那些倾向于Matlab,并了解Matlab在哪些地方优于R和其他数据分析工具的人,理解我们的选择并保持开放的心态。R同样有优于其他数据分析工具的地方,并且它在编写和运行程序上都很直观,通常不使用循环结构(一种程序结构,一般来说会拖慢高级程序语言的分析时间),而是利用运用向量的一些操作,而且它还可以延展到矩阵,这种特性被称为向量化,向量化使得数据分析脚本易于阅读和理解(面向对象编程语言通常运行速度很快,因此循环对于它们并不是问题)。
R语言的运行环境十分简单(在某种方面上与Python类似),对用户使用来说也足够友好,特别是一些小程序。图5的截屏展示了这个运行环境的样子。
图5 R语言的编程环境
图5显示了R语言(原版)的编程环境。正如你所看到的那样,尽管编程环境足够友好,但它还是缺少了许多在IDE内的贴心功能。
R作为一款数据分析工具来说是十分强大的,而它的GUI(图形用户界面)也做得很好。然而,如果你真的想用这款软件,还是需要花点时间学习并调试一下IDE。市面上有很多款R语言的IDE(大多数是免费的),但其中有一个佼佼者,叫做RStudio(见图6)。
图6 RStudio的界面
图6显示了R语言众多IDE中的其中一员RStudio。你可以从图中看到,除了主控窗口(左下窗口)外,还有脚本编辑窗口(左上窗口),工作空间查看窗口(右上)以及图形查看窗口(右下)。除此之外,还有许多别的功能来辅助R语言的编写与运行。
R语言之外的其他数据分析工具还有。
注意,上面所提及的软件(除Octava以外),都是具有商业所有权的,所以他们并不像R那样能吸引巨量的用户群。如果你对统计和编程都很熟悉,那么对你来说,它们就会很容易学习。在Matlab的帮助下,你不需要为了使用而去熟悉很多统计学知识。我们会在10.5节再探讨R语言,那时,我们会讨论如何在机器学习架构中使用它。
数据分析结果可视化的重要性显而易见,这也就是增加一些可视化软件可以充实你的软件兵器库的原因。尽管所有的数据分析程序都能提供一些像样的可视化工具,但增加一些专用的工具总是好的。例如Tableau,它可以使整个处理过程都更加直观以及高效(见图7)。
很遗憾地说,因为Tableau是一个具有商业所有权的软件,所以它有些贵。然而,他可以实现快速的数据可视化,混合以及图像导出。它的使用界面十分友好,易于学习,在网上有大量的资源,空间使用相当小(小于100MB)。另外,它的开发者们也乐于通过教程与实践来指导用户学习。它在Windows(XP之后的任何版本)上运行,同时还有两周的试用期。有趣的是,它是华盛顿大学“数据科学导论”的教学大纲的一部分。
图7 Tableau的界面
图7所示为Tableau,它是一款出色的可视化程序。正如你所见,它十分直观而且提供了各种各样的特性。
在业界,Tableau较其他可视化程序取得了领跑者的地位。尽管它更适合于商业智能应用,但它还可以被用在任何数据可视化任务中,同时它实现了通过邮件和在线的图像简易共享。它也提供了交互式的映射以及能够同时处理不同来源的数据。
如果你对这款软件的同类产品感兴趣,你可以看看以下几款程序。
一般来说,数据可视化程序使用起来相对轻松,所以在你的“数据兵器库”中加入它们并不是个问题。在倾注大量时间掌握其中任何一个工具之前,确保它能与你使用的其他工具集成良好。此外,看看大部分你所感兴趣的软件广告中都包含了哪些其他的可视化软件。
尽管并不是必须的,但能够熟悉至少一个集成大数据系统是很好的。IBM的BigInsights平台就是其中一个很不错的例子,尽管事实上它还处于初期版本。它的设计思路是将Hadoop的大部分功能封装到一个对用户友好,并且有像样的图形界面的软件包中去。它的加分项是它还能执行数据的可视化和调度,类似这种“多合一”的套件包相当贴心,这样你就可以专注于数据科学工作的其他部分了。BigInsights运行在一个集群/服务器中,可以通过网页浏览器来访问。图8所示为BigInsights平台的界面截屏。
通过Mozilla 火狐浏览器访问运行中的IBM的BigInsights平台。如你所见,它的用户界面十分友好。
图8 BigInsights平台的界面
集成大数据系统的一个巨大优势在于它图形化的用户界面,与优秀的文档结合在一起之后,使整个系统变得十分友好、直观,而且可以轻松地学会操作。此外,图形界面会很好地结合Hadoop相关操作命令,它可以让你专注于数据科学中更高级别的方面,将你从原本不得不做的大量底层编程中解放出来。
与BigInsights类似的另一个选择是Cloudera,它同样驰名于业界,同时更加稳健。其他值得你了解的软件还包括Knime、Alpine数据实验室套件、Pivotal套件,等等。在你读到这里的时候,很可能已经发布了其他一些集成大数据系统,所以请确保你了解它们是什么,以及它们都提供了哪些功能。
如果不加上一些辅助工具的话,上面这个程序列表就显得不完整。因为发布的公司不同,这些程序可能也会各不相同,但当你需要优化你的“软件兵工厂”的时候,它们是一个好的起步。举个例子,Git版本控制程序绝对值得吸引你的目光,因为你很可能会需要用到它,特别是当你与其他人(通常是程序员)一起参与一个大型项目的时候。你可以从图9中看到它的操作界面和它的一些常用命令。
图9 Git版本控制程序的界面
Git版本控制程序不算是最直观的可用程序,但具有丰富的功能和高效的工作能力。
注意,Git有很多在主流操作系统下的图形界面的插件。有一个在Windows操作系统下非常好的开源图形界面插件叫Git扩展(Git Extensions),除此以外也还有许多在其他操作系统下运行得很好的Git图形界面。这个特别的图形界面插件让Git变得更加直观而且保留了它的命令提示行(但并不是每个Git图形界面都提供这个功能)。
如果在这里忽略了Oracle SQL开发软件,就简直是有悖神明,因为它经常用于访问公司Oracle数据库中的结构化数据。尽管这个特别的软件由于大数据技术的迅速扩张,在接下来的几年内可能会不胜从前,但在做数据科学任务时,它仍然十分重要。你可以从图10中看到Oracle SQL Developer 的截屏界面。
图10 Oracle SQL Developer软件的界面
Oracle SQL Developer数据库软件是处理公司数据库和数据仓库中结构化数据的最佳搭配。
这个软件最关键的部分就是SQL,所以为了使用它的全部潜力,你需要让自己熟悉这种查询语言。正如我们在前几章中看到的那样,这对数据科学家来说是一个非常有用的语言,即使你用得机会并不太多。这是因为它会以其他形式被使用到大数据的数据库程序中。
当你从事数据科学工作时,一些其他需要熟悉的程序如下。
[1] 译者注:最新微软Visual Studio已有免费版本。
[2] C语言是有史以来最好的几个结构化编程语言之一,并成为计算速度方面的标杆。尽管由于面向对象编程范式的兴起,它的人气已不如以往,它对应的面向对象编程语言C++和C#是非常流行且强大的语言。C同样是Matlab的基础,最好的数据分析编程平台之一。因为C是一个底层的语言,不那么直观,因此使用C来编写复杂的程序常成为挑战。
本文摘自由人民邮电出版社异步社区出版的《数据科学家修炼之道》
数据科学家是指采用科学方法、运用数据挖掘工具寻找新的数据洞察的工程师,他们往往集技术专家和数据分析师的角色于一身。在IT行业中,数据科学家将在创造力、沟通能力以及与商业世界的联系方面得到更多的锻炼机会,是当前非常有发展潜力的新兴职位。
本书全面介绍了成为数据科学家应当了解的各类知识。全书共分18章,首先介绍了数据科学与大数据、数据科学的重要性,接着介绍了数据科学家的类型、思维体系、技术资质、经验、社交圈、所用的软件、学习新知和解决问题,另外还介绍了机器学习与R语言平台、数据科学的处理流程、所需的具体技能,介绍了数据科学求职、自我展示并提供了一些有关职业数据科学家和数据科学家的案例学习。
本书内容全面、轻松易读,非常适合从事数据科学相关工作的读者阅读,是一本可以住读者应聘数据科学家职位的求职指南。
【样章试读】
【京东购买】
关注公众账号