導航:首頁 > 網路數據 > 用r語言做大數據分析

用r語言做大數據分析

發布時間:2023-07-07 05:55:01

① 如何讓Hadoop結合R語言做統計和大數據分析

1).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的函數。但是,這部分還沒有商家做出成形的產品。

② 如何讓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語言的4個理由

做數據分析必須學R語言的4個理由

R 是一種靈活的編程語言,專為促進探索性數據分析、經典統計學測試和高級圖形學而設計。R 擁有豐富的、仍在不斷擴大的數據包庫,處於統計學、數據分析和數據挖掘發展的前沿。R 已證明自己是不斷成長的大數據領域的一個有用工具,並且已集成到多個商用包中,比如 IBM SPSS? 和 InfoSphere?,以及 Mathematica。
本文提供了一位統計學家Catherine Dalzell對 R 的價值的看法。
為什麼選擇 R?
R可以執行統計。您可以將它視為 SAS Analytics 等分析系統的競爭對手,更不用提 StatSoft STATISTICA 或 Minitab 等更簡單的包。政府、企業和制葯行業中許多專業統計學家和方法學家都將其全部職業生涯都投入到了 IBM SPSS 或 SAS 中,但卻沒有編寫過一行 R 代碼。所以從某種程度上講,學習和使用 R 的決定事關企業文化和您希望如何工作。我在統計咨詢實踐中使用了多種工具,但我的大部分工作都是在 R 中完成的。以下這些示例給出了我使用 R 的原因:
R 是一種強大的腳本語言。我最近被要求分析一個范圍研究的結果。研究人員檢查了 1,600 篇研究論文,並依據多個條件對它們的內容進行編碼,事實上,這些條件是大量具有多個選項和分叉的條件。它們的數據(曾經扁平化到一個 Microsoft? Excel? 電子表格上)包含 8,000 多列,其中大部分都是空的。研究人員希望統計不同類別和標題下的總數。R 是一種強大的腳本語言,能夠訪問類似 Perl 的正則表達式來處理文本。凌亂的數據需要一種編程語言資源,而且盡管 SAS 和 SPSS 提供了腳本語言來執行下拉菜單意外的任務,但 R 是作為一種編程語言編寫的,所以是一種更適合該用途的工具。
R 走在時代的前沿。統計學中的許多新發展最初都是以 R 包的形式出現的,然後才被引入到商業平台中。我最近獲得了一項對患者回憶的醫療研究的數據。對於每位患者,我們擁有醫生建議的治療項目數量,以及患者實際記住的項目數量。自然模型是貝塔—二項分布。這從上世紀 50 年代就已知道,但將該模型與感興趣的變數相關聯的估算過程是最近才出現的。像這樣的數據通常由廣義估計方程式 (general estimating equations, GEE) 處理,但 GEE 方法是漸進的,而且假設抽樣范圍很廣。我想要一種具有貝塔—二項 R 的廣義線性模型。一個最新的 R 包估算了這一模型:Ben Bolker 編寫的 betabinom。而 SPSS 沒有。
集成文檔發布。 R 完美地集成了 LaTeX 文檔發布系統,這意味著來自 R 的統計輸出和圖形可嵌入到可供發布的文檔中。這不是所有人都用得上,但如果您希望便攜非同步關於數據分析的書籍,或者只是不希望將結果復制到文字處理文檔,最短且最優雅的路徑就是通過 R 和 LaTeX。
沒有成本。作為一個小型企業的所有者,我很喜歡 R 的免費特定。即使對於更大的企業,知道您能夠臨時調入某個人並立即讓他們坐在工作站旁使用一流的分析軟體,也很不錯。無需擔憂預算。
R 是什麼,它有何用途?
作為一種編程語言,R 與許多其他語言都很類似。任何編寫過代碼的人都會在 R 中找到很多熟悉的東西。R 的特殊性在於它支持的統計哲學。
一種統計學革命:S 和探索性數據分析
140 字元的解釋:R 是 S 的一種開源實現,是一種用於數據分析和圖形的編程環境。
計算機總是擅長計算 — 在您編寫並調試了一個程序來執行您想要的演算法後。但在上世紀 60 和 70 年代,計算機並不擅長信息的顯示,尤其是圖形。這些技術限制在結合統計理論中的趨勢,意味著統計實踐和統計學家的培訓專注於模型構建和假設測試。一個人假定這樣一個世界,研究人員在其中設定假設(常常是農業方面的),構建精心設計的實驗(在一個農業站),填入模型,然後運行測試。一個基於電子表格、菜單驅動的程序(比如 SPSS 反映了這一方法)。事實上,SPSS 和 SAS Analytics 的第一個版本包含一些子常式,這些子常式可從一個(Fortran 或其他)程序調用來填入和測試一個模型工具箱中的一個模型。
在這個規范化和滲透理論的框架中,John Tukey 放入了探索性數據分析 (EDA) 的概念,這就像一個鵝卵石擊中了玻璃屋頂。如今,很難想像沒有使用箱線圖(box plot) 來檢查偏度和異常值就開始分析一個數據集的情形,或者沒有針對一個分位點圖檢查某個線性模型殘差的常態的情形。這些想法由 Tukey 提出,現在任何介紹性的統計課程都會介紹它們。但並不總是如此。
與其說 EDA 是一種理論,不如說它是一種方法。該方法離不開以下經驗規則:
只要有可能,就應使用圖形來識別感興趣的功能。
分析是遞增的。嘗試以下這種模型;根據結果來填充另一個模型。
使用圖形檢查模型假設。標記存在異常值。
使用健全的方法來防止違背分布假設。
Tukey 的方法引發了一個新的圖形方法和穩健估計的發展浪潮。它還啟發了一個更適合探索性方法的新軟體框架的開發。
S 語言是在貝爾實驗室由 John Chambers 和同事開發的,被用作一個統計分析平台,尤其是 Tukey 排序。第一個版本(供貝爾實驗室內部使用)於 1976 年開發,但直到 1988 年,它才形成了類似其當前形式的版本。在這時,該語言也可供貝爾實驗室外部的用戶使用。該語言的每個方面都符合數據分析的 「新模型」:
S 是一種在編程環境操作的解釋語言。S 語法與 C 的語法很相似,但省去了困難的部分。S 負責執行內存管理和變數聲明,舉例而言,這樣用戶就無需編寫或調試這些方面了。更低的編程開銷使得用戶可以在同一個數據集上快速執行大量分析。
從一開始,S 就考慮到了高級圖形的創建,您可向任何打開的圖形窗口添加功能。您可很容易地突出興趣點,查詢它們的值,使散點圖變得更平滑,等等。
面向對象性是 1992 年添加到 S 中的。在一個編程語言中,對象構造數據和函數來滿足用戶的直覺。人類的思維始終是面向對象的,統計推理尤其如此。統計學家處理頻率表、時間序列、矩陣、具有各種數據類型的電子表格、模型,等等。在每種情況下,原始數據都擁有屬性和期望值:舉例而言,一個時間序列包含觀察值和時間點。而且對於每種數據類型,都應得到標准統計數據和平面圖。對於時間序列,我可能繪制一個時間序列平面圖和一個相關圖;對於擬合模型,我可能繪制擬合值和殘差。S 支持為所有這些概念創建對象,您可以根據需要創建更多的對象類。對象使得從問題的概念化到其代碼的實現變得非常簡單。
一種具有態度的語言:S、S-Plus 和假設測試
最初的 S 語言非常重視 Tukey 的 EDA,已達到只能 在 S 中執行 EDA 而不能執行其他任何操作的程度。這是一種具有態度的語言。舉例而言,盡管 S 帶來了一些有用的內部功能,但它缺乏您希望統計軟體擁有的一些最明顯的功能。沒有函數來執行雙抽樣測試或任何類型的真實假設測試。但 Tukey 認為,假設測試有時正合適。
1988 年,位於西雅圖的 Statistical Science 獲得 S 的授權,並將該語言的一個增強版本(稱為 S-Plus)移植到 DOS 以及以後的 Windows? 中。實際認識到客戶想要什麼後,Statistical Science 向 S-Plus 添加了經典統計學功能。添加執行方差分析 (ANOVA)、測試和其他模型的功能。對 S 的面向對象性而言,任何這類擬合模型的結果本身都是一個 S 對象。合適的函數調用都會提供假設測試的擬合值、殘差和 p-值。模型對象甚至可以包含分析的中間計算步驟,比如一個設計矩陣的 QR 分解(其中 Q 是對角線,R 是右上角)。
有一個 R 包來完成該任務!還有一個開源社區
大約在與發布 S-Plus 相同的時間,紐西蘭奧克蘭大學的 Ross Ihaka 和 Robert Gentleman 決定嘗試編寫一個解釋器。他們選擇了 S 語言作為其模型。該項目逐漸成形並獲得了支持。它們將其命名為 R。
R 是 S 的一種實現,包含 S-Plus 開發的更多模型。有時候,發揮作用的是同一些人。R 是 GNU 許可下的一個開源項目。在此基礎上,R 不斷發展,主要通過添加包。R 包 是一個包含數據集、R 函數、文檔和 C 或 Fortran 動態載入項的集合,可以一起安裝並從 R 會話訪問。R 包向 R 添加新功能,通過這些包,研究人員可在同行之間輕松地共享計算方法。一些包的范圍有限,另一些包代表著整個統計學領域,還有一些包含最新的技術發展。事實上,統計學中的許多發展最初都是以 R 包形式出現的,然後才應用到商用軟體中。
在撰寫本文時,R 下載站點 CRAN 上已有 4,701 個 R 包。其中,單單那一天就添加了 6 個 R 。萬事萬物都有一個對應的 R 包,至少看起來是這樣。
我在使用 R 時會發生什麼?
備註:本文不是一部 R 教程。下面的示例僅試圖讓您了解 R 會話看起來是什麼樣的。
R 二進制文件可用於 Windows、Mac OS X 和多個 Linux? 發行版。源代碼也可供人們自行編譯。
在 Windows? 中,安裝程序將 R 添加到開始菜單中。要在 Linux 中啟動 R,可打開一個終端窗口並在提示符下鍵入 R。您應看到類似圖 1 的畫面。

