偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

大數(shù)據(jù) 數(shù)據(jù)分析
Python 或 R,這是一個(gè)問題。在數(shù)據(jù)科學(xué)工作中,你可能也經(jīng)常遇到這個(gè)選擇困難問題。本文作者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è)問題。在數(shù)據(jù)科學(xué)工作中,你可能也經(jīng)常遇到這個(gè)選擇困難問題。本文作者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è)語言來用,這篇文章一定能幫到你。

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

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

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

二、如何比較R和Python

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

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

1. 歷史

簡史:

  • ABC語言 ->Python問世(1989年由Guido van Rossum創(chuàng)立)-> Python 2 (2000年) -> Python 3 (2008年)
  • Fortan語言->S語言(貝爾實(shí)驗(yàn)室)->R語言問世(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來做“科學(xué)與數(shù)據(jù)研究”,無論程序員水平如何,我們能夠確定以上統(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ù)研究”群體來看,這就引出了我們的第二個(gè)觀點(diǎn),即R/Python究竟適用于哪些群體?整個(gè)“科學(xué)與數(shù)據(jù)研究”群體存在著很多子群體,雖然這些子群體存在交叉,你可能會(huì)疑惑他們在更廣的大群體中是如何交互并有著不同的表現(xiàn)的。

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

  • 深度學(xué)習(xí)
  • 機(jī)器學(xué)習(xí)
  • 高級分析
  • 預(yù)測分析
  • 統(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及其語言包。

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

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

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

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

3. 性能

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

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

開始之前,我們先思考一下在使用層面Python和R的區(qū)別。你真的想要用R寫很多循環(huán)嗎?我覺得不同的語言在被開發(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語言是0m0.238s,Python是0m0.147s。再次強(qiáng)調(diào),這并不是一個(gè)嚴(yán)謹(jǐn)?shù)目茖W(xué)測試。

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

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

4. 第三方支持

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

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

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

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

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

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

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

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

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

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

來源鏈接:

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

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

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

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

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

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

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

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

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

7. 我們只能二選一?

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

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

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

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

  • Python為R提供的開發(fā)包比如:rpy2、pyRserve、Rpython等等
  • R也有相對應(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,并通過“-i df”進(jìn)行切換。

來源鏈接:

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

源碼地址:

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

8. 預(yù)測R和Python的未來

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2020-02-05 09:36:55

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

2020-06-05 08:31:29

編程語言RPython

2023-11-10 10:39:58

2019-04-14 19:30:02

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

2020-08-12 11:15:32

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

2015-11-13 13:48:10

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

2021-01-13 15:13:07

Python開發(fā) 工具

2015-07-29 11:14:20

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

2017-07-05 14:42:13

2017-09-08 10:00:39

PythonR語言開發(fā)

2017-01-10 09:15:11

2013-12-04 10:00:56

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

2020-02-14 13:53:33

Python 開發(fā)編程語言

2015-08-18 13:33:16

r語言

2015-08-12 15:10:22

2018-02-01 16:25:55

2018-09-18 23:25:49

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

2018-09-12 21:13:40

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

2022-05-26 08:01:29

PythonR編程語言

2018-01-31 22:30:05

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

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