深度 | R vs Python:R是現在最好的數據科學語言嗎?

Sharp Sight Labs 近日在 r-bloggers 上發表了一篇文章,論述了為什麼當今的數據科學工作者應該學習 R 語言的原因。為了給大家提供一個明晰的對比,我們在後面補充了 2016 年初的一篇文章:R vs.Python。

在前一段時間的博客中,我解釋了為什麼你應該掌握 R 語言(即便它最終可能過時):Why you should master R (even if it might eventually become obsolete) - SHARP SIGHT LABS。我寫這篇文章是為了向那些聲稱掌握 R 語言浪費時間的人致辭。(因為它最終會變得過時)。

但是當我認為 R 語言最終會變得過時時,這似乎引起了恐懼——彷彿 R 語言已經過時了。

我想要消除你的恐懼:R 語言仍然很流行。

R 語言是過去十年中發展最快的編程語言之一。

事實上,如果你開始學習數據科學,我仍然推薦從 R 語言開始。

所以,我想向你保證。R 語言絕對沒有過時的。事實上,R 語言是非常受歡迎的而且是最好的數據語言。

為此,我想解釋為什麼我對 R 語言的長期前景非常樂觀,以及為什麼我認為這也許是今天可以學習的最好的數據科學語言。

R 語言始終是最好的語言之一

我想讓你們明白的一件事情是:目前 R 語言是存在的最受尊敬、排名最高、增長最快的語言之一。

在很多方面,R 語言就代表了數據語言。在數據科學領域,這是一個仍處於頂端的語言(只有 1 到 2 個真正的競爭者)。

為什麼這麼說呢?讓我們看看幾個重要的調查和編程語言排名的結果,看看 R 語言排在哪裡。

IEEE:R 語言排名第 5

世界上最大的技術專業協會 IEEE 在幾年前已經創建了一個編程語言排名。

這個 IEEE 的排名系統使用一組 12 個指標,包括比如谷歌的搜索量、谷歌的趨勢、Twitter 的點擊次數、GitHub 的庫、Hacker News 的帖子等等。

使用這種方法,他們將幾十種編程語言進行排名和分類。

在他們對 2016 年頂級編程語言的回顧中,R 語言已經攀升到了第 5

IEEE 的方法是非常全面的,所以這對於 R 相對於其他語言的力量和學習的相對價值是一個很好的指示。

TIOBE:R的排名高,且具有連續的上升趨勢

另一個排名系統,TIOBE 索引,為各種編程語言創建了相似的分數和排名。

如果我們看看 R 語言在 TIOBE 索引上的表現,我們可以看到近十年以來一個穩定的上升趨勢。

請記住,TIOBE 索引的結構是「編程語言受歡迎程度的指示」。索引每個月更新一次,評分是基於世界範圍內的精尖工程師、課程和第三方供應商的使用量。像谷歌、Bing、雅虎、維基百科、亞馬遜、油管和百度等熱門搜索引擎則用來計算排名。

到 2016 年 12 月,R 語言的總排名是 17(在所有編程語言中)。它的最高排名是 2015 年 5 月的第 12 名。

這表明,如果你想學習數據科學,目前學習 R 語言仍然是一個很好的選擇。(要清楚,Python 在 TIOBE 索引上的排名較高,但是很難從 Python 相關使用的嚴格數據中分離出網路和軟體開發的使用情況,因此這可能不是一個公平的比較)。

Redmonk:R語言排名12

另一個經常選擇的語言排名系統是 Redmonk 編程語言排名,它是從 GitHub(代碼行數)和 Stack Overflow(標籤數量)上的流行度衍生出來的。

截至 2016 年 11 月,R 語言在所有編程語言中排名第 13 位。

此外,R 語言幾年來一直呈上升趨勢

在前 20 種語言的後半部分中,隨著時間的推移,R 語言顯示出最一致的上升趨勢。從 2012 年的第 17 位開始,它隨著時間的推移穩步上升,但似乎在 13 這個位置上停留了連續三個季度。然而這一次,R 語言代替了排名 12 位的 Perl,使其跌落到 13 位。雖然仍然有大量的 Perl 語言在流通,但是更加專業的 R 語言已經奪取了這個一度被認為是網路粘結劑的 Perl 語言的位置。當然這與 R 語言的支持者們無關。R 語言相對獨特的前 20 路徑是值得它們的粉絲所歡呼的。

