英文:usejournal,翻譯:開源中國
www.oschina.net/translate/python-vs-and-r-for-data-science
為了那些希望知道在資料科學方面選擇 Python 還是 R 程式語言的人,我釋出了這篇指導文章。你可能在資料科學方面是個新手,或者你需要在一個專案中選出一個語言,這篇文章可能會幫助到你。
非免責宣告:在最大的資料科學家僱主之一(Deloitte)中,我是一個資料科學家的管理者。我也對 R 和 Python 有幾十年的瞭解。我是個語言不可知論者,但是參與到 Python 社群已經有15年左右了。
還會有第三種選擇
Hadley Wickham, RStudio 的首席資料科學家,已經給出了答覆“使用‘and’替代‘vs’”。由此,同時使用Python/R 是我將提到的第三種選擇。這個選項引起了我的好奇心,而且我會在本文末尾介紹這一點。
如何比較 R 和 Python
下麵是這兩種語言之間一些值得比較的因素,這並不是一個完全的串列。
-
歷史:R 和 Python 具有明顯不同的歷史,有時候會交叉。
-
社群:透過實際調查發現的很多複雜的社會人類學因素。
-
效能:詳盡的比較以及為什麼比較起來這麼難。
-
第三方支援:模組,程式碼庫,視覺化,儲存庫,組織和開發環境。
-
用例:有些任務和工作型別適合其中一種或者另一種。
-
我們不能和睦相處嗎?Python 呼叫 R 和 R 呼叫 Python 。
-
預測 R 還是 Python:吃你自家的狗糧的一個預測練習。
-
偏好:最終答案。
歷史
簡短概要:
-
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的使用者時,首先要記住的就是:
只有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 語言有稍微的不同。
透過一個快速的完整性檢查, 包括載入時間和命令列執行時間: 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可能是一個更有意義和更重要的比較。
我們進行一個實驗:在進行複製的時候進行一個複雜的遍歷,比較兩者的執行時間。下麵是結果:
原始碼:
http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882
正如我們看到的結果,Python+Pandas要比原生的R DataFrames快很多。請註意這並不意味著Python要比R快。Pandas是基於C語言寫的Numpy庫的。
想象一下這個!
我真正想說的是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 裡,混合這兩種語言,舉例如下:
然後,我們可以傳遞 pandas 資料幀,它會透過 rpy2 被自動轉換為 R 資料幀,傳遞時加上 “-i df”開關。
程式碼源:
http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a
R 與 Python 預測
Kaggle 上的一個使用者寫了一個關於預測開發人員使用 R 還是 Python 的核心。他根據這些資料得出了一些有趣的觀察結果:
-
如果你希望明年轉向 Linux ,你更有可能是一個 Python 使用者。
-
如果你研究統計學,你更有可能是 R 使用者。如果你研究電腦科學,你可能是 Python 使用者。
-
如果你年輕(18-24歲),你更可能是 Python 使用者。
-
如果你進行程式碼競賽,你更可能是 Python 使用者。
-
如果你明年想使用安卓,你更可能是 Python 使用者。
-
如果你明年想學習 SQL ,你更可能是 R 使用者。
-
如果你使用 MS office ,你更可能是 R 使用者。
-
如果你明年想使用 Rasperry Pi ,你更可能是一個 Python 使用者。
-
如果你是全日制學生,你更可能是 Python 使用者。
-
如果你使用敏捷方法,你更可能是 Python 使用者。
-
如果你對 AI 的看法是擔憂而不是興奮,你更可能是 R 使用者。
偏好
當我與Alex Martelli, Googler 和 Stack Overflow的統治者通訊時,他向我解釋為什麼Google開始使用他們官方支援的一些語言。即使在像Google這樣的自由精神創新空間,似乎有一些制度。這是在這裡能起作用的偏好,公司偏好。
除了企業偏好,有些人在組織裡經常創造第一。我知道在Deloitte第一個使用R語言的是誰。他仍然在公司,他是資料學家的領軍人。重點是,在所有事情上我通常會建議,遵循你的愛。愛你所追隨的,引領潮流,愛你所做的。
一個合格的宣告,雖然我從未成為工具的第一思考著,但如果你正在做一寫重要的事情,那可能不是做實驗的最佳時機。錯誤是可能的。然而,每個精心的設計資料科學專案都給資料學家留下了一定的空間。使用其中的一部分來學習和實驗。保持開源心態,擁抱多樣性。
●編號487,輸入編號直達本文
●輸入m獲取文章目錄
大資料技術
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。