R語言可以處理大的數據嗎?


比較可以處理較大數據的擴展包有:

Rdatatable/data.table · GitHub

CRAN - Package bigmemory

之後就是用Hadoop等等了:

RevolutionAnalytics/rhdfs · GitHub

RevolutionAnalytics/rhbase · GitHub

RevolutionAnalytics/rmr2 · GitHub

RevolutionAnalytics/plyrmr · GitHub

RevolutionAnalytics/quickcheck · GitHub


好多朋友問R語言能不能處理大數據,這個問題比較難說,關鍵在於怎麼定義大數據和怎麼算是可以處理。R是一種語言,也就是工具,並且是運行在電腦上的,電腦性能也決定運行結果,不過這些都是廢話,說點實際的吧,如何提高用R語言處理分析數據的效率?

簡單說,三點:

1)換更快的電腦,

2)學習使用各種高效的package,

3)使用Revolution R代替原生的R程序。

第一點就可以省略啦,從2說起吧。

1. 適合處理大數據的R package

大家都知道,R語言的主要優勢在於各種包,有的包可以極大的提高工作效率,個人最愛的3個包:和data.table,Rcpp(+RArmadillo),和parallel。

data.table

R裡面最重要的內置數據類型就是data.frame了,data.frame本質是一個list,因為list是不要求元素的類型一致,所以data.frame可以存儲不同類型的數據在不同的column,比如

&> df1=data.frame(c(1,2,3),c("李大貓","王大鎚","一個狗"))
&> df1
c.1..2..3. c..李大貓....王大鎚....一個狗..
1 1 李大貓
2 2 王大鎚
3 3 一個狗

df1有兩列,第一列示numeric類型,第二類是character類型。

從形式上來說,data.frame長的和matrix很像,但是一個matrix只能存儲一種類型數據,在一定情況下,matrix和data.frame是可以互相轉化的,比如用as.data.frame()函數把一個matrix變成data.frame,或者用data.matrix從一個data.frame提取出matrix。這裡一個建議,只要可以用matrix的地方,就盡量用matrix而不是data.frame,因為R對matrix的運算比data.frame更高效。

回到data.table這個包的話題,data.table是做什麼的?data.table可以說是提供data.frame的替代品,更高效,速度可以說是飛快。這裡有一個R的data.table,dplyr和python的pandas包處理50GB數據的時間對比:

Benchmarks : Grouping · Rdatatable/data.table Wiki · GitHub

對50GB但數據進行同樣的數據處理,data.table用了15分鐘,dplyr用了51分鐘,pandas用了31分鐘。R的data.table完勝。

關於data.table的使用,可以寫幾篇文章,所以這裡就先不展開說了 ,具體參見:

https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf

https://s3.amazonaws.com/assets.datacamp.com/img/blog/data+table+cheat+sheet.pdf

裡面有很多用例。

Rcpp(+RArmadillo)可以讓使用者直接寫c++函數,在R中調用,某些具體問題也可以極大的提高運算速度。

parallel是一個並行計算包,用在linux/mac下面,windows系統可以用snow,功能類似,但是更喜歡linux的fork方式。

2. Revolution R

Revolution R是什麼?Revolution Analytics是一個公司,不久前被微軟收購,這個公司在R基礎上開發了Revolution R。Revolution R有什麼優勢呢?R本身是單線程的,為了利用多核心cpu,可以用各種並行計算包,如上面提起的parallel/snow等。但是這些都要寫額外的代碼,有沒有什麼辦法不用改變任何代碼來提高運行效率呢?有,Revolution R就是一個解決方案。

首先去Download MRO 3.2.3, the enhanced R distribution · MRAN 下載Revolution R,注意要先安裝MRO 3.2.3 MKL 來使用Interl的MKL庫。然後就可以像是使用原生的R一樣來使用Revolution R了,如果電腦已經安裝了Rstudio,Rstuido可以自動識別Revolution R,就是說可以在Rstudio裡面直接使用Revolution R,不需要任何設置。