O』Reilly:R語言可以說是最常見的數據編程語言

最後,媒體 OReilly 在過去的幾年裡進行了一次數據科學調查,他們使用調查數據來分析數據科學的趨勢。除了其他的之外,它們分析工具的使用情況來確定哪些工具是數據科學家最常使用的。

在 2016 年的調查報告中,R 語言是最常用的編程語言(如果我們排除 SQL,這不是我在這裡所指的編程語言)。57% 的受訪者使用 R 語言(相比之下,使用 Python 的有 54%)

(另外,有 70% 的受訪者使用 SQL。如果你正在尋找 R 之後的另一個語言去學習,我會推薦 SQL)

他們還調查了人們去識別數據可視化的工具。他們發現 ggplot2 是最常見的可視化工具。我會在一篇即將發布的博客中解釋為什麼我喜歡 ggplot2,但如果我們只跟蹤人氣,Oreilly 的調查表明 ggplot2 時最常被使用的工具之一,甚至可能就是最常被使用的。

R 語言是學習數據科學的極佳語言

R 語言成為一門極佳的數據科學語言,在普遍性之外,另一大原因是:它是一門非常好的學習數據科學的語言。

R 語言是真正的「數據語言」

R 語言之所以如此適合數據科學的原因部分跟它本身的語言特性有關。自 R 語言發明之初,數據及統計的觀念便融入其中。R-Project 形容其為「為統計計算而準備的編程語言及環境」。也就是說,R 語言的 DNA 中就含有統計及數據的基因。

如此說來,R 語言在眾多編程語言中可謂獨樹一幟。它是一門為統計而生的語言,是一門為(處理)數據而設計的語言。當你在學習數據科學的時候,這將帶來很大的優勢——因為幾乎所有的統計測試或方法都能夠在 R 語言及其拓展庫中找到。

最好的書籍和資源都使用了 R 語言

儼然,R 語言已是一門「統計計算」語言。與之相關的是,許多很好的書籍及學習資源都採用了 R 語言。

這非常重要。如果你是一名初學者,在數據科學領域才剛剛起步,那麼你將需要學習很多知識。要真正掌握數據科學,你需要學習包括概率論、統計學、數據可視化、數據處理及機器學習在內的諸多子領域。所有這些領域都包含了理論基礎(也就是你需要學習的內容),同時你也需要通過編寫程序實際使用它們。

也就是說,你需要這樣一種語言:

  1. 能夠在這些領域都能夠發揮作用(如數據可視化、數據處理、機器學習(也叫做統計學習))。

  2. 這門編程語言在這些領域內還有高質量的學習、訓練素材。

儘管市面上有很多關於數據科學的書籍與課程,但其中最好的大多都是基於 R 語言的。

使用 R 語言學習概率論

以概率論為例,兩本關於概率論的優秀書籍都是用 R 語言來編寫書上的上手案例的。這兩本書分別是:

  • 《Probability with Applications and R》。這本書語言樸實、通俗易懂、條理清晰。

  • 《Introduction to Probability》。這本書基於哈佛著名的統計學課程編寫。

這只是兩個簡單的例子。如果你進一步發掘的話,你會發現幾乎所有的關於概率論的書籍都使用了 R 語言。

使用 R 語言學習頻率論統計學(frequentist statistics)

對於統計學方面的書籍也是如此。

因為統計學已經深入 R 語言的骨髓,所以許多統計學課本使用 R 語言作為其學習工具。

《Statistics: an Introduction using R》是一本介紹頻率論統計學的優秀書籍。

一樣的,如果你在亞馬遜上快速搜索一下,你找到的大部分統計學入門的教材都使用了 R 語言作為它們的學習工具。

使用 R 語言學習貝葉斯統計學

當你正在尋找一本關於貝葉斯統計學的入門書籍時,這種趨勢變得更為明顯。

幾乎所有的關於貝葉斯統計及推斷的書籍都是用了 R 語言。儘管有些例外(有些書使用了 C 語言或者 Python),但主導的仍然是 R 語言。

如果你對貝葉斯統計學感興趣,你可以查看這幾本書:

  • Introduction to Bayesian Statistics

  • Statistical Rethinking

  • Doing Bayesian Data Analysis

