Ich habe eine Eingabedatei mit ungefähr 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.
Ich habe versucht, mein Skript mit einer kleinen Teilmenge der Eingabedatei über 800K Zeilen auszugeben, aber obwohl ich etwa 8G RAM habe, scheint es mir nicht möglich zu sein, alle Daten zu plotten. Gibt es einen einfachen Weg, dies zu tun?
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 glaube also, Ihre Herausforderung besteht nicht darin, 20 Millionen Punkte oder sogar 800.000 Punkte auf einer Handlung zu erzielen, sondern darauf, wie Sie Ihre Daten effektiv so zusammenfassen, dass sie die Botschaft vermitteln, die Sie erzählen wollen.
Das Paket hexbin zum Zeichnen von Hexbins anstelle von Streudiagrammen für Variablenpaare, wie von Ben Bolker in Beschleunigte plot () -Funktion für große Dataset arbeitete für mich für 2 Millionen Datensätze ziemlich mit 4GB 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.
Das direkte Plotten in ein Rasterdateigerät (z. B. png()
aufrufen) ist viel schneller. Ich habe versucht, rnorm(100000)
zu plotten und auf meinem Laptop brauchte X11 cairo plot 2.723 Sekunden, während png
in 2.001 Sekunden fertig war. mit 1 Million Punkten sind die Zahlen 27.095 und 19.954 Sekunden.
Ich benutze Fedora Linux und hier ist der Code.
%Vor% erweitert den verfügbaren Speicher mit memory.limit(size=2000)
(oder etwas größer) Hilfe?