大數據的浪潮仍在繼續。它滲透到了幾乎全部的行業,信息像洪水同樣地席捲企業,使得軟件愈加龐然大物,好比Excel看上去就變得愈來愈笨拙。數據處理再也不無足輕重,而且對精密分析和強大又實時處理的須要變得史無前例的巨大。算法
剛開始學習數據科學的人都會面對同一個問題:編程
不知道該先學習哪一種編程語言。後端
不只僅是編程語言,像Tableau,SPSS等軟件系統也是一樣的狀況。有愈來愈多的工具和編程語言,很難知道該選擇哪種。架構
事實是,你的時間有限。學習一門新的編程語言至關於一項巨大的投資,所以在選擇語言時須要有戰略性。框架
很明顯,一些語言會給你的投資帶來很高的回報(付出的時間和金錢投資)。然而其餘語言多是你每一年只用幾回的純粹輔助工具。機器學習
我給你的建議就是:先學習R語言編程語言
專一於一種語言工具
在說明爲何你應該學習R語言以前,我想強調的是,在開始學習數據科學時,你應該學習一種語言。oop
有些人問我是否應該學習在學R語言的同時學習Python。個人答案基本上是否認的,除非你須要使用一種以上的語言,不然你應該選擇一種語言進行學習。性能
專一於一種編程語言的緣由是,你須要更多地關注過程和技術,而不是語法。你須要掌握如何經過數據科學工具來分析數據,以及如何解決問題。事實證實,R語言是最佳的選擇。
學習R語言
我建議你將R語言做爲你的第一個「數據科學編程語言」。雖然也有例外,好比特定的項目須要。由於R語言正在成爲數據科學的「通用語言」。
這並非說R語言是惟一的語言,也不是說它是每一個工做的最佳工具。然而,它是使用最普遍的,並且愈來愈受歡迎。
O' reilly media在過去幾年中進行了一系列數據科學調查,分析了數據科學趨勢。在2016年的調查報告中,R語言是最經常使用的編程語言(若是排除SQL的話,在本文中它不能稱爲編程語言)。57%的調查人羣使用R語言(使用Python的比例爲54%)。
另外一個常見的語言排名系統是Redmonk編程語言排名,它由GitHub(代碼行)和Stack Overflow(標籤數)的流行指數派生而來。截至2016年11月,R語言在全部編程語言中排名第13。此外,R語言多年來一直呈持續上升趨勢:
此外還有TIOBE指數(按搜索引擎搜索次數對編程語言進行排名)。在TIOBE指數上,R語言十年來呈現出穩定上升趨勢。
使用R語言的公司
在招聘數據科學家的幾家頂級公司中,R語言使用程度很是高。在我認爲現代經濟中最優秀的兩家公司——Google和Facebook 都有使用R語言數據科學家。
除了像Google,Facebook和微軟這樣的科技巨頭,R語言在美國銀行,福特,TechCrunch,Uber和Trulia等衆多公司都有普遍的應用。
R語言在學術界很受歡迎
R語言不只僅是一個行業工具。它在學術科學家和研究人員中也很是受歡迎,最近著名《天然》雜誌上發表的R語言概況也證明了這一點。
R語言在學術界的備受歡迎,由於它創造了供應行業的人才庫。
換句話說,若是最優秀、最聰明的人羣在大學學習了R語言,這將加大R語言在行業中的重要性。當學者、博士和研究人員離開學術界從事商業活動時,他們又將產生對R語言人才的需求。
此外,隨着數據科學的成熟,商業屆的數據科學家將須要與學術屆的科學家進行更多的溝通。咱們須要借鑑技術和交流觀點。隨着世界轉變爲數據流時,學術科學與面向商業的數據科學之間的界線會變得模糊。
經過R語言學習「數據科學的技能」是最簡單的
然而,R語言的普及性並非學習R語言的惟一緣由。
在選擇語言時,你須要一種在這些領域都具備重要功能的語言。同時你須要執行這些任務的工具,以及在你所選語言中來學習這些技能的資源。
如上所述,你更多地須要關注流程和技術,而不是語法。
你須要學習如何解決問題。你須要學習如何在數據中找到真知灼見。
爲此,你須要掌握數據科學的3個核心技能領域:數據處理,數據可視化和機器學習。在R語言中掌握這些技能將比任何其餘語言都容易。
數據處理
通常來講,數據科學中80%的工做都是數據處理。一般狀況下,你須要花費大量時間來整理你的數據。R語言中有一些很棒的數據管理工具。
R語言中的dplyr包使數據處理變得容易,這能夠大大簡化數據處理的工做流程。
數據可視化
ggplot2是最佳的數據可視化工具之一。ggplot2的好處是,在學習語法的同時,還學習如何思考數據可視化。
全部的統計可視化都有很深層的結構。存在構建數據可視化的高度結構化框架,ggplot2基於該框架。
此外,當將ggplot2和dplyr組合在一塊兒時,從數據中得出相關看法幾乎絕不費力。
機器學習
最後,還有機器學習。雖然我認爲大多數數據科學初學者不該該急於學習機器學習(首先掌握數據探索更爲重要),機器學習是一項重要的技能。當數據探索再也不帶來洞察力時,你則須要更強大的工具。
以後再學習更多的語言和工具
最終你會想學習更多的編程語言。就像工具箱中沒有一個最好的工具同樣,沒有一種編程語言可以完美的解決你全部的數據問題。
如下是在學習R語言以後,你能夠考慮學習的語言:
Rython
若是說R語言是一個神經質又可愛的高手,那麼Python是它隨和又靈活的表兄弟。做爲一種結合了R語言快速對複雜數據進行挖掘的能力並構建產品的更實用語言,Python迅速獲得了主流的吸引力。Python是直觀的,而且比R語言更易於學習,以及它的生態系統近年來急劇增加,使得它更可以用於先前爲R語言保留的統計分析。
「這是這個行業的進步。在過去的兩年時間中,從R語言到Python已經發生了很是明顯的轉變,」Butler說。
在數據處理中,在規模和複雜性之間每每會有一個權衡,因而Python成爲了一種折中方案。IPython notebook和NumPy能夠用做輕便工做的一種暫存器,而Python能夠做爲中等規模數據處理的強大工具。豐富的數據社區,也是Python的優點,由於能夠提供了大量的工具包和功能。
美國銀行使用Python在銀行的基礎架構中構建新的產品和接口,同時也用Python處理財務數據。「Python普遍而靈活,所以人們趨之若鶩,」O’Donnell說。
不過,它並不是最高性能的語言,只能偶爾用於大規模的核心基礎設施,Driscoll這樣說道。
Julia
雖然當前的數據科學絕大多數是經過R語言,Python,Java,MatLab和SAS執行的。但依然有其餘的語言存活於夾縫中,Julia就是值得一看的後起之秀。
業界廣泛認爲Julia過於晦澀難懂。但數據駭客在談到它取代R和Python的潛力時會不禁得眉飛色舞。Julia是一種高層次的,極度快速的表達性語言。它比R語言快,比Python更可擴展,且至關簡單易學。
「它正在一步步成長。最終,使用Julia,你就可以辦到任何用R和Python能夠作到的事情,」Butler說。
可是至今爲止,年輕人對Julia依然猶豫不前。Julia數據社區還處於早期階段,要可以和R語言和Python競爭,它還須要添加更多的軟件包和工具。
「它還很年輕,但它正在掀起浪潮而且很是有前途,」Driscoll說。
JAVA
Java,以及基於Java的框架,被發現儼然成爲了硅谷最大的那些高科技公司的骨骼支架。 「若是你去看Twitter,LinkedIn和Facebook,那麼你會發現,Java是它們全部數據工程基礎設施的基礎語言,」Driscoll說。
Java不能提供R和Python一樣質量的可視化,而且它並不是統計建模的最佳選擇。可是,若是你移動到過去的原型製做並須要創建大型系統,那麼Java每每是你的最佳選擇。
Hadoop和Hive
一羣基於Java的工具被開發出來以知足數據處理的巨大需求。Hadoop做爲首選的基於Java的框架用於批處理數據已經點燃了你們的熱情。Hadoop比其餘一些處理工具慢,但它出奇的準確,所以被普遍用於後端分析。它和Hive——一個基於查詢而且運行在頂部的框架能夠很好地結對工做。
Scala
Scala是另外一種基於Java的語言,而且和Java相同的是,它正日益成爲大規模機器學習,或構建高層次算法的工具。它富有表現力,而且還可以構建健壯的系統。
「Java就像是建造時的鋼鐵,而Scala則像黏土,由於你以後能夠將之放入窯內轉變成鋼鐵,」Driscoll說。
Kafka和Storm
那麼,當你須要快速實時的分析時又該怎麼辦呢?Kafka會成爲你的好朋友。它大概5年前就已經出現了,可是直到最近才成爲流處理的流行框架。
Kafka,誕生於LinkedIn內部,是一個超快速的查詢消息系統。Kafka的缺點?好吧,它太快了。在實時操做時會致使自身出錯,而且偶爾地會遺漏東西。
「有精度和速度之間有一個權衡,」Driscoll說, 「所以,硅谷全部的大型高科技公司都會使用兩條管道:Kafka或Storm用於實時處理,而後Hadoop用於批處理系統,此時雖然是緩慢的但超級準確。」
Storm是用Scala編寫的另外一個框架,它在硅谷中由於流處理而受到了大量的青睞。它被Twitter歸入其中,勿庸置疑的,這樣一來,Twitter就能在快速事件處理中獲得巨大的裨益。
MatLab
MatLab一直以來長盛不衰,儘管它要價不菲,但它仍然被普遍使用在一些很是特殊的領域:研究密集型機器學習,信號處理,圖像識別,僅舉幾例。
Octave
Octave和MatLab很是類似,但它是免費的。不過,它在學術性信號處理圈子以外不多見到。
GO
GO是另外一個正在掀起浪潮的後起之秀。它由Google開發,從C語言鬆散地派生,並在構建健壯基礎設施上,正在贏得競爭對手,例如Java和Python的份額。