自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)科學(xué)大Battle,你站Python還是R

大數(shù)據(jù) 數(shù)據(jù)分析
Python 或 R,這是一個(gè)問(wèn)題。在數(shù)據(jù)科學(xué)工作中,你可能也經(jīng)常遇到這個(gè)選擇困難問(wèn)題。本文作者Brian Ray基于數(shù)十年的Python和R在數(shù)據(jù)科學(xué)領(lǐng)域的使用檢驗(yàn),分享了自己的看法,希望能夠幫大家做出更好的選擇。

數(shù)據(jù)科學(xué)大Battle,你站Python還是R

大數(shù)據(jù)文摘出品

編譯:Marcy、浩哥兒、Charlene、云舟

Python 或 R,這是一個(gè)問(wèn)題。在數(shù)據(jù)科學(xué)工作中,你可能也經(jīng)常遇到這個(gè)選擇困難問(wèn)題。本文作者Brian Ray基于數(shù)十年的Python和R在數(shù)據(jù)科學(xué)領(lǐng)域的使用檢驗(yàn),分享了自己的看法,希望能夠幫大家做出更好的選擇。

希望這篇文章能幫助那些在數(shù)據(jù)科學(xué)中糾結(jié)于選擇Python還是R的小伙伴們。如果你是數(shù)據(jù)科學(xué)領(lǐng)域的新手,或者你需要在項(xiàng)目中選擇一個(gè)語(yǔ)言來(lái)用,這篇文章一定能幫到你。

一、也許存在第三種選項(xiàng)

Hadley Wickham,RStudio的首席數(shù)據(jù)科學(xué)家,已經(jīng)給出了回答:與其說(shuō)選擇其中一種語(yǔ)言(R“還是”Python)更好,還不如說(shuō)讓兩種語(yǔ)言相互合作 (R“和”Python)是最佳的選擇。所以,我所說(shuō)的第三種選項(xiàng)就是同時(shí)使用Python和R。這讓我很感興趣,我也將在本文末尾處詳細(xì)闡述。

Hadley Wickham推特:https://twitter.com/hadleywickham

二、如何比較R和Python

以下不是兩種語(yǔ)言的詳細(xì)對(duì)比清單,只是一些值得進(jìn)行對(duì)比的要素:

  • 歷史:R和Python有著差異明顯又相互交錯(cuò)的歷史。
  • 使用群體:實(shí)地調(diào)查顯示了許多復(fù)雜的社會(huì)學(xué)和人類學(xué)因素。
  • 性能:詳細(xì)的性能比較,以及為什么很難比較兩種語(yǔ)言的原因。
  • 第三方支持:模塊、代碼庫(kù)、可視化工具、組織及開(kāi)發(fā)環(huán)境。
  • 用例:某些類型的工作或任務(wù)中,更適用于使用兩種語(yǔ)言中的一種。
  • 同時(shí)使用兩種語(yǔ)言:在Python中使用R,在R中使用Python。
  • R與Python預(yù)測(cè)能力的比較:介紹一個(gè)“自給自足”的練習(xí)。
  • 企業(yè)和個(gè)人偏好:揭曉最終答案

1. 歷史

簡(jiǎn)史:

  • ABC語(yǔ)言 ->Python問(wèn)世(1989年由Guido van Rossum創(chuàng)立)-> Python 2 (2000年) -> Python 3 (2008年)
  • Fortan語(yǔ)言->S語(yǔ)言(貝爾實(shí)驗(yàn)室)->R語(yǔ)言問(wèn)世(1991年由Ross Ihaka 和 Robert Gentleman創(chuàng)立)R 1.0.0 (2000年) -> R 3.0.2 (2013年)

2. 使用群體

比較Python與R的用戶時(shí),要謹(jǐn)記以下圖表:

只有50%的Python用戶同時(shí)使用R

上述結(jié)果假設(shè)所有的R程序員都用R來(lái)做“科學(xué)與數(shù)據(jù)研究”,無(wú)論程序員水平如何,我們能夠確定以上統(tǒng)計(jì)分布是真實(shí)的。