圖 1. R 工作區
在提示符下鍵入一個命令,R 就會響應。
此時,在真實的環境中,您可能會從一個外部數據文件將數據讀入 R 對象中。R 可從各種不同格式的文件讀取數據,但對於本示例,我使用的是來自 MASS 包的 michelson 數據。這個包附帶了 Venables and Ripley 的標志性文本 Modern Applied Statistics with S-Plus(參見 參考資料)。michelson 包含來自測量光速的流行的 Michelson and Morley 實驗的結果。
清單 1 中提供的命令可以載入 MASS 包,獲取並查看 michelson 數據。圖 2 顯示了這些命令和來自 R 的響應。每一行包含一個 R 函數,它的參數放在方括弧 ([]) 內。
清單 1. 啟動一個 R 會話
2+2 # R can be a calculator. R responds, correctly, with 4.
library(「MASS」) # Loads into memory the functions and data sets from
# package MASS, that accompanies Modern Applied Statistics in S
data(michelson) # Copies the michelson data set into the workspace.
ls() # Lists the contents of the workspace. The michelson data is there.
head(michelson) # Displays the first few lines of this data set.
# Column Speed contains Michelson and Morleys estimates of the
# speed of light, less 299,000, in km/s.
# Michelson and Morley ran five experiments with 20 runs each.
# The data set contains indicator variables for experiment and run.
help(michelson) # Calls a help screen, which describes the data set.
圖 2. 會話啟動和 R 的響應