如果你對貝葉斯方法感興趣的話,這些書是你最棒的選擇了,並且它們都使用了 R 語言。

學習如何在 R 中進行數據可視化

當你在學習數據可視化的時候,儘管你會有相對更多的編程語言可以選擇,但筆者還是認為,大多數最優的編程資源都使用了 R 語言。

如果你正在學習數據可視化,那麼你可以參考 Nathan Yau 的工作。他經常在他的博客(flowingdata.com)上上傳一些使用 R 語言的數據可視化教程。(筆者同時推薦他所寫的《Data Points》作為參考,在這本書中主要講授的是數據可視化的一些法則而非編程實現。)

筆者亦推薦 Hadley Wickham 所著的書。如果你對使用 R 語言進行數據可視化感興趣的話,那麼你應該擁有 ggplot2 這本書。它不僅教會你如何使用 R 語言中數據可視化庫的使用方法,還能夠改變你對數據進行可視化的觀念。

同時,你還可以參考這本書:R for Data Science。這本書包含了對數據可視化非常棒的介紹,還有對很多 R 語言數據可視化工具庫的介紹,是一本學習 R 語言的必備書籍。

使用 R 語言來學習機器學習

最後,如果你想開始學習機器學習,有很多優秀的使用 R 語言描述的機器學習的書籍可以參考。

我承認,現在有各種各樣使用不同的編程語言的來描述機器學習的書籍,但我認為,在最好的那一部分書籍中有很大比例都是使用的 R 語言。

下面有兩個使用 R 語言來介紹機器學習的優秀的教程:

  1. 統計學習導論(An Introduction to Statistical Learning)

  2. 應用預測建模(Applied Predictive Modeling)

這些書寫得十分嚴謹同時也很容易理解。書中會提及一些理論知識(但是不會用很複雜的數學知識來為難你),同時也會教授你一些實用的技術。

毫無疑問,這是我給想學習機器學習的初學者最常推薦的兩本書,並且它們都使用的是 R 語言。

如果你想學習數據科學,R 語言是一個絕佳的選擇

最後強調一下,R 是一種學習數據科學的優質語言,因為許多優秀的書籍(以及一些其它的教程)都使用 R 來作為編程語言。

所以,如果你是數據科學的初學者,由於數據科學學習材料的數量和質量所限制,所我認為 R 語言是最好的選擇。

一個關於 Python 的快速註解

就數據科學編程語言來說,Python 是目前唯一可以替代 R 的語言。(因為其它的替代方案缺乏完善的軟體包生態系統或者是非開源/免費的)。

我不會在這裡闡述我對 Python 的全部理解,但是我必須要講的是,Python 的確是一種優秀的語言。我愛 Python。

話雖如此,對於數據科學的初學者來說,我仍然認為 R 是更好的選擇,其中的原因我在上文中已經進行了概述。

再者,我認為關於基礎數據科學概念(概率、統計、貝葉斯統計、機器學習)的許多最好的教科書和教程都是基於 R 的。當然,這並不是說沒有優秀的數據科學書籍使用 Python,我只是認為基於 R 的書籍的平均質量高於用其它編程語言描述的書籍。

有關於 Python 的另一個問題是,很多學生在開發過程中會遇到一些困難。他們在學習的過程中並沒有花多少時間來學習統計數據、數據可視化、數據操作、概率等,而是花費了大量的時間去學習數據結構、循環、流程式控制制、面向對象的編程和 Web 框架。這些技能可以用來完善核心的數據科學工具包,但它們不是我們想要了解的數據科學範疇的相關內容。事實上,我建議大多數初學者先學習基本數據科學相關的內容(如數據操作、可視化、分析等)後再學習軟體開發。

雖然大多數的初學者在以後會學習軟體開發的技術,但是很多使用 Python 來作為入門數據科學的初學者會陷入到軟體開發和 Web 開發等領域。我認為之所以會出現這樣的問題,是因為在許多方面,Python 都是運用於這些領域的。大多數關於 Python 的書籍並不是真正的數據科學書籍,而是講述一些有關於編程和開發的內容。所以,有些數據科學的初學者選擇使用 Python 描述的書籍來學習數據科學,然而他們最終卻花費了數月甚至數年來學習軟體和 web 開發而不是數據科學。

