高盛最新調查:Python超過漢語成為未來最重要技能,你準備學哪種編程語言?

大數據文摘作品

作者:Peter Gleeson

編譯:白丁,吳雙,ether,魏子敏

如果讓你選擇一種語言,你覺得Python和中文,哪個對於未來更重要?

最近,一直以高素質實習生項目聞名的高盛集團發布了一份《2017高盛調查報告》,針對全球2500名在高盛的夏季實習生調查, 當問到你認為「哪個語言在未來會更重要」時,在被調查的全球2500名80、90後優秀年輕人中,72%選了Python

Python所代表的數據科學分析能力和編程能力正成為年輕人乃至整個世界最看好的熱門或者說必備技能。而除了Python,數據科學領域還有大把語言可以選擇,如何基於自己的需要選擇一門最適合自己的編程語言開始學習呢?

本篇文章將詳細對比解析數據科學領域最熱門的幾大「網紅」編程語言:R,Python,SQL,Java, Scala,Matlab,JavaScript,Ruby,並從優缺點、適用領域幾個方向讓你迅速了解自己最需要哪一款。

數據科學結合了高大上的統計、數量分析理論與實打實的編程能力,是一個讓人想想就有點小激動的工作領域。面對眾多編程語言,胸懷大志的數據科學家們在術業有專攻之前難免會有亂花漸欲迷人眼之感。

儘管不同選擇之間沒有高低對錯,但是有幾點是必須要考慮清楚的。你在數據科學家這條路上能走多遠取決於很多因素,具體包括:

深度

在高級數據科學的世界中,老調重彈是沒有前途的。選定語言後,努力把各種包和模型都吃透。決定你掌握程度的首要因素是你能接觸到哪些特定領域的包。

頂級數據科學家必須既是全面編程小能手,也是鼓搗數字神隊友。數據科學日常工作的很大一部分都圍繞著獲取、加工原始數據或「數據清理」,而那些牛逼閃閃的各種機器學習包在這裡都毫無用武之地。

數量

商用數據科學的步伐通常是快到飛起,因此出活兒快的好處簡直數不清。這也使得技術部門能夠悄悄地爭取一席之地,而只有靠譜的做法才能讓把工時降到最低。

質量

代碼效果最大化有時具有舉足輕重的意義,尤其是處理大批量關鍵數據的時候。編譯語言在速度上往往遠超解釋語言;無獨有偶,靜態類型語言的故障率也遠低於動態類型語言。顯而易見,質的提升是以量的減少為代價的。

從某種意義上講,我們可以畫出這樣一對軸線(廣度-深度;數量-質量)。下面列出的每種語言都可以在上述範圍內找到自己的位置。

心裡有譜之後,我們一起來看看這些數據科學語言中的「網紅」。下面的內容僅是本人及朋友、同事在研究和個人使用中總結出的數家之言,絕不是什麼標準答案。排序基本上是按照「網紅」程度來的,嘿喂狗~

1、R語言

簡介

R語言以老前輩S語言直系後裔的身份,於1995年閃亮登場,此後一路高歌猛進,從成功走向成功。該項目目前採用的語言包括C、Fortran和R,得到了統計計算R聯盟(R Foundation for Statistical Computing)的支持。

證書

免費噠!

優點

1、開源數據包質量過硬、領域明確、範圍廣泛。幾乎所有你能想到的數量、統計應用都能找到相應的R包,比如神經網路、非線性回歸、系統進化、進階繪圖等。

2、基礎安裝內置的統計功能和方法非常全面。此外,R語言尤其適合處理矩陣代數。

3、核心優勢之一就是利用ggplot2等各種R語言庫能夠實現數據視覺化。

缺點

1、質量。R語言比較慢,這是板上釘釘的。

2、領域特定。R語言在統計和數據科學領域如魚得水,但是在通用編程上就有些力不從心了。

3、不走尋常路。R語言的一些「小脾氣」可能會讓擅長其他語言的程序猿陰溝裡翻船。舉個栗子,採用多賦值運算從1開始索引,非傳統數據結構。

