數據科學用 R 還是 Python 好?專業教授多角度分析 - OSCHINA...

2020-12-25 開源中國

Norm Matloff 是加州大學戴維斯分校的計算機科學教授,他針對數據科學界常年爭論的要點,作了一篇關於 R 和 Python 的對比分析。

在分析開始之前,Matloff 先拋出自己可能帶有的潛在偏見:他寫過 4 本與 R 相關的書,在 useR! 和其他 R 的會議上做過演講,並且目前擔任 R 期刊的主編。但同時他也用 Python 敲過多年代碼。Matloff 希望自己的分析能夠被認為是公平且有幫助的。

接著,這位專業的計算機科學家和統計學家從以下幾方面對 R 和 Python 做出了對比:

優雅

Python 明顯勝出。

當然這是主觀的。但是在不同程式語言的對比之下,Python 大大減少了括號的使用:

if x > y: z = 5 w = 8

vs.

if (x > y){ z = 5 w = 8}

Python 很時尚!

學習曲線

R 在這一場贏得巨大勝利。

作為一名教育工作者,Matloff 對這一點尤其感興趣。

若使用 Python 做數據科學,必須學習很多不在基礎 Python 中的材料,例如 NumPy、Pandas 和 matplotlib。

相比之下,矩陣類型和基本圖形已經內置於基礎 R,新手可以在幾分鐘內完成簡單的數據分析。

即使對於精通系統的人來說,Python 庫也很難配置,而大多數 R 軟體包都是開箱即用的。

可用的數據科學庫

R 輕微取勝。

CRAN 擁有超過 14,000 個包。PyPI 的包則多於 183,000 個,不過在數據科學方面看起來似乎比較薄弱。

Matloff 舉了一個例子:他曾經需要代碼來快速計算給定數據點的最近相鄰,在 CRAN 中能夠立即找到不止一個包來執行此操作。而在 PyPi 中粗略搜索後空手而歸。

他還指出在 PyPI 中進行以下搜索沒有任何結果:EM 算法;對數線性模型;泊松回歸;工具變量;空間數據;整體錯誤率等等。

「這並不是說這些東西不存在 Python 庫。只是在 PyPI 中不容易找到它們,而在 CRAN 中很容易找到。」

事實上,R 具有規範的封裝結構是一個很大的優勢。 安裝新軟體包時,確切地知道會出現什麼。 類似地,R 的泛型函數對於 R 來說也是一大的優勢。當使用新的包時,人們知道自己可以使用 print()、plot()、summary() 等,所有這些都構成了包的「通用語言」。

機器學習

Python 略微勝出。

R vs. Python 辯論主要是統計與 CS 的爭論,由於神經網絡的大多數研究來自 CS,因此 NN(Neural Network,神經網絡) 的可用軟體主要是 Python。 RStudio 在開發 Keras 實現方面做了一些出色的工作,但目前為止,R 在這個領域受到限制。

另一方面,隨機森林研究(random forest research)主要由統計界進行,在這個領域 R 更具優越性。R 還具有優異的梯度增強封裝。

這裡 Python 略勝一籌,因為對很多人來說,機器學習就意味著神經網絡。

統計正確性

R 贏得大勝。

Matloff 表示 「R 是由統計學家為統計學家編寫的」。他發現「那些主要使用 Python 進行機器學習的人往往對其中的統計問題缺乏了解,甚至不屑一顧」。

並行計算

雙方打成平手。

R 和 Python 的基礎版本都不能很好地支持多核計算。 Python 中的線程很適合 I/O,但由於臭名昭著的 Global Interpreter Lock,使用它們進行多核計算是不可能的。 Python 的多處理軟體包和 R 的「並行」軟體包都不是好的解決方法。 支持集群計算的外部庫在兩種語言中都 OK。

目前,Python 具有更好的 GPU 接口。

C/C++ 接口和性能增強

R 略勝一籌。

雖然有 SWIG 等工具可以將 Python 連接到 C/C++,但目前沒有像 R 的 Rcpp 那樣強大的功能。Pybind11 軟體包正在開發中。

此外,R 的新 ALTREP 理念在提高性能和可用性方面具有巨大潛力。

另一方面,Python 的 Cython 和 PyPy 變體在某些情況下可以預先消除對顯式 C/C++ 接口的需求。確實有人會說 Cython 是一個 C/C++ 接口。

面向對象,元編程

依然是 R 略勝一籌。

舉例來說,儘管函數在兩種語言中都可作為對象,但 R 比 Python 更進一步。Matloff 說每當自己使用 Python 工作時,都會因為無法直接將函數輸入到終端或編輯它而感到惱火,但在 R 上就可以這樣做。

Python 只有一個 OOP 範例。在 R 中,可以選擇幾種(S3、S4、R6 等),不過也有些人可能會爭論這是否是一件好事。

R 有神奇的元編程特性(產生代碼的代碼),但是大多數 CS 人都沒有意識到它。