關於速度對比,請看下錶:

上面列舉了幾個基本運算使用原生R和Revolution R的速度對比,當涉及到matrix運算時,Revolution R有顯著作用,這主要是因為矩陣相關運算使用了MKL庫。Revolution R可以設置使用幾個cpu核心,通過函數setMKLthreads()來選擇。

3 MS R Server

上面的兩點可以處理比較大的數據,但是並沒有質變,不能實現scalability,如果真的有非常大的數據,可以用微軟最近搞的MS R server:

R Server | Microsoft

當然了,可以scale很好,但是回到最根本的問題?我們為什麼用R?最大的原因是R有很多packages吧,微軟的R server似乎並不能提供這些package處理大數據的能力,看了一個R server介紹視頻,貌似即使簡單到邏輯回歸,也需要用從新實現的演算法來運算。###########################################################

歡迎大家關注 微信公眾號:機器會學習,搜索id:jiqihuixuexi,更多精彩原創文章每日更新!


可以,有這樣的開源項目,結合了r語言和一個叫做openlava的項目。之前了解過一點。另外好像spark也支持。


看怎樣定義大數據。很多人提到的data.table包處理幾百萬條數據還是挺快的,fread讀進來只要十幾秒,用dplyr包進行數據處理也很方便。可以去Kaggle上看看別人的scripts,這個網站上很多是census數據,數據量都不小,而且裡面的script也很多都是用R或Python寫的,適合初學者照貓畫虎地學習模仿並加以運用。


可以

R語言是大數據分析公司Revolution Analytics的產品,該公司成立於2007年,旗下著名產品為「R」統計編程語言,目前全球有超過200萬用戶

2015-4-7(昨天)微軟正式完成大數據分析公司Revolution Analytics收購,Revolution Analytics團隊現在成為了微軟員工。

微軟將把大數據分析「帶給每一個人」


  1. spark提供了R的介面;sparklyr包實現了Spark與R的介面,會用dplyr就能玩Spark(雪晴RStudio又搞出了個大殺器!sparklyr包:實現Spark與R的介面,會用dplyr就能玩Spark

  2. CRAN上有一個任務視圖——HighPerformanceComputing(CRAN Task View: High-Performance and Parallel Computing with R),介紹了各種並行計算的package。


理論上,R能處理在內存放下的數據,如果非@放不下,只能一點點放。如果你認為的大的數據可以在內存放下,那R就能處理 。


如果是大數據處理,一般不建議直接用R。雖然也有dplyr或者data.table這樣提高處理數據效率的包,但因為R在windows是直接把數據load到內存里處理的,所以你的數據文件大於或接近內存大小就會導致R崩潰了。

有幾種解決方法,一,直接在資料庫中把數據整理好,歸到你需要做分析或者建模的那個數量級再導入到R中;二,可以使用資料庫連接的包比如RMySQL在R環境下操作資料庫並在最後導出;三,抽樣,特別是針對模型訓練的部分,我們並不需要全量數據才能完成模型的訓練。

R最突出的功能是在科學計算,統計圖形輸出還有極其豐富的模型演算法包,用它去完成數據清洗和特徵工程的工作倒不是不行,只是效率確實不高。

現在微軟收購了revolutionR後在SQL server里整合了R,而且開源了MRO(之前revolution R的版本),處理大數據更方便了些。

至於其他機器學習/深度學習框架的R介面,spark的R介面也能幫助我們在大數據學習上面更有效率地調用豐富的R包來做數據探索或者模型訓練。


sparkR


推薦閱讀:

演算法問題,一個人在1-100中任選一個數,另一個人來猜?
對C/C++初學者來說,很多入門級的演算法是學習和筆試的基礎,可否列出你所知道或筆試遇到的那些有意思的演算法?
n個list,求兩兩相似度大約70%的list的組合?
一道華為的筆試題,講一下思路?
關於Leetcode上一道題目用動態規劃求解的探究?

TAG:編程語言 | 演算法與數據結構 | R編程語言 |