Plotting German municipalities using Twitter

More and more institutions do use social networks in Germany, including Twitter. This belongs to municipalities, too. Getting back to a idea of Claas Hanken (a ex-collegue of mine), wanted to visualize these ones. The result can be seen in German and in Englisch. The plot is completely done in R and I will show how it’s done.

As mentioned in the German post was mentioned that the raw data came from a simple tab-delimerted table with the Twittername, Homepage-URL and latitude and longitude information. A example for Berlin:

@berlin_de_news    http://www.berlin.de    52.51, 13.40

The full data can be accessed here. So we load the data into R and do some data-management. Latitude and longitude are comma-seperated and there are no variable names given.

data < - read.delim("verwaltungen.txt", header = F)
lat_lon <- as.numeric(do.call("rbind", str_split(data$V3, ", ")))
data2 <- cbind(data[, 1:2], lat_lon[1:68], lat_lon[69:136])
names(data2) <- c("tw_name", "url", "lat", "lon")

Using the great twitteR-package from Jeff Gentry we can get the total tweets ever send and the actual follower. A little for-loop does some automatation for us.

for (i in data2$tw_name) {
  temp < - statusesCount(getUser(i))
  temp2 <- followersCount(getUser(i))
  if (i == "@ahlen_de") {
    count_tweets <- temp
    follower <- temp2
  } else {
    count_tweets <- append(count_tweets, temp)
    follower <- append(follower, temp2)
  }
}
 
data2 <- cbind(data2, count_tweets, follower)

Having the data prepared we only need a little spatial data from the GADM database of Global Administrative Areas. One could download the data by hand or using the raster-package (as I will do).  Ggplot2's fortify will then prepare the borders for plotting.  If you get an Error from fortify try executing gpclibPermit().

de_map < - getData('GADM', country="DE", level=1)
de_map_2 <- fortify(de_map, region = "NAME_1")

Now it's time to start the show! The plotting should take some time: The spacial data consists about 100k points. You could reduce the size by for example just taking every 5th point but that can cause double borders instead of one in some mapparts.
Usually one would start plotting the points (geom_point()). In this case it would cause the borders to overlap the municipalities. Scale_area() is very helpful because there is a gap between Berlin and the other cities. I also adjusted the limits of the Follower count. The rest should speak for itself.

tw < - ggplot(data= data2) + geom_path(data = de_map_2, aes(x = long, y = lat, group = group), colour = "#8D8D8D", linetype = 2)
tw <- tw + geom_point(aes(x = lon, y = lat, colour = follower, size = count_tweets)) + scale_area("Tweet count")
tw <- tw + theme_bw() + labs(x = NULL, y = NULL) +  scale_colour_gradient(low = "#9D9D9D", high = "#242424", name = "Follower count", limits = c(0, 12000))
tw <- tw + scale_x_continuous(breaks = NA) + scale_y_continuous(breaks = NA)
tw <- tw + opts(title = "Municipalities using Twitter")
tw

An this is how it looks like:

Posted in R, Visualisierung | Leave a comment

Postleitzahlen visualisiert, Teil 2

Im vorherigen Beitrag habe ich die deutschen Postleitzahlen visualisiert. Sort konnte man bereits sehr schön sehen, wie sich nur aus den Geo-Koordinaten die Deutschlandkarte abgebildet hat. Mit einer farblichen Unterleung fiel zudem auf, die Postleitzahlen sich nicht an den Längergrenzen orientieren. Um dies weiter zu verdeutlichen habe ich die Ländergrenzen mit eingezeichnet.

Dazu nehmen wir erneut die Daten aus dem vorherigen Beitrag (“plz”). Das raster-Package ist so nett und gibt uns Zugriff auf die GADM-Datenbank, in welcher alle Grenzen Deutschlands (und natürlich noch die vieler weiterer Staaten) hinterlegt sind.

library(raster)

de_map <- getData('GADM', country="DE", level=1)
de_map_2 <- fortify(de_map, region = "NAME_1")

Die Level-Angabe im ersten Befehl gibt an, wie detailliert die Daten sein sollen: Level 0 beinhaltet nur die Ländergrenzen, Level 1 auch die Grenzen der Ländergrenzen usw. Sollte fortify nicht sofort klappen, muss einmal der folgende Befehl ausgeführt werden:

gpclibPermit()

Danach kann die Map mittels des folgenden Befehls geplottet werden, natürlich wieder mit ggplot2:

p2 <- ggplot(data= plz) + geom_point(aes(x = lon, y = lat, colour = region), //
   alpha = 0.8, shape = 19, size = 2)
p2 <- p2 + geom_path(data = de_map_2, aes(x = long, y = lat, group = group), //
   colour = "grey20")
p2 <- p2 + theme_bw() + labs(x = NULL, y = NULL) + //
   scale_colour_brewer(palette = "RdYlGn", name = "PLZ")
p2 <- p2 + scale_x_continuous(breaks = NA) + scale_y_continuous(breaks = NA)
p2

