為什麼R用於資料科學 - 而不是Python?
那裡有數百種程式語言,例如,採用一種字母程式語言的整個字母表。在資料科學領域,有兩大競爭者:R和Python。現在為什麼這個部落格關於R而不是Python?
我必須坦白:我真的很想要Python。我深入研究了語言及其擴充套件。然而,它從來沒有真正對我有用。我認為其中一個問題是Python試圖成為每個人的寵兒。它可以做任何事情......和它相反。不,真的,它是學習程式設計的好語言,但我認為它有一些非常嚴重的缺陷。我在這裡列出了一些:
-
它從使用哪個版本開始!當前版本的版本號為3,但仍然有很多程式碼基於以前的版本號2.問題是沒有向後相容性。甚至
print
命令的語法都改變了!*接下來要選擇哪個發行版!對於R使用者來說,似乎是一個笑話對於Python使用者來說是一個悲傷的現實:那裡有各種不同的發行版。最著名的資料科學是Anaconda:ofollow,noindex">https ://www.anaconda.com/ 。其中一個原因是Python中的整個包系統很亂。為了給你一個例子,看看官方文件:https ://packaging.python.org/tutorials/installing-packages/ - 七(!)頁面基本上是R中的一個命令:(install.packages()
我知道,這不完全公平,但你明白了。*有幾個GUI,不可否認,這也是一個品味的問題,但在我看來,當談到資料科學任務 - 你需要線上工作和指令碼的組合 - 沒有比這更好的GUI來自微軟的RStudio(現在有Rodeo,免費下載:https ://www.yhat.com/products/rodeo ,但我不知道它有多成熟)。*何時使用函式以及何時在物件上使用方法沒有一般規則。這個問題的原因就是我上面所說的:Python希望成為每個人的寵兒,並試圖同時實現一切。在這個有啟發性的討論中,不僅可以看到我,人們爭相找到何時使用的標準:https ://stackoverflow.com/questions/8108688/in-python-when-should-i-usea-a-功能代替方法 。這裡可以找到一個具體的例子,其中解釋了為什麼函式any(df2 == 1)
給出了錯誤的結果,你必須使用例如方法(df2 == 1).any()
。非常容易混淆和容易出錯。*更復雜的資料科學資料結構不是核心語言的一部分。例如,您需要用於向量的NumPy包和用於data.frames的pandas包。這本身不是問題,而是這帶來的不一致。舉個例子:雖然NumPy和pandas支援向量化程式碼,但基本Python不支援它,你必須使用好的舊迴圈。*Python和R都不是最快的語言,但是與R ++(通過Dirk Eddelbuettel的Rcpp)相比,與最快的C ++之一的整合在Python中的表現要好得多,現在它可以被認為是標準方法。所有R資料結構都由相應的C ++類支援,並且有一種通用的方法來編寫可以像常規R函式一樣呼叫的超快C ++函式:
library``(Rcpp)` `bmi_R <-` `function``(weight, height) {` `weight / (height * height)` `}` `bmi_R``(80, 1.85)` `# body mass index of person with 80 kg and 185 cm` `## [1] 23.37473` `cppFunction``("` `float` `bmi_cpp``(float weight, float height) {` `return weight / (height * height);` `}` `")` `bmi_cpp``(80, 1.85)` `# same with cpp function` `## [1] 23.37473`
在資料科學領域使用Python的一個主要原因是深度學習:神經網路。像Tensorflow這樣的主要框架和像Keras這樣的API過去都是由Python控制的,但是現在也有適用於R的優秀包裝器(https://tensorflow.rstudio.com/ 和https://keras.rstudio.com/ )。
總而言之,我認為R確實是大多數資料科學應用的最佳選擇。學習曲線在開始時可能會稍微陡峭,但是當您使用更復雜的概念時,它比Python更容易使用。