一份語言選擇指南帶你玩數據科學,選出你心中支持的語言
隨著大數據時代的到來,網絡每天會產生大量的數據,一些行業會對這些數據進行分析並協助企業不斷地發展新業務、創建運營模式等,比如電子商務、推薦係統等。那麼誰對這些大數據進行分析呢?對應的工作領域是數據科學(Data Science),該領域需要結合先進的統計知識、定量分析能力和編程能力。涉及到編程,大家都會麵臨一個問題,有太多的編程語言可供選擇,那麼哪些編程語言適合數據科學領域呢?雖然沒有正確答案,但想成為一名成功的數據科學家將考慮以下幾點:
特異性
當涉及到先進的數據科學時,你將不僅僅是老瓶裝新酒了,需要學習掌握你所選擇的編程語言提供的特定領域的各種軟件包和模塊。
一般性
頂尖數據科學家將具有全麵良好的編程技巧以及處理大量數據的能力。科學數據家的日常工作大多是圍繞原始數據進行一些處理或數據清洗。
在快節奏的商業數據科學世界裏,一般要盡快完成這項工作。同時,這也使得技術債務蔓延——隻有明智的做法可以最小化它。
在某些情況下,優化代碼的性能顯得至關重要,尤其是在處理大量的關鍵任務數據時。編譯語言通常比解釋語言快得多;同樣,靜態類型語言比動態類型的故障要多得多。顯而易見,權衡這些會下降生產力。在某種程度上,這被看作是一個雙刃劍(一般性-特異性,性能-效率)。每一種語言都會麵臨這個問題。考慮到這些核心原則,讓我們看一下數據科學中使用的一些較流行的編程語言。以下是結合自己的個人經驗和研究,僅供參考!
R
你所需要知道的
R語言誕生於1980年左右的S語言的一個分支,目前該項目是由R語言統計計算基金會支持。
許可證
免費!
讚成的理由
- 開放的源碼軟件包,R語言有一個幾乎涵蓋所有的定量和統計應用程序的數據包,包括神經網絡、非線性回歸模型等;
- 基礎設施是非常全麵的、內置一些統計功能和方法,處理矩陣代數效果好。
- 數據可視化的能力很強,比如ggplot2;
反對的理由
- 性能方麵,R語言不是一個快速的語言;
- 領域特殊性,R語言對於統計和數據科學是很好的,但不適合通用程序設計;
- 孤僻,R語言有一些不同於其他編程語言的特點,例如:索引從1開始等;
裁決—— “為它的設計而精彩”
R語言是一個功能強大的語言,擅長各種統計和數據可視化的應用並開放源代碼。
Python
你所需要知道的
它由Guido van Rossum於1991年發明,已經成為一個非常流行的通用語言,並在數據科學界廣泛使用的。目前主要版本是目前3.6和2.7。
許可證
免費!
讚成的理由
- Python是一個受歡迎的主流通用程序設計語言,它有廣泛的目標模塊和社區支持及一些 API;
- Python是一種易學的語言;
-
一些軟件包如pandas、scikit-learn、tensorflow使得Python成為機器學習應用的不二選擇;
反對的理由
- 類型安全性:Python是動態類型語言,類型錯誤是不可預料的;
-
對於具體的數據統計和分析的目的,有更快和更安全的通用語言替代Python;
裁決——“優秀的全才”
Python語言對數據科學而言是一個很好的選擇。很多數據科學過程都圍繞ETL過程(提取、轉換和加載),這使得Python的通用性非常適合。還有一些庫比如tensorflow使Python在機器學習領域表現優異。
你所需要知道的
SQL(結構性查詢查詢語言)定義、管理和查詢關係數據庫。自1974以來發生了許多的改變,但核心原則保持不變。
許可證
不同—— 某些是免費的,其他是收費的!
讚成的理由
- 在查詢、更新和操縱數據庫非常高效;
- 聲明性語法使得SQL語言非常易讀,而且沒有什麼歧義;
-
SQL具有非常廣的應用範圍,使其成為一個非常熟悉的有用語言;
反對的理由
- SQL的分析能力是相當有限的——除了匯總、計數和平均數據等操作外,你的選擇是有限的;
- 對於來自命令式背景的程序員,對SQL的聲明性語法會呈現出一個學習遺忘曲線;
-
實現SQL有許多不同工具比如PostgreSQL、SQLite等,操作起來難免會“頭疼”;
裁決——“長期且高效”
SQL是有用的作為一個數據處理語言不是作為一種先進的分析工具。然而,大多數據科學過程依賴於ETL,SQL的長壽和效率證明了它對於現代數據科學家來說是一種非常有用的語言。
你所需要知道的
Java是一個非常受歡迎的通用型語言,運行在Java虛擬機(JVM)上,目前由甲骨文公司支持。
許可證
第8版——免費!舊版本是收費的。
讚成的理由
- 無處不在,許多現代的係統和應用程序都是建立在一個java後端;
- 強類型,Java語言確保類型安全;
-
Java是一種高性能、通用的匯編語言,這使得它適合於編寫高效的ETL生產代碼和計算密集型機器學習算法;
反對的理由
- 對於特定的分析和更專門的統計程序而言,Java的冗長使得它不太可能成為首選;
-
相比於特定領域語言如R語言,沒有大量的可供Java高級統計方法庫;
裁決——“數據科學的有力競爭者”
如果將Java作為第一選擇的數據科學語言而言,你會發現Java的高性能和類型安全的優勢。然而,你沒有考慮用於其他語言比如R或Python範圍的具體軟件包。
你所需要知道的
由Martin Odersky於2004年開發和發布,Scala運行在JVM的一種語言。它是一個多範式語言,支持麵向對象和函數方法。集群計算框架Apache Spark是用Scala寫的。
許可證
免費!
讚成的理由
- Scala與Spark結合相當於高性能集群計算,對於使用高容量數據集的研究者來說,Scala是一種理想的選擇;
- 多範式:Scala程序員可以兩全其美,因為Scala提供麵向對象和函數式編程範式;
-
Scala編譯成Java字節碼並運行在JVM上,使得它成為一個非常強大的通用型語言;
反對的理由
- Scala的建立和運行需要依賴於一些特定的集成開發環境,比如Eclipse、IntelliJ;
-
語法和類型係統描述複雜。這使得那些學過動態語言如Python學者來說較困難;
裁決——“適合於大數據”
當它涉及到使用集群計算處理大數據時,那麼Scala結合Spark是極好的解決方案,然而,如果你的應用程序不處理數據,Scala隻會增加複雜度。
你所需要知道的
Julia發布於5年前,它在數值計算領域留下了深刻的印象,幾個主要的組織早期采用它帶動了它的發展。
許可證
免費!
讚成的理由
- Julia是一個JIT(即時)編譯語言,這讓它提供了良好的性能,它還提供了像Python這樣的簡單、動態類型和腳本功能;
-
Julia專門設計用於數值分析,也能夠進行通用編程;
可讀性;
反對的理由
- 不成熟,作為一個新的語言,Julia的用戶者使用一些數據包時會不穩定,但核心語言本身穩定;
-
裁決——“明日之星”
Julia作為一種新興的語言,它不像Python和R語言那樣成熟,如果你願意耐心,可以關注它在未來幾年的發展。
你所需要知道的
MATLAB是一個在學術界和工業界應用的數值計算語言,由MathWorks公司於1984開發並投入市場。
許可證
專有——定價取決於你的使用情況
讚成的理由
- 為數值計算而設計。MATLAB非常適合複雜的數學要求,如信號處理、傅裏葉變換和圖像處理等;
- 數據可視化,MATLAB有一些強大的內置繪圖功能;
-
MATLAB經常作為工程數學與應用數學等本科課程的一部分,因此,MATLAB在這些領域得到廣泛應用;
反對的理由
- 專利許可證,根據使用情況(學術、個人或企業)可能要付昂貴的許可證,也有免費的替代品如Octave;
-
MATLAB不是通用編程的一個好選擇;
裁決——“最好用的數學密集型應用程序”
MATLAB在工業界和學術界被廣泛應用於定量和數值計算領域,使它成為數據科學一個重要選擇。當你的應用程序或日常的應用需要密集、高級的數學功能時,MATLAB是你的不二選擇。
還有其他的主流語言,數據科學家對這些可能感興趣,下麵讓我們快速的概述下!
C++
C++不是數據科學的共同選擇,原因很簡單,可能是一個生產力與效率的問題。
“如果你寫的代碼做一些是為了特定的分析,可能隻會運行這麼一次,你願意花30分鍾寫一個程序,運行10秒,或10分鍾寫一個程序,運行1分鍾嗎?”
這雖然有點道理,但是對於重要的生產級性能,C++是實現低級別優化的機器學習算法的極佳選擇。
裁決——“不適合日常工作,但適合性能關鍵時的應用”
隨著Node.js近年來的提升,JavaScript已經成為一個越來越重要的服務器端語言。然而,它在數據科學和機器學習領域的使用卻受到了限製,以下是其幾個缺點:
- 起步得晚(Node.js隻有8歲!);
- 很少有一些相關的科學數據庫和模塊可用,這意味著沒有真正主流的興趣或動力;
-
性能雖好,但JavaScript也得到許多批評;
Node的強項是在異步I/O,廣泛使用編譯到JavaScript語言,可以想象下這對數據科學和實時ETL處理結合是多麼的方便,但關鍵問題是這是否會與已經存在的東西有所不同。
裁決——“在JavaScript可以被視為一個重要的數據科學語言前還有許多工作要做”
Perl被稱為“瑞士軍刀的編程語言”,由於其作為一個通用腳本語言的通用性。它與Python有很多相似之處。但還沒有像Python在數據科學領域那樣流行。
考慮它在生物信息學等定量領域中的應用,這有點出人意料。當涉及到數據科學時,Perl有幾個主要缺點:表現不是太優異、語法不友好,在開發數據科學專用庫方麵沒有強的動力。在任何領域,動力都是關鍵。
裁決——“有用的通用腳本語言,但它沒有為你的數據科學的簡曆提供真正的優勢”
Ruby是一個通用的、動態類型的解釋型語言。然而,它沒有像Python那樣在數據科學上被廣泛采用。
這似乎很奇怪,但這很有可能是由於Python在學術界的主導地位,以及正反饋效應,使用Python的人越多,導致更多的模塊和框架被開發,同時會帶來更多的人轉向Python。雖然Sciruby項目帶來的科學計算功能,如矩陣代數,但隨著時間的推移,Python仍將引領潮流。
裁決——“對於數據科學而言,目前不是顯而易見的選擇,但這不會傷害你的簡曆”
通過以上內容,現在你有了一個關於考慮數據科學的語言的指南。關鍵是要從一般性和特異性理解你的使用需求,以及個人針對性能和生產力而言誰優先的開發風格。
針對以上的內容,或許你有一個完全不同的建議,如果是這樣的話,請在下麵留言 回複,我期待聽到你的回音。
Peter Glesson:數據科學、統計和編程方麵的作家
個人主頁:https://medium.freecodecamp.org/@petergleeson1
Linkedin:https://www.linkedin.com/in/peter-gleeson-874238140
本文由北郵@愛可可-愛生活老師推薦,阿裏雲雲棲社區組織翻譯。
文章原標題《Which Languages Should You Learn For Data Science?》,作者:Peter Glesson,譯者:海棠,審閱:
文章為簡譯,更為詳細的內容,請查看原文
最後更新:2017-09-04 11:32:49