2011-10-07

Weltkarten mit R

In der neuesten Ausgabe des R Journals findet sich ein lesenswerter Artikel zu dem Packet rworldmap. Diese erlaubt es mit wenigen Befehlen eine Weltkarte zu erstellen, in der die einzelnen Länder individuell eingefärbt sind. Wie einfach das ist will ich am Beispiel der FIFA-Männer-Fußball-Weltrangliste zeigen.

Länder eingefärbt nach ihren Punkten auf der Männer-FIFA-Weltrangliste
Zunächst müssen einige Pakete installiert werden. Wer sich mehr mit Landkarten in R beschäftigen möchte sollte einen Blick auf die Liste der mitinstallierten Pakete werfen: sp, maptools beschäftigen sich ebenfalls mit diesen Themen. 

install.packages("rworldmap")
library(rworldmap)

Nachdem die Bibliothek geladen ist müssen die Daten beschafft werden. Für unser Beispiel finden sich die Daten im Internet. Etwas aufbereitet sehen die Daten dann etwa so aus:

RankTeamPoints
1Spain1605
2Netherlands1571
3Germany1290
4Uruguay1184
5Portugal1158
6Italy1142


Wenn die Daten in R sind, brauchen wir nur noch 3 Befehle. Der erste verbindet die Information der Daten mit einer Weltkarte. Der zweite erstellt eine neue leere Weltkarte und der dritte benutzt die zuvor erzeugte Information um die leere Weltkarte einzufärben.

 
fifa.map.info = joinCountryData2Map(fifa.ranking, joinCode="NAME", nameJoinColumn="Team")

150 codes from your data successfully matched countries in the map
57 codes from your data failed to match with a country code in the map
96 codes from the map weren't represented in your data

Der Output sagt uns, dass 150 der Länder richtig erkannt wurden, 57 nicht erkannt wurden und 96 Länder in der Karte sind, die nicht von uns angesprochen wurden. Nicht erkennen kann R Länder die "falsch" geschrieben sind. So ist es natürlich ein Unterschied ob in den Daten USA (was bei uns der Fall ist) oder United States (was von R bzw. vom Packet rworldmap erwartet wird) steht. Im Moment wollen wir diese Problematik kurzfristig beiseite lassen und einfach die Karte zeichnen.

mapDevice()
mapCountryData(fifa.map.info, nameColumnToPlot="Points")
Die weißen Länder wurden nicht erkannt
Es ergibt sich die eingefärbte Karte mit einigen weißen Flecken. Dies sind Länder, die im ersten Schritt nicht erkannt wurden. Um diese Problem zu beheben müssen die Ländernamen im Datensatz an die Ländernamen, die das Packet kennt anpassen. Dabei hilft der Befehl

identifyCountries()

Mit Mausklick auf die Karte werden die unerkannten Ländernamen identifiziert. Diese können dann anschließend im Datensatz korrigiert werden.

Auf der Suche nach den richtigen Ländernamen
Nachdem die entsprechenden Ländernamen korrigiert wurden ergibt sich die endgültige Karte.
Mit korrigierten Ländernamen

Das Skript, dass die oberste Karte erzeugt verwendet noch einige zusätzliche Optionen. Der zugehörige Code findet im Anhang.


Literatur:
  • Andy South: rworldmap: A New R package for Mapping Global Data - The R Journal Volume 3/1, June 2011
  • Fifa Weltrangliste der Männer (Stand: 7. Oktober 2011) - http://www.fifa.com/worldranking/rankingtable/index.html

Anhang:

# Erstellen einer Karte mit der FIFA Weltrangliste
# Autor: Sebastian Hoffmeister - Statcon
# 7.10.2011

library(rworldmap) # Laden der benötigten Pakete
library(classInt)

fifa.ranking = read.csv(".../Fifa Ranking.csv") # Einlesen der Daten
fifa.map.info = joinCountryData2Map(fifa.ranking, joinCode="NAME", nameJoinColumn="Team") # Daten mit der Karte verbinden

palette = colorRampPalette(c("brown4", "darkgoldenrod1", "darkolivegreen4"))(80) # Farbverlauf selbst definieren.
classInt = classIntervals(fifa.map.info[["Points"]], n=80, style="jenks") # Eigene anzahl an Farb-Intervallen definieren
catMethod = classInt[["brks"]]

mapDevice() # Die leere Karte erstellen
mapCountryData(fifa.map.info, nameColumnToPlot="Points", colourPalette = palette, catMethod=catMethod) # Die leere Karte befüllen


Keine Kommentare:

Kommentar posten