想進(jìn)一步了解Python的“熱潮”,可以閱讀我的文章,里面有關(guān)于Python熱潮的調(diào)查結(jié)果。

文章鏈接:

https://www.linkedin.com/pulse/python-hype-survey-results-experience-any-drastic-decline-brian-ray/

如果我們僅從“科學(xué)與數(shù)據(jù)研究”群體來(lái)看,這就引出了我們的第二個(gè)觀點(diǎn),即R/Python究竟適用于哪些群體?整個(gè)“科學(xué)與數(shù)據(jù)研究”群體存在著很多子群體,雖然這些子群體存在交叉,你可能會(huì)疑惑他們?cè)诟鼜V的大群體中是如何交互并有著不同的表現(xiàn)的。

以下是Python/R適用的一些子群體:

  • 深度學(xué)習(xí)
  • 機(jī)器學(xué)習(xí)
  • 高級(jí)分析
  • 預(yù)測(cè)分析
  • 統(tǒng)計(jì)學(xué)
  • 探索性數(shù)據(jù)分析學(xué)術(shù)研究
  • 近乎所有的計(jì)算研究領(lǐng)域

雖然每個(gè)專業(yè)領(lǐng)域似乎都服務(wù)于特定的群體,但你會(huì)發(fā)現(xiàn)R在統(tǒng)計(jì)學(xué)和數(shù)據(jù)探索領(lǐng)域使用更廣泛。不久之前,比起使用Python進(jìn)行數(shù)據(jù)探索,啟動(dòng)并運(yùn)行R能花費(fèi)較少的時(shí)間,況且你還需要花時(shí)間安裝Python。

所有一切都將被Jupyter Notebooks 和Anaconda技術(shù)顛覆。

注意:Jupyter Notebooks增加了在瀏覽器中編寫Python/R的功能;Anaconda可以輕松安裝并管理Python和R及其語(yǔ)言包。

現(xiàn)在你可以在友好的環(huán)境中編程,并用創(chuàng)造性的方式來(lái)生成報(bào)表和完成數(shù)據(jù)分析。程序員與他們鐘愛(ài)的編程語(yǔ)言之間已不存在屏障?,F(xiàn)在,Python能夠在一個(gè)平臺(tái)獨(dú)立運(yùn)行,并且提供前所未有的快速、簡(jiǎn)潔的分析功能。

影響人們選擇編程語(yǔ)言的另一個(gè)區(qū)別在于“開(kāi)源”,不僅僅在于開(kāi)源庫(kù),還包括協(xié)作群體對(duì)于開(kāi)源的貢獻(xiàn)。諷刺的是,像Tensorflow和GNU科學(xué)計(jì)算庫(kù)(分別隸屬于Apache和GPL)這類開(kāi)源許可軟件,似乎同時(shí)綁定Python和R。

盡管還存在不少R的支持者,但Python使用群體中更多人是Python的純粹支持者。另一方面,似乎有更多的企業(yè)支持R,尤其是那些曾經(jīng)廣泛使用統(tǒng)計(jì)學(xué)來(lái)做分析的企業(yè)。

最后,關(guān)于群體和協(xié)作,在Github中Python的支持者更多。在最新的Python語(yǔ)言包中,像Tensorflow這樣的包擁有超過(guò)3.5萬(wàn)顆星的用戶收藏。相反,再看一下最新的R語(yǔ)言包,像Shiny和Stan,都只有少于2千顆星的用戶收藏。

3. 性能

Python和R的比較一直都不太容易,因?yàn)橛刑嘀笜?biāo)和情況需要測(cè)試。在任何一個(gè)特定的硬件環(huán)境上測(cè)試都很困難。有些操作分析在一種語(yǔ)言上已經(jīng)進(jìn)行了優(yōu)化,但在另一種語(yǔ)言上卻沒(méi)有。但無(wú)論如何,我們還是要進(jìn)行這項(xiàng)比較。