語言統一性

R 損失巨大。

Python 目前正在從 2.7 版過渡到 3.x 版,這會導致一些中斷,但不至於太複雜。

相比之下,R 正迅速轉變為兩種相互無法理解的語言,即普通的 R 和 Tidyverse。 作為一名經驗豐富的 R 程式設計師,Matloff 表示自己無法閱讀 Tidy 代碼,因為它調用了許多他不知道的 Tidyverse 函數。也有網友評論說「人們可以在對 R 沒什麼了解的情況下,在 Tidyverse 中進行編碼」。

關聯的數據結構

Python 獲勝。

經典計算機科學數據結構,例如二叉樹,很容易在 Python 中實現。它不是基礎 R 的一部分,但可以以各種方式完成,例如數據結構包,它包含了使用廣泛的 Boost C++ 庫。

在線幫助

R 大獲勝。

首先,R 的基本 help() 函數比 Python 的信息量大得多。它很好地補充了 example()。最重要的是,在 R 包中能夠編寫 vignette(通過函數 vignette() 返回,一般是 PDF 格式的實用介紹性文章)使 R 在這方面成為了一個不折不扣的贏家。

R/Python 互操作性

RStudio 開發的 reticulate 包能夠在 R 上運行 Python,可以作為 Python 和 R 之間的橋梁,適用於純計算。 但它並沒有解決 Python 中出現的棘手問題,例如虛擬環境等。

目前,Matloff 不建議編寫混合的 Python/R 代碼。

分析了這麼多,最後當然還是要根據實際需求來進行選擇,畢竟語言之間沒有孰優孰劣。

原文:https://github.com/matloff/R-vs.-Python-for-Data-Science

