數據科學領域,你選 Python 還是 R?

數據科學領域,你選 Python 還是 R?

根據需求,為了那些希望知道在數據科學方面選擇 Python 還是 R 編程語言的人,我發佈了這篇指導文章。你可能在數據科學方面是個新手,或者你需要在一個項目中選出一個語言,這篇文章可能會幫助到你。

數據科學領域,你選 Python 還是 R?

Hadley Wickham, RStudio 的首席數據科學家,已經給出了答覆“使用‘and’替代‘vs’”。由此,同時使用Python/R 是我將提到的第三種選擇。這個選項引起了我的好奇心,而且我會在本文末尾介紹這一點。

如何比較 R 和 Python

下面是這兩種語言之間一些值得比較的因素,這並不是一個完全的列表。

  1. 歷史:R 和 Python 具有明顯不同的歷史,有時候會交叉。
  2. 社區:通過實際調查發現的很多複雜的社會人類學因素。
  3. 性能:詳盡的比較以及為什麼比較起來這麼難。
  4. 第三方支持:模塊,代碼庫,可視化,存儲庫,組織和開發環境。
  5. 用例:有些任務和工作類型適合其中一種或者另一種。
  6. 我們不能和睦相處嗎?Python 調用 R 和 R 調用 Python 。
  7. 預測 R 還是 Python:吃你自家的狗糧的一個預測練習。
  8. 偏好:最終答案。

歷史

數據科學領域,你選 Python 還是 R?

簡短概要:

  • ABC -> Python 發佈(1989 Guido van Rossum)-> Python 2 (2000) -> Python 3 (2008)
  • Fortan -> S(貝爾實驗室)-> R 發佈(1991 Ross Ihaka 和 Robert Gentleman)-> R 1.0.0 (2000) ->R 3.0.2 (2013)

社區

當比較Python和R的用戶時,首先要記住的就是:

數據科學領域,你選 Python 還是 R?

只有50%的Python用戶與R重疊

那是假定所有R程序員會用“科學和數字(Scientific and Numeric)”來稱呼他。我們也確定,無論程序員的等級如何,這個分佈都是正確的。

要進一步瞭解Python“宣傳”,請閱讀關於Python宣傳調查結果:https://www.linkedin.com/pulse/python-hype-survey-results-experience-any-drastic-decline-brian-ray/

如果我們只看科學和數字社區,這就會把我們帶到第二類社區,哪個社區?在所有的科學和數字社區中有一些子社區。儘管也許還會有一些重疊,因為你會懷疑他們與大一些的R/Python社區之間的交互方式確實不同。

一些使用Python/R的子社區的例子:

  • 深度學習
  • 機器學習
  • 高級分析
  • 預測分析
  • 統計
  • 探索和數據分析
  • 學術可惜研究
  • 幾乎無窮無盡的計算領域研究

然而每個領域看起來都只致力於一個專門社區,你會發現R在如統計和探索之類的領域中更加流行。不久前,你可能會使用R進行構建運行或者做一些非常有意義的探索,而使用的時間比安裝Python或者用它來做相同的探索的時候短得多。

這一切都被顛覆性的技術改變了,他們是Jupyter notebook和Anaconda。

注:Jupyter Notebokks:在瀏覽器中可以編輯Python/R代碼;Anaconda:可以為Python和R簡單的安裝和打包

既然你可以在一個方便提供報告和現成的分析的環境啟動運行,就已經排除了一個橫在那些想要完成這些任務的人和他們喜愛的語言之間的障礙。Python現在可以使用獨立於平臺的方式打包,而且可以更快的提供快速、低成本的分析比。

在社區中影響了語言選擇的另一個區別就是“開源”思想。不僅是開源庫,還有致力於開源的協作社區的影響。諷刺的是,開源許可軟件,像Tensorflow這樣的軟件到GNU Scientific Library(各自為Apache和GPL),他們看起來都有Python和R綁定。儘管有R的公共版權,還是有更多人純粹的支持Python社區。另一方面,看起來有更多的企業支持R,特別是那些有統計方面歷史的。

最後,考慮到社區和協作,在Github上Python的支持更多。如果我要看最新Python包趨勢,我會看到有超過3.5萬個關注的Tensorflow之類的項目。相反,如果我看R包的最新趨勢,像Shiny,Stan…之類的包,他們都少於2千個關注。

性能

性能提升很困難,因為有太多的指標和情況需要測試了,也很難基於特定的硬件來測試。一些操作在某個語言裡已經做了優化,但其它語言裡卻還沒有實現。確實,你可能會失去一些東西,比如:一些人會抱怨,一些人會離開,整個分析報告也可能會被丟棄。無論如何,生活還是要繼續... ...

循環

在繼續之前,讓我們先看一下 Python 和 R 是怎麼樣使用的。在 R 中,你是如何做循環迭代的呢?R 語言有稍微的不同。

數據科學領域,你選 Python 還是 R?

數據科學領域,你選 Python 還是 R?

通過一個快速的完整性檢查, 包括加載時間和命令行運行時間: R 耗時 0m0.238s, Python 耗時是0m0.147s. 再次,這不是一個嚴謹的測試。

一個快速的測試顯示 Python 代碼會快很多,通常,這並不是太重要。

