Ⅰ Python與R的爭鋒:大數據初學者該怎樣選
在當下,人工智慧的浪潮席捲而來。從AlphaGo、無人駕駛技術、人臉識別、語音對話,到商城推薦系統,金融業的風控,量化運營、用戶洞察、企業徵信、智能投顧等,人工智慧的應用廣泛滲透到各行各業,也讓數據科學家們供不應求。Python和R作為機器學習的主流語言,受到了越來越多的關注。數據學習領域的新兵們經常不清楚如何在二者之間做出抉擇,本文就語言特性與使用場景為大家對比剖析。
一.Python和R的概念與特性
Python是一種面向對象、解釋型免費開源高級語言。它功能強大,有活躍的社區支持和各式各樣的類庫,同談答時具備簡潔、易讀以及可擴展等優點,在近幾年成為高人氣的編程語言。
Python的優勢:
1、Python的使用場景非常多,不僅和R一樣可以用於統計分析,更廣泛應用於系統編程、圖形處理、文本處理、資料庫編程、網路編程、Web編程、網路爬蟲等,非常適合那些想深入鑽研數據分析或者應用統計技術的程序員。
2、目前主流的大數據和機器學習框架對Python都提供了很好的支持,比如Hadoop、Spark、Tensorflow;同時,Python也有著強大的社區支持,特別是近年來隨著人工智慧的興起,越來越多的開發者活躍在Python的社區中。
3、Python作為一種膠水語言,能夠和其他語言連結在一起,比如你的統計分析部分可以用R語言寫,然後封裝為Python可以調用的擴展類庫。
R語言是一種用來進含鬧慧行數據探索、統計分析和作圖的解釋型語言,但更像一種數學計算的環境。它模塊彎滑豐富,為數學計算提供了極為方便的編程方式,特別是針對矩陣的計算。
R語言的優勢:
1、R語言擁有許多優雅直觀的圖表,常見的數據可視化的工具包有:
· 互動式圖表rCharts、Plotly,交互時序圖
Ⅱ 求《R語言與大數據編程實戰》全文免費下載百度網盤資源,謝謝~
《R語言與大數據編程實戰》網路網盤pdf最新全集下載:
鏈接: https://pan..com/s/1VfVGvlRcVRwfPleEqKLJkQ
Ⅲ R語言可以處理大的數據嗎
「參考網址1」中提到如果只是對整數運算(運算過程和結果都只使用整數),沒有必要使用「double」(8 byte),而應該用更小的「integer」(4 byte)。使用storage.mode(x)查看對象存數的模式,storage.mode(x) <- 進行賦值;使用format(object.size(a), units = 'auto')查看對象佔用的內存空間(此處有疑問,即在R中每個integer到底佔用了多大的空間?)。
需要解釋gc()函數,可以查看內存使用情況。同樣,在清除了大的對象之後,使用gc()以釋放內存使用空間。
李航在」參考網址2「中提到,對於大矩陣的操作,盡量避免使用cbind和rbind之類,因為這會讓內存不停地分配空間。「對於長度增加的矩陣,盡量先定義一個大矩陣,然後逐步增加」和「注意清除中間對象」。
使用bigmemory家族:bigmemory, biganalytics, synchronicity, bigtabulate and bigalgebra, 同時還有
biglm。
bigmemory package的使用:
1. 建立big.memory對象
bigmemory採用C++的數據格式來「模仿」R中的matrix。
編寫大數據格式文件時候,可以先建立filebacked.big.matrix
big.matrix(nrow, ncol, type = options()$bigmemory.default.type, init = NULL, dimnames = NULL, separated = FALSE, backingfile = NULL, backingpath = NULL, descriptorfile = NULL, shared = TRUE)
filebacked.big.matrix(nrow, ncol, type = options()$bigmemory.default.type, init = NULL, dimnames = NULL, separated = FALSE, backingfile = NULL, backingpath = NULL, descriptorfile = NULL)
as.big.matrix(x, type = NULL, separated = FALSE, backingfile = NULL, backingpath = NULL, descriptorfile = NULL, shared=TRUE)
使用注意:
big.matrix採用兩種方式儲存數據:一種是big.matrix默認的方式,如果內存空間比較大,可以嘗試使用;另外一種是filebacked.big.matrix,這種儲存方法可能會備份文件(file-backings),而且需要descriptor file;
「init」指矩陣的初始化數值,如果設定,會事先將設定的數值填充到矩陣中;如果不設置,將處理為NA
"type"是指在big.matrix中atomic element的儲存格式,默認是「double」(8 byte),可以改為「integer」(4 byte), "short"(2 byte) or "char"(1 byte)。注意:這個包不支持字元串的儲存,type = "char"是指ASCII碼字母。
在big.matrix非常大的時候,避免使用rownames和colnames(並且bigmemory禁止用名稱訪問元素),因為這種做法非常佔用內存。如果一定要改變,使用options(bigmemory.allow.dimnames=TRUE),之後colnames, rownames設置。
直接在命令提示符後輸入x(x是一個big matrix),將返回x的描述,不會出現所有x中所有內容。因此,注意x[ , ](列印出矩陣全部內容);
如果big.matrix有很多列,那麼應該將其轉置後儲存;(不推薦)或者將參數「separated」設置為TRUE,這樣就將每一列分開儲存。否則,將用R的傳統方式(column major的方式)儲存數據。
如果建立一個filebacked.big.matrix,那麼需要指定backingfile的名稱和路徑+descriptorfile。可能多個big.matrix對象對應唯一一個descriptorfile,即如果descriptorfile改變,所以對應的big.matrix隨之改變;同樣,decriptorfile隨著big.matrix的改變而改變;如果想維持一種改變,需要重新建立一個filebacked.big.matrix。attach.big.matrix(descriptorfile or describe(big.matrix))函數用於將一個descriptorfile賦值給一個big.matrix。這個函數很好用,因為每次在創建一個filebacked.big.matrix後,保存R並退出後,先前創建的矩陣會消失,需要再attach.big.matrix以下
2. 對big.matrix的列的特定元素進行條件篩選
對內存沒有限制;而且比傳統的which更加靈活(贊!)
mwhich(x, cols, vals, comps, op = 'AND')
x既可以是big.matrix,也可以是傳統的R對象;
cols:行數
vals:cutoff,可以設定兩個比如c(1, 2)
comps:'eq'(==), 'neq'(!=), 'le'(<), 'lt'(<=), 'ge'(>) and 'gt'(>=)
op:「AND」或者是「OR」
可以直接比較NA,Inf和-Inf
3.bigmemory中其他函數
nrow, ncol, dim, dimnames, tail, head, typeof繼承base包
big.matrix, is.big.matrix, as.big.matrix, attach.big.matrix, describe, read.big.matrix, write.big.matrix, sub.big.matrix, is.sub.big.matrix為特有的big.matrix文件操作;filebacked.big.matrix, is.filebacked(判斷big.matrix是否硬碟備份) , flush(將filebacked的文件刷新到硬碟備份上)是filebacked的big.matrix的操作。
mwhich增強base包中的which, morder增強order,mpermute(對matrix中的一列按照特定序列操作,但是會改變原來對象,這是為了避免內存溢出)
big.matrix對象的使用deep(x, cols = NULL, rows = NULL, y = NULL, type = NULL, separated = NULL, backingfile = NULL, backingpath = NULL, descriptorfile = NULL, shared=TRUE)
biganalytics package的使用
biganalytics主要是一些base基本函數的擴展,主要有max, min, prod, sum, range, colmin, colmax, colsum, colprod, colmean, colsd, colvar, summary, apply(只能用於行或者列,不能用行列同時用)等
比較有特色的是bigkmeans的聚類
剩下的biglm.big.matrix和bigglm.big.matrix可以參考Lumley's biglm package。
bigtabulate package的使用
並行計算限制的突破:
使用doMC家族:doMC, doSNOW, doMPI, doRedis, doSMP和foreach packages.
foreach package的使用
foreach(..., .combine, .init, .final=NULL, .inorder=TRUE, .multicombine=FALSE, .maxcombine=if (.multicombine) 100 else 2, .errorhandling=c('stop', 'remove', 'pass'), .packages=NULL, .export=NULL, .noexport=NULL, .verbose=FALSE)
foreach的特點是可以進行並行運算,如在NetWorkSpace和snow?
%do%嚴格按照順序執行任務(所以,也就非並行計算),%dopar%並行執行任務
...:指定循環的次數;
.combine:運算之後結果的顯示方式,default是list,「c」返回vector, cbind和rbind返回矩陣,"+"和"*"可以返回rbind之後的「+」或者「*」
.init:.combine函數的第一個變數
.final:返回最後結果
.inorder:TRUE則返回和原始輸入相同順序的結果(對結果的順序要求嚴格的時候),FALSE返回沒有順序的結果(可以提高運算效率)。這個參數適合於設定對結果順序沒有需求的情況。
.muticombine:設定.combine函數的傳遞參數,default是FALSE表示其參數是2,TRUE可以設定多個參數
.maxcombine:設定.combine的最大參數
.errorhandling:如果循環中出現錯誤,對錯誤的處理方法
.packages:指定在%dopar%運算過程中依賴的package(%do%會忽略這個選項)。
getDoParWorkers( ) :查看注冊了多少個核,配合doMC package中的registerDoMC( )使用
getDoParRegistered( ) :查看doPar是否注冊;如果沒有注冊返回FALSE
getDoParName( ) :查看已經注冊的doPar的名字
getDoParVersion( ):查看已經注冊的doPar的version
===================================================
# foreach的循環次數可以指定多個變數,但是只用其中最少?的
> foreach(a = 1:10, b = rep(10, 3)) %do% (a*b)
[[1]]
[1] 10
[[2]]
[1] 20
[[3]]
[1] 30
# foreach中.combine的「+」或者「*」是cbind之後的操作;這也就是說"expression"返回一個向量,會對向量+或者*
> foreach(i = 1:4, .combine = "+") %do% 2
[1] 8
> foreach(i = 1:4, .combine = "rbind") %do% rep(2, 5)
[,1] [,2] [,3] [,4] [,5]
result.1 2 2 2 2 2
result.2 2 2 2 2 2
result.3 2 2 2 2 2
result.4 2 2 2 2 2
> foreach(i = 1:4, .combine = "+") %do% rep(2, 5)
[1] 8 8 8 8 8
> foreach(i = 1:4, .combine = "*") %do% rep(2, 5)
[1] 16 16 16 16 16
=============================================
iterators package的使用
iterators是為了給foreach提供循環變數,每次定義一個iterator,它都內定了「循環次數」和「每次循環返回的值」,因此非常適合結合foreach的使用。
iter(obj, ...):可以接受iter, vector, matrix, data.frame, function。
nextElem(obj, ...):接受iter對象,顯示對象數值。
以matrix為例,
iter(obj, by=c('column', 'cell', 'row'), chunksize=1L, checkFunc=function(...) TRUE, recycle=FALSE, ...)
by:按照什麼順序循環;matrix和data.frame都默認是「row」,「cell」是按列依次輸出(所以對於「cell」,chunksize只能指定為默認值,即1)
chunksize:每次執行函數nextElem後,按照by的設定返回結果的長度。如果返回結構不夠,將取剩餘的全部。
checkFunc=function(...) TRUE:執行函數checkFun,如果返回TRUE,則返回;否則,跳過。
recycle:設定在nextElem循環到底(「錯誤: StopIteration」)是否要循環處理,即從頭再來一遍。
以function為例
iter(function()rnorm(1)),使用nextElem可以無限重復;但是iter(rnorm(1)),只能來一下。
更有意思的是對象如果是iter,即test1 <- iter(obj); test2 <- iter(test1),那麼這兩個對象是連在一起的,同時變化。
==============================================
> a
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> i2 <- iter(a, by = "row", chunksize=3)
> nextElem(i2)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
> nextElem(i2) #第二次iterate之後,只剩下1行,全部返回
[,1] [,2] [,3] [,4] [,5]
[1,] 4 8 12 16 20
> i2 <- iter(a, by = "column", checkFunc=function(x) sum(x) > 50)
> nextElem(i2)
[,1]
[1,] 13
[2,] 14
[3,] 15
[4,] 16
> nextElem(i2)
[,1]
[1,] 17
[2,] 18
[3,] 19
[4,] 20
> nextElem(i2)
錯誤: StopIteration
> colSums(a)
[1] 10 26 42 58 74
> testFun <- function(x){return(x+2)}
> i2 <- iter(function()testFun(1))
> nextElem(i2)
[1] 3
> nextElem(i2)
[1] 3
> nextElem(i2)
[1] 3
> i2 <- iter(testFun(1))
> nextElem(i2)
[1] 3
> nextElem(i2)
錯誤: StopIteration
> i2 <- iter(testFun(1))
> i3 <- iter(i2)
> nextElem(i3)
[1] 3
> nextElem(i2)
錯誤: StopIteration
============================================
iterators package中包括
irnorm(..., count);irunif(..., count);irbinom(..., count);irnbinom(..., count);irpois(..., count)中內部生成iterator的工具,分別表示從normal,uniform,binomial,negativity binomial和Poisson分布中隨機選取N個元素,進行count次。其中,negative binomial分布:其概率積累函數(probability mass function)為擲骰子,每次骰子為3點的概率為p,在第r+k次恰好出現r次的概率。
icount(count)可以生成1:conunt的iterator;如果count不指定,將從無休止生成1:Inf
icountn(vn)比較好玩,vn是指一個數值向量(如果是小數,則向後一個數取整,比如2.3 --> 3)。循環次數為prod(vn),每次返回的向量中每個元素都從1開始,不超過設定 vn,變化速率從左向右依次遞增。
idiv(n, ..., chunks, chunkSize)返回截取從1:n的片段長度,「chunks」和「chunkSize」不能同時指定,「chunks」為分多少片段(長度從大到小),「chunkSize」為分段的最大長度(長度由大到小)
iapply(X, MARGIN):與apply很像,MARGIN中1是row,2是column
isplit(x, f, drop=FALSE, ...):按照指定的f劃分矩陣
=============================================
> i2 <- icountn(c(3.4, 1.2))
> nextElem(i2)
[1] 1 1
> nextElem(i2)
[1] 2 1
> nextElem(i2)
[1] 3 1
> nextElem(i2)
[1] 4 1
> nextElem(i2)
[1] 1 2
> nextElem(i2)
[1] 2 2
> nextElem(i2)
[1] 3 2
> nextElem(i2)
[1] 4 2
> nextElem(i2)
錯誤: StopIteration
Ⅳ 如何使用python和R高效而優雅地處理大數據
1、保證復代碼的高效性,盡量保證制數據處理都是線性的,不要出現兩層嵌套以上較大的循環結構。在這方面可以考慮,如果數據量在千萬級以下,可以考慮用空間換時間。
2、與大數據配套的是高效的計算框架,Hadoop或Spark,這些都支持python語言做開發,這些平台是大數據處理的利器。當然寫代碼的時候,肯定要保證第一條,代碼的高效。
Ⅳ 如何使用python和R高效而優雅地處理大數據
1、從分類上,兩種語言各有優勢:
(1)python的優勢不在於運行效率,而在於開發效率和高可維護性。在數據的載入和分發,python是很高效的;如果是求一些常用的統計量和求一些基本演算法的結果,python也有現成的高效的庫;如果是純粹自己寫的演算法,沒有任何其他可借鑒的,什麼庫也用不上,用純python寫是自討苦吃。
(2)R 主要是統計學家為解決數據分析領域問題而開發的語言,R 語言的優勢則是在於:
統計學家和幾乎覆蓋整個統計領域的前沿演算法(3700+ 擴展包);開放的源代碼(free, in both senses),可以部署在任何操作系統,比如 Windows, Linux, Mac OS X, BSD, Unix強大的社區支持;高質量、廣泛的統計分析、數據挖掘平台;重復性的分析工作(Sweave = R + LATEX),藉助 R 語言的強大的分析能力 + LaTeX 完美的排版能力,可以自動生成分析報告;方便的擴展性,包括可通過相應介面連接資料庫,如 Oracle、DB2、MySQL、同 Python、Java、C、C++ 等語言進行互調,提供 API 介面均可以調用,比如 Google、Twitter、Weibo,其他統計軟體大部分均可調用 R,比如 SAS、SPSS、Statistica等,甚至一些比較直接的商業應用,比如 Oracle R Enterprise, IBM Netezza, R add-on for Teradata, SAP HANA, Sybase RAP。
2、關於如何優雅地處理,則是一項藝術家的工作,如果有看過TED演講的話,可以看到很多可視化的數據分析結果,這些都是非常cool的。
3、綜上所述,首先,要針對特定的問題分清楚問題的核心,和研究的方法;然後,挑選合適的工具,進行分析;最後,則是通過藝術家般的想像力,通過數據可視化表達清楚。
Ⅵ 如何使用python和R高效而優雅地處理大數據
最重要的是你老師的數據集究竟有多大,以及你的電腦的配置。
8g左右或以下的,用個配置稍好電腦友輪python,r都帶得動。
數據量再往上走,就該考慮設計一下演算法,主動管理內存,甚至動用硬碟管理數據(比如把中間數據好粗信存到硬碟上凳舉,下次使用再載入到內存)。
數據量上tb了,就可以考慮集群了。
考慮到你的老師在用SAS,那我猜測數據量是單機可以搞定的。因此python也是能解決問題的,但是你需要主動設計一下演算法並主動管理內存空間。
Ⅶ 如何讓Hadoop結合R語言做統計和大數據分析
R是GNU的一個開源工具,具有S語言血統,擅長統計計算和統計制圖。廣大R語言愛好者藉助強大工具RHadoop,可以在大數據領域大展拳腳,這對R語言程序員來說無疑是個喜訊。
RHadoop是一款Hadoop和R語言的結合的產品,由RevolutionAnalytics公司開發,並將代碼開源到github社區上
面。RHadoop包含三個R包 (rmr,rhdfs,rhbase),分別是對應Hadoop系統架構中的,MapRece, HDFS,
HBase 三個部分。
2). RHiveRHive是一款通過R語言直接訪問Hive的工具包,是由NexR一個韓國公司研發的。
3). 重寫Mahout用R語言重寫Mahout的實現也是一種結合的思路,我也做過相關的嘗試。
4).Hadoop調用R
上面說的都是R如何調用Hadoop,當然我們也可以反相操作,打通JAVA和R的連接通道,讓Hadoop調用R的函數。但是,這部分還沒有商家做出成形的產品。
5. R和Hadoop在實際中的案例
1.R和Hadoop的結合,技術門檻還是有點高的。對於一個人來說,不僅要掌握Linux, Java, Hadoop, R的技術,還要具備 軟體開發,演算法,概率統計,線性代數,數據可視化,行業背景 的一些基本素質。在公司部署這套環境,同樣需要多個部門,多種人才的的配合。Hadoop運維,Hadoop演算法研發,R語言建模,R語言
MapRece化,軟體開發,測試等等。所以,這樣的案例並不太多。
RHadoop是一款Hadoop和R語言的結合的產品,由RevolutionAnalytics公司開發,並將代碼開源到github社區上面。RHadoop包含三個R包 (rmr,rhdfs,rhbase),分別是對應Hadoop系統架構中的,MapRece, HDFS, HBase 三個部分。
2). RHiveRHive是一款通過R語言直接訪問Hive的工具包,是由NexR一個韓國公司研發的。
3). 重寫Mahout用R語言重寫Mahout的實現也是一種結合的思路,我也做過相關的嘗試。
4).Hadoop調用R
上面說的都是R如何調用Hadoop,當然我們也可以反相操作,打通JAVA和R的連接通道,讓Hadoop調用R的函數。但是,這部分還沒有商家做出成形的產品。
5. R和Hadoop在實際中的案例
R和Hadoop的結合,技術門檻還是有點高的。對於一個人來說,不僅要掌握Linux, Java, Hadoop, R的技術,還要具備
軟體開發,演算法,概率統計,線性代數,數據可視化,行業背景
的一些基本素質。在公司部署這套環境,同樣需要多個部門,多種人才的的配合。Hadoop運維,Hadoop演算法研發,R語言建模,R語言
MapRece化,軟體開發,測試等等。
Ⅷ R,Python,Scala 和 Java,到底該使用哪一種大數據編程語言
哪一種都行,Python適用於腳本,網路和爬蟲,Java適用網路,商業和游戲,r適用於腳本和網路
Ⅸ 如何讓Hadoop結合R語言做大數據分析
R語言和Hadoop讓我們體會到了,兩種技術在各自領域的強大。很多開發人員在計算機的角度,都會提出下面2個問題。問題1: Hadoop的家族如此之強大,為什麼還要結合R語言?x0dx0a問題2: Mahout同樣可以做數據挖掘和機器學習,和R語言的區別是什麼?下面我嘗試著做一個解答:問題1: Hadoop的家族如此之強大,為什麼還要結合R語言?x0dx0ax0dx0aa. Hadoop家族的強大之處,在於對大數據的處理,讓原來的不可能(TB,PB數據量計算),成為了可能。x0dx0ab. R語言的強大之處,在於統計分析,在沒有Hadoop之前,我們對於大數據的處理,要取樣本,假設檢驗,做回歸,長久以來R語言都是統計學家專屬的工具。x0dx0ac. 從a和b兩點,我們可以看出,hadoop重點是全量數據分析,而R語言重點是樣本數據分析。 兩種技術放在一起,剛好是最長補短!x0dx0ad. 模擬場景:對1PB的新聞網站訪問日誌做分析,預測未來流量變化x0dx0ad1:用R語言,通過分析少量數據,對業務目標建回歸建模,並定義指標d2:用Hadoop從海量日誌數據中,提取指標數據d3:用R語言模型,對指標數據進行測試和調優d4:用Hadoop分步式演算法,重寫R語言的模型,部署上線這個場景中,R和Hadoop分別都起著非常重要的作用。以計算機開發人員的思路,所有有事情都用Hadoop去做,沒有數據建模和證明,」預測的結果」一定是有問題的。以統計人員的思路,所有的事情都用R去做,以抽樣方式,得到的「預測的結果」也一定是有問題的。所以讓二者結合,是產界業的必然的導向,也是產界業和學術界的交集,同時也為交叉學科的人才提供了無限廣闊的想像空間。問題2: Mahout同樣可以做數據挖掘和機器學習,和R語言的區別是什麼?x0dx0ax0dx0aa. Mahout是基於Hadoop的數據挖掘和機器學習的演算法框架,Mahout的重點同樣是解決大數據的計算的問題。x0dx0ab. Mahout目前已支持的演算法包括,協同過濾,推薦演算法,聚類演算法,分類演算法,LDA, 樸素bayes,隨機森林。上面的演算法中,大部分都是距離的演算法,可以通過矩陣分解後,充分利用MapRece的並行計算框架,高效地完成計算任務。x0dx0ac. Mahout的空白點,還有很多的數據挖掘演算法,很難實現MapRece並行化。Mahout的現有模型,都是通用模型,直接用到的項目中,計算結果只會比隨機結果好一點點。Mahout二次開發,要求有深厚的JAVA和Hadoop的技術基礎,最好兼有 「線性代數」,「概率統計」,「演算法導論」 等的基礎知識。所以想玩轉Mahout真的不是一件容易的事情。x0dx0ad. R語言同樣提供了Mahout支持的約大多數演算法(除專有演算法),並且還支持大量的Mahout不支持的演算法,演算法的增長速度比mahout快N倍。並且開發簡單,參數配置靈活,對小型數據集運算速度非常快。x0dx0a雖然,Mahout同樣可以做數據挖掘和機器學習,但是和R語言的擅長領域並不重合。集百家之長,在適合的領域選擇合適的技術,才能真正地「保質保量」做軟體。x0dx0ax0dx0a如何讓Hadoop結合R語言?x0dx0ax0dx0a從上一節我們看到,Hadoop和R語言是可以互補的,但所介紹的場景都是Hadoop和R語言的分別處理各自的數據。一旦市場有需求,自然會有商家填補這個空白。x0dx0ax0dx0a1). RHadoopx0dx0ax0dx0aRHadoop是一款Hadoop和R語言的結合的產品,由RevolutionAnalytics公司開發,並將代碼開源到github社區上面。RHadoop包含三個R包 (rmr,rhdfs,rhbase),分別是對應Hadoop系統架構中的,MapRece, HDFS, HBase 三個部分。x0dx0ax0dx0a2). RHiveRHive是一款通過R語言直接訪問Hive的工具包,是由NexR一個韓國公司研發的。x0dx0ax0dx0a3). 重寫Mahout用R語言重寫Mahout的實現也是一種結合的思路,我也做過相關的嘗試。x0dx0ax0dx0a4).Hadoop調用Rx0dx0ax0dx0a上面說的都是R如何調用Hadoop,當然我們也可以反相操作,打通JAVA和R的連接通道,讓Hadoop調用R的函數。但是,這部分還沒有商家做出成形的產品。x0dx0ax0dx0a5. R和Hadoop在實際中的案例x0dx0ax0dx0aR和Hadoop的結合,技術門檻還是有點高的。對於一個人來說,不僅要掌握Linux, Java, Hadoop, R的技術,還要具備 軟體開發,演算法,概率統計,線性代數,數據可視化,行業背景 的一些基本素質。在公司部署這套環境,同樣需要多個部門,多種人才的的配合。Hadoop運維,Hadoop演算法研發,R語言建模,R語言MapRece化,軟體開發,測試等等。所以,這樣的案例並不太多。
Ⅹ 怎麼學慣用 R 語言進行數據挖掘
數據挖掘的理論基礎和R也沒什麼太大關系。如果明白方法了,用什麼語言其實無所謂。不過R有幾個包,可以提升效率和彌補R自身的不足,做大數據很有用。我就說說我每天要用的吧。
bigmemory:R的內存管理太爛了,因為很少給程序員管理的許可權,這樣一來操作系統懶加上R也懶導致常常讀入大數據時內存瞬間用完,導致這個R session被強制退出。解決辦法就是把常用的大數據提前放在共享內存里。
Rmpi,snow,multicore: 平行運算/多運程運算。 Rmpi最好多看看,是mpi在R裡面的實現。這是平行運算的黃金標准。如果你要做大數據的模型,高能運算是必須的。
Rcpp:R與C++的介面。自帶的.C和.F也很有用。畢竟R是高等語言,太慢了,基本的方程還是要用低等語言寫。如果做統計模型,會有很多inference,這時必須要用低等語言寫Log likelihood的方程。
DEoptim,quadqrog,linprog等等線性非線性優化:優化是統計少不了的技術。R裡面好的優化包不是太慢就是太爛,你可以用GNU scientific library自己寫優化器,或者買一個第三方的比如說IBM。不過很貴哦,
ggplot:不多說了,就是美麗的圖片。。。
不是R的:hadoop。近幾年,這都是處理大數據的必需品了。
有了以上工具我相信任何數據和統計問題都能解決了,不會被R自身的缺陷而陷入技術瓶頸。
-