R

Nein, die Überschrift ist nicht unvollständig. In den letzten Tagen habe ich mich ein wenig mit R beschäftigt und bin begeistert. R ist so was wie GNU S, aber wer von S noch nix gehört hat ist damit auch nicht schlauer als zuvor. Daher hier mal von der CRAN-Seite zitiert:

R is `GNU S‘, a freely available language and environment for statistical computing and graphics which provides a wide variety of statistical and graphical techniques: linear and nonlinear modelling, statistical tests, time series analysis, classification, clustering, etc. Please consult the R project homepage for further information.

Es geht also ganz grob gesagt um das Thema Statistik. Und das ist ein Thema das mich schon auch interessiert, aus folgendem Hintergrund. Seit etwa 30 Jahren bin ich Sportschütze und in diesen 30 Jahren habe ich viele Versuche auf den unterschiedlichsten Rechnern und in den unterschiedlichsten Programmiersprachen gestartet um ein paar ganz triviale Dinge statistisch auszuwerten wenn es um meine Schießergebnisse geht. Als Rahmen dienen folgende Regeln:

  • Ein Sportjahr dauert 12 Monate
  • Man darf soviele Serien schießen wie man will
  • Wer mindestens 20 Serien geschossen hat, wird für die Jahresmeisterschaft gewertet
  • Für die Platzierung in der Jahresmeisterschaft zählt die Summer der 20 besten Ergebnisse

Rausgekommen sind diverse Programmmonster in BASIC (Commodore 64), FORTH, C, Perl usw. Jedesmal viel Aufwand und viel Mühe für das User-Interface und die Pflege der Daten. Der letzte Anlauf war in Perl und mit viel Mühe für einen Ergebnis-Parser.

Neulich habe ich dann mal ein paar Seiten Einführung zu R gelesen, relativ wenig im Vergleich mit den mehreren tausend Seiten die das herunterladbare Referenzmanual hat. Aber mir war schnell klar, dass ich hier ein Werkzeug in der Hand halte, das richtig angewendet mein individuelles Statistikproblem sehr elegant lösen könnte. Also ein wenig mit R gehackt und rausgekommen ist jetzt ein Auswertsystem das auf R basiert.

Die Ergebnisse die Ausgewertet werden sollen stehen in einer simplen Textdatei, die sieht momentan (nach 3 Ergebnissen so aus):

Datum Ringe
27.10.2009 341
30.10.2009 337
03.11.2009 348

Also jeweils ein Kalenderdatum und das an diesem Tag erzielte Ergebnis. So was liest man in R mit sehr wenig Aufwand ein:


f.einlesen <- function(name) {
# Einlesen der Daten aus Textdatei mit abschließendem
# Sortieren nach Datum
t.peng <- read.table(name, header=TRUE, sep=" ")
t.peng$Datum <- as.Date(t.peng$Datum, format="%d.%m.%Y")
t.peng[order(t.peng$Datum),]
}

Damit hat man einen Dataframe der die Daten enthält die in der Datei stehen. Und die kann man jetzt beliebig verwursten. Nach knapp 2 Tagen rumprobieren habe ich  135 Zeilen (inklusive Kommentare und Leezeilen) und die erfüllen schon mal sehr viel meiner Anforderungen. Um das mal zu verdeutlichen habe ich per Zufallsgenerator ein Jahr an Schießergebnissen des Kameraden „Zufallstreffer“ erzeugt, der erzielt mit großer Steuung zwischen 320 und 370 Ringen. Ausgewertet sieht das dann so aus:

Rplot001Der Kamerad hat also 85 Serien, die Summe aus den besten 20 ist 7287. Und die Graphik zeigt, wie das jeweils beste und für die Wertung schlechteste Ergebnis sich im Laufe der Monate verschieben. Ebenso sieht man, dass der Gesamtschnitt (über alle 85 Serien) sich im Laufe der Zeit irgendwo einpendelt während der Schnitt der 20 gewerteten besten Serien sich natürlich ab Serie 21 abkoppelt und stetig nach oben bewegt.

Erstellt ist diese Graphik mit 2 Funktionsaufrufen, einmal da Einlesen der Daten, einmal das Erzeugen der Graphik. Und als Graphik-Gerät kann man sowohl eine Bilddatei als auch eine Postscript-Datei in A4-Größe erstellen die man dann auch in hoher Qualität ausdrucken kann.

Das alles wie gesagt in sehr kurzer Zeit entwickelt und dabei kratze ich gerade mal ein wenig an der Oberfläche von R und bin noch gar nicht in die Tiefe gegangen. Aber der schnelle Erfolg motiviert natürlich, sich weiter mit diesem Werkzeug zu beschäftigen und noch viel mehr damit anzustellen.