Das Ergebnis sieht dann wie folgt aus:

Hier wird noch deutlicher, dass die Postleitzahlen nicht nach Ländern vergeben wurden.

Posted in R, Visualisierung | Tagged , , , , , | Leave a comment

Postleitzahlen visualisiert

Seit neuestem gibt es ein neues R-Package von Jeffrey Brenn in welchem sämtliche Postleitzahlen und Koordinaten der USA hinterlegt sind. Passend dazu findet sich in eine nette kleine Visualisierung. Sowas müsste sich doch auch für Deutschland realisieren lassen. Und siehe da: Es geht!
Die OpenGeoDB hat es sich zur Aufgabe gemacht, eine umfangreiche Datenbank mit GeoDaten und Postleitzahlen aufzubauen. Der große Unterschied hierzu ist, dass die Daten in den USA aus amtlichen Quellen stammen und daher auch mehr Informationen enthalten. Aber für meine Zwecke sind die deutschen Daten vollkommen ausreichend. Darüber hinaus bestehen Bestrebungen, die Datenbank stetig zu erweitern.

Die Daten liegen sowohl tabulatorgestrennt als auch in reiner Datenbankform (sehr löblich) vor. Für unsere Zwecke reichen aber erstmal die Daten mit Postleitzahlen und Koordinaten: http://fa-technik.adfc.de/code/opengeodb/PLZ.tab

Mit der Datei machen wir uns dann ans Werk. Vorher laden wir noch das entsprechende zipcode-Package und das ggplot2-Package. Ersteres kommt mit der netten Funktion clean.zipcode(), die unter anderem dafür sorgt, dass Postleitzahlen, die mit “0″ beginnen, diese auch behalten. Ggplot2 verwenden wir, um die Daten zu visualisieren.

library(ggplot2)
library(zipcode)

# Daten laden
plz <- read.delim("Data/PLZ.tab")

# Postleitzahlen mit 0 erhalten
plz$plz_2 <- clean.zipcodes(plz$plz)

# Plotten
p <- ggplot(data= plz) + geom_point(aes(x = lon, y = lat))

Aussehen tut das Ganze dann wie folgt:

Hier lässt sich bereits die Kontur Deutschlands sehr gut erkennen. Auffällig ist zudem, dass es in Brandenburg und Mecklenburg-Vorpommern recht “wenig” Postleitzahlen gibt. Vor allem im Süden, Süedwesten, Ruhrgebiet und im Norden kommt es dagegen zu einer deutlichen Häufig in den Verteilungen.

Noch interessanter wird die Karte, wenn man sich die erste Ziffer der Postleitzahl mit anzeigen lässt. Zudem kann man die Grafik noch ein wenig aufhübschen.

# Erste PLZ-Stelle als neue Variable einfügen
plz$region <- (substr(plz$plz_2, 1, 1))

# Plotten
p <- ggplot(data= plz) + geom_point(aes(x = lon, y = lat, colour = region),//
   shape = 19, size = 2)
p <- p + theme_bw() + labs(x = NULL, y = NULL)
p <- p + scale_colour_brewer(palette = "RdYlGn", name = "PLZ")
p <- p + scale_x_continuous(breaks = NA) + scale_y_continuous(breaks = NA)
p

Die verschiedenen PLZ-Bereiche sind nicht an die Grenzen der Bundesländer gebunden. Vielleicht sollte ich noch die Ländergrenzen mit einzeichnen lassen. Aber dazu später mehr…

Posted in R, Visualisierung | Tagged , , , , , | 1 Comment

Wird Winter…

Letztens mal das Vogelhäuschen aufgefüllt – 5 Minuten später einmal nachgeschaut

Posted in Allgemein | Tagged , , | Leave a comment

Kasseler useR! Group

Seit neuestem gibt es eine useR!-Gruppe in Kassel. Das erste Treffen ist für den 24.06.2010 im Technologie- und Gründungszentrum (FiDT) geplant.

Neben einer kurzen Einführung wird es um GUIs, Pakete und und “R Scene” gehen, eher allgemeien Themen eben. Darüber hinaus wüird vor allem auch organisatorisches angesprochen werden.

Wer Interesse hat, ist herzlich willkommen: http://www.meetup.com/Kassel-useR-Group/

Posted in R | Tagged , , | Leave a comment

Anonym suchen (und finden)

