Digital Geography

7. Januar 2013

Handling von langen Zeitreihen mit R

Das Problem

In meiner Masterarbeit bin ich auf folgendes Problem gestoßen. Meine N/A-Szenarienrechnungen ergaben über den Zeitraum 1992-2006 (5 Minuten zeitliche Auflösung) Daten mit über 1,5 Millionen Zeilen pro Variante. Bei acht Szenarien und acht Gebieten macht das 64 Datensätze, die mit jeweils ca. 1,5 Millionen Abflusswerten auf Auswertung warten. Aufgrund einiger Vorüberlegungen, wollte ich jedoch nur einen kleinen Betrachtungszeitraum dieser Datenreihen bearbeiten. Da Microsofts Excel „nur“ ca. 1 Mio. Zeilen lesen kann, musste ich meine Rohdaten zunächst ausschneiden. Geholfen hat mit dabei R, ein OpenSource-Pendant der Statistik-Software Matlab von Mathworks. Ihr könnte RStudio (eine R-Variante mit GUI) hier herunterladen.


Die Lösung

Um die Daten mit R ausschneiden zu können, ist zunächst der Zeilenbereich interessant, der den entsprechenden Zeitraum abdeckt. Ich verwende bei großen ASCII-Daten (Was ist das?) gerne das Notepad++ (OpenSource). Die erforderlichen Zeilennummern bekomme ich über die Suche nach Anfangs- und Endzeitstempel (in der Datumsspalte) meines gewünschten Zeitraums. Nun geht’s weiter mit R.

# Datenimport

TGB1a TGB1b TGB1c TGB1ist
# Schreiben der einzelnen Zeiträume in csvs

tgb1_a write.csv(tgb1_a, file = "~/Documents/Modellierung/A/tgb1_a.csv", row.names = FALSE)

tgb1_b write.csv(tgb1_b, file = "~/Documents/Modellierung/B/tgb1_b.csv", row.names = FALSE)

tgb1_c write.csv(tgb1_c, file = "~/Documents/Modellierung/C/tgb1_c.csv", row.names = FALSE)

tgb1_ist write.csv(tgb1_ist, file = "~/Documents/Modellierung/A/tgb1_ist.csv", row.names = FALSE)

Zunächst werden die Eingangsdaten eingelesen und als Variable in R angelegt. Im zweiten Schritt wird die Zeilenselektion [133921:137953,] vorgenommen, die dem Betrachtungszeitraum entspricht. Am Ende steht das Schreiben der Selektion in eine neue .CSV. Der weiteren Verarbeitung mit Excel & Co. steht nun nichts mehr im Wege.

Sicher könnte man auch noch das Finden der Zeiträume und die Ausgabe der Zeilennummern in R abbilden können. Hat hier jemand einen Lösungsansatz?

Hilfreiche Informationen zu R und seinen Funktionalitäten bietet folgende Quellensammlung: http://www.r-project.org/other-docs.html