當然,我非常愛 Python,但是對於初學者而言,我認為選擇 Python 有一些冒險。最好還是從 R 語言開始,因為統計學和數據科學就像「它的 DNA」一樣和它綁定在一起。使用 R 語言,不僅更容易學習,也不容易偏離我們的學習範疇。

如果你想學習數據科學,那麼就學習 R 語言吧

你應該記住的是,如果想要學習數據科學,R 是可以說是最好的選擇。在人氣方面,R 擁有非常高的排名,並且還處於上升趨勢。此外,有很多最好的數據科學的書籍和教程都是使用 R 語言來描述的。

如果你想要開始學習數據科學,我的建議如下:

  • 學習 R 語言

  • 重點學習 ggplot2、dplyr、tidyr、lubridate 和一些其它用於實現數據的可視化和控制的 Hadleyverse 工具

  • 學習同時使用這些工具來進行數據分析。

  • 當你對這些 R 工具包有所了解之後就可以開始學習概率、統計學和機器學習的內容了 (我推薦大家使用我在本文中所談到的那些資料)

R vs Python - 超級英雄

R 這麼好,也不要忘記 Python。在這一部分我們對比一下數據科學家的兩個超級英雄——R 和 Python。

Python 就像是超人,而 R 和蝙蝠俠之間有幾點相似之處。讓我們創建一個表來列出這些相似之處。

R 就像蝙蝠俠

  • 偵探工作

  • 智慧

  • 狡黠

  • 使用工具

  • 動腦多於蠻力

Python 就像超人

  • 肌肉力量

  • 超級力量

  • 優雅

  • 應用面廣

  • 蠻力多於動腦

接下來解釋一下 R 和 Python 之間的區別及原因。此外,讓我們幫助數據科學家找到更好用的編程語言。

R vs Python / R 和 Python : 哪一種更好用?

R 和 Python 都是開源的、免費的高級編程語言。R 專門用於統計計算。它有大量附加包(package)/工具來支持機器學習和數據分析。另一方面,Python 是一種通用的強大的編程語言,在數據準備、數據調試和數據分析方面有特殊的應用。

這種區別也是不同分析人士喜歡這些編程語言的原因。Python 通常被嘗試開發數字處理和分析技能的計算機程序員所青睞。另一方面,R 被數學家和統計學家優先選擇。這些差異在這些語言的學習資源(書籍和網上論壇)中是顯而易見的。例如,考慮以下 4 本免費的在線圖書。

所有這些書都是高質量的統計教材,用 R 作為首選編程語言。這些只是幾個例子。請注意,第一本書不是專門用於 R,與第二本書有相同的作者。你很少會找到用 Python 作為首選語言的書籍。因此,R 更有能力處理數據挖掘和統計分析的相關問題。另一方面,Python 提供了非常好的應用程序來處理非結構化和複雜的數據集,如圖像、書面文本(網路、電子郵件等)、基因、聲音等。

實質上,Python 和 R 一起構成了數據科學家的工具包。因此,對於務實的和面嚮應用的數據科學家來說,了解這兩種語言的超級能力和特點是至關重要的。

使用 R 進行分析、數據可視化與建模:

  • 為分析提供了極好的靈活性

  • R 使你在分析的時候更容易思考

  • 由於有著十分活躍的統計與數學社區,可以持續的更新和增強分析功能優秀的數據可視化工具

  • 優秀的數據可視化工具

使用 Python 進行數據預處理、數據清洗,特別針對於非結構化數據(如網頁,圖像,文本等):

  • 極強的靈活性,能夠從自由文本、網站和社交媒體網站提取信息

  • 便於圖像挖掘和為分析準備數據

  • 處理大量的數據的時候比 R 語言更好

對於一個認真的數據科學家來說,R 和 Python 都應該了解。我們需要的是 R+Python,而不是 R vs Python。

最近很多人私信問我問題,平常知乎評論看到不多,如果沒有及時回復,大家也可以加小編微信:tswenqu,進R語言中文社區 交流群,可以跟各位老師互相交流。謝謝。


推薦閱讀:

r語言中句號(點號)「.」的含義是什麼?
R有將中文地址轉化成經緯度的包么?
ggplot2能做這種圖么?
R語言里做時間序列分析有哪些包?
如何爬取網頁表格數據?

TAG:R编程语言 | Python | 编程语言 |