[UPDATE] Die Grafiken sind in neuen und größeren Versionen auch hier zu finden.

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 meine 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:

PLZ Deutschland 1

Hier lässt sich bereits die Kontur Deutschlands sehr gut erkennen. Auffällig ist zudem, dass es in Brandenburg und Mecklenburg-Vorpommern recht “wenige” Postleitzahlen gibt. Vor allem im Süden, im Südwesten, im 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

PLZ Deutschland 2

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…