非常簡(jiǎn)單的循環(huán)語(yǔ)句比較

開(kāi)始之前,我們先思考一下在使用層面Python和R的區(qū)別。你真的想要用R寫很多循環(huán)嗎?我覺(jué)得不同的語(yǔ)言在被開(kāi)發(fā)時(shí)的意圖上應(yīng)該是各不相同的。

  1. import numpy as np 
  2. %load_ext rpy2.ipython 
  3.  
  4. defdef  do_loopdo_loop(u1): 
  5.     # Initialize `usq` 
  6.     usq = {} 
  7.     for i in range(100): 
  8.       # i-th element of `u1` squared into `i`-th position of `usq` 
  9.       usq[i] = u1[i] * u1[i] 
  1. %%R 
  2. do_loop <- function(u1) { 
  3.     # Initialize `usq` 
  4.         usq <- 0 
  5.     for(i in 1:100) { 
  6.       # i-th element of `u1` squared into `i`-th position of `usq` 
  7.       usq[i] <- u1[i]*u1[i] 
  8.     } 
  1. %%timeit -n 1000 
  2. %%R 
  3. u1 <- rnorm(100) 
  4. do_loop(u1) 

運(yùn)行結(jié)果:

  1. 1.58 ms ± 42.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 
  1. %%%%timeittimeit  --nn  10001000 
  2.  u1u1    ==  npnp..randomrandom..randnrandn((100100)) 
  3.  do_loopdo_loop(u1) 

運(yùn)行結(jié)果:

  1. 36.9 µs ± 5.99 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 

在程序的合理性檢驗(yàn)中,加載時(shí)間以及在命令行上的總運(yùn)行時(shí)間:R語(yǔ)言是0m0.238s,Python是0m0.147s。再次強(qiáng)調(diào),這并不是一個(gè)嚴(yán)謹(jǐn)?shù)目茖W(xué)測(cè)試。

但這個(gè)簡(jiǎn)單的測(cè)試表明,Python的速度明顯更快。雖然在大多數(shù)情況下,這并不是十分重要。

一種語(yǔ)言的速度快慢對(duì)于一個(gè)數(shù)據(jù)科學(xué)家而言的意義在哪里呢?這兩種語(yǔ)言的興起是因?yàn)樗鼈兛梢员划?dāng)作“命令語(yǔ)言”來(lái)使用。例如,我們使用Python工作時(shí),對(duì)Pandas語(yǔ)言包的依賴性很大。這就引出了兩種語(yǔ)言模塊和庫(kù)上更深層次的比較,事實(shí)上,這也是一個(gè)更具意義的比較。

4. 第三方支持

Python擁有PyPI,而R使用CRAN,并且它們都可以使用Anaconda。

CRAN使用其內(nèi)置的“install.packages”命令進(jìn)行使用。截止撰寫本文時(shí)止,CRAN上大約有1.2萬(wàn)個(gè)包可以使用。其中有超過(guò)二分之一(大約6千多個(gè))甚至更多的包跟數(shù)據(jù)科學(xué)相關(guān)。

PyPi擁有10倍于R的包數(shù)量,14.1萬(wàn)個(gè)包。其中有3700個(gè)包被標(biāo)記為用于特定的科學(xué)工程領(lǐng)域。還有很多包雖然沒(méi)被標(biāo)記但的確也用于科學(xué)應(yīng)用。

在這兩種語(yǔ)言中,似乎都沒(méi)有太多完全重復(fù)的包。當(dāng)我在PyPi中搜索“Random Forest”時(shí),我們得到了170個(gè)項(xiàng)目,但是都不盡相同。

盡管Python的軟件包數(shù)量是R的10倍,但數(shù)據(jù)科學(xué)相關(guān)的軟件包的數(shù)量大致相同。