現在讓我們看看該數據(參見 清單 2)。輸出如 圖 3 中所示。
清單 2. R 中的一個箱線圖
# Basic boxplot
with(michelson, boxplot(Speed ~ Expt))
# I can add colour and labels. I can also save the results to an object.
michelson.bp = with(michelson, boxplot(Speed ~ Expt, xlab=」Experiment」, las=1,
ylab=」Speed of Light – 299,000 m/s」,
main=」Michelson-Morley Experiments」,
col=」slateblue1″))
# The current estimate of the speed of light, on this scale, is 734.5
# Add a horizontal line to highlight this value.
abline(h=734.5, lwd=2,col=」purple」) #Add modern speed of light
Michelson and Morley 似乎有計劃地高估了光速。各個實驗之間似乎也存在一定的不均勻性。
圖 3. 繪制一個箱線圖

在對分析感到滿意後,我可以將所有命令保存到一個 R 函數中。參見清單 3。
清單 3. R 中的一個簡單函數
MyExample = function(){
library(MASS)
data(michelson)
michelson.bw = with(michelson, boxplot(Speed ~ Expt, xlab=」Experiment」, las=1,
ylab=」Speed of Light – 299,000 m/s」, main=」Michelsen-Morley Experiments」,
col=」slateblue1″))
abline(h=734.5, lwd=2,col=」purple」)
}
這個簡單示例演示了 R 的多個重要功能:
保存結果—boxplot() 函數返回一些有用的統計數據和一個圖表,您可以通過類似 michelson.bp = … 的負值語句將這些結果保存到一個 R 對象中,並在需要時提取它們。任何賦值語句的結果都可在 R 會話的整個過程中獲得,並且可以作為進一步分析的主題。boxplot 函數返回一個用於繪制箱線圖的統計數據(中位數、四分位等)矩陣、每個箱線圖中的項數,以及異常值(在 圖 3 中的圖表上顯示為開口圓)。請參見圖 4。
圖 4. 來自 boxplot 函數的統計數據