小結:本職崗位的尖兵

R語言功能強大,在眾多統計和數據可視化應用中表現出眾;開源更是帶來了大批活躍的貢獻者。最近一個時期R語言的走紅彰顯了它在「本職工作」上的優異表現。

2、Python語言

簡介

1991年,經Guido van Rossum(吉多·范羅蘇姆)推出後,Python就成為了通用語言中的大熱門,在數據科學社區中得到了廣泛應用。目前使用的主流版本是3.6和2.7。

證書

免費噠!

優點

1、極受歡迎的主流通用編程語言,模型種類多、適用範圍廣,有眾多社區支持。

2、許多在線服務都提供Python API。

3、上手簡單。低門檻使其成為菜鳥程序猿的理想「初戀」。

4、Pandas、scikit-learn和Tensorflow等包使Python在高級機器學習應用中也有很強的存在感。

缺點

1、型別安全:作為一個動態類型語言,Python時時刻刻求關注。類型錯誤(比如向心心念念期待著Integer的方法傳遞了一個String)差不多是家常便飯了。

2、對於特定的統計、數據分析問題,R包「海納百川」式的涵蓋範圍使其在面對Python時有那麼一丟丟優勢;但是談到通用語言,Python總能給你更快、更安全的選擇。

小結:哪裡需要哪裡搬的好手

Python是數據科學語言的上佳之選,對象絕不僅限於初學者。很多數據科學流程都圍繞著ETL(抽取-轉換-載入)展開,這與Python的通用性簡直是天作之合。諸如谷歌Tensorflow等庫更使得Python在機器學習領域大出風頭。

3、SQL語言

簡介

結構化查詢語言(SQL)是關係資料庫的定義者、管理者和查詢者。雖然自1974年面世後歷經多次實現,但核心原則從未改變。

證書

看情況-有些實現是免費的,有些受版權保護。

優點

1、在關係資料庫的查詢、升級和操作上效率極高。

2、聲明語法的使用讓SQL通常都具有極強的可讀性,比如「SELECT name FROM users WHERE age > 18」的意義就十分明確清晰。

3、SQL應用範圍廣泛,因此熟悉該語言還是很有用的。程序猿們利用諸如SQLAlchemy等模塊可以直接把SQL整合到其他語言中。

缺點

1、SQL的分析能力十分有限-除了求和、計數和求平均數,你也沒啥能選的。

2、具有命令式語言背景的程序猿可能需要一段時間來掌握SQL的聲明語法。

3、SQL具有眾多實現,比如PostgreSQL、SQLite和MariaDB等。這些實現的差異之大使得互操作性成為了一個頗為棘手的問題。

小結:高效的經典款

與其作為高級分析工具,SQL在數據處理上表現得更加得心應手。然而,數據科學工作的大頭都依賴於ETL,SQL的長盛不衰和簡明高效恰恰證明這是一門值得現代數據科學家了解掌握的有用語言。

4、Java語言

簡介

Java是在Java虛擬機上運行的一門非常受歡迎的通用語言。這個抽象計算系統能夠實現跨平台的無縫移植。目前有甲骨文公司支持該語言。

證書

第八版-免費噠!舊版本受版權保護。

優點

1、無處不在。很多現代系統和應用都建立在Java後台上。它能夠將數據科學的各種方法直接與現有的代碼庫整合;功能強大,你值得擁有。

2、強型別。需要確保型別安全時,Java單刀直入的風格對於那些至關重要的大數據應用而言簡直是無價之寶。

3、作為一種高質量、通用型編譯語言,Java非常適合編寫高效的ETL產品代碼和計算強大度的機器學習演算法。

缺點

1、Java冗長的代碼並不適合專門分析和更為細緻的統計應用。R和Python等動態類型語言的輸出顯然更勝一籌。

2、與R等領域明確的語言相比,Java並沒有太多適用於高級統計方法的的庫。

小結:數據科學的有力競爭者