第三方工具包的可用性是非常重要的。為了用指定的開(kāi)發(fā)語(yǔ)言而不得不從頭開(kāi)始寫程序很令人沮喪。但與此同時(shí),如果你確實(shí)需要這樣做,我希望你能將你的成果貢獻(xiàn)給開(kāi)源社區(qū)。

5. 特定任務(wù)下執(zhí)行速度的比較

DataFrames與Pandas的比較可能更有意義。

我們進(jìn)行了一項(xiàng)實(shí)驗(yàn),在同一環(huán)境下比較它們針對(duì)復(fù)雜分析任務(wù)時(shí),每一個(gè)步驟的執(zhí)行時(shí)間,結(jié)果如下。

大多數(shù)任務(wù)下Python比R更快

來(lái)源鏈接:

http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882

實(shí)驗(yàn)源碼:

http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882

如我們看到的,Python+Pandas比R中原生的DataFrames要快的多。請(qǐng)注意,這并不意味著Python運(yùn)行的更快。Pandas庫(kù)是在Numpy的基礎(chǔ)上用C語(yǔ)言編譯的.

6. 數(shù)據(jù)可視化的比較

數(shù)據(jù)可視化的比較

我真正想表現(xiàn)的是ggplot2和matplotlib的比較。

Matplotlib是一只800磅的大猩猩,雖然學(xué)習(xí)起來(lái)不是那么容易,但是支持自定義并且非常容易擴(kuò)展。而基于ggplot的自定義不是那么簡(jiǎn)單,甚至有些時(shí)候會(huì)非常難。

如果你喜歡漂亮的圖表,并且不怎么需要自定義,R是個(gè)好選擇。如果你需要更多的功能,那么Matplotlib甚至其他交互式的制圖工具會(huì)對(duì)你更有幫助。R中的ShinnyR也可以為你提供這種交互性制圖。

7. 我們只能二選一?

肯定有人會(huì)說(shuō),為什么不能同時(shí)使用呢?

在如下一些情況下,你可以兩個(gè)同時(shí)使用:

  • 你的小組或公司允許你這么干
  • 你可以在你的編程環(huán)境中輕松安裝和維護(hù)
  • 你的代碼不需要進(jìn)入另一個(gè)系統(tǒng)
  • 這不會(huì)讓別人與你合作時(shí)感到困惑。

兩種語(yǔ)言同時(shí)使用的一些方法:

  • Python為R提供的開(kāi)發(fā)包比如:rpy2、pyRserve、Rpython等等
  • R也有相對(duì)應(yīng)的包:rPython、PythonInR、reticulate、rJython、SnakeCharmR、XRPython。
  • 使用Jupyter,同時(shí)使用,示例如下:

reticulate地址:

https://blog.rstudio.com/2018/03/26/reticulate-r-interface-to-python/

然后我們就可以直接傳遞Pandas的DataFrames,rpy2會(huì)自動(dòng)將其轉(zhuǎn)換為R的DataFrames,并通過(guò)“-i df”進(jìn)行切換。

來(lái)源鏈接:

http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a

源碼地址:

http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a

8. 預(yù)測(cè)R和Python的未來(lái)

有人在Kaggle的Kernel平臺(tái)上發(fā)表了關(guān)于“預(yù)測(cè)開(kāi)發(fā)者們用R還是Python”的分析,他基于已有數(shù)據(jù)提出了一些有意思的看法。

  • 如果你打算來(lái)年向Linux靠攏,那么你更可能是Python用戶
  • 如果你學(xué)習(xí)統(tǒng)計(jì)學(xué),你更可能用R;如果學(xué)計(jì)算機(jī)科學(xué),那么更可能用Python
  • 如果你還年輕(18-24歲),你更可能是Python用戶
  • 如果你參加代碼競(jìng)賽,你更可能是Python用戶
  • 如果你來(lái)年想使用android,你更可能是一個(gè)Python用戶
  • 如果你來(lái)年想學(xué)習(xí)SQL,你更可能是R用戶
  • 如果你使用MS Office,你更可能是R用戶
  • 如果你來(lái)年想要Rasperry Pi,你更可能是一個(gè)Python用戶
  • 如果你是全職學(xué)生,你更有可能成為Python用戶
  • 如果您使用敏捷方法(Agile methodology),您更可能成為Python用戶
  • 如果你對(duì)Ai的擔(dān)心大于期待,那么你更有可能成為R用戶

