noqqe


blog | sammelsurium | projects | about

Statistiken | Using R - The Nerd Way

Momentan interessiere ich mich für R. Die Programmiersprache für Statistiken genießt aktuell ziemliche Popularität.

Persönlich habe ich (in der kurzen Zeit, seitdem ich es benutze und kenne) R als eine Sprache kennengelernt, die nur begrenzt für coole Sachen benutzt wird. Kann an meiner Deklaration von “cool” liegen oder das sich die coolen Sachen bisher meiner Kenntnis entzogen. Aber mal davon abgesehen dass Statistiken immer interessant sind, wird R anscheinend meistens von irgendwelchen Sales-Druiden oder Marketing-Dudes verwendet, die Daten aus der DB ihres Online-Shops kratzen lassen um festzustellen wie viele Rosa Einhörner letzten Monat verkauft worden sind.

Nunja, sagen wirs so. Ich hab überlegt für was ich R nutzen würde und etwas damit gespielt. Prinzipiell ist die vorgehensweise sehr einfach. Ich hab irgendwo ein LogFile o.ä. rumliegen (sozusagen die Rohdaten) und bringe diese mit ein bisschen Bash/Shell Zauber in ein Format welches ich R vorschmeissen kann. R unterstützt… naja so ziemlich alles, was einen halbwegs anständigen Delimiter vorweisen kann.

R arbeitet in diesem Fall mit einer Interaktiven Shell, die die Eingaben interpretiert.

Tweetstatistik meiner Timeline analysieren (via twidge)

# Letzte 200 Tweets ausgeben
$ twidge lsrecent --all > tweets
# Usernamen sortieren und Tweets zählen
$ grep '^<' tweets | awk '{print $1}' | sort | uniq -c | sort -rn
# In R Shell wechseln
$ R
# Twitter Timeline einlesen
> twittertimeline <- read.table("twitter/tweets", head=T, sep="" )
# Kuchenansicht erstellen
> pie(twittertimeline$Tweets, label=twittertimeline$User)

An dieser Stelle kann es passieren, dass es bei zu vielen Daten wirklich sehr unübersichtlich wird. Was genau ich da falsch mache ist mir allerdings etwas schleierhaft. An der Skalierung lässt sich sicher noch arbeiten. Aber mit einem kleineren Satz von Daten, sieht es schon besser aus.

# 20 meisten Twitterer heraussuchen
$ grep '^<' tweets | awk '{print $1}' | sort | uniq -c | sort -n  | tail -20 > tweets-20
# Einlesen
> twittertimeline20 <- read.table("twitter/tweets-20", head=T, sep="")
# Balkendiagram erstellen
> barplot(as.matrix(twittertimeline20$Tweets), main="Timeline", ylab="Tweets", xlab="Users", beside=TRUE, col=rainbow(20))

Und damit das ganze auch was aussagt, kann man sogar eine kleine Legende anfügen.

> legend( 1, 60,twittertimeline20$User, cex=0.6,  fill=rainbow(20))

History der Bash visualisieren

Wer auf Kuchen steht, kann auch eifnach mal seine Bash History einlesen.

# Command sortieren und zählen
$ history | awk '{print $4}' | sort | uniq -c | sort -rn | head > sys/history
   Used Command
   1106 ls
    889 vim
    490 cd
    423 git
    116 screen
    116 rm
     81 ./tismc.bash
     76 ps
     75 less
     72 ./coming-home.bash
# Das generierte File in R einlesen
> history <- read.table("sys/history", head=T, sep="")
# Aus dem Object history ein neues Object für Labels erstellen
# in denen die prozentualen Werte der Commands stehen
> history_labels <- paste(history$Command , " " , round(history$Used/sum(history$Used) * 100, 1) , "%", sep="")
# Object und Labels zu einem Kuchendiagramm formen
> pie(history$Used, main="Commands", label=history_labels, cex=0.8)

Mailadressen aus mail.log

Um noch ein 3. mal den Anwendungsbereich zu wechseln, kann man damit auch wunderbar das mail.log seines Mailservers unter die Lupe nehmen.

> mailaddresses <- read.table("mail/mail_addresses", head=T, sep="")
> pie(mailaddresses$Mails, main="Mail Adressen", col=rainbow(length(mailaddresses$Address) ), label=mailaddresses$Address)

Egal, mein BWL Lehrer sagte immer: Traue nie einer Statistik, die du nicht selbst gefälscht hast.

Comments (5)

Fredo on 2011-02-04T21:45:02
Yeah, R rocks! R ist wirklich eine ziemlich interessante Sprache. Die Grafikmöglichkeiten sind ziemlich gut, aber auch die Fähigkeiten in Bezug auf Datentransformation, Matrixalgebra etc. sind sehr ausgefeilt. Nur als Hinweis am Rande: Kreisdiagramme sind zwar ganz hübsch, aber Balkendiagramme sind in der Regel zweckmäßiger: Bei Kreisdiagrammen lässt sich die Größe von Segmenten optisch relativ schwer erfassen und vergleichen, während Balkendiagramme sehr gut gelesen und interpretiert werden können.

noqqe on 2011-02-05T00:40:39
hey fredo! Ja, fand ich auch. Hab mir das Manual schon zum großen Teil durchgelesen, aber irgendwie keine wirkliche Verwendung für die (echt umfangreichen) mathematischen Möglichkeiten gefunden. Ja, bei den Kreisdiagrammen muss ich dir recht geben, aber ich meine hey... KUCHEN! :)

HmpfCBR on 2011-02-05T04:07:23
Schau dir auch mal 'littler' an, gerade für Interaktion bash und R recht hilfreich. Ansosnten kann ich Frodo bzgl. Kreis und Balkendiagrammen nur zustimmen. Wenigstens hast du keine 3D-Torten benutzt. ;) Vergleich deine Grafiken und frag dich selbst, wo du was wie gut erkennst ... Torten taugen nur bei ganz wenigen Teilen und auch dann nur, wenn man klar machen will, dass es sich um Teile eines Ganzen handelt.

thomas on 2011-02-07T01:19:10
Wow, R ist echt nice :D Vielleicht könnte man bei "Commands" und auch der Statistik deiner Timeline statt den Rest "abzuschneiden" auch R anweisen, nur die 10 größten Anteile einzeln anzuzeigen und den Rest zusammengefasst darzustellen, eben als "Rest" wie man das von herkömmlichen Statistiken kennt. Damit würdest du das Ergebnis nicht verfälschen und trotzdem die Übersicht bewahren. Super Artikel, wieder was gelernt!

noqqe on 2011-02-07T18:09:21
@HmpfCBR: Ja, wenn ich so im nachhinein drüber nachdenke, habt ihr wohl Recht. @thomas: Ja ich weiss was du meinst. Sone art "Other"-Spalte im Kuchen wie man das von Wahlen kennt. Hab ich mich auch kurz schlaugelesen, aber dazu hätte ich (wenn ich das richtig verstanden hab) ein zusätzliches Paket aus dem CRAN gebraucht. Damit hab ich mich dann fürn Anfang doch noch nicht auseinander setzen wollen ;) Aber schön mal wieder was von dir zu hören!