把Java作為數據科學首選語言能夠帶來不少益處。將數據科學產品代碼與現有代碼庫直接無縫整合的能力是眾多公司夢寐以求的;你會發現,Java在此方面和型別安全上的優異表現是貨真價實的加分項。然而,面對其它語言時,你也不得不面對沒有各類統計特定包可用的現狀。儘管如此,Java仍然值得擁有-尤其是你已經掌握了R和/或Python的情況下。

5、Scala

簡介

由Martin Odersky開發,並於2004年發布,Scala是一種在JVM上運行的語言。 它是一種多範式語言,融合了面向對象和函數式編程。集群計算框架Apache Spark就是用Scala編寫的。

證書

免費!

優點

1、Scala + Spark =高性能集群計算。 Scala是使用大容量數據集的人的理想語言選擇。

2、多範式:Scala兼容面向對象和函數式編程,這使得Scala的程序員們兩種範例都可用。

3、Scala被編譯為Java位元組碼並在JVM上運行。 這使得其具有了與 Java語言本身的互操作性,使Scala成為非常強大的通用語言,同時也非常適合數據科學。

缺點

1、對於初學者來說Scala並不是一個簡單的編程語言來起步和運行。 你最好的選擇是下載sbt並使用特定的Scala插件設置Eclipse或IntelliJ等IDE。

2、其語法和類型系統通常被認為是比較複雜的。這為來自動態語言(如Python)的用戶提供了一個陡峭的學習曲線。

結論:完美,適合大數據

當使用集群計算來處理大數據時,Scala + Spark是非常棒的解決方案。 如果你有Java和其他靜態類語言的經驗,你也將會非常欣賞Scala的性能。然而,如果你的應用程序無法用來處理一定量的數據,這恰恰證明了Scala增加的複雜性,你可能會發現使用其他語言(如R或Python)的效率要高得多。

6、Julia

簡介

5年前發布的Julia在數值計算領域讓人印象深刻。由於幾家主要機構(多為金融行業)的早日採用,其形象得到了提升。

證書

免費!

優點

1、Julia是一種JIT(「準時」)的編譯語言,可以提供良好的性能。 它還提供像Python一樣簡單、 動態類型和腳本功能的解釋性編程語言。

2、Julia是專為數值分析而設計的。它也能夠進行通用編程。

3、可讀性。 該語言的許多用戶將此視為其主要優點。

缺點

1、成熟性。 作為一種新的語言,一些Julia的用戶在使用程序包時經歷了不穩定。但其核心語言本身據悉是足夠穩定,可運用的。

2、程序包數量有限是語言處於新生階段和開發社群較小的另一個後果。不像建立很長時間的R和Python,Julia目前在軟體包上還沒有太多的選擇性。

結論:它是未來

Julia的主要問題目前並不能過分苛責。作為最近開發的語言,它不像Python和R這些競品那樣成熟和生產就緒。但是,如果你願意耐心等待,那麼在未來幾年裡,我們有充分的理由去密切關注Julia的進一步發展。

7、MATLAB

簡介

MATLAB是在學界和業界廣泛使用的一種老牌數值計算語言。 它是由MathWorks公司開發和許可的,MathWorks成立於1984年,主營該軟體的商業化。

證書

專有的 - 定價根據用途而有所不同。

優點

1、專為數值計算而設計。MATLAB非常適合具有複雜數學要求的定量應用,如信號處理,傅里葉變換,矩陣代數和圖像處理。

2、數據可視化。 MATLAB有一些很好的內置繪圖功能。

3、MATLAB通常被作為諸如物理,工程和應用數學等量化類專業的本科課程的一部分。 因此,它在這些領域得到了廣泛應用。

缺點

1、專利許可。 根據用途(學術,個人或企業),你可能需要支付昂貴的許可證費用。 有免費的備選方案如Octave。 這是你需要認真考慮的問題。

2、MATLAB不是通用編程的明顯選擇。

結論:最適合數學需求高的應用

MATLAB在整個業界和學界的許多定量和數值研究領域的廣泛應用使其成為了數據科學的重要選擇。其明確的應用場景是當你的應用程序或日常角色需要大量的高級數學功能時,的確,MATLAB是專為此而設計的。