9. 企業(yè)和個(gè)人偏好

當(dāng)我與Google員工 、Stack Overflow 的領(lǐng)導(dǎo)人物Alex Martelli進(jìn)行交流時(shí),他向我解釋了google為什么最開(kāi)始只官方支持少數(shù)幾種開(kāi)發(fā)語(yǔ)言。即使在像google這樣自由創(chuàng)新的環(huán)境下,似乎也有一些限制。這就是企業(yè)的一些選擇偏好。

除了企業(yè)偏好外,組織中第一個(gè)使用某種語(yǔ)言的人也可能是決定企業(yè)偏好的關(guān)鍵人物。比如在Deloitte第一個(gè)使用R的人,他仍然在公司工作,并且現(xiàn)在成為了首席數(shù)據(jù)科學(xué)家。我認(rèn)為,不管用什么語(yǔ)言,關(guān)鍵是追求并熱愛(ài)你的項(xiàng)目并努力成為最好的那一個(gè)。

雖然我不是首次嘗試這些工具的智者,但在此我還是要鄭重聲明,如果你正在研究一些重要的項(xiàng)目,那么在項(xiàng)目中去比較兩種語(yǔ)言的差距是不可取的。

當(dāng)然,雖然錯(cuò)誤在所難免,但每一個(gè)精心規(guī)劃的項(xiàng)目都應(yīng)該為數(shù)據(jù)科學(xué)家預(yù)留一部分空間,讓他們學(xué)習(xí)和實(shí)驗(yàn)。保持開(kāi)放的態(tài)度,并擁抱多元化。

最后,從個(gè)人角度來(lái)說(shuō),我將主要使用Python。同時(shí)不管未來(lái)是和Python一起使用還是獨(dú)立使用R,我都期待學(xué)習(xí)更多的R知識(shí)。

相關(guān)報(bào)道:

https://blog.usejournal.com/python-vs-and-r-for-data-science-833b48ccc91d

【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號(hào)“大數(shù)據(jù)文摘( id: BigDataDigest)”】

     大數(shù)據(jù)文摘二維碼

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2020-02-05 09:36:55

數(shù)據(jù)科學(xué)RPython

2020-06-05 08:31:29

編程語(yǔ)言RPython

2023-11-10 10:39:58

2019-04-14 19:30:02

“PythonR數(shù)據(jù)科學(xué)

2015-11-13 13:48:10

Python數(shù)據(jù)科學(xué)網(wǎng)站開(kāi)發(fā)

2021-01-13 15:13:07

Python開(kāi)發(fā) 工具

2020-08-12 11:15:32

機(jī)器學(xué)習(xí)數(shù)據(jù)科學(xué)人工智能

2015-07-29 11:14:20

r語(yǔ)言數(shù)據(jù)科學(xué)

2017-07-05 14:42:13

2017-01-10 09:15:11

2013-12-04 10:00:56

PythonR語(yǔ)言數(shù)據(jù)科學(xué)家

2017-09-08 10:00:39

PythonR語(yǔ)言開(kāi)發(fā)

2020-02-14 13:53:33

Python 開(kāi)發(fā)編程語(yǔ)言

2015-08-18 13:33:16

r語(yǔ)言

2018-09-12 21:13:40

Python數(shù)據(jù)科學(xué)語(yǔ)言

2018-09-18 23:25:49

Python數(shù)據(jù)科學(xué)庫(kù)

2022-05-26 08:01:29

PythonR編程語(yǔ)言

2018-02-01 16:25:55

2015-08-12 15:10:22

2018-01-31 22:30:05

數(shù)據(jù)科學(xué)家數(shù)據(jù)專家工程師
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)