資料科學大Battle,你站Python還是R
導讀:Python 或 R,這是一個問題。在資料科學工作中,你可能也經常遇到這個選擇困難問題。本文作者Brian Ray基於數十年的Python和R在資料科學領域的使用檢驗,分享了自己的看法,希望能夠幫大家做出更好的選擇。
編譯:Marcy、浩哥兒、Charlene、雲舟
來源:大資料文摘(ID:BigDataDigest)
希望這篇文章能幫助那些在資料科學中糾結於選擇Python還是R的小夥伴們。如果你是資料科學領域的新手,或者你需要在專案中選擇一個語言來用,這篇文章一定能幫到你。
01 也許存在第三種選項
Hadley Wickham,RStudio的首席資料科學家,已經給出了回答:與其說選擇其中一種語言(R“還是”Python)更好,還不如說讓兩種語言相互合作 (R“和”Python)是最佳的選擇。所以,我所說的第三種選項就是同時使用Python和R
Hadley Wickham推特:
https://twitter.com/hadleywickham
02 如何比較R和Python
以下不是兩種語言的詳細對比清單,只是一些值得進行對比的要素:
歷史:R和Python有著差異明顯又相互交錯的歷史。
使用群體:實地調查顯示了許多複雜的社會學和人類學因素。
效能:詳細的效能比較,以及為什麼很難比較兩種語言的原因。
第三方支援:模組、程式碼庫、視覺化工具、組織及開發環境。
用例:某些型別的工作或任務中,更適用於使用兩種語言中的一種。
同時使用兩種語言:在Python中使用R,在R中使用Python。
R與Python預測能力的比較:介紹一個“自給自足”的練習。
企業和個人偏好:揭曉最終答案
1. 歷史
簡史:
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年)
2. 使用群體
比較Python與R的使用者時,要謹記以下圖表:
▲只有50%的Python使用者同時使用R
上述結果假設所有的R程式設計師都用R來做“科學與資料研究”,無論程式設計師水平如何,我們能夠確定以上統計分佈是真實的。
想進一步瞭解Python的“熱潮”,可以閱讀我的文章,裡面有關於Python熱潮的調查結果。
文章連結:
https://www.linkedin.com/pulse/python-hype-survey-results-experience-any-drastic-decline-brian-ray/
如果我們僅從“科學與資料研究”群體來看,這就引出了我們的第二個觀點,即R/Python究竟適用於哪些群體?整個“科學與資料研究”群體存在著很多子群體,雖然這些子群體存在交叉,你可能會疑惑他們在更廣的大群體中是如何互動並有著不同的表現的。
以下是Python/R適用的一些子群體:
深度學習
機器學習
高階分析
預測分析
統計學
探索性資料分析學術研究
近乎所有的計算研究領域
雖然每個專業領域似乎都服務於特定的群體,但你會發現R在統計學和資料探索領域使用更廣泛。不久之前,比起使用Python進行資料探索,啟動並執行R能花費較少的時間,況且你還需要花時間安裝Python。
所有一切都將被Jupyter Notebooks 和Anaconda技術顛覆。
注意:Jupyter Notebooks增加了在瀏覽器中編寫Python/R的功能;Anaconda可以輕鬆安裝並管理Python和R及其語言包。
現在你可以在友好的環境中程式設計,並用創造性的方式來生成報表和完成資料分析。程式設計師與他們鍾愛的程式語言之間已不存在屏障。現在,Python能夠在一個平臺獨立執行,並且提供前所未有的快速、簡潔的分析功能。
影響人們選擇程式語言的另一個區別在於“開源”,不僅僅在於開源庫,還包括協作群體對於開源的貢獻。諷刺的是,像Tensorflow和GNU科學計算庫(分別隸屬於Apache和GPL)這類開源許可軟體,似乎同時繫結Python和R。
儘管還存在不少R的支持者,但Python使用群體中更多人是Python的純粹支持者。另一方面,似乎有更多的企業支援R,尤其是那些曾經廣泛使用統計學來做分析的企業。
最後,關於群體和協作,在Github中Python的支持者更多。在最新的Python語言包中,像Tensorflow這樣的包擁有超過3.5萬顆星的使用者收藏。相反,再看一下最新的R語言包,像Shiny和Stan,都只有少於2千顆星的使用者收藏。
3. 效能
Python和R的比較一直都不太容易,因為有太多指標和情況需要測試。在任何一個特定的硬體環境上測試都很困難。有些操作分析在一種語言上已經進行了優化,但在另一種語言上卻沒有。但無論如何,我們還是要進行這項比較。
非常簡單的迴圈語句比較:
開始之前,我們先思考一下在使用層面Python和R的區別。你真的想要用R寫很多迴圈嗎?我覺得不同的語言在被開發時的意圖上應該是各不相同的。
(程式碼部分左右滑動看更多)
import numpy as np
%load_ext rpy2.ipython
defdef do_loopdo_loop(u1):
# Initialize `usq`
usq = {}
for i in range(100):
# i-th element of `u1` squared into `i`-th position of `usq`
usq[i] = u1[i] * u1[i]
%%R
do_loop <- function(u1) {
# Initialize `usq`
usq <- 0
for(i in 1:100) {
# i-th element of `u1` squared into `i`-th position of `usq`
usq[i] <- u1[i]*u1[i]
}
}
%%timeit -n 1000
%%R
u1 <- rnorm(100)
do_loop(u1)
執行結果:1.58 ms ± 42.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%%%timeittimeit --nn 10001000
u1u1 == npnp..randomrandom..randnrandn((100100))
do_loopdo_loop(u1)
執行結果:36.9 µs ± 5.99 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
在程式的合理性檢驗中,載入時間以及在命令列上的總執行時間:R語言是0m0.238s,Python是0m0.147s。再次強調,這並不是一個嚴謹的科學測試。
但這個簡單的測試表明,Python的速度明顯更快。雖然在大多數情況下,這並不是十分重要。
一種語言的速度快慢對於一個數據科學家而言的意義在哪裡呢?這兩種語言的興起是因為它們可以被當作“命令語言”來使用。例如,我們使用Python工作時,對Pandas語言包的依賴性很大。這就引出了兩種語言模組和庫上更深層次的比較,事實上,這也是一個更具意義的比較。
4. 第三方支援
Python擁有PyPI,而R使用CRAN,並且它們都可以使用Anaconda。
CRAN使用其內建的“install.packages”命令進行使用。截止撰寫本文時止,CRAN上大約有1.2萬個包可以使用。其中有超過二分之一(大約6千多個)甚至更多的包跟資料科學相關。
PyPi擁有10倍於R的包數量,14.1萬個包。其中有3700個包被標記為用於特定的科學工程領域。還有很多包雖然沒被標記但的確也用於科學應用。
在這兩種語言中,似乎都沒有太多完全重複的包。當我在PyPi中搜索“Random Forest”時,我們得到了170個專案,但是都不盡相同。
儘管Python的軟體包數量是R的10倍,但資料科學相關的軟體包的數量大致相同。
第三方工具包的可用性是非常重要的。為了用指定的開發語言而不得不從頭開始寫程式很令人沮喪。但與此同時,如果你確實需要這樣做,我希望你能將你的成果貢獻給開源社群。
5. 特定任務下執行速度的比較
DataFrames與Pandas的比較可能更有意義。
我們進行了一項實驗,在同一環境下比較它們針對複雜分析任務時,每一個步驟的執行時間,結果如下。
▲大多數任務下Python比R更快
來源連結:
http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882
實驗原始碼:
http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882
如我們看到的,Python+Pandas比R中原生的DataFrames要快的多。請注意,這並不意味著Python執行的更快。Pandas庫是在Numpy的基礎上用C語言編譯的。
6. 資料視覺化的比較
我真正想表現的是ggplot2和matplotlib的比較。
Matplotlib是一隻800磅的大猩猩,雖然學習起來不是那麼容易,但是支援自定義並且非常容易擴充套件。而基於ggplot的自定義不是那麼簡單,甚至有些時候會非常難。
如果你喜歡漂亮的圖表,並且不怎麼需要自定義,R是個好選擇。如果你需要更多的功能,那麼Matplotlib甚至其他互動式的製圖工具會對你更有幫助。R中的ShinnyR也可以為你提供這種互動性製圖。
7. 我們只能二選一?
肯定有人會說,為什麼不能同時使用呢?
在如下一些情況下,你可以兩個同時使用:
你的小組或公司允許你這麼幹
你可以在你的程式設計環境中輕鬆安裝和維護
你的程式碼不需要進入另一個系統
這不會讓別人與你合作時感到困惑。
兩種語言同時使用的一些方法:
Python為R提供的開發包比如:rpy2、pyRserve、Rpython等等
R也有相對應的包:rPython、PythonInR、reticulate、rJython、SnakeCharmR、XRPython。
使用Jupyter,同時使用,示例如下:
reticulate地址:
https://blog.rstudio.com/2018/03/26/reticulate-r-interface-to-python/
然後我們就可以直接傳遞Pandas的DataFrames,rpy2會自動將其轉換為R的DataFrames,並通過“-i df”進行切換。
來源連結:
http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a
原始碼地址:
http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a
8. 預測R和Python的未來
有人在Kaggle的Kernel平臺上發表了關於“預測開發者們用R還是Python”的分析,他基於已有資料提出了一些有意思的看法。
如果你打算來年向Linux靠攏,那麼你更可能是Python使用者
如果你學習統計學,你更可能用R;如果學電腦科學,那麼更可能用Python
如果你還年輕(18-24歲),你更可能是Python使用者
如果你參加程式碼競賽,你更可能是Python使用者
如果你來年想使用android,你更可能是一個Python使用者
如果你來年想學習SQL,你更可能是R使用者
如果你使用MS Office,你更可能是R使用者
如果你來年想要Rasperry Pi,你更可能是一個Python使用者
如果你是全職學生,你更有可能成為Python使用者
如果您使用敏捷方法(Agile methodology),您更可能成為Python使用者
如果你對Ai的擔心大於期待,那麼你更有可能成為R使用者
9. 企業和個人偏好
當我與Google員工 、Stack Overflow 的領導人物Alex Martelli進行交流時,他向我解釋了google為什麼最開始只官方支援少數幾種開發語言。即使在像google這樣自由創新的環境下,似乎也有一些限制。這就是企業的一些選擇偏好。
除了企業偏好外,組織中第一個使用某種語言的人也可能是決定企業偏好的關鍵人物。比如在Deloitte第一個使用R的人,他仍然在公司工作,並且現在成為了首席資料科學家。我認為,不管用什麼語言,關鍵是追求並熱愛你的專案並努力成為最好的那一個。
雖然我不是首次嘗試這些工具的智者,但在此我還是要鄭重宣告,如果你正在研究一些重要的專案,那麼在專案中去比較兩種語言的差距是不可取的。
當然,雖然錯誤在所難免,但每一個精心規劃的專案都應該為資料科學家預留一部分空間,讓他們學習和實驗。保持開放的態度,並擁抱多元化。
最後,從個人角度來說,我將主要使用Python。同時不管未來是和Python一起使用還是獨立使用R,我都期待學習更多的R知識。
相關報道:
https://blog.usejournal.com/python-vs-and-r-for-data-science-833b48ccc91d
更多精彩
在公眾號後臺對話方塊輸入以下關鍵詞
檢視更多優質內容!
PPT | 讀書 | 乾貨 | 高考 | 世界盃
Python | 機器學習 | 區塊鏈 | 揭祕 | 福利
推薦閱讀
Q: Python和R,你選哪一個?
歡迎留言與大家分享
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯絡:[email protected]
更多精彩,請在後臺點選“歷史文章”檢視
相關推薦
資料科學大Battle,你站Python還是R
導讀:Python 或 R,這是一個問題。在資料科學工作中,你可能也經常遇到這個選擇困難問題。本
維基百科中的資料科學:手把手教你用Python讀懂全球最大百科全書
編譯:狗小白、李佳、張弛、魏子敏 沒人否認,維基百科是現代最令人驚歎的人類發明之一。 幾年前誰能想到,匿名貢獻者們的義務工作竟創造出前所未有的巨大線上知識庫?維基百科不僅是你寫大學論文時最好的資訊渠道,也是一個極其豐富的資料來源。 從自然語言處理到監督式機器學習,維
大資料開發學習路線圖,你都學會了嗎?
大資料路線; 在這裡還是要推薦下我自己建的大資料學習交流群:199427210,群裡都是學大資料開發的,如果你正在學習大資料 ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有大資料軟體開發相關的),包括我自己整理的一份2018最新的大資料進階資料和高階開發教程,
12月12日雲棲精選夜讀 | Python 10大謬論,你可能對Python存在的一些誤解!
謬誤 #1: Python 是一門新語言 伴隨著所有的初創公司正在使用它以及孩子們最近也在學習它的事實,這個謬誤為何仍然存在是可以理解的。實際上 Python 已經 超過23歲了, 它最初發佈於1991年, 早於 HTTP 熱點熱議 Python 10大謬論,你可能對Python存在的一些
九大資料視覺化利器,你有足球競猜平臺原始碼下載在使用嗎?
1. D3當下談論資料視覺化時,我們是繞不開 D3 的,這是由 Mike Bostock 建立的庫,它已成為在瀏覽器中處理 SVG 向量圖形的主要工具。使用 SVG 時,無論放大多少倍,影象看起來都不會出現明顯的畫素點。D3 允許建立各種高階圖形,如網狀圖、樹狀圖、地圖或氣泡圖,以及常用圖形(如條形圖或散佈圖
2017年十本必讀的大資料&人工智慧領域書籍,你都讀過嗎?
【資料猿導讀】年關將至,回顧2017,小編記得自己曾在年初的時候給自己定下一個小目標——就是讀3
Python面試基礎題十大陷阱,你中招了嗎?
我們在會碰到各種各樣的面試,有的甚至是HR專門為你設定的障礙,在python面試中也是,無論你是應聘Python web開發,爬蟲工程師,或是資料分析,還是自動化運維,這些python面試基礎題十大陷阱也許你會遇到,今天的python培訓總結出來給你以防萬一,收好不謝!問題1
2017年科技界十大新聞,你都知道嗎?
blank 展示 時代 https 狀態 tps 一段 隨著 支付 2017年馬上就要過去了,小編帶你一起來盤點今年最具影響力的十大科技新聞…… 1、人工智能AI元年到來 2017年也叫做AI元年,雖然很早前就開始被提出被關註,但今年它才開始
AI新時代-大神教你使用python+Opencv完成人臉解鎖(附源碼)
判斷 剛才 src 學習 需要 亂七八糟 很多 request mbx 好吧,夥計們,我回來了。說我拖更不寫文章的可以過來用你的小拳拳狠命地捶我胸口.... 那麽今天我們來講關於使用python+opencv+face++來實現人臉驗證及人臉解鎖。代碼量同樣不多,你可以將這
2018最新大神教你用Python玩轉數據視頻教程
data arr 學習者 ui組件 array 字符 玩轉 統計 afr 本課程共分為5個模塊(實際課時為8周):Module 01: Python基礎本模塊主要討論Python的基本語言結構、數據類型、基本運算、條件和循環、函數和模塊等內容,用它們就可以寫一些有用的程序了
Python大牛,必備書單 python入門
Python是最好的程式語言,知乎上類似的問題也很多,例如如何入門Python?如何3個月內入門Python?雖然現在可以學習的Python途徑很多,但是想要打好牢固的基礎知識,系統的學習Python的知識體系,還需要靠閱讀專業的書籍來不斷積累。 誰會成為AI 和大資料時代的第一開發語言
除了氣泡排序,你知道Python內建的排序演算法嗎?
對於程式設計演算法,可能很多讀者在學校第一個瞭解的就是氣泡排序,但是你真的知道 Python 內建排序演算法list.sort() 的原理嗎?它使用的是一種快速、穩定的排序演算法Timsort,其時間複雜度為 O(n log n),該演算法的目標在於處理大規模真實資料。
零基礎學python,看完這篇文章,你的python基礎就差不多了!乾貨【2】
3. 運算子 3.1 算數運算子 是完成基本的算術運算使用的符號,用來處理四則運算,而“+”和“*”還可以用來處理字串。 3.2 比較(關係)運算子 Python 2.x 中判斷 不等於 還可以使用 <
未明學院:入門資料分析,到底選Python還是R?
本文作者 未明學院資料分析方向老師 王老師 正如2012年《哈佛商業評論》中指出的:資料科學家是21世紀最性感的職業,而熟練的進行資料分析、資料探勘則是一名資料科學家必備的基礎技能之一。正所謂工欲善其事,必先利其器,在進行資料分析之前,我們需要掌握一項能夠用來進行
程式設計師程式設計入門必備的7大工具,你用過幾個?
作為入門級別的程式設計師,幾款趁手的程式設計軟體是最需要的。除了Git、Visual Basic……等等,其實還有很多很很酷的程式設計工具。接下來就給大家看7款不一樣的程式設計工具,如有心動,純屬巧合。 0.Warp,一款非常簡單且由於共享的工具。 Warp允許任何人共享他們的終端。只
普通專案經理和資深專案經理的這6大差距,你造嗎?
作為專案經理,我們都想由眾多普通的專案經理中脫穎而出成為資深專案經理,資深說的不一定是經驗,也可能只是處理事情的方式和對工作的態度。思維的轉變有時候更重要。 1.對下屬態度 普通專案經理: 情緒很容易被員工的行為左右,並不能及時的調整,員工一旦出錯或者是工作表現不理想,初級
工業4.0圍觀,大炒作,大問題,大差距,你發現了嗎?
工業4.0這個議題被提出已長達5年之久,如今仍是行業裡炙手可熱的話題。隨著工業 4.0的熱議持續升溫,人們估計工業 4.0 產生的影響將極其巨大。但是要想工業 4.0 能像熱議中那樣全部實現,必須採取相應的行動。 工業4.0的概念為何誕生於德國,絕非偶然。根據德國的經驗,工業4.0的未來實現,基於兩個前提條
剛入資料科學相關領域,您也許需要有七個這樣的思維
假設你剛剛被一家小型軟體公司聘為資料科學家。你感到欣喜若狂!你的辛勤工作和堅持不懈終於得到了回報。是時候將你的統計資料和機器學習知識付諸實踐了。那麼恭喜你終於加入了資料革命。 第1天到來,每個人都很高興見到這位“資料科學家”。該公司以前從未聘請過資料科學家,因此有些期望值並不切實際。更
零基礎學python,看完這篇文章,你的python基礎就差不多了!乾貨【1】
本文分為兩部分: Python基礎語法和麵向物件(下一篇分享面向物件) Python基礎語法 1. 認識Python 1.1 Python 簡介 Python 的創始人為吉多·範羅蘇姆(Guido van Rossum)。
Java學習的3大難題,你都是怎麼解決的?
Java難學,枯燥乏味,堅持不了等等,這些或許是初學者最煩惱的,其實學Java就三個問題,搞定了你就前途道路清晰,下面跟著小編一起來看看吧。 一、面向物件的歷史演變 搞清楚面向物件的歷史演變,Java的每個特性都是基於面向物件產生的。Java就是面向物件而生的,Java就是一種思想。你們人手