8、其他編程語言

還有一些數據科學家可能會也可能不會感興趣的其他主流語言。本節提供了一個快速的概述...當然有充足的論證空間!

C++

C ++並不是數據科學的常見選擇,儘管它具有運行速度快的性能和廣泛的主流流行度。其簡單的原因可能是生產力與性能的問題。

正如一個Quora用戶所說:

「如果你正在編寫代碼進行一些可能只運行一次的專項分析,你是願意花30分鐘的時間編寫一個將在10秒內運行的程序,還是在10分鐘內編寫一個將運行1分鐘的程序?」

這個小夥伴抓到了重點。然而,對於重要的生產級別性能而言,C ++將是實現在低級別機器學習演算法優化的絕佳選擇。

結論:不服務於日常工作,但如果性能表現是至關重要的...

JavaScript

隨著近年來Node.js的興起,JavaScript越來越成為重要的伺服器端語言。然而,它在數據科學和機器學習領域的使用已十分有限(不過可查看brain.js和synaptic.js!)。

它具有以下缺點

1、入局太晚(Node.js只有8歲!),意味著...

很少有相關的數據科學庫和模塊可用。 這意味著沒有引起真正的主流興趣或動力。

2、性能方面,Node.js很快。 但JavaScript作為一種語言並不是沒有它的槽點。

Node』s的優勢在於非同步I / O,其被廣泛使用,且存在於可編譯為JavaScript的語言中。 因此,可以想像,數據科學的有用框架和實時ETL處理可以結合在一起。關鍵問題是這是否會提供些新的特別之處。

結論:JavaScript距成為重要的數據科學語言還有很長的路要走

Perl

Perl被稱為「編程語言的瑞士軍刀」,得名於其作為通用腳本語言的多功能性。 它與Python有很多共同之處,同樣是一種動態類型的腳本語言。但是,在數據科學領域,它還沒有像Python一樣的人氣。

這看起來有點難以置信,尤其是如果你知道它在定量領域如生物信息學中的應用。 Perl在數據科學方面有幾個關鍵的缺點。它不是很突出,它的語法是不友好的。數據科學專用程序庫的開發並不像生物信息學那樣有大的進展。在任何領域,勢頭都是關鍵。

結論:一個有用的通用腳本語言,但它並不能給你的數據科學簡歷帶來真正的優勢

Ruby

Ruby是另一種通用的動態類型的解釋語言。然而,它並沒有在數據科學得到像Python一樣的應用。

這似乎是令人驚訝的,但可能是Python在學術界的主導地位和正面反饋效應的結果。 使用Python的人越多,開發的模塊和框架就越多,從而越來越多的人會轉而使用Python。SciRuby項目的存在是為了將如矩陣代數這樣的科學計算功能引入到Ruby中。但是目前來看,Python還是領先的。

結論: 對於數據科學來說目前還不是一個明顯的選擇,但對簡歷也沒什麼壞處

總結

好了,現在你有了一個數據科學領域編程語言選擇的快速指南。然而,選擇最合適語言的關鍵是,你要了解你使用需求的一般性與特殊性,以及你個人偏愛的基於性能與生產力平衡的開發風格。

我一般使用R,Python和SQL,因為我目前的角色主要側重於開發已有數據的流水線和ETL流程。這些語言可以平衡一般性和生產力來完成這項工作,並可以在需要時使用R的高級統計軟體包。

不過 – 也許你已經有了Java的經驗, 或者你可能想使用Scala來處理大數據。 或者,你熱衷於參與Julia項目。

也許你在大學學過MATLAB,也許你還想給SciRuby一個機會? 或者你有一個完全不同的建議! 如果是這樣,請在下面回復 - 我期待著你的聲音!


推薦閱讀:

大數據如何入行?
銀行客戶融合與數據資產變現
Gartner2017年BI研究計劃曝光,來看看他研究的都是啥?
起航~~~初見Scala
Windows 的觸控板沒用?我教你這樣用好它|有用功

TAG:Python | 大数据 | 高盛GoldmanSachs |