公式語言— R(和 S)有一種緊湊的語言來表達統計模型。參數中的代碼 Speed ~ Expt 告訴函數在每個 Expt (實驗數字)級別上繪制 Speed 的箱線圖。如果希望執行方差分析來測試各次實驗中的速度是否存在顯著差異,那麼可以使用相同的公式:lm(Speed ~ Expt)。公式語言可表達豐富多樣的統計模型,包括交叉和嵌套效應,以及固定和隨機因素。
用戶定義的 R 函數— 這是一種編程語言。
R 已進入 21 世紀
Tukey 的探索性數據分析方法已成為常規課程。我們在教授這種方法,而統計學家也在使用該方法。R 支持這種方法,這解釋了它為什麼仍然如此流行的原因。面向對象性還幫助 R 保持最新,因為新的數據來源需要新的數據結構來執行分析。InfoSphere? Streams 現在支持對與 John Chambers 所設想的不同的數據執行 R 分析。
R 與 InfoSphere Streams
InfoSphere Streams 是一個計算平台和集成開發環境,用於分析從數千個來源獲得的高速數據。這些數據流的內容通常是非結構化或半結構化的。分析的目的是檢測數據中不斷變化的模式,基於快速變化的事件來指導決策。SPL(用於 InfoSphere Streams 的編程語言)通過一種範例來組織數據,反映了數據的動態性以及對快速分析和響應的需求。
我們已經距離用於經典統計分析的電子表格和常規平面文件很遠,但 R 能夠應付自如。從 3.1 版開始,SPL 應用程序可將數據傳遞給 R,從而利用 R 龐大的包庫。InfoSphere Streams 對 R 的支持方式是,創建合適的 R 對象來接收 SPL 元組(SPL 中的基本數據結構)中包含的信息。InfoSphere Streams 數據因此可傳遞給 R 供進一步分析,並將結果傳回到 SPL。
R 需要主流硬體嗎?
我在一台運行 Crunchbang Linux 的宏碁上網本上運行了這個示例。R 不需要笨重的機器來執行中小規模的分析。20 年來,人們一直認為 R 之所以緩慢是因為它是一種解釋性語言,而且它可以分析的數據大小受計算機內存的限制。這是真的,但這通常與現代機器毫無干係,除非應用程序非常大(大數據)。
R 的不足之處
公平地講,R 也有一些事做不好或完全不會做。不是每個用戶都適合使用 R:
R 不是一個數據倉庫。在 R 中輸入數據的最簡單方式是,將數據輸入到其他地方,然後將它導入到 R 中。人們已經努力地為 R 添加了一個電子表格前端,但它們還沒流行起來。電子表格功能的缺乏不僅會影響數據輸入,還會讓以直觀的方式檢查 R 中的數據變得很困難,就像在 SPSS 或 Excel 中一樣。
R 使普通的任務變得很困難。舉例而言,在醫療研究中,您對數據做的第一件事就是計算所有變數的概括統計量,列出無響應的地方和缺少的數據。這在 SPSS 中只需 3 次單擊即可完成,但 R 沒有內置的函數來計算這些非常明顯的信息,並以表格形式顯示它。您可以非常輕松地編寫一些代碼,但有時您只是想指向要計算的信息並單擊滑鼠。
R 的學習曲線是非平凡的。初學者可打開一個菜單驅動的統計平台並在幾分鍾內獲取結果。不是每個人都希望成為程序員,然後再成為一名分析家,而且或許不是每個人都需要這么做。
R 是開源的。R 社區很大、非常成熟並且很活躍,R 無疑屬於比較成功的開源項目。前面已經提到過,R 的實現已有超過 20 年歷史,S 語言的存在時間更長。這是一個久經考驗的概念和久經考驗的產品。但對於任何開源產品,可靠性都離不開透明性。我們信任它的代碼,因為我們可自行檢查它,而且其他人可以檢查它並報告錯誤。這與自行執行基準測試並驗證其軟體的企業項目不同。而且對於更少使用的 R 包,您沒有理由假設它們會實際生成正確的結果。
結束語
我是否需要學習 R?或許不需要;需要 是一個感情很強烈的詞。但 R 是否是一個有價值的數據分析工具呢?當然是的。該語言專為反映統計學家的思考和工作方式而設計。R 鞏固了良好的習慣和合理的分析。對我而言,它是適合我的工作的工具。