相關焦點

  • 數據科學探索(python 與 R 的比較)
    這一期主要應用python和R 這2種工具對某真實信貸數據進行分析,通過數據的讀取、清洗、探索、模型構建等,比較2種方法在機器學習數據科學上的實現
  • 數據科學大Battle,你站Python還是R
    在數據科學工作中,你可能也經常遇到這個選擇困難問題。本文作者Brian Ray基於數十年的Python和R在數據科學領域的使用檢驗,分享了自己的看法,希望能夠幫大家做出更好的選擇。希望這篇文章能幫助那些在數據科學中糾結於選擇Python還是R的小夥伴們。
  • 數據科學中的Python與R
    對於這種現象,很多人可能和我們一樣,都對數據科學心存懷疑,到底什麼是數據科學?它是一門新生事物,還是新瓶子裡裝了統計學的舊酒?我們需要處理這些原始數據,使得其便於分析。因此我們創建出管道對數據進行再加工:聯合、拼湊、清理,隨便你叫它們什麼好了,就是要對數據進行再加工。我們可以使用Excel、Python、R、SQL 等完成這件任務。
  • python數據科學-單變量數據分析
    我們把在正式開始機器學習之前對數據的了解過程成為探索性分析 , 簡稱 EDA。02|單變量數據分析:單邊量數據是指數據集中只有一個變量 ,也可以是多列中的某一列(可以理解成是某一個指標)。比如一個班的體測成績表是一個數據集(包含身高、體重、1000 米用時之類的各種指標),那麼該數據集裡面的某一個指標就可以看作是一個單變量數據。
  • 用R也可以跑Python了
    大數據文摘作品編譯:大茜、錢天培R還是Python?如果你主要從事數據分析、統計建模和可視化,R大概是你的不二之選。但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。
  • 用R也可以跑Python了
    >大數據文摘作品編譯:大茜、錢天培R還是Python?如果你主要從事數據分析、統計建模和可視化,R大概是你的不二之選。但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。後果是,寫個for loop還出bug真的是家常便飯。報警!面對這種困境的絕不止你一個人!
  • 帶你和Python與R一起玩轉數據科學: 探索性數據分析(附代碼)
    本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析。內容簡介本系列將介紹如何在現在工作中用兩種最流行的開源平臺玩轉數據科學。本文先來看一看數據分析過程中的關鍵步驟 – 探索性數據分析(Exploratory Data Analysis,EDA)。探索性數據分析發生在數據收集和數據清理之後,而在數據建模和分析結果可視化展現之前。然而,這是一個可反覆的過程。做完某種EDA後,我們可以嘗試建立一些數據模型或者生成一些可視化結果。同時,根據最新的分析結果我們又可以進行進一步的EDA,等等。
  • R vs Python:硬碰硬的數據分析
    愛數據(lovedata.cn)是最大、最專業的大數據在線學習社區,專注大數據、數據分析、數據挖掘、數據應用案例和數據可視化等領域
  • 【好文翻譯】R vs Python:硬碰硬的數據分析
    我們會平行使用Python和R分析一個數據集,展示兩種語言在實現相同結果時需要使用什麼樣的代碼。這讓我們了解每種語言的優缺點,而不是猜想。在Dataquest,我們教授兩種語言,並認為兩者在數據科學工具箱中都佔據各自的地位。 我們將會分析一個NBA數據集,包含運動員和他們在2013-2014賽季的表現,可以在這裡下載這個數據集。
  • python數據分析專題 (7):python數據分析模塊
    也就是這些python的擴展包讓python可以做數據分析,主要包括numpy,scipy,pandas,matplotlib,scikit-learn等等諸多強大的模塊,在結合上ipython交互工具 ,以及python強大的爬蟲數據獲取能力,字符串處理能力,讓python成為完整的數據分析工具。
  • R vs. Python,數據分析中誰與爭鋒?
    作者丨Sunil Kappal譯者丨安翔R和Python兩者誰更適合數據分析領域?在某些特定情況下誰會更有優勢?還是一個天生在各方面都比另一個更好?當我們想要選擇一種程式語言進行數據分析時,相信大多數人都會想到R和Python——但是從這兩個非常強大、靈活的數據分析語言中二選一是非常困難的。
  • 一篇文章告訴你,該學R還是Python
    它是一種靈活的語言,在處理一些新東西上表現很好,並且注重可讀性和簡單性,它的學習曲線是比較低的。和R類似,Python也有包,pypi是一個Python包的倉庫,裡面有很多別人寫好的Python庫。Python也是一個大社區,但它是一個有點比較分散,因為它是一個通用的語言。然而,Python自稱他們在數據科學中更佔優勢地位:預期的增長,更新穎的科學數據應用的起源在這裡。
  • 一篇文章告訴你,該學R還是Python!
    已獲轉載授權對於想從事數據行業的人和數據工作者來說,是學習R還是python,哪個工具更實用一直被大家爭論。(註:DataCamp是一個在線互動教育平臺,提供了數據科學和R編程課程。)python和R是統計學中兩種最流行的的程式語言,R的功能性主要是統計學家在開發時考慮的(R具有強大的可視化功能),而Python因為易於理解的語法被大家所接受。在這篇文章中,我們將重點介紹R和Python以及它們在數據科學和統計上地位之間的差異。
  • 做數據分析,Python和R究竟哪個更強?
    幾十年來,研究人員和開發人員一直在爭論,對於進行數據科學和數據分析,Python和R語言哪個才是更好的選擇?近年來,數據科學在生物技術、金融和社交媒體等多個行業迅速發展。數據科學的重要性不僅得到了業內人士的認可,而且還得到了許多學術機構的認可,目前越來越多的學校都開始設立數據科學學位。
  • Python數據科學實踐 | 資料庫1
    大家好,基於Python的數據科學實踐課程又到來了,大家盡情學習吧。本期內容主要由智億同學與政委聯合推出。資料庫永遠是數據管理上最值得使用的工具。而把所收集的大量數據放入資料庫之後再處理是數據科學實踐項目中必不可少的一步。
  • 深度| R vs Python:R是現在最好的數據科學語言嗎?
    O』Reilly:R語言可以說是最常見的數據程式語言最後,媒體 O'Reilly 在過去的幾年裡進行了一次數據科學調查,他們使用調查數據來分析數據科學的趨勢。除了其他的之外,它們分析工具的使用情況來確定哪些工具是數據科學家最常使用的。
  • python數據分析--回歸函數及線性回歸分析
    2.工具數據分析有很多成熟的工具可以使用,如R、python、spss等。此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。# 工具:python3#固定導入import numpy as np #科學計算基礎庫,多維數組對象ndarrayimport pandas as pd #數據處理庫,DataFrame(二維數組)import matplotlib as mpl #畫圖基礎庫import matplotlib.pyplot
  • [原]深入對比數據科學工具箱:Python和R 非結構化數據的結構化
    對於這些非結構化數據,最常見的數據結構就是JSON,而對應的資料庫就是MongoDB。利用MongoDB這樣的NoSQL資料庫,我們可以把異構的數據源整合到若干個collection中,通過key-value的形式對數據進行增刪改查。雖然MongoDB在數據聚合上有天然的優勢,但是在事務處理(OLTP)與數據分析(OLAP)上的表現卻不盡人意。
  • Python入門學習之數據分析實戰獲取數據
    想用一個完整的案例講解Python數據分析的整個流程和基礎知識,實際上以一個數據集為例,數據集是天池上的一個短租數據集,後臺回覆:短租數據集,即可獲得。先來想一下數據分析的流程,第一步獲取數據,因此本節內容就是獲取數據以及對數據的基本操作。
  • 未來,不是【Python vs R】,而是【Python and R】
    原標題:未來,不是【Python vs R】,而是【Python and R】     近年來,一方面,民間對Python與R的對比分析「如火如荼」,給人感覺是「你死我活」;另一方面,業界開始探討Python和R的集成應用,好像是「你中有我,我中有你」。