Ich nutze seit Jahren Google für meine Internetrecherchen und bin (wie die meisten anderen wohl auch) sehr zufrieden mit den Ergebnissen. Die andere Seite der Medallie ist allerdings, dass Google seit Jahren massiv Daten seiner Nutzer sammelt. Wie viel Google im Endeffekt über jemanden weiß, ist dabei nach wie vor unklar und wird außer Google wohl niemand erfahren. Den meisten Nutzern dürfte das bereits bekannt gewesen sein. Zwei interessante Mitteilungen haben mich seit neuestem aber aufgeschreckt:

  • Der Spiegel-Titel anfang dieses Jahres (Web/PDF). Hier wurde einmal komprimiert dargestellt, was Google alles sammelt und was mit meinen Daten geschieht oder eines Tages geschehen kann.
  • Das Panopticlick der Electronic Fronitier Foundation (EFF). Auf der Seite kann man testen lassen, wie eindeutig der Fingerabdruck der Fingerabdruck des Browsers ist. Dabei wird auch auf installierte Systemschriftarten und installierte Plugins zurückgegriffen. Beide sollten bei vielen Nutzern relativ eindeutig sein. Meine System-/Browserkonfiguration scheint dabei einmalig bei über einer Million bisher getesteten Systemen zu sein. Damit scheint ein einfaches Abschalten der Cookies nicht mehr auszureichen.

Natürlich muss man nicht Google verwenden. Yahoo oder Bing liefern sicher ähnliche Ergebnisse. Ich unterstelle beiden aber zu großen Teiles dasselbe Interesse an meinen Daten. Ich habe auch anonymisierte Google-Dienste wie Scroogle oder Anonymouse verwendet. Letztere kopiert dabei genau das Aussehen von Google, so dass ich auch mein BibSonomy-Plugin weiter verwenden kann. Leider blendet der Dienst kleine Werbebanner ein – das nervt!

Letztenendes bin ich jetzt bei Ixquick gelandet. Ixquick ist eine Meta-Suchmaschine, die ihre Ergebnisse unter anderem aus Yahoo und Bing bezieht und dabei viel Wert auf Datenschutz legt. Bisher bin ich mit der Suchmaschine sehr zufrieden. Einzig Google Scholar vermisse ich von Zeit zu Zeit…

© Miniaturbild: Carl Dwyer

Posted in Web | Tagged , , , , , | Leave a comment

Arbeitsraum bekommen

Gestern Abend habe ich eine erfreuliche Mail bekommen, dass mein Arbeitsraum in der Uni bereits heute anstatt Montag frei ist. Also heute morgen Monitor, USB-Dock und allen möglichen Peripherie-Krams eingepackt und ab zur Uni. Ich habe dann auch problemlos meinen Raum bekommen und mich gleich ein wenig häuslich eingerichtet.

Auf der linken Seite befindet sich noch nicht sichtbar ein großes Regal. Die Wände sind noch etwas sehr weiß und jungfräulich. Das wird sich in den nächsten Wochen aber noch sicher ändern. Zumal ich die nächsten sechs Monate mindestens 30 Stunden pro Woche hier verbringen werde.

Dann kann die Masterarbeit ja kommen… ;-)

Posted in Master-Thesis, Uni | Tagged , , | 3 Comments

Cisco VPN und Windows 64Bit

Auf meinen Laptop verwende ich als Betriebssystem mittlerweile Windows 7 als 64Bit-Version. Ich bin im Großen und Ganzen sehr zufrieden, aber das ist eine andere Sache. ;-) Einziges Problem bestand bisher darin, dass die Uni den Datenverkehr ihrer WLAN-Netze über VPN von Cisco absichert. Wunderbarerweise gibt es die Software nur als 32Bit und ist somit inkompatibel zu meinem Windows. Linux-Nutzer können da ja auch vpnc ausweichen – ich leider nicht.

Abhilfe schafft da aber der VPN-Client von Shrew Soft. Dieser ist frei verfügbar und lässt sich problemlos installieren. Zudem lassen sich die Zertifikate (*.pcf) von Cisco ebenfalls importieren, so dass in der Regel keine weitere Konfiguration nötig ist. Ich bin mit dem Programm sehr zufrieden und finde es zudem deutlich schlanker als der originale Client von Cisco.

Und natürlich funktioniert das Programm auch auf allen Windows’en mit 32Bit. ;-)

Posted in Programme, Uni | Tagged , , | Leave a comment

Stadtistik

Einen interessanten Ansatz statistische Kennwerte verschiedener Städte darzustellen, hat Martin Oberhäuser in seiner Diplomarbeit entwickelt:

Das Projekt läuft unter dem Titel Stadtistik (Verbindung von Stadt und Statistik). Ich finde den vergleichenden Ansatz sehr ansehlich und innovativ. Zudem können mehrere Städte leicht verglichen werden, ohne ellenlange Tabellen zu lesen.

Posted in Statistik, Visualisierung | Tagged , , , | Leave a comment

R Variablensystem

R verfügt, im Gegensatz zu anderen Statistikprogrammen über mehrere Variablentypen. Während in der Regel mit einer Excel-ähnlichen Ansicht gearbeitet wird, sind in R auch Vektoren, Matrizen, Listen, Faktoren und mehr. Als Neu-/Umsteiger kann dies durchaus verwirrend sein. Christopher Bare hat in seinem Blog einen kleinen Beitrag über die verschiedenen Variablentypen geschrieben. Sehr empfehlenswert!

Posted in R | Tagged , , | Leave a comment