既然速度不是重點,那數據科學家更關心哪些東西呢?從這兩門語言最新的趨勢發現,它們被用作命令式語言的能力是一個重要的因素。比如,大多數 Python 程序員嚴重依賴 Pandas 來工作。這又引出了下一個主題:兩種語言都有哪些模塊和庫,它們又是如何實現的?這是一個更有意義的比較。

第三方支持

包管理工具

Python 使用 PyPi ,R 使用 CRAN ,Anaconda 同時支持二者。

CRAN 使用它內部的“install.packages”命令做分發管理。截至目前為止,CRAN 上有大約 12000 個有效的軟件包。瀏覽一下你就會發現,大約二分之一的包是關於數據科學的,佔了大約 6000 個還不止。

PyPi 上有超過 CRAN 十倍數量的包,大約 141000 個左右。其中有大約 3700 個包被標識為科學工程相關的。當然還有大量的包實際是科學相關的,但並沒有被正確標識出來。

這兩種語言好像並沒有受到大量的重複勞動的影響。確實,當我在 PyPi 上搜索“隨機森林”時,我搜到了 170 個項目,可是,這些包之間又有些許的不同。

儘管 Python 包的數量超過 R 十倍之多,但做數據科學計算的包的數量卻差不多,也許 Python 更少一些。

大量有效的第三方庫是非常重要的,所有東西都要從頭寫是非常痛苦的。同樣地,我也希望你做一些工作來回饋社區。

速度很重要

DataFrames vs Pandas可能是一個更有意義和更重要的比較。

我們進行一個實驗:在進行復制的時候進行一個複雜的遍歷,比較兩者的執行時間。下面是結果:

數據科學領域,你選 Python 還是 R?

源代碼: http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882

正如我們看到的結果,Python+Pandas要比原生的R DataFrames快很多。請注意這並不意味著Python要比R快。Pandas是基於C語言寫的Numpy庫的。

想象一下這個!

數據科學領域,你選 Python 還是 R?

我真正想說的是ggplot2 vs matplotlib。聲明:matplotlib是Python社區裡我最看重的一個人寫的,他教會了我Python,他就是 John D. Hunter。

Matplotlib是一個強大而且可個性化定製的庫,雖然不太容易學但是擴展性非常好。ggplot不但不易個性化定製而且可以說更加困難。

如果你喜歡漂亮的繪圖圖案,而且並不需要自定義繪圖,R是我的選擇。如果你需要做更多的事情選擇Matplotlib,他甚至可以幫助與bokeh進行交互。同樣,你可能在尋找的ShinnyR對R而言也會增加其交互性。

難道我們不能同時使用兩種語言嗎?

有些人可能要問:你為什麼不能同時使用兩種語言呢?

有一些情況你可以同時使用這兩個。比如當:

  • 你的項目組或組織允許的時候。
  • 你能比較容易地同時維護這兩種環境。
  • 你的代碼不需要遷移到另一個系統。
  • 你不會給別人製造一些混亂。

一些可以使兩者同時工作的方法:

  • Python 對 R 的包裝器,比如:rpy2,pyRserve,Rpython,... (rpy2 擴展在 Jupyter 中有使用)
  • R 也有一些包,比如:rPython,PythonInR,reticulate,rJython,SnakeCharmR,XRPython
  • 在 Jupyter 裡,混合這兩種語言,舉例如下:
數據科學領域,你選 Python 還是 R?

然後,我們可以傳遞 pandas 數據幀,它會通過 rpy2 被自動轉換為 R 數據幀,傳遞時加上 “-i df”開關。

數據科學領域,你選 Python 還是 R?

代碼源: http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a

R 與 Python 預測

Kaggle 上的一個用戶寫了一個關於預測開發人員使用 R 還是 Python 的內核。他根據這些數據得出了一些有趣的觀察結果:

數據科學領域,你選 Python 還是 R?

  • 如果你希望明年轉向 Linux ,你更有可能是一個 Python 用戶。
  • 如果你研究統計學,你更有可能是 R 用戶。如果你研究計算機科學,你可能是 Python 用戶。
  • 如果你年輕(18-24歲),你更可能是 Python 用戶。
  • 如果你進行代碼競賽,你更可能是 Python 用戶。
  • 如果你明年想使用安卓,你更可能是 Python 用戶。
  • 如果你明年想學習 SQL ,你更可能是 R 用戶。
  • 如果你使用 MS office ,你更可能是 R 用戶。
  • 如果你明年想使用 Rasperry Pi ,你更可能是一個 Python 用戶。
  • 如果你是全日制學生,你更可能是 Python 用戶。
  • 如果你使用敏捷方法,你更可能是 Python 用戶。
  • 如果你對 AI 的看法是擔憂而不是興奮,你更可能是 R 用戶。

偏好

即使在像Google這樣的自由精神創新空間,似乎有一些制度。這是在這裡能起作用的偏好,公司偏好。

除了企業偏好,有些人在組織裡經常創造第一。Deloitte第一個使用R語言的,他仍然在公司,他是數據學家的領軍人。重點是,在所有事情上我通常會建議,遵循你的愛。愛你所追隨的,引領潮流,愛你所做的。


分享到:


相關文章: