數(shù)據(jù)處理的9大編程語言
有關(guān)大數(shù)據(jù)的話題一直很火熱。伴隨著信息的爆炸式增長(zhǎng),大數(shù)據(jù)滲透到了各行各業(yè),廣泛應(yīng)用于公司中,同時(shí)也使得傳統(tǒng)的軟件比如 Excel 看起來很笨拙。數(shù)據(jù)分析不再只是書呆子的事,同時(shí)其對(duì)高復(fù)雜性分析、實(shí)時(shí)處理的需求也比以往更加龐大。
那么篩選海量數(shù)據(jù)集最優(yōu)的工具是什么呢?我們咨詢了一些數(shù)據(jù)黑客關(guān)于他們?cè)跀?shù)據(jù)分析的核心工作中最喜歡的編程語言和工具包。
R 語言
這份名單如果不以 R 開頭,那就是徹頭徹尾的疏忽。自 1997 年起,作為一門免費(fèi)的,可替代 Matlab 或 SAS 等昂貴統(tǒng)計(jì)軟件的語言,R 被拋棄。
但是在過去的幾年中,它卻成了數(shù)據(jù)科學(xué)的寵兒—甚至成了統(tǒng)計(jì)學(xué)家、 華爾街交易員、生物學(xué)家和硅谷開發(fā)者必不可少的工具。 隨著其商業(yè)價(jià)值的不斷增長(zhǎng)和傳播,諸如谷歌、Facebook、 美國(guó)銀行和紐約時(shí)代周刊都在使用。
R 簡(jiǎn)單易用。通過 R ,短短幾行代碼就可以篩選復(fù)雜的數(shù)據(jù)集,通過成熟的模型函數(shù)處理數(shù)據(jù),制作精美的圖表進(jìn)行數(shù)據(jù)可視化。簡(jiǎn)直就是 Excel 的加強(qiáng)靈活版。
R 最大的價(jià)值就是圍繞其開發(fā)的活躍的生態(tài)圈: R 社區(qū)在持續(xù)不斷地向現(xiàn)存豐富的函數(shù)集增添新的包和特性。據(jù)估計(jì) R 的使用者已經(jīng)超過 200 萬人,最近的一項(xiàng)調(diào)查也顯示 R目前是數(shù)據(jù)科學(xué)領(lǐng)域最受歡迎的語言,大約 61% 的受訪者使用 R(第二名是 Python, 占比39%)。
在華爾街,R 的使用比例也在不斷增長(zhǎng)。美國(guó)銀行副總裁Niall O’Connor 說:“以往,分析員通常是熬夜研究 Excel 文件,但是現(xiàn)在 R 正被逐漸地應(yīng)用于金融建模,尤其是作為可視化工具。R 促使了表格化分析的出局。”
作為一門數(shù)據(jù)建模語言, R 正在走向成熟,盡管在公司需要大規(guī)模產(chǎn)品的時(shí)候 R 能力有限,也有些人說它已經(jīng)被其他語言替代了。
Metamarkets 公司的 CEO Michael Driscoll 說:“ R 擅長(zhǎng)的是勾畫,而不是搭建,在 Google 的 page rank 算法和 Facebook 的好友推薦算法實(shí)現(xiàn)的核心中是不會(huì)有 R 的。工程師會(huì)用 R 進(jìn)行原型設(shè)計(jì),再用 Java 或者 Python將其實(shí)現(xiàn)。”
Paul Butler 在 2010 年用 R 構(gòu)建了一個(gè)著名的 Facebook 世界地圖,證明了 R 在數(shù)據(jù)可視化上的強(qiáng)大能力。然而他并不經(jīng)常使用 R。
Butler 說:“由于在處理較大數(shù)據(jù)集時(shí)緩慢且笨拙,R 在行業(yè)中已經(jīng)有些淪為明日黃花了 ”
那么使用什么作為它的替代呢?看下去。
Python
如果 R 是個(gè)有點(diǎn)神經(jīng)質(zhì)的可愛的極客,那么 Python 就是它容易相處的歡快的表弟。融合了 R 快速成熟的數(shù)據(jù)挖掘能力以及更實(shí)際的產(chǎn)品構(gòu)建能力, Python 正迅速地獲得主流的呼聲。 Python 更直觀,且比 R 更易學(xué),近幾年其整體的生態(tài)系統(tǒng)發(fā)展也成長(zhǎng)得很快,使其在統(tǒng)計(jì)分析上的能力超越了之前的 R 語言。
Butler 說:“Python 是行業(yè)人員正在轉(zhuǎn)換發(fā)展的方向。過去兩年里,很明顯存在由 R 向 Python 轉(zhuǎn)化的趨勢(shì)”
在數(shù)據(jù)處理中,通常存在規(guī)模和技巧的權(quán)衡,Python 作為一個(gè)折中出現(xiàn)了。 IPython notebook 和NumPy 可以用于輕量工作的處理, 而 Python 則是中級(jí)規(guī)模數(shù)據(jù)處理的有力工具。豐富的數(shù)據(jù)交流社區(qū)也是 Python 的優(yōu)勢(shì),它提供了大量的Python 工具包和特性。
美國(guó)銀行利用 Python 開發(fā)新產(chǎn)品以及基礎(chǔ)設(shè)施接口,同時(shí)也用于處理金融數(shù)據(jù)。O’Donnell 說:“Python 用途寬廣且靈活,所以人們蜂擁而至”。
然而, Driscoll 也提到它并不是高性能的語言,偶爾才會(huì)用于裝配驅(qū)動(dòng)大規(guī)模的核心基礎(chǔ)設(shè)施。
JULIA
最主流的數(shù)據(jù)科學(xué)處理語言包括 R、 Python、 Java、 Matlab和 SAS。但是這些語言仍然存在一些不足之處,而Julia 正是待以觀察的新人。
對(duì)大規(guī)模商用來說, Julia 還是太晦澀了。但在談到其取代 R 和 Python 領(lǐng)先地位的潛力的時(shí)候,數(shù)據(jù)極客們都會(huì)變得很激動(dòng)。 Julia 是一門高級(jí)的,非常快的函數(shù)式語言。速度上比 R 快, 可能比 Python 的擴(kuò)展性更高,且相對(duì)易學(xué)。
Butler 說:“Julia 正在快速上升。最終將可以用 Julia 完成任何 R 和 Python 可以完成的事”。
如今的問題是 Julia 太“年輕”了。 其數(shù)據(jù)交流社區(qū)仍處在早期發(fā)展階段,在沒有足夠的包和工具之前是不足以與 R 和 Python 競(jìng)爭(zhēng)的。
Driscoll 說:“Julia 很年輕,但正在積攢力量而且未來很可觀”。
JAVA
在硅谷最大的科技公司里,Java 和基于 Java 的框架構(gòu)成了其底層的技術(shù)骨架。Driscoll 說:“如果深入觀察Twitter,Linkedin 或者 Facebook,你會(huì)發(fā)現(xiàn) Java 是他們公司數(shù)據(jù)引擎架構(gòu)的基礎(chǔ)語言”。
Java 并沒有 R 和 Python 那樣的數(shù)據(jù)可視化的能力, 同時(shí)也不是最好的用于統(tǒng)計(jì)模型的語言。但是如果需要進(jìn)行原型的基礎(chǔ)開發(fā)和構(gòu)建大規(guī)模系統(tǒng), Java 往往是最好的選擇。
HADOOP 和 HIVE
為了滿足數(shù)據(jù)處理的巨大需求,基于 Java 的工具群涌而現(xiàn)。 作為基于 Java 的框架,Hadoop 在批處理領(lǐng)域成為熱點(diǎn)。Hadoop 比其他處理工具速度要慢,但是它非常精確且被廣泛的應(yīng)用于后臺(tái)分析,它很好的融合了 Hive, 一個(gè)運(yùn)行在 Hadoop 上的基于查詢的框架。
SCALA
Scala 是另一個(gè)基于 Java的語言,和 Java 很相似,它正在逐漸成長(zhǎng)為大規(guī)模機(jī)器學(xué)習(xí)或高級(jí)算法的工具。它是函數(shù)式語言,也能夠構(gòu)建健壯的系統(tǒng)。
Driscoll 說:“Java 就像是直接用鋼筋進(jìn)行搭建, Scala 則像是在處理黏土原材料,可以將其放進(jìn)窖中燒制成鋼筋”。
KAFKA 和 STORM
當(dāng)需要快速、實(shí)時(shí)分析時(shí)怎么辦?Kafka 可以幫助你。它已經(jīng)發(fā)展了大概五年時(shí)間,但最近才成為一個(gè)流處理的流行框架。
Kafka 誕生于 Linkedin 公司的內(nèi)部項(xiàng)目,是一個(gè)快速查詢系統(tǒng)。至于 Kafka 的缺點(diǎn)呢? 它太快了,實(shí)時(shí)的操作也導(dǎo)致了自身的錯(cuò)誤,且偶爾還會(huì)遺失信息。
Driscoll 說:“在精度和速度之間總需要做權(quán)衡,所以硅谷所有的大公司一般都雙管齊下: 用 kafka 和 Storm 進(jìn)行實(shí)時(shí)處理,用 Hadoop 做批處理系統(tǒng),雖然會(huì)慢一點(diǎn)但卻十分精確”。
Storm 是另一個(gè)用 Scala 寫的框架,且它在硅谷以擅長(zhǎng)流處理而受到極大的關(guān)注。毫無疑問, Twitter, 一個(gè)對(duì)快速消息處理有著巨大興趣的公司會(huì)收購了 Storm。
榮幸的提到:
MATLAB
MATLAB 已經(jīng)存在很長(zhǎng)時(shí)間了,盡管價(jià)格昂貴,但它仍在某些特定領(lǐng)域被廣泛使用: 機(jī)器學(xué)習(xí)研究、信號(hào)處理、圖像識(shí)別等領(lǐng)域。
OCTAVE
Octave 與 Matlab 非常相似,只不過它是免費(fèi)的。然而除了信號(hào)處理的學(xué)術(shù)圈之外很少見到使用。
GO 是另外一個(gè)獲得關(guān)注的新手。它由 Google 開發(fā),與 C 有一定淵源,且在構(gòu)建穩(wěn)定系統(tǒng)方面與 Java 和 Python 展開了競(jìng)爭(zhēng)。