2013-03-27 57 views
6

如何將R packages zoo或xts用於非常大的數據集? (100GB) 我知道有一些軟件包,比如bigrf,ff,bigmemory可以處理這個問題,但是你必須使用它們有限的一組命令,它們沒有動物園或者xts的功能,而且我也沒有知道如何讓動物園或xts使用它們。 我該如何使用它?如何使用大數據的動物園或xts?

我已經看到,還有一些其他的東西,與數據庫相關,如sqldf和hadoopstreaming,RHadoop,或其他使用的革命河。你有什麼建議?,任何其他?

我只想集合系列,清理,並執行一些協整和情節。 我不想爲每個需要的命令編寫和實現新的函數,每次都使用小塊數據。

補充:我在Windows

+0

這不是一個量化的財務問題。我將這個發送給Stack Overflow。 – chrisaycock 2013-03-27 03:56:36

+0

@skan你可以看看Jeff Ryan創建的'mmap'包(xts的作者) – 2013-03-27 06:54:26

+0

也可以看看這篇文章http://r.789695.n4.nabble.com/xts-timeseries-as-shared -memory-objects-with-bigmemory-package-tp3385186p3385252.html – 2013-03-27 07:07:37

回答

2

我也有過類似的問題(雖然我只用9-10 GB的播放)。我的經驗是,沒有辦法R可以處理它自己的這麼多的數據,特別是因爲你的數據集似乎包含時間序列數據。

如果數據集含有大量的零,您可以使用稀疏矩陣來處理它 - 見矩陣包(http://cran.r-project.org/web/packages/Matrix/index.html);本說明書也可以來方便(http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r/

我使用的PostgreSQL - 相關ř包是RPostgreSQLhttp://cran.r-project.org/web/packages/RPostgreSQL/index.html)。它允許你查詢你的PostgreSQL數據庫;它使用SQL語法。數據作爲數據幀下載到R中。它可能很慢(取決於查詢的複雜程度),但它很強大,可以方便地進行數據聚合。

缺點:您需要先將數據上傳到數據庫中。您的原始數據需要保持乾淨並以一些可讀的格式(txt/csv)保存。如果你的數據還不是一個明智的格式,這可能是最大的問題。然而上傳「乖」的數據到數據庫是很容易(見http://www.postgresql.org/docs/8.2/static/sql-copy.htmlHow to import CSV file data into a PostgreSQL table?

我會建議使用PostgreSQL或任何其他關係數據庫您的任務。我沒有嘗試Hadoop,但是使用CouchDB幾乎讓我轉彎。堅持用舊的SQL

+0

謝謝。如果任何人仍然感興趣,還有其他一些方法:Revoscaler可能是一個選擇,它需要添加更多的功能。儘管Hadoop Mapreduce非常複雜,但可以將Hadoop與RHadoop一起使用。 – skan 2013-09-24 12:01:02

+0

稀疏矩陣選項聽起來不錯,Skif,但只適用於某些情況。我如何使用數據庫(例如SQLite)並執行時間聚合而不加載內存中的所有內容?我需要使用SQL連接而不是R的功能嗎? – skan 2013-09-24 12:06:49

+0

是的,使用SQL連接和其他SQL將是最佳選擇。也許我讓你感到困惑 - 你可以一次將PostgreSQL中的數據提取到R中。無需一次性將所有內容下載到R中。 假設您有時間序列數據。您可以嘗試的一件事是一次將數據加載到R一個時間段並以這種方式彙總。另一種方法是通過SQL查詢來完成所有的聚合。我工作時使用了第一個選項,但第二個選項也應該可行 – Skif 2013-09-25 15:06:43