【我們為什麼挑選這篇文章】Python、R 在資料科學家領域已經是兩個比較成熟的程式語言,包含了資源找尋與相關的程式庫支援都已經很完整。不過除了這兩個之外,你也許有處理大數據的需求,就必須需要認識 Scala;Julia 作為資料處理界的超新星最好也可以理解一下。
最後還是要再次叮嚀大家,選擇程式語言仍端看自己的需求與適用性,千萬不要跟風!(責任編輯:陳君毅)
如果讓你選擇一種語言,你覺得 Python 和中文,哪個對於未來更重要?
最近,一直以高素質實習生項目聞名的高盛集團發布了一份《2017 高盛調查報告》,針對全球 2,500 名在高盛的夏季實習生調查,當問到你認為「哪個語言在未來會更重要」時,在被調查的全球 2,500 名 80、90 後優秀年輕人中,72% 選了 Python。
Python 所代表的數據科學分析能力和編程能力正成為年輕人乃至整個世界最看好的熱門,或者說必備技能。而除了 Python,數據科學領域還有大把語言可以選擇,如何基於自己的需要選擇一門最適合自己的編程語言開始學習呢?
本篇文章將詳細對比解析數據科學領域最熱門的幾大「網紅」編程語言:R、Python、SQL、Java、Scala、Matlab、JavaScript、Ruby,並從優缺點、適用領域幾個方向讓你迅速了解自己最需要哪一款。
必須考慮的三個面向:深度、處理速度、質量
數據科學結合了統計、數量分析理論與實務的編程能力,是一個讓人想想就有點小激動的工作領域。面對眾多編程語言,胸懷大志的數據科學家們在術業有專攻之前難免會有亂花漸欲迷人眼之感。
儘管不同選擇之間沒有高低對錯,在數據科學家這條路上能走多遠取決於很多因素,具體包括:
(1) 深度
在高級數據科學的世界中,老調重彈是沒有前途的。選定語言後,努力把各種包和模型都吃透。決定你掌握程度的首要因素是你能接觸到哪些特定領域的包。
頂級數據科學家必須既是全面編程小能手,也是鼓搗數字神隊友。數據科學日常工作的很大一部分都圍繞著獲取、加工原始數據或「數據清理」,而那些牛逼閃閃的各種機器學習包在這裡都毫無用武之地。
(2) 處理速度
商用數據科學的步伐通常是快到飛起,因此工作速度快的好處簡直數不清。這也使得技術部門能夠悄悄地爭取一席之地,而只有靠譜的做法才能讓把工時降到最低。
(3) 質量
代碼效果最大化有時具有舉足輕重的意義,尤其是處理大批量關鍵數據的時候。編譯語言在速度上往往遠超解釋語言;無獨有偶,靜態類型語言的故障率也遠低於動態類型語言。顯而易見,質的提升是以量的減少為代價的。
從某種意義上講,我們可以畫出這樣一對軸線(廣度-深度;數量-質量)。下面列出的每種語言都可以在上述範圍內找到自己的位置。
心裡有譜之後,我們一起來看看這些數據科學語言中的「網紅」。下面的內容僅是本人及朋友、同事在研究和個人使用中總結出的數家之言,絕不是什麼標準答案。排序基本上是按照「網紅」程度來排序的。
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 的通用性簡直是天作之合。諸如 Google 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 目前在軟件包上還沒有太多的選擇性。
結論
作為最近開發的語言,它不像 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 的優勢在於異步 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 一個機會?
——
(本文經 大數據文摘 授權轉載 ,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈高盛最新調查:Python 超過漢語成為未來最重要技能,你準備學哪種編程語言?〉。圖片來源:Pixabay, CC Licensed。)
延伸閱讀
想學 coding 就從 Python 開始!超 Java 趕 C++,Python 登上最受歡迎程式語言
【寫啥語言與國家經濟有關?】高收入國家喜歡 R、Python;低收入國家喜歡 PHP 與 Android 開發
附範例與完整程式碼!手把手帶著你用 Python 做出爬蟲、抓取網頁資料