R語言可以處理大的數據嗎?
比較可以處理較大數據的擴展包有:Rdatatable/data.table · GitHubCRAN - Package bigmemory之後就是用Hadoop等等了:
RevolutionAnalytics/rhdfs · GitHub
RevolutionAnalytics/rhbase · GitHubRevolutionAnalytics/rmr2 · GitHubRevolutionAnalytics/plyrmr · GitHubRevolutionAnalytics/quickcheck · GitHub好多朋友問R語言能不能處理大數據,這個問題比較難說,關鍵在於怎麼定義大數據和怎麼算是可以處理。R是一種語言,也就是工具,並且是運行在電腦上的,電腦性能也決定運行結果,不過這些都是廢話,說點實際的吧,如何提高用R語言處理分析數據的效率?
簡單說,三點:1)換更快的電腦,2)學習使用各種高效的package,3)使用Revolution R代替原生的R程序。第一點就可以省略啦,從2說起吧。
1. 適合處理大數據的R package大家都知道,R語言的主要優勢在於各種包,有的包可以極大的提高工作效率,個人最愛的3個包:和data.table,Rcpp(+RArmadillo),和parallel。data.tableR裡面最重要的內置數據類型就是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.pdfhttps://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,不需要任何設置。關於速度對比,請看下錶: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團隊現在成為了微軟員工。微軟將把大數據分析「帶給每一個人」- spark提供了R的介面;sparklyr包實現了Spark與R的介面,會用dplyr就能玩Spark(雪晴RStudio又搞出了個大殺器!sparklyr包:實現Spark與R的介面,會用dplyr就能玩Spark);
- 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上一道題目用動態規劃求解的探究?