天天看點

R語言和 Python —— 一個錯誤的分裂

最近有一些文章提出與年齡相關的問題:“嶄露頭角的年輕資料科學家們是學習r語言還是python更好?"

答案似乎都是“視情況而定”,在現實中沒有必要在r和python中做出選擇,因為你兩個都用得到。

它被稱為rpy2:http://rpy.sourceforge.net/rpy2/doc-2.1/html/introduction.html

什麼是"資料科學"?

在談論rpy2之前,先來說一下“資料科學”,我要說的是“資料科學”是一個奇怪的詞。因為幾乎所有的科學都是“資料科學”。“無資料科學”則是完全不同的領域:哲學。“資料科學”是一門通過系統觀察,對照實驗,貝葉斯推理的開放試驗理念的科學學科。

資料科學”的目标是從資料中得出有效的統計推論。标簽“資料”是指資料用于做什麼并不重要,但這是錯誤的:它是難以且不可能做到科學的在沒有得到資料的詳細資訊,得去了解系統的弱點并生産出來,智能、靈敏的應對非理想好資料。

任何有趣的資料集至少有以下一些特性:缺失值,異常值和噪聲。缺失值:顧名思義就是缺失的值。異常值:離群怪異的事件,由于某種原因或其他的事件其 值遠遠的超出合理界限。噪聲的是,從所測量的值的随機(或非随機的)影響的着結果的分布。一個良好的測量分布,異常值和噪聲在噪聲不同下一般有較容易了解 的因素,而異常值通常是很少發生的,我們不能通過分布很好的了解。

對于處理這類事情r,python和rpy的都是有用的工具。

為什麼r非常适合資料科學

r語言對有經驗的統計分析師來說是非常輕量級. 它由科學家創造,對絕大多數的資料管理任務來說都非常輕松。特别适合以下幾種資料管理任務:

标記資料

填充遺漏值(譯者注:比如10行資料每行固定9列,但是第三行卻隻有5列資料,可以通過r的函數自動補全另外的5列值)

過濾

r語言對标記資料的支援非常友好. r語言的“data frame”概念,使得通過對資料列和資料行頭來分割組合資料、标記資料,然後以純數值的矩陣資料交給算法處理. 而傳統的資料科學開發語言,如python對資料的處理都需要開發者自己完成,需要消耗開發者大量時間且容易出錯.

處理或丢棄遺漏值、離群值(譯者注:極值,如最大值、最小值)在資料中是非常基本但重要的任務. 某些情況下,本來是有利的資料,卻因為測量誤差等原因變成了不利、反對的資料。(譯者注:比如越趨近于1才表示越可能是.)你如何處理這些事情可以對你的分析結果産生很大的影響。

r語言提供了豐富的算法來處理長期以來科學實踐中出現的各種資料有關問題,雖然這些算法仍然需要自己去嘗試和判斷選擇,以選擇最恰當的資料處理算法.

rpy2: 架起r語言與python之間的橋梁

pandas,python的資料分析庫,目前它已經有很多相同功能,但是rpy2創造了一條很好的從r語言到python的遷移路線,它讓你在學習python的時候,把r語言作為一個附屬部分來學習,對于很多有豐富實驗開發經驗的分析師會使用r語言,當他們想把算法融入一個python應用程 序,并分發給使用者時,他們也可以使用rpy2。

執行這種遷移的能力,而不離開r語言的概念模型是很有價值的,但從另一個角度來說,這也是一個限制,能夠使用一個真正的通用程式設計語言,如:python,來包裝概念模型,并使得這個使用者友好的應用程式有多種複雜的附加功能(列印,網絡,usb支援,等等)是至關重要的。

舉例來說,我已經使用了這種方法來建立讀取傳感器資料的python應用,通過rpy2處理,以各種方式顯示給客戶,我不知道怎麼用r語言讀取傳感器資料,應該是有某種方法的。而python已經做好了我需要的子產品,即使沒有也非常容易擴充。

如果你還不知道r語言,我推薦你學習python并且使用rpy2來通路r語言的函數。你學習一種語言獲得了兩種能力。一旦你學習過rpy,再轉到純r語言也不是什麼大問題,但是,你想要反過來就沒那麼容易了。

本文作者:佚名

來源:51cto