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

發表於2016-06-06

最近有一些文章提出與年齡相關的問題:“嶄露頭角的年輕資料科學家們是學習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語言也不是什麼大問題,但是,你想要反過來就沒那麼容易了。

相關文章