當數據科學家需要使用某些軟件時,其中一部分我們已經在之前的章節中做過介紹,這些軟件涵蓋了數據科學家所需要的基礎專業內容。實際的工作范疇可能會超越求職時候的工作描述,這也是IT工作的常態之一。這在某種程度上是好的,因為它提供了學習新技能的機會,而這也是數據科學領域最引人入勝的方面之一。
在這一章中,我們會探索數據科學環境中常用的軟件。不是所有在這里提到的軟件都會在你的工作中用到,但了解它們會讓你擁有更多選擇。特別是我們會提到Hadoop套件的一些其他備選工具(例如Spark、Storm等),許多功能強大的面向對象編程語言(Java、C++、C#、Ruby和Python),現有的數據分析軟件(R、Matlab、SPSS、SAS或是Stata),你可能會用到的虛擬化程序以及大數據集成系統(例如IBM的BigInsights、Cloudera等)。我們還會看看你可能接觸到的其他軟件,例如GIT、Excel、Eclipse、Emcien以及Oracle。注意這個列表只是告訴你這一領域的主流軟件有哪些,但它們并不一定是你在未來工作中的真實環境下所使用的工具。一些公司可能會用到它所在行業的專業軟件,在你入職的時候也許會被要求你去熟悉這些軟件。了解這個列表中的大部分軟件會讓你工作地相對輕松和明確。
1 .Hadoop套件和朋友們
Hadoop在過去的幾年里,幾乎成為大數據的代名詞。這是數據科學家的兵器庫中的主要支撐。知道Hadoop不只是一個程序是非常重要的,它更像一組工具(類似于微軟的Office)。這個套件被用于傳輸,保存和處理大數據。它還包含有一個調度器(Oozie)、元數據和表格管理架構(HCatalog)。所有在Hadoop中處理數據的任務都是分布在安裝了Hadoop的所有機器集群中的,這些任務可以是面向對象程序(OOP)代碼、數據分析程序、數據圖形化腳本以及其他具有有限處理時間(finite process time)特征和對數據分析有用的任務。Hadoop會確保不管你對數據做什么樣的操作都能以高效的方式完成,并以直觀的方式呈現。
Hadoop并沒有一個對用戶友好的軟件環境,如圖1所示,這是一個典型的Hadoop任務的樣子。
Hadoop套件由以下幾個組件組成,所有的組件都很重要。
MapReduce由Google創建,并且是Hadoop的主要組件。正如在之前的部分我們曾提到過的那樣,這是任何大數據技術的核心。盡管這是Hadoop固有的特性,但它也可以在其他的大數據程序,例如MPP和NoSQL數據庫(例如,MongoDB)。MapReduce最初是具有商業所有權的,但隨著Yahoo在2006年提供了慷慨的資金支持,它以Hadoop的開源形式出現,并在兩年內迅速受到廣泛歡迎。作為一個著名的并行計算算法,它得以讓數據庫的查詢建立在一個計算機集群上,任務可以分拆成小份,并跨越整個集群的節點。
HDFS是Hadoop 分布式文件系統的簡稱,這是Hadoop系統所使用的文件系統。被Hadoop所處理的數據必須先導入到HDFS中,并備份在運行了Hadoop的計算機網絡中。它的數據極限大約在30PB。
Pig是針對Hadoop進行計算的一個高級編程語言(High-level programming language)。你可以將它視為Hadoop生態系統中各種操作的控制元件。它的性能是可擴展的。
Hive是一個數據倉庫程序,是以“類-SQL”語言進行訪問使用的,他是為橫跨Hadoop集群的數據設計的。并且它的性能是可擴展的。
HBase、Sqoop以及Flume是Hadoop的數據庫組件。HBase是一個可以運行在Hadoop環境上的列式數據庫。它是基于Google的BigTable設計的,并且數據極限約為1PB。另外,它比直接在HDFS上訪問數據要慢一些。這對于處理存在HBase里面的數據來說不是很好,對HBase對于歸檔和時間系列數據的計數很合適。Sqoop是一個將關系型數據庫中的數據導入到HDFS中的程序。Flume與此類似,它關注于收集和導入各種數據源的日志和任務數據。
Mahout是一個機器學習和數據挖掘算法的函數庫,用于對存儲在HDFS的數據進行處理。
Zookeeper服務于Hadoop有一“群”各種各樣功能的組件,所以調試管理以及協調程序是十分必要的。Zookeeper保證了整個套件的整合以及相對得簡便操作。
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配合良好的函數型語言)編寫,同時它的源代碼也是這個類型技術中最為流行的項目。
這個軟件的優勢在于它處理數據的實時性、簡單的API、可擴展性、容錯性、簡單部署、免費且開源并能夠確保數據處理,以及可以在其上使用各種編程語言。它有橫跨美國東西海岸、倫敦以及其他地區,并持續壯大的用戶社區。
除了Storm這個非常流行并且提供了靈活和簡單地操作還很有前景的Hadoop的替代品之外,還有一些其他軟件同樣宣稱自己具有類似特性并嘗試挑戰Hadoop在大數據世界的支配權。最值得推薦的幾個軟件(在編寫本書的時候)有如下幾個。
Spark由加利福尼亞大學伯克利分校的AMP Lab開發而成。Spark是MapReduce領域的最新玩家,它的目標是數據分析在寫入和運行端的速度更加快速。不像許多在這個領域的系統,Spark使用內存查詢數據,替代了磁盤的讀寫。這樣,Spark在許多迭代算法上比Hadoop的表現更為優越。它是由Scala實現的(參見一下部分),在寫作本書的時候,它的主要用戶是UC Berkeley的研究者和Conviva公司。
BashReduce作為一個腳本工具,BashReduce可以用標準UNIX命令(如sort、awk、grep、join等)執行MapReduce,成為了Hadoop的另一個備選工具。它支持映射/分割、規約以及合并等功能命令。盡管它根本沒有一個分布式文件系統,BashReduce還是將文件分布到了工作節點中,但不可避免地缺少容錯。它沒有Hadoop那么復雜,同時可以進行快速開發。除了容錯的問題之外,它還缺乏靈活性,因為BashReduce只能工作在特定的UNIX命令環境中。BashReduce是由Erik Frey(在線電臺last.fm)以及他的助手們開發。
Disco Project最初是由諾基亞(Nokia)研究院開發,Disco已經默默無聞了很多年。MapReduce作業由簡單的Python編寫,而Disco的后端是以Erlang編寫的,一個可擴展的函數型語言,內置支持并發、容錯以及分布,使得它成為一個理想的MapReduce系統。與Hadoop類似,Disco分布并復制存放數據,但它沒有自己的文件系統。由于它的高效,在作業調度方面也是值得稱道的。
GraphLab由卡內基梅隆大學開發,為機器學習應用服務而設計,GraphLab旨在提高并行機器學習算法設計的執行效率和正確性。GraphLab擁有它自己版本的映射(map)階段,稱為更新階段。不像MapReduce,更新階段可以讀取和修改數據的交集。它基于圖的方法使得在圖形的機器學習上更具可控性,同時提升了動態迭代算法。
HPCC 系統以它自己的大規模數據分析架構,HPCC試圖用Enterprise Control Language語言(ECL)更近編寫并行工作流,ECL語言是一個聲名式語言,以數據為中心的語言(有些類似于SQL、Datalog和Pig)。HPCC是用C++寫成的,根據一些人的說法,這樣使得內存查詢更快。HPCC由于擁有自己的分布式文件系統而也成為Hadoop一個有力地備選工具。
Sector/Sphere以C++開發,這個系統承諾了比Hadoop快2~4倍的性能。它由兩部分組成:Sector,安全且可擴展的分布式文件系統,以及Sphere,在存儲節點上可以通過簡單的API接口處理Sector數據文件的并行數據處理引擎。它具有不錯的容錯性,支持廣域網同時兼容舊系統(需要做一些修改)。從2006年誕生起,它就是一個不錯的Hadoop替代方案。
還有一些并行于這些系統的項目,可以免費便利地開展Hadoop環境下的工作。所以,如果你想學Hadoop,并且把基礎的部分都掌握以后可以看看這些工具。這些項目中最著名的有以下幾個。
Drill是一個Hadoop插件,專注于提供一個存儲在Hadoop集群環境下的數據集的交互分析接口。它常常利用MapReduce來執行Hadoop下的大數據的批量分析,并通過Dremel以更快的速度來處理更大規模的數據集。憑借它可以擴展到大規模服務器上的能力(它的設計目標是10000個服務器),使它成為處理真正的大數據的好選擇。如果你計劃使用Hadoop,那么它是一個值得你去研究的工具。
D3.js是數據驅動文檔(Data Driven Documents)的縮寫,D3.js是一個開源JavaScript函數庫,可以讓你編輯大數據的展示文檔。這個工具可以讓你利用網頁技術(例如HTML5、SVG以及CSS)來創建動態圖形。另外,它還提供可視化方法,例如和弦圖、氣泡圖、樹狀圖以及節點連接樹。由于它是開源的,因此這個列表還在持續地擴展著。D3.js設計的目標是運行快速和兼容于跨硬件平臺的程序。盡管它不一定會替代完全成熟的數據可視化程序(見4節),但這是一個你值得留意的好工具。D3.js是由紐約時報的圖形編輯Michael Bostock開發的。
Kafka是最早由LinkedIn所開發的消息系統,作為社交媒體活動流和數據處理管道的基礎。從那以后,它的用戶群便逐漸擴大,涵蓋了各種使用數據管道和消息服務的公司。它非常高效,同時與Hadoop生態系統集成良好,此外,它是運行在Java環境中的,是可以跨平臺的。
Julia事實上,它不只是一個數據分析工具,而是被設計為運行在諸如Hadoop這樣的分布式計算環境中。它很穩健,易于使用,類似于Matlab和R(見3節),同時又非常快速。它是與Hadoop套件相襯的擴展工具,如果你傾向于編寫程序,那么這是一個可以加入你技能樹中的好語言。
Impala是一個分布式查詢執行引擎,是為原生存儲在Apache HDFS 和Apache HBase的數據而設計的。由Cloudera開發,它聚焦于數據庫而且不會使用到MapReduce。因為它避免了MapReduce作業的額外開銷,所以可以實時地返回結果。
2 .面向對象編程語言
數據科學家需要能夠熟練處理面向對象編程(OOP),但比較各種面向對象編程語言已超出了本書所要討論的范圍,所以如果非要舉個例子的話,Java是這一節中主要會討論的語言,因為它被業界熟知。像大多數面向對象一樣,Java不包含用戶圖形界面(GUI),這就是那么多人更愛用Python(它的開發者確實為它編寫了一個體面的GUI)的原因。然而,Java運行快而優雅,同時不管是線上還是線下都有大量的學習資源。圖3是一個典型的Java程序。
圖3是一段典型的Java程序用于判斷這一年是不是閏年。這是一個識別了Java程序的編輯器視圖。
注意,部分字句的顏色和高亮顯示是由編輯器自動實現的(盡管不總是這樣,例如當使用記事本工具打開程序時)。同樣,間距也是可選的,用來幫助用戶編寫語句。注意大多數程序會比這段簡單的例子要長一些,也更復雜一些,但它們也可以像例子中一樣,被拆散成簡單的語句塊。
如果你花了大量的時間在編寫腳本上面(通常如果你使用文本編輯器,例如Notepad++或者Textpad),編程會讓你勞累不堪。為了減輕這種影響,在過去的許多年里,眾多集成開發環境(Integrated development environments,IDE)被開發出來。這些IDE為編程語言提供了額外環境,將它的引擎、編譯器以及其他組件和舒適的圖形界面以更加友好的方式呈現。一個在Java世界里非常著名的IDE就是Eclipse(見圖4),同時也可以作為其他語言的運行環境,甚至是像R一樣的數據分析包(Data analysis packages)。
圖4所示為運行著Java的Eclipse截屏。Eclipse是一個優秀的Java IDE(也適合其他的編程語言)。
其他可供你參考的的面向對象語言包括:
C++是與Java齊名的編程語言,快速而流行
Ruby是強大的面向對象編程的備選語言
JavaScript是可與Java配合使用的基于網頁的編程語言
Python是優秀的面向對象語言,特別適合初學編程的人
C#是由微軟開發的業界知名的編程語言
所有這些都是免費而且可以通過免費教程學習的(C#的IDE是Visual Studio,它是商業軟件[1])。另外,它們都有一些共同點,如果你對面向對象編程(OOP)的概念很熟悉的話,例如封裝、繼承以及多態,你就能夠處理它們中的任何一個。注意,所有這些編程語言都是命令型語言(相對于最近逐漸出名的聲明/函數型編程語言而言)。這個類型編程語言的語句基本上都是在命令計算機采取什么樣的行動。而聲明/函數型語言,相對來說更多的關注最后的結果而對下一步采取什么動作的具體細節并不關心。
盡管在寫作本書時,面向對象編程語言在專業編程領域是一個基本配置,但目前還是有一些向函數型語言變化的趨勢(例如Haskell、Clojure、ML、Scala、Erlang、OCaml、Clean等)。這些語言基于另一種哲學,關注函數式表達式的求值而不是變量的使用或者實現它們命令的具體執行。
函數型語言的一個大加分項就在于它便捷的可擴展性(這對于處理大數據極有幫助)以及避免出錯,因為它們不使用全局工作空間。不過,它們相比于面向對象編程語言,在大多數數據科學應用下要慢一些。盡管它們中有幾個語言(例如OCaml和Clean)在做數值運算時,可以和C語言[2]一樣快。如果未來峰回路轉之后,函數型語言的情況逐漸好轉,為了穩妥起見,那么你可能會希望把函數型語言添加到你的技能樹中去。注意函數型語言和我們之前提到的一些傳統的面向對象編程語言會有交叉的部分。例如,Scala就是一個函數型面向對象編程語言,這個語言值得大家好好研究。
3. 數據分析軟件
如果數據科學家耗費時間所參與的編程工作到最后得不到任何認同,或干脆就毫無意義,那數據科學家還有什么可當的?于是,數據分析軟件就在此時登場了。在眾多選擇中,最有名的當屬Matlab和R。它們都很棒,但是沒有必要去計較誰比誰更好,因為用那一種工具更多是基于個人偏好。有趣的是,這兩者之間的語法和功能函數非常相近,以至于如果你精通了其中任意一種,那么學習另一種的時間也就是2~3個星期。
由于R在某種程度上來說更受歡迎,主要由于它免費開源,龐大的用戶群體定期地向其貢獻新內容,因此,我們在本書中會更關注R。所以希望那些傾向于Matlab,并了解Matlab在哪些地方優于R和其他數據分析工具的人,理解我們的選擇并保持開放的心態。R同樣有優于其他數據分析工具的地方,并且它在編寫和運行程序上都很直觀,通常不使用循環結構(一種程序結構,一般來說會拖慢高級程序語言的分析時間),而是利用運用向量的一些操作,而且它還可以延展到矩陣,這種特性被稱為向量化,向量化使得數據分析腳本易于閱讀和理解(面向對象編程語言通常運行速度很快,因此循環對于它們并不是問題)。
R語言的運行環境十分簡單(在某種方面上與Python類似),對用戶使用來說也足夠友好,特別是一些小程序。圖5的截屏展示了這個運行環境的樣子。
圖5顯示了R語言(原版)的編程環境。正如你所看到的那樣,盡管編程環境足夠友好,但它還是缺少了許多在IDE內的貼心功能。
R作為一款數據分析工具來說是十分強大的,而它的GUI(圖形用戶界面)也做得很好。然而,如果你真的想用這款軟件,還是需要花點時間學習并調試一下IDE。市面上有很多款R語言的IDE(大多數是免費的),但其中有一個佼佼者,叫做RStudio(見圖6)。
圖6顯示了R語言眾多IDE中的其中一員RStudio。你可以從圖中看到,除了主控窗口(左下窗口)外,還有腳本編輯窗口(左上窗口),工作空間查看窗口(右上)以及圖形查看窗口(右下)。除此之外,還有許多別的功能來輔助R語言的編寫與運行。
R語言之外的其他數據分析工具還有。
Matlab/Octave在R成名業界之前就已存在,并且Matlab就已經稱王于數據分析領域。盡管Matlab是有商業所有權的軟件(需要付費使用),他還是有幾個開源的小伙伴們,其中最好的當屬Octave。Matlab和Octave對于初學者而言都是很好的工具,它們有大量的應用,并且像R那樣實現了向量化。但是,Matlab的工具箱(函數庫)稍有些昂貴,而Octave則沒有這些。
SPSS是現有最好的統計程序之一,而且廣泛適用于研究領域。學習起來很簡單,它可以做任何數據分析,盡管不像R語言那樣高效。此外,和Matlab一樣,它也是有商業所有權的,為學界與業界所推崇。
SAS是一個流行的統計程序,特別是在企業當中。學習起來相對簡單,它也有一個不錯的腳本語言工具,可以幫助創建更為復雜的數據分析。但是,它也是有商業所有權的。
Stata是選擇統計程序包時的好選擇。Stata 是最受統計學家所喜歡的工具之一,也是具有商業所有權的。自從R語言在數據分析世界變得廣受歡迎以來,Stata就不再像以前那么受寵了。
注意,上面所提及的軟件(除Octava以外),都是具有商業所有權的,所以他們并不像R那樣能吸引巨量的用戶群。如果你對統計和編程都很熟悉,那么對你來說,它們就會很容易學習。在Matlab的幫助下,你不需要為了使用而去熟悉很多統計學知識。我們會在10.5節再探討R語言,那時,我們會討論如何在機器學習架構中使用它。
4 .可視化工具
數據分析結果可視化的重要性顯而易見,這也就是增加一些可視化軟件可以充實你的軟件兵器庫的原因。盡管所有的數據分析程序都能提供一些像樣的可視化工具,但增加一些專用的工具總是好的。例如Tableau,它可以使整個處理過程都更加直觀以及高效(見圖7)。
很遺憾地說,因為Tableau是一個具有商業所有權的軟件,所以它有些貴。然而,他可以實現快速的數據可視化,混合以及圖像導出。它的使用界面十分友好,易于學習,在網上有大量的資源,空間使用相當小(小于100MB)。另外,它的開發者們也樂于通過教程與實踐來指導用戶學習。它在Windows(XP之后的任何版本)上運行,同時還有兩周的試用期。有趣的是,它是華盛頓大學“數據科學導論”的教學大綱的一部分。
圖7所示為Tableau,它是一款出色的可視化程序。正如你所見,它十分直觀而且提供了各種各樣的特性。
在業界,Tableau較其他可視化程序取得了領跑者的地位。盡管它更適合于商業智能應用,但它還可以被用在任何數據可視化任務中,同時它實現了通過郵件和在線的圖像簡易共享。它也提供了交互式的映射以及能夠同時處理不同來源的數據。
如果你對這款軟件的同類產品感興趣,你可以看看以下幾款程序。
Spotfire是由TIBCO開發的優秀產品,可視化分析的理想工具。它可以與地理信息系統,建模及分析軟件良好集成,同時具有無限的可擴展性,其價格與Tableau保持同一水平。
Qlikview是一款良好的備選工具,對數據可視化和深入鉆取任務是理想的工具。它速度很快并且提供了出色的交互可視化及儀表盤支持。它有很棒的用戶界面和視覺控制,而且還有在內存中處理大數據集的出色能力。然而,它受到內存大小的限制(具有擴展性問題),而且價格相對較高。
Prism是一款直觀的商業智能(BI)軟件,可以輕松地實施任務和學習。它主要專注于商業數據,除去一般類型的圖表以外,它可以生成數據儀表盤、積分板、查詢報告等。
InZite是一款有趣的替代方案,提供了吸引人的可視化及儀表盤特性,快速而且直觀。
Birst是一個好選擇,提供了大量交互性可視化以及分析工具。它可以生成透視表,還可以用精細直觀的報表工具深入鉆取數據。
SAP Business Objects提供了指向并點擊數據可視化功能,以便能夠生成交互并可分享的可視化圖像和交互儀表盤,它直接集成了SAP的其他產品。
一般來說,數據可視化程序使用起來相對輕松,所以在你的“數據兵器庫”中加入它們并不是個問題。在傾注大量時間掌握其中任何一個工具之前,確保它能與你使用的其他工具集成良好。此外,看看大部分你所感興趣的軟件廣告中都包含了哪些其他的可視化軟件。
5 .集成大數據系統
盡管并不是必須的,但能夠熟悉至少一個集成大數據系統是很好的。IBM的BigInsights平臺就是其中一個很不錯的例子,盡管事實上它還處于初期版本。它的設計思路是將Hadoop的大部分功能封裝到一個對用戶友好,并且有像樣的圖形界面的軟件包中去。它的加分項是它還能執行數據的可視化和調度,類似這種“多合一”的套件包相當貼心,這樣你就可以專注于數據科學工作的其他部分了。BigInsights運行在一個集群/服務器中,可以通過網頁瀏覽器來訪問。圖8所示為BigInsights平臺的界面截屏。
通過Mozilla 火狐瀏覽器訪問運行中的IBM的BigInsights平臺。如你所見,它的用戶界面十分友好。
集成大數據系統的一個巨大優勢在于它圖形化的用戶界面,與優秀的文檔結合在一起之后,使整個系統變得十分友好、直觀,而且可以輕松地學會操作。此外,圖形界面會很好地結合Hadoop相關操作命令,它可以讓你專注于數據科學中更高級別的方面,將你從原本不得不做的大量底層編程中解放出來。
與BigInsights類似的另一個選擇是Cloudera,它同樣馳名于業界,同時更加穩健。其他值得你了解的軟件還包括Knime、Alpine數據實驗室套件、Pivotal套件,等等。在你讀到這里的時候,很可能已經發布了其他一些集成大數據系統,所以請確保你了解它們是什么,以及它們都提供了哪些功能。
6. 其他一些程序
如果不加上一些輔助工具的話,上面這個程序列表就顯得不完整。因為發布的公司不同,這些程序可能也會各不相同,但當你需要優化你的“軟件兵工廠”的時候,它們是一個好的起步。舉個例子,Git版本控制程序絕對值得吸引你的目光,因為你很可能會需要用到它,特別是當你與其他人(通常是程序員)一起參與一個大型項目的時候。你可以從圖9中看到它的操作界面和它的一些常用命令。
Git版本控制程序不算是最直觀的可用程序,但具有豐富的功能和高效的工作能力。
注意,Git有很多在主流操作系統下的圖形界面的插件。有一個在Windows操作系統下非常好的開源圖形界面插件叫Git擴展(Git Extensions),除此以外也還有許多在其他操作系統下運行得很好的Git圖形界面。這個特別的圖形界面插件讓Git變得更加直觀而且保留了它的命令提示行(但并不是每個Git圖形界面都提供這個功能)。
如果在這里忽略了Oracle SQL開發軟件,就簡直是有悖神明,因為它經常用于訪問公司Oracle數據庫中的結構化數據。盡管這個特別的軟件由于大數據技術的迅速擴張,在接下來的幾年內可能會不勝從前,但在做數據科學任務時,它仍然十分重要。你可以從圖10中看到Oracle SQL Developer 的截屏界面。
Oracle SQL Developer數據庫軟件是處理公司數據庫和數據倉庫中結構化數據的最佳搭配。
這個軟件最關鍵的部分就是SQL,所以為了使用它的全部潛力,你需要讓自己熟悉這種查詢語言。正如我們在前幾章中看到的那樣,這對數據科學家來說是一個非常有用的語言,即使你用得機會并不太多。這是因為它會以其他形式被使用到大數據的數據庫程序中。
當你從事數據科學工作時,一些其他需要熟悉的程序如下。
MS Excel是微軟Office套件中知名的電子表單應用。與其他的數據分析程序相比,Excel以其簡單到不可思議的特性,一直沿用到今天,并且在檢視csv(逗號分隔值,一組以逗號作為分隔符的數據值)文件形式的原始數據時遲早會派上用處(例如,創建分析結果報告的總結)。就像Office套件中的其他應用一樣,它是具有商業所有權的,盡管還有很多具有類似功能的免費替代方案(例如,Open Office 的Calc應用)。
MS Outlook是微軟Office套件中另一個同樣知名的程序,它被設計用來處理電子郵件、日歷、待做事宜以及聯系人信息。當然也有很多免費的備選程序,但經常被用于工作場合。如果你每天都要處理內部和外部通信、預約等,它會顯得非常有用。它也是具有商業所有權的軟件。
Eclipse如早先提及的那樣,這是面向對象語言以及其他編程語言(甚至是R)中最具人氣的IDE。它非常穩健直觀,使得編程的過程更加友好和高效。它是開源而且跨平臺的。
Emcien能夠處理復雜數據集,特別是半結構化數據和非數值類型時所使用的優秀的圖像分析程序。如果你對更高級的數據分析,特別是基于圖的分析感興趣的話,這是一個不容錯過的程序。它并不是一款其他數據分析程序的替代者,不過,它是具有商業所有權的。
Filezilla(或者其他的FTP客戶端程序)能夠傳輸大型文件或者在跨Internet進行文件傳輸時提供某一級別的安全性保障,此時這個程序就顯得非常有用。它是一個開源軟件。
7. 要點
數據科學家在日常工作中會利用各類工具,本章介紹了其中最具有代表性的,包括:Hadoop/Spark、面向對象編程語言(例如Java)、數據分析平臺(例如R)、可視化軟件以及一些輔助工具(例如GIT和Oracle)。此外還有一些公司和行業所需求的特定程序。
Hadoop是大數據軟件界的凱迪拉克,它的套件由幾類組件組成,包括文件系統(HDFS)、將數據分布到計算機集群的方法(MapReduce)、機器學習程序(Mahout)、編程語言(Pig)、數據庫程序(Hive、HBase等)、調度器(Oozie)、元數據和數據表管理框架(HCatalog)以及調試管理器和協同程序(Zookeeper)等。
Hadoop套件有很替代方案,例如Storm、Spark、BashReduce、Disco project,等等。
有幾款可以并行幫助Hadoop開展工作的程序:Drill、Julia、D3.js、以及Impala等。
作為數據科學家,你應該能處理至少一個面向對象語言,例如Java、C++、Ruby、Python、C#等。面向對象語言目前是分布最廣的編程語言范式,盡管最近有一股面向函數型語言的風潮涌動。
函數型編程語言(例如Clojure、OCaml、Clean、ML、Scala和Haskell)都是很優秀的資產,特別是如果你擅長編程而且想要擴展你的編程技能。
你必須對至少一種現下流行的分析工具極為熟悉,R、Matlab/Octave、SPS、SAS、Stata。其中只有R與Octave是開源的,而前者(R)是時下最為流行的選擇。
Tableau則是數據可視化軟件中的最好的選項,盡管還有類似于Spotfire、Qlikview、Brist、inZite、Prism和SAP Business Objects的工具。
集成大數據系統(例如IBM的BigInsights平臺)同樣值得去研究,因為它們使整體的數據科學流程更高效,同時將你從MapReduce所需的低層編程中解放出來。
其他一些程序值得你花時間去了解,GIT(或者其他的版本控制工具)、Oracle、MS Excel、MS Outloo、Eclipse、Emcien以及Filezilla(或者其他的FTP客戶端程序)。很自然地,你會的程序越多(即使沒有在本章中列舉),也就越牛,只要你對它們掌握得足夠好,它們也會在商業應用中展現出更大的價值。