④ 如何讓Hadoop結合R語言做大數據分析

R語言和MATLAB一樣,用於數據分析處理的,在某些方面比較MATLAB更加強力,在計算矩陣方面PYTHON完全沒可比性,R語言還可以和Hadoop結合運行在集群上,做大規模數據統計必備。

⑤ 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

⑥ 求大數據分析大神 用R語言解決Q2

library(amap)
x = read.csv("input.csv",header=T)
x=as.dist(x)
hc = hcluster(x,method = "euclidean", link="complete")
labels=hc$labels
height=hc$height
merge=hc$merge
png("hc.png",width = 10,height = 5,res = 300,units="in")
plot(hc)
dev.off()

閱讀全文

與用r語言做大數據分析相關的資料

熱點內容
flash效果工具 瀏覽:555
正在列印的文件怎麼取消列印 瀏覽:901
電腦網路不行關掉哪些 瀏覽:104
word從第三頁開始編頁碼 瀏覽:335
iphone來電通專業版 瀏覽:329
哪些搜題app下架了 瀏覽:239
ios資料庫文件怎麼打開 瀏覽:203
遙感衛星數據哪裡下載 瀏覽:676
哪些神經網路在數據挖掘中的運用 瀏覽:259
安卓60v4a全局音效 瀏覽:241
打好的文件找不到了咋辦 瀏覽:252
gpt分區win7升級win10 瀏覽:919
怎樣用qq影音壓縮文件 瀏覽:204
裝修需求市場在哪個網站 瀏覽:662
亞馬遜數據報告在哪裡 瀏覽:757
pdf文件怎樣把a4打成a3 瀏覽:599
編程課能學到什麼程度 瀏覽:753
電腦刪軟體卸載顯示找不到文件 瀏覽:763
gho文件夾找不到了 瀏覽:101
小米文件助手在哪裡 瀏覽:653

友情鏈接