2013-03-27 5 views
6

Wie kann ich die R-Pakete zoo oder xts mit sehr großen Datensätzen verwenden? (100GB) Ich weiß, es gibt einige Pakete wie bigrf, ff, bigmemory, die mit diesem Problem umgehen können, aber Sie müssen ihre begrenzten Satz von Befehlen verwenden, sie haben nicht die Funktionen von Zoo oder XTS und ich nicht wissen, wie man Zoo oder xts macht, sie zu benutzen. Wie kann ich es benutzen?Wie verwendet man Zoo oder XTS mit großen Daten?

Ich habe gesehen, dass es auch einige andere Dinge gibt, die mit Datenbanken in Verbindung stehen, wie sqldf und hadoopstreaming, RHadoop oder andere, die von Revolution R verwendet werden. Was raten Sie ?, andere?

Ich möchte nur Serie aggregieren, reinigen und einige Kointegrationen und Plots durchführen. Ich möchte nicht für jeden Befehl, den ich benötige, neue Funktionen kodieren und implementieren müssen, wobei ich jedes Mal kleine Datenstücke verwende.

hinzugefügt: Ich bin auf Windows

+0

Dies ist keine quantitative Finanzfrage. Ich sende das zu Stack Overflow. – chrisaycock

+0

@skan Sie können sehen, 'mmap' Paket, das von Jeff Ryan (Autor von XTS) –

+0

erstellt wurde Siehe auch diesen Beitrag http://r.789695.n4.nabble.com/xts-timeseries-as-shared -memory-objects-with-bigmemory-package-tp3385186p3385252.html –

Antwort

2

Ich habe ein ähnliches Problem hatte (wenn auch ich nur mit 9-10 GBs spielte). Meine Erfahrung ist, dass gibt es keine Möglichkeit, R kann so viele Daten auf eigene behandeln, vor allem, da Ihr Dataset scheint Zeitreihendaten enthalten.

Wenn Ihr Dataset viele Nullen enthält, können Sie möglicherweise mit dünn besetzten Matrizen umgehen - siehe Matrix Paket (http://cran.r-project.org/web/packages/Matrix/index.html); Dieses Handbuch kann auch nützlich sein (http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r/)

I verwendet PostgreSQL - das entsprechende R-Paket RPostgreSQL (http://cran.r-project.org/web/packages/RPostgreSQL/index.html) ist. Es ermöglicht Ihnen, Ihre PostgreSQL-Datenbank abzufragen; Es verwendet SQL-Syntax. Daten werden in R als ein Datenrahmen heruntergeladen. Es kann langsam sein (abhängig von der Komplexität Ihrer Abfrage), aber es ist robust und kann für die Datenaggregation nützlich sein.

Nachteil: Sie müssten zuerst Daten in die Datenbank hochladen. Ihre Rohdaten müssen sauber und in einem lesbaren Format gespeichert sein (txt/csv). Dies ist wahrscheinlich das größte Problem, wenn Ihre Daten nicht bereits in einem vernünftigen Format vorliegen. Doch „gut erzogene“ Daten in die DB Upload ist einfach (siehe http://www.postgresql.org/docs/8.2/static/sql-copy.html und How to import CSV file data into a PostgreSQL table?)

Ich würde empfehlen, PostgreSQL oder andere relationale Datenbank für Ihre Aufgabe verwenden. Ich habe Hadoop nicht getestet, aber mit CouchDB wäre ich fast um die Ecke gefahren. Bleiben Sie mit guten alten SQL

+0

Danke.Wenn jemand noch interessiert ist, gibt es noch andere Möglichkeiten: Revoscaler könnte eine Option sein, thoguh muss es weitere Funktionen hinzufügen. Die Verwendung von Hadoop mit RHadoop könnte eine Option sein, obwohl Hadoop Mapreduce ziemlich kompliziert ist. – skan

+0

Die Sparse-Matrix-Option klingt nett, Skif, aber nur für einige Fälle. Wie kann ich die Datenbank (z. B. SQLite) verwenden und eine Zeitaggregation durchführen, ohne dass alles im Speicher geladen wird? Müsste ich SQL Joins anstelle von Rs Funktionen verwenden? – skan

+0

Ja, mit SQL-Joins und anderen SQL wäre die beste Option. Vielleicht habe ich Sie verwirrt - Sie können Daten aus Ihrem PostgreSQL Bit für Bit in R extrahieren. Es ist nicht nötig, alles auf einmal in R herunterzuladen. Angenommen, Sie haben Zeitreihendaten. Eine Sache, die Sie versuchen können, ist, Daten in R eine Zeitperiode auf einmal zu laden und auf diese Weise zu aggregieren. Die Alternative besteht darin, die gesamte Aggregation über SQL-Abfragen durchzuführen. Ich benutzte die erste Option, wenn ich arbeitete, aber die zweite Option sollte auch machbar sein – Skif

Verwandte Themen