來源:大數(shù)據(jù)文摘 時(shí)間:2017-09-25 15:20:06 作者:Peter Gleeson
如果讓你選擇一種語言,你覺得Python和中文,哪個(gè)對(duì)于未來更重要?
最近,一直以高素質(zhì)實(shí)習(xí)生項(xiàng)目聞名的高盛集團(tuán)發(fā)布了一份《2017高盛調(diào)查報(bào)告》,針對(duì)全球2500名在高盛的夏季實(shí)習(xí)生調(diào)查, 當(dāng)問到你認(rèn)為“哪個(gè)語言在未來會(huì)更重要”時(shí),在被調(diào)查的全球2500名80、90后優(yōu)秀年輕人中,72%選了Python。
Python所代表的數(shù)據(jù)科學(xué)分析能力和編程能力正成為年輕人乃至整個(gè)世界最看好的熱門或者說必備技能。而除了Python,數(shù)據(jù)科學(xué)領(lǐng)域還有大把語言可以選擇,如何基于自己的需要選擇一門最適合自己的編程語言開始學(xué)習(xí)呢?
本篇文章將詳細(xì)對(duì)比解析數(shù)據(jù)科學(xué)領(lǐng)域最熱門的幾大“網(wǎng)紅”編程語言:R,Python,SQL,Java, Scala,Matlab,JavaScript,Ruby,并從優(yōu)缺點(diǎn)、適用領(lǐng)域幾個(gè)方向讓你迅速了解自己最需要哪一款。
數(shù)據(jù)科學(xué)結(jié)合了高大上的統(tǒng)計(jì)、數(shù)量分析理論與實(shí)打?qū)嵉木幊棠芰?,是一個(gè)讓人想想就有點(diǎn)小激動(dòng)的工作領(lǐng)域。面對(duì)眾多編程語言,胸懷大志的數(shù)據(jù)科學(xué)家們?cè)谛g(shù)業(yè)有專攻之前難免會(huì)有亂花漸欲迷人眼之感。
盡管不同選擇之間沒有高低對(duì)錯(cuò),但是有幾點(diǎn)是必須要考慮清楚的。你在數(shù)據(jù)科學(xué)家這條路上能走多遠(yuǎn)取決于很多因素,具體包括:
深度
在高級(jí)數(shù)據(jù)科學(xué)的世界中,老調(diào)重彈是沒有前途的。選定語言后,努力把各種包和模型都吃透。決定你掌握程度的首要因素是你能接觸到哪些特定領(lǐng)域的包。
頂級(jí)數(shù)據(jù)科學(xué)家必須既是全面編程小能手,也是鼓搗數(shù)字神隊(duì)友。數(shù)據(jù)科學(xué)日常工作的很大一部分都圍繞著獲取、加工原始數(shù)據(jù)或“數(shù)據(jù)清理”,而那些牛逼閃閃的各種機(jī)器學(xué)習(xí)包在這里都毫無用武之地。
數(shù)量
商用數(shù)據(jù)科學(xué)的步伐通常是快到飛起,因此出活兒快的好處簡(jiǎn)直數(shù)不清。這也使得技術(shù)部門能夠悄悄地爭(zhēng)取一席之地,而只有靠譜的做法才能讓把工時(shí)降到最低。
質(zhì)量
代碼效果最大化有時(shí)具有舉足輕重的意義,尤其是處理大批量關(guān)鍵數(shù)據(jù)的時(shí)候。編譯語言在速度上往往遠(yuǎn)超解釋語言;無獨(dú)有偶,靜態(tài)類型語言的故障率也遠(yuǎn)低于動(dòng)態(tài)類型語言。顯而易見,質(zhì)的提升是以量的減少為代價(jià)的。
從某種意義上講,我們可以畫出這樣一對(duì)軸線(廣度-深度;數(shù)量-質(zhì)量)。下面列出的每種語言都可以在上述范圍內(nèi)找到自己的位置。
心里有譜之后,我們一起來看看這些數(shù)據(jù)科學(xué)語言中的“網(wǎng)紅”。下面的內(nèi)容僅是本人及朋友、同事在研究和個(gè)人使用中總結(jié)出的數(shù)家之言,絕不是什么標(biāo)準(zhǔn)答案。排序基本上是按照“網(wǎng)紅”程度來的,嘿喂狗~
1.R語言
簡(jiǎn)介
R語言以老前輩S語言直系后裔的身份,于1995年閃亮登場(chǎng),此后一路高歌猛進(jìn),從成功走向成功。該項(xiàng)目目前采用的語言包括C、Fortran和R,得到了統(tǒng)計(jì)計(jì)算R聯(lián)盟(R Foundation for Statistical Computing)的支持。
證書
免費(fèi)噠!
優(yōu)點(diǎn)
1、開源數(shù)據(jù)包質(zhì)量過硬、領(lǐng)域明確、范圍廣泛。幾乎所有你能想到的數(shù)量、統(tǒng)計(jì)應(yīng)用都能找到相應(yīng)的R包,比如神經(jīng)網(wǎng)絡(luò)、非線性回歸、系統(tǒng)進(jìn)化、進(jìn)階繪圖等。
2、基礎(chǔ)安裝內(nèi)置的統(tǒng)計(jì)功能和方法非常全面。此外,R語言尤其適合處理矩陣代數(shù)。
3、核心優(yōu)勢(shì)之一就是利用ggplot2等各種R語言庫(kù)能夠?qū)崿F(xiàn)數(shù)據(jù)視覺化。
缺點(diǎn)
1、質(zhì)量。R語言比較慢,這是板上釘釘?shù)摹?/p>
2、領(lǐng)域特定。R語言在統(tǒng)計(jì)和數(shù)據(jù)科學(xué)領(lǐng)域如魚得水,但是在通用編程上就有些力不從心了。
3、不走尋常路。R語言的一些“小脾氣”可能會(huì)讓擅長(zhǎng)其他語言的程序猿陰溝里翻船。舉個(gè)栗子,采用多賦值運(yùn)算從1開始索引,非傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)。
小結(jié):本職崗位的尖兵
R語言功能強(qiáng)大,在眾多統(tǒng)計(jì)和數(shù)據(jù)可視化應(yīng)用中表現(xiàn)出眾;開源更是帶來了大批活躍的貢獻(xiàn)者。最近一個(gè)時(shí)期R語言的走紅彰顯了它在“本職工作”上的優(yōu)異表現(xiàn)。
2.Python語言
簡(jiǎn)介
1991年,經(jīng)Guido van Rossum(吉多·范羅蘇姆)推出后,Python就成為了通用語言中的大熱門,在數(shù)據(jù)科學(xué)社區(qū)中得到了廣泛應(yīng)用。目前使用的主流版本是3.6和2.7。
證書
免費(fèi)噠!
優(yōu)點(diǎn)
1、極受歡迎的主流通用編程語言,模型種類多、適用范圍廣,有眾多社區(qū)支持。
2、許多在線服務(wù)都提供Python API。
3、上手簡(jiǎn)單。低門檻使其成為菜鳥程序猿的理想“初戀”。
4、Pandas、scikit-learn和Tensorflow等包使Python在高級(jí)機(jī)器學(xué)習(xí)應(yīng)用中也有很強(qiáng)的存在感。
缺點(diǎn)
1、型別安全:作為一個(gè)動(dòng)態(tài)類型語言,Python時(shí)時(shí)刻刻求關(guān)注。類型錯(cuò)誤(比如向心心念念期待著Integer的方法傳遞了一個(gè)String)差不多是家常便飯了。
2、對(duì)于特定的統(tǒng)計(jì)、數(shù)據(jù)分析問題,R包“海納百川”式的涵蓋范圍使其在面對(duì)Python時(shí)有那么一丟丟優(yōu)勢(shì);但是談到通用語言,Python總能給你更快、更安全的選擇。
小結(jié):哪里需要哪里搬的好手
Python是數(shù)據(jù)科學(xué)語言的上佳之選,對(duì)象絕不僅限于初學(xué)者。很多數(shù)據(jù)科學(xué)流程都圍繞著ETL(抽取-轉(zhuǎn)換-加載)展開,這與Python的通用性簡(jiǎn)直是天作之合。諸如谷歌Tensorflow等庫(kù)更使得Python在機(jī)器學(xué)習(xí)領(lǐng)域大出風(fēng)頭。
3.SQL語言
簡(jiǎn)介
結(jié)構(gòu)化查詢語言(SQL)是關(guān)系數(shù)據(jù)庫(kù)的定義者、管理者和查詢者。雖然自1974年面世后歷經(jīng)多次實(shí)現(xiàn),但核心原則從未改變。
證書
看情況-有些實(shí)現(xiàn)是免費(fèi)的,有些受版權(quán)保護(hù)。
優(yōu)點(diǎn)
1、在關(guān)系數(shù)據(jù)庫(kù)的查詢、升級(jí)和操作上效率極高。
2、聲明語法的使用讓SQL通常都具有極強(qiáng)的可讀性,比如“SELECT name FROM users WHERE age > 18”的意義就十分明確清晰。
3、SQL應(yīng)用范圍廣泛,因此熟悉該語言還是很有用的。程序猿們利用諸如SQLAlchemy等模塊可以直接把SQL整合到其他語言中。
缺點(diǎn)
1、SQL的分析能力十分有限-除了求和、計(jì)數(shù)和求平均數(shù),你也沒啥能選的。
2、具有命令式語言背景的程序猿可能需要一段時(shí)間來掌握SQL的聲明語法。
3、SQL具有眾多實(shí)現(xiàn),比如PostgreSQL、SQLite和MariaDB等。這些實(shí)現(xiàn)的差異之大使得互操作性成為了一個(gè)頗為棘手的問題。
小結(jié):高效的經(jīng)典款
與其作為高級(jí)分析工具,SQL在數(shù)據(jù)處理上表現(xiàn)得更加得心應(yīng)手。然而,數(shù)據(jù)科學(xué)工作的大頭都依賴于ETL,SQL的長(zhǎng)盛不衰和簡(jiǎn)明高效恰恰證明這是一門值得現(xiàn)代數(shù)據(jù)科學(xué)家了解掌握的有用語言。
4.Java語言
簡(jiǎn)介
Java是在Java虛擬機(jī)上運(yùn)行的一門非常受歡迎的通用語言。這個(gè)抽象計(jì)算系統(tǒng)能夠?qū)崿F(xiàn)跨平臺(tái)的無縫移植。目前有甲骨文公司支持該語言。
證書
第八版-免費(fèi)噠!舊版本受版權(quán)保護(hù)。
優(yōu)點(diǎn)
1、無處不在。很多現(xiàn)代系統(tǒng)和應(yīng)用都建立在Java后臺(tái)上。它能夠?qū)?shù)據(jù)科學(xué)的各種方法直接與現(xiàn)有的代碼庫(kù)整合;功能強(qiáng)大,你值得擁有。
2、強(qiáng)型別。需要確保型別安全時(shí),Java單刀直入的風(fēng)格對(duì)于那些至關(guān)重要的大數(shù)據(jù)應(yīng)用而言簡(jiǎn)直是無價(jià)之寶。
3、作為一種高質(zhì)量、通用型編譯語言,Java非常適合編寫高效的ETL產(chǎn)品代碼和計(jì)算強(qiáng)大度的機(jī)器學(xué)習(xí)算法。
缺點(diǎn)
1、Java冗長(zhǎng)的代碼并不適合專門分析和更為細(xì)致的統(tǒng)計(jì)應(yīng)用。R和Python等動(dòng)態(tài)類型語言的輸出顯然更勝一籌。
2、與R等領(lǐng)域明確的語言相比,Java并沒有太多適用于高級(jí)統(tǒng)計(jì)方法的的庫(kù)。
小結(jié):數(shù)據(jù)科學(xué)的有力競(jìng)爭(zhēng)者
把Java作為數(shù)據(jù)科學(xué)首選語言能夠帶來不少益處。將數(shù)據(jù)科學(xué)產(chǎn)品代碼與現(xiàn)有代碼庫(kù)直接無縫整合的能力是眾多公司夢(mèng)寐以求的;你會(huì)發(fā)現(xiàn),Java在此方面和型別安全上的優(yōu)異表現(xiàn)是貨真價(jià)實(shí)的加分項(xiàng)。然而,面對(duì)其它語言時(shí),你也不得不面對(duì)沒有各類統(tǒng)計(jì)特定包可用的現(xiàn)狀。盡管如此,Java仍然值得擁有-尤其是你已經(jīng)掌握了R和/或Python的情況下。
5.Scala
簡(jiǎn)介
由Martin Odersky開發(fā),并于2004年發(fā)布,Scala是一種在JVM上運(yùn)行的語言。 它是一種多范式語言,融合了面向?qū)ο蠛秃瘮?shù)式編程。集群計(jì)算框架Apache Spark就是用Scala編寫的。
證書
免費(fèi)!
優(yōu)點(diǎn)
1、Scala + Spark =高性能集群計(jì)算。 Scala是使用大容量數(shù)據(jù)集的人的理想語言選擇。
2、多范式:Scala兼容面向?qū)ο蠛秃瘮?shù)式編程,這使得Scala的程序員們兩種范例都可用。
3、Scala被編譯為Java字節(jié)碼并在JVM上運(yùn)行。 這使得其具有了與 Java語言本身的互操作性,使Scala成為非常強(qiáng)大的通用語言,同時(shí)也非常適合數(shù)據(jù)科學(xué)。
缺點(diǎn)
1、對(duì)于初學(xué)者來說Scala并不是一個(gè)簡(jiǎn)單的編程語言來起步和運(yùn)行。 你最好的選擇是下載sbt并使用特定的Scala插件設(shè)置Eclipse或IntelliJ等IDE。
2、其語法和類型系統(tǒng)通常被認(rèn)為是比較復(fù)雜的。這為來自動(dòng)態(tài)語言(如Python)的用戶提供了一個(gè)陡峭的學(xué)習(xí)曲線。
結(jié)論:完美,適合大數(shù)據(jù)
當(dāng)使用集群計(jì)算來處理大數(shù)據(jù)時(shí),Scala + Spark是非常棒的解決方案。 如果你有Java和其他靜態(tài)類語言的經(jīng)驗(yàn),你也將會(huì)非常欣賞Scala的性能。然而,如果你的應(yīng)用程序無法用來處理一定量的數(shù)據(jù),這恰恰證明了Scala增加的復(fù)雜性,你可能會(huì)發(fā)現(xiàn)使用其他語言(如R或Python)的效率要高得多。
6.Julia
簡(jiǎn)介
5年前發(fā)布的Julia在數(shù)值計(jì)算領(lǐng)域讓人印象深刻。由于幾家主要機(jī)構(gòu)(多為金融行業(yè))的早日采用,其形象得到了提升。
證書
免費(fèi)!
優(yōu)點(diǎn)
1、Julia是一種JIT(“準(zhǔn)時(shí)”)的編譯語言,可以提供良好的性能。 它還提供像Python一樣簡(jiǎn)單、 動(dòng)態(tài)類型和腳本功能的解釋性編程語言。
2、Julia是專為數(shù)值分析而設(shè)計(jì)的。它也能夠進(jìn)行通用編程。
3、可讀性。 該語言的許多用戶將此視為其主要優(yōu)點(diǎn)。
缺點(diǎn)
1、成熟性。 作為一種新的語言,一些Julia的用戶在使用程序包時(shí)經(jīng)歷了不穩(wěn)定。但其核心語言本身?yè)?jù)悉是足夠穩(wěn)定,可運(yùn)用的。
2、程序包數(shù)量有限是語言處于新生階段和開發(fā)社群較小的另一個(gè)后果。不像建立很長(zhǎng)時(shí)間的R和Python,Julia目前在軟件包上還沒有太多的選擇性。
結(jié)論:它是未來
Julia的主要問題目前并不能過分苛責(zé)。作為最近開發(fā)的語言,它不像Python和R這些競(jìng)品那樣成熟和生產(chǎn)就緒。但是,如果你愿意耐心等待,那么在未來幾年里,我們有充分的理由去密切關(guān)注Julia的進(jìn)一步發(fā)展。
7.MATLAB
簡(jiǎn)介
MATLAB是在學(xué)界和業(yè)界廣泛使用的一種老牌數(shù)值計(jì)算語言。 它是由MathWorks公司開發(fā)和許可的,MathWorks成立于1984年,主營(yíng)該軟件的商業(yè)化。
證書
專有的 - 定價(jià)根據(jù)用途而有所不同。
優(yōu)點(diǎn)
1、專為數(shù)值計(jì)算而設(shè)計(jì)。MATLAB非常適合具有復(fù)雜數(shù)學(xué)要求的定量應(yīng)用,如信號(hào)處理,傅里葉變換,矩陣代數(shù)和圖像處理。
2、數(shù)據(jù)可視化。 MATLAB有一些很好的內(nèi)置繪圖功能。
3、MATLAB通常被作為諸如物理,工程和應(yīng)用數(shù)學(xué)等量化類專業(yè)的本科課程的一部分。 因此,它在這些領(lǐng)域得到了廣泛應(yīng)用。
缺點(diǎn)
1、專利許可。 根據(jù)用途(學(xué)術(shù),個(gè)人或企業(yè)),你可能需要支付昂貴的許可證費(fèi)用。 有免費(fèi)的備選方案如Octave。 這是你需要認(rèn)真考慮的問題。
2、MATLAB不是通用編程的明顯選擇。
結(jié)論:最適合數(shù)學(xué)需求高的應(yīng)用
MATLAB在整個(gè)業(yè)界和學(xué)界的許多定量和數(shù)值研究領(lǐng)域的廣泛應(yīng)用使其成為了數(shù)據(jù)科學(xué)的重要選擇。其明確的應(yīng)用場(chǎng)景是當(dāng)你的應(yīng)用程序或日常角色需要大量的高級(jí)數(shù)學(xué)功能時(shí),的確,MATLAB是專為此而設(shè)計(jì)的。
8.其他編程語言
還有一些數(shù)據(jù)科學(xué)家可能會(huì)也可能不會(huì)感興趣的其他主流語言。本節(jié)提供了一個(gè)快速的概述...當(dāng)然有充足的論證空間!
C++
C ++并不是數(shù)據(jù)科學(xué)的常見選擇,盡管它具有運(yùn)行速度快的性能和廣泛的主流流行度。其簡(jiǎn)單的原因可能是生產(chǎn)力與性能的問題。
正如一個(gè)Quora用戶所說:
“如果你正在編寫代碼進(jìn)行一些可能只運(yùn)行一次的專項(xiàng)分析,你是愿意花30分鐘的時(shí)間編寫一個(gè)將在10秒內(nèi)運(yùn)行的程序,還是在10分鐘內(nèi)編寫一個(gè)將運(yùn)行1分鐘的程序?”
這個(gè)小伙伴抓到了重點(diǎn)。然而,對(duì)于重要的生產(chǎn)級(jí)別性能而言,C ++將是實(shí)現(xiàn)在低級(jí)別機(jī)器學(xué)習(xí)算法優(yōu)化的絕佳選擇。
結(jié)論:不服務(wù)于日常工作,但如果性能表現(xiàn)是至關(guān)重要的...
JavaScript
隨著近年來Node.js的興起,JavaScript越來越成為重要的服務(wù)器端語言。然而,它在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域的使用已十分有限(不過可查看brain.js和synaptic.js?。?/p>
它具有以下缺點(diǎn):
1、入局太晚(Node.js只有8歲?。?,意味著...
很少有相關(guān)的數(shù)據(jù)科學(xué)庫(kù)和模塊可用。 這意味著沒有引起真正的主流興趣或動(dòng)力。
2、性能方面,Node.js很快。 但JavaScript作為一種語言并不是沒有它的槽點(diǎn)。
Node’s的優(yōu)勢(shì)在于異步I / O,其被廣泛使用,且存在于可編譯為JavaScript的語言中。 因此,可以想象,數(shù)據(jù)科學(xué)的有用框架和實(shí)時(shí)ETL處理可以結(jié)合在一起。關(guān)鍵問題是這是否會(huì)提供些新的特別之處。
結(jié)論:JavaScript距成為重要的數(shù)據(jù)科學(xué)語言還有很長(zhǎng)的路要走
Perl
Perl被稱為“編程語言的瑞士軍刀”,得名于其作為通用腳本語言的多功能性。 它與Python有很多共同之處,同樣是一種動(dòng)態(tài)類型的腳本語言。但是,在數(shù)據(jù)科學(xué)領(lǐng)域,它還沒有像Python一樣的人氣。
這看起來有點(diǎn)難以置信,尤其是如果你知道它在定量領(lǐng)域如生物信息學(xué)中的應(yīng)用。 Perl在數(shù)據(jù)科學(xué)方面有幾個(gè)關(guān)鍵的缺點(diǎn)。它不是很突出,它的語法是不友好的。數(shù)據(jù)科學(xué)專用程序庫(kù)的開發(fā)并不像生物信息學(xué)那樣有大的進(jìn)展。在任何領(lǐng)域,勢(shì)頭都是關(guān)鍵。
結(jié)論:一個(gè)有用的通用腳本語言,但它并不能給你的數(shù)據(jù)科學(xué)簡(jiǎn)歷帶來真正的優(yōu)勢(shì)
Ruby
Ruby是另一種通用的動(dòng)態(tài)類型的解釋語言。然而,它并沒有在數(shù)據(jù)科學(xué)得到像Python一樣的應(yīng)用。
這似乎是令人驚訝的,但可能是Python在學(xué)術(shù)界的主導(dǎo)地位和正面反饋效應(yīng)的結(jié)果。 使用Python的人越多,開發(fā)的模塊和框架就越多,從而越來越多的人會(huì)轉(zhuǎn)而使用Python。SciRuby項(xiàng)目的存在是為了將如矩陣代數(shù)這樣的科學(xué)計(jì)算功能引入到Ruby中。但是目前來看,Python還是領(lǐng)先的。
結(jié)論: 對(duì)于數(shù)據(jù)科學(xué)來說目前還不是一個(gè)明顯的選擇,但對(duì)簡(jiǎn)歷也沒什么壞處
總結(jié)
好了,現(xiàn)在你有了一個(gè)數(shù)據(jù)科學(xué)領(lǐng)域編程語言選擇的快速指南。然而,選擇最合適語言的關(guān)鍵是,你要了解你使用需求的一般性與特殊性,以及你個(gè)人偏愛的基于性能與生產(chǎn)力平衡的開發(fā)風(fēng)格。
我一般使用R,Python和SQL,因?yàn)槲夷壳暗慕巧饕獋?cè)重于開發(fā)已有數(shù)據(jù)的流水線和ETL流程。這些語言可以平衡一般性和生產(chǎn)力來完成這項(xiàng)工作,并可以在需要時(shí)使用R的高級(jí)統(tǒng)計(jì)軟件包。
不過 – 也許你已經(jīng)有了Java的經(jīng)驗(yàn), 或者你可能想使用Scala來處理大數(shù)據(jù)。 或者,你熱衷于參與Julia項(xiàng)目。
也許你在大學(xué)學(xué)過MATLAB,也許你還想給SciRuby一個(gè)機(jī)會(huì)? 或者你有一個(gè)完全不同的建議! 如果是這樣,請(qǐng)?jiān)谙旅婊貜?fù) - 我期待著你的聲音!
作者:Peter Gleeson
編譯:白丁 吳雙 ether 魏子敏
???(原標(biāo)題:高盛最新調(diào)查:Python超過漢語成為未來最重要技能,你準(zhǔn)備學(xué)哪種編程語言?)
責(zé)任編輯:陳近梅