
用R處理大數(shù)據(jù)集_數(shù)據(jù)分析師
用R處理大數(shù)據(jù)集
JAN 1ST, 2012
| COMMENTS
本文翻譯自R in Action
的附錄G,如果對(duì)該書(shū)感興趣,請(qǐng)自行購(gòu)買(mǎi)或去圖書(shū)館閱讀。
R會(huì)把所有的對(duì)象讀存入虛擬內(nèi)存中。對(duì)我們大多數(shù)用戶來(lái)說(shuō),這種設(shè)計(jì)可以提高與R相互的速度,但是當(dāng)分析大數(shù)據(jù)集時(shí),這種設(shè)計(jì)會(huì)降低程序運(yùn)行速度有時(shí)還會(huì)產(chǎn)生跟內(nèi)存相關(guān)的錯(cuò)誤。
內(nèi)存限制主要取決于R的build版(32位還是64位),而在32位的windows下,取決于操作系統(tǒng)的版本。以cannot allocate vectoe of size開(kāi)頭的出錯(cuò)信息表示無(wú)法分配充足的連續(xù)內(nèi)存,而以cannot allocate vector of length開(kāi)頭的出錯(cuò)信息表示超越了地址限制(address limit)。在處理大數(shù)據(jù)集時(shí),應(yīng)盡量使用64位版的R。對(duì)于各種build版,向量中的元素個(gè)數(shù)最大為2147483647(請(qǐng)自行?Memory)。
在處理大數(shù)據(jù)集時(shí)有三方面應(yīng)該考慮:(a)提高程序的效率,保證執(zhí)行速度;(b)把數(shù)據(jù)儲(chǔ)存在外部,以解決內(nèi)存限制問(wèn)題;(c)使用專門(mén)的統(tǒng)計(jì)方法來(lái)有效處理大數(shù)據(jù)量的問(wèn)題。
下面將分別討論。
下面幾條編程技巧來(lái)可以提高處理大數(shù)據(jù)集時(shí)的效率
函數(shù)族把外部數(shù)據(jù)導(dǎo)入數(shù)據(jù)框時(shí),盡量顯式設(shè)定colClasses和nrows選項(xiàng),設(shè)定comment.char = "",把不需要的列設(shè)置成NULL。這樣可以減少占用的內(nèi)存,同時(shí)加快處理速度。將外部數(shù)據(jù)導(dǎo)入矩陣時(shí),使用scan()函數(shù);
可以刪除內(nèi)存中的所有對(duì)象。刪除指定的對(duì)象可以用rm(object);
,被墻)中提到,使用函數(shù).ls.objects()列出工作區(qū)內(nèi)的對(duì)象占用的內(nèi)存大小。這個(gè)函數(shù)會(huì)幫助你找到吃內(nèi)存的大家伙。
和summaryRprof()函數(shù)完成這項(xiàng)工作。system.time()函數(shù)也可以幫助你。profr 和 prooftools 包提供了若干函數(shù)來(lái)幫助分析profile的輸出。
處理大數(shù)據(jù)集,提高代碼效率只能解決一部分問(wèn)題。你也可以把數(shù)據(jù)存在外部存儲(chǔ)并使用專門(mén)的統(tǒng)計(jì)分析方法。
有幾種包可以實(shí)現(xiàn)在內(nèi)存之外存儲(chǔ)數(shù)據(jù)。解決之道是把數(shù)據(jù)保存在外部數(shù)據(jù)庫(kù)或者硬盤(pán)里的二進(jìn)制文件中,然后在需要的時(shí)候部分地讀取。下表描述了幾種有用的包:
包
描述
ff
提供了一種數(shù)據(jù)結(jié)構(gòu),保存在硬盤(pán)中,但是操作起來(lái)就如同在內(nèi)存中一樣
bigmemory
支持大規(guī)模矩陣的創(chuàng)建、儲(chǔ)存、讀取和操作。矩陣被分配到共享內(nèi)存或內(nèi)存映射的文件中(memory-mapped files)
filehash
實(shí)現(xiàn)了簡(jiǎn)單的key-value數(shù)據(jù)庫(kù),在其中特征字符串key與存儲(chǔ)在硬盤(pán)中的數(shù)據(jù)value相關(guān)聯(lián)。
ncdf, ncdf4
Provides an interface to Unidata netCDF data files.
RODBC, RMySQL,ROracle, RPostgreSQL,RSQLite
可以用這些包讀取外部關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)
上面的包可以幫助克服R的內(nèi)存限制。除此以外,當(dāng)需要在有限時(shí)間內(nèi)分析大數(shù)據(jù)集時(shí),使用專門(mén)方法也是必須的。一些有用的方法將在下面介紹。
R提供了幾種分析大數(shù)據(jù)集的包:
和 speedglm 包可以針對(duì)大數(shù)據(jù)集有效地?cái)M合線性和廣義線性模型。在處理大規(guī)模數(shù)據(jù)集時(shí),這兩個(gè)包提供了類似lm()和glm()的功能。
包可產(chǎn)生大規(guī)模矩陣,一些包可以提供分析這些大規(guī)模矩陣的函數(shù)。bigannalytics 包提供了k-means聚類、行統(tǒng)計(jì)量(column statistics)和一個(gè)對(duì)biglm()的封裝。bigtabulate 包提供了table()、split()和tapply()的功能,bigalgebra 包提供了高等線性代數(shù)的函數(shù)。
包提供了最小角回歸(least-angle regression)、lasso以及針對(duì)大數(shù)據(jù)集的逐步回歸,數(shù)據(jù)集因太大而不能讀入到內(nèi)存中,這時(shí)候要配合 ff 包使用。
包可以用來(lái)處理大數(shù)字(大于2^1024)
處理從GB到TB級(jí)的數(shù)據(jù)對(duì)于任何數(shù)據(jù)都是極大的挑戰(zhàn)。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
用 SQL 生成逆向回滾 SQL:數(shù)據(jù)操作的 “后悔藥” 指南? 在數(shù)據(jù)庫(kù)操作中,誤刪數(shù)據(jù)、錯(cuò)改字段或誤執(zhí)行批量更新等問(wèn)題時(shí)有發(fā)生。 ...
2025-07-14如何考取數(shù)據(jù)分析師證書(shū):以 CDA 為例? ? 在數(shù)字化浪潮席卷各行各業(yè)的當(dāng)下,數(shù)據(jù)分析師已然成為企業(yè)挖掘數(shù)據(jù)價(jià)值、驅(qū)動(dòng)決策的 ...
2025-07-14t檢驗(yàn)與Wilcoxon檢驗(yàn)的選擇:何時(shí)用t.test,何時(shí)用wilcox.test? t 檢驗(yàn)與 Wilcoxon 檢驗(yàn)的選擇:何時(shí)用 t.test,何時(shí)用 wilcox. ...
2025-07-14AI 浪潮下的生存與進(jìn)階: CDA數(shù)據(jù)分析師—開(kāi)啟新時(shí)代職業(yè)生涯的鑰匙(深度研究報(bào)告、發(fā)展指導(dǎo)白皮書(shū)) 發(fā)布機(jī)構(gòu):CDA數(shù)據(jù)科 ...
2025-07-13LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07