2012-05-29 18 views
7

Ich habe eine Eingabedatei mit etwa 20 Millionen Zeilen. Die Größe der Datei beträgt etwa 1,2 G. Gibt es trotzdem, kann ich die Daten in R darstellen. Einige der Spalten haben Kategorien, die meisten davon sind Zahlen.Riesige Datendateien in R zeichnen?

Ich habe versucht, mein Plot-Skript mit einer kleinen Teilmenge der Eingabedatei über 800K Zeilen, aber obwohl ich über 8G RAM habe, scheint ich nicht in der Lage, alle Daten zu plotten. Gibt es einen einfachen Weg, dies zu tun?

+9

Was hoffen Sie in einem Grundstück mit 20 Millionen Datenpunkten zu sehen? – Chase

+5

Unabhängig von der Rechenkapazität müssen Sie Ihre Daten über Histogramme, 1D- und 2D-Dichtediagramme, Hexbin-Plots, ... –

+0

... weiter unten entlang der Linie von @ Paul Hiemstras Antwort unten - wenn Sie etwas geben mehr Details über (eine Teilmenge von) Ihren Daten erhalten Sie vielleicht eine interessante Diskussion über Visualisierungsmöglichkeiten hier. Außerdem ist 'ggplot' möglicherweise langsamer/speicherhungriger als andere Möglichkeiten, wenn Sie wirklich jeden Punkt grafisch darstellen möchten. –

Antwort

12

Ohne eine klarere Beschreibung der Art der Handlung, die Sie wollen, ist es schwer, konkrete Vorschläge zu geben. Im Allgemeinen ist es jedoch nicht erforderlich, 20 Millionen Punkte in einem Diagramm zu zeichnen. Zum Beispiel könnte eine Zeitreihe durch eine Splines-Anpassung oder irgendeine Art von Mittelwert, z. stündliche Daten zu täglichen Durchschnitten zusammenfassen. Alternativ zeichnen Sie eine Teilmenge der Daten, z. nur ein Punkt pro Tag im Beispiel der Zeitreihen. Ich denke, Ihre Herausforderung besteht nicht darin, 20 Millionen Punkte oder gar 800.000 Punkte auf einer Handlung zu erreichen, sondern darauf, wie Sie Ihre Daten effektiv so zusammenfassen, dass sie die Botschaft vermitteln, die Sie erzählen möchten.

+3

Das Sampling der Daten und die wiederholte Wiederholung des Prozesses würden auch Muster anzeigen, die in den Daten verborgen sind. –

+1

Ich stimme mit @ RomanLuštrik überein, wenn sich das Muster für Proben von 10.000 Punkten wiederholt, weißt du, dass das Muster konstant ist (aka stationär). Wenn nicht, reicht eine Stichprobe von 10.000 Punkten nicht aus. –

0

erweitert den verfügbaren Speicher mit memory.limit(size=2000) (oder etwas größer) Hilfe?

3

Plotten direkt in ein Raster-Datei-Gerät (Aufruf zum Beispiel) ist viel schneller. Ich habe versucht, rnorm(100000) Plotten und auf meinem Laptop X11 Cairo Plot nahm 2,723 Sekunden, während png Gerät in 2,001 Sekunden abgeschlossen. mit 1 Million Punkten sind es 27.095 und 19.954 Sekunden.

Ich benutze Fedora Linux und hier ist der Code.

f = function(n){ 
x = rnorm(n) 
y = rnorm(n) 
png('test.png') 
plot(x, y) 
dev.off()} 

g = function(n){ 
x = rnorm(n) 
y = rnorm(n) 
plot(x, y)} 

system.time(f(100000)) 
system.time(g(100000)) 
4

Das Paket Hexbin zum Zeichnen von Hexbins anstelle von Streudiagrammen für Variablenpaare, wie von Ben Bolker in Speed up plot() function for large dataset vorgeschlagen, arbeitete für mich für 2 Millionen Datensätze ziemlich mit 4 GB RAM. Aber es ist für 200 Millionen Datensätze/Zeilen für denselben Satz von Variablen gescheitert. Ich habe versucht, die Bin-Größe zu reduzieren, um die Rechenzeit gegenüber der RAM-Nutzung anzupassen, aber es hat nicht geholfen.

Für 20 Millionen Datensätze können Sie Hexbins mit xbins = 20,30,40 testen, um damit zu beginnen.

1

Die Speichererweiterung mit memory.limit() hat mir geholfen ... Dies ist zum Plotten mit ggplot fast 36K Datensätze.