4.6 Datenvisualisierung

In diesem Modul wirst du lernen, erste Visualisierungen in ggplot2 zu erstellen. Wir werden hierfür erneut den Human Resources Datensatz des bisherigen Moduls verwenden. Am besten versuchst du während des Lesens die Visualisierungen selber nachzuschreiben. Lade hierfür vorab den Datensatz hr_cleaned.csv:

Datenvisualisierungen sind eine Form der Kommunikation. Schau dir beispielsweise die berühmte Datenvisualisierung von Hans Rosling, in der Hans Rosling dargestellt hat, wie sich die Lebenserwartung der Menschen weltweit in den letzten zwei Jahrhunderten verändert hat. Kein Maß der zentralen Tendenz oder der Streuung kann diese Botschaft so gut kommunizieren. Datenvisualisierung ist zudem eine Kunst. Schau dir die Visualisierungen von Nadieh Bremer an. Hier hat sie visuell dargestellt, wie Satelliten die Erde tagtäglich abfotografieren, um eine Karte der Welt zu erstellen.

In der Statistik fertigen wir Visualisierungen an, um Daten explorativ zu untersuchen (siehe Tukey) und um zentrale Befunde unserer Forschung zu kommunizieren. Zur Kommunikation der Befunde verwenden wir in der Regel gängige Visualisierungen wie Histogramme, Boxplots oder Streudiagramme (siehe hier). Viele Wissenschaftler verwenden Excel, um Daten zu visualisieren. Excel ist eine gute Ressource, um Daten zu visualisieren. Wir verwenden in diesem Kurs das Paket ggplot2, welches in tidyverse integriert ist. Mit ggplot2 lassen sich alle gängigen Visualisierungen erstellen. ggplot2 ist sehr beliebt in der wissenschaftlichen Community und wird ebenso von der BBC verwendet.

4.6.1 Erste Visualisierungen

Schauen wir uns vorab nochmal die Variablen im Datensatz an:

## Observations: 1,470
## Variables: 17
## $ id                         <dbl> 1, 2, 3, 4, 5, 6, 7, 8…
## $ age                        <dbl> 41, 49, 37, 33, 27, 32…
## $ department                 <chr> "Sales", "Research & D…
## $ distance_from_home         <dbl> 1, 8, 2, 3, 2, 2, 3, 2…
## $ education                  <chr> "College", "Below Coll…
## $ employee_count             <dbl> 1, 1, 1, 1, 1, 1, 1, 1…
## $ gender                     <chr> "Female", "Male", "Mal…
## $ job_role                   <chr> "Sales Executive", "Re…
## $ job_satisfaction           <chr> "Very High", "Medium",…
## $ marital_status             <chr> "Single", "Married", "…
## $ monthly_income             <dbl> 5993, 5130, 2090, 2909…
## $ num_companies_worked       <dbl> 8, 1, 6, 1, 9, 0, 4, 1…
## $ performance_rating         <chr> "Excellent", "Outstand…
## $ total_working_years        <dbl> 8, 10, 7, 8, 6, 8, 12,…
## $ work_life_balance          <chr> "Bad", "Better", "Bett…
## $ years_at_company           <dbl> 6, 10, 0, 8, 2, 7, 1, …
## $ years_since_last_promotion <dbl> 0, 1, 0, 3, 2, 3, 0, 0…

Es sind 17 Variablen im Datensatz. Insgesamt gibt es 1470 Reihen. Zunächst möchten wir wissen, wie sich das Einkommen der Mitarbeiter dieses Unternehmens verteilt. Das Einkommen der Mitarbeiter steckt in der Variable monthly_income. Dieses Einkommen soll auf der x-Achse dargestellt sein. Die Häufigkeit eines bestimmten Einkommens möchten wir auf der y-Achse darstellen. Diese Zuordnungen nennen wir mappings. Solche Achsenbeschriftungen sind immer der erste Schritt, wenn wir mit ggplot2 arbeiten. Erstellen wir zunächst die Achsen:

Du wirst gemerkt haben, dass wir die y-Achse nicht explizit benannt haben. Dies liegt darin, dass wir gleich die Funktion geom_histogram verwenden, um diese Berechnungen für uns auszuführen. Würden wir wissen, wie hoch die Werte für jeden Balken sind, könnten wir dies direkt angeben (ggplot(human_resources, aes(x = monthly_income, y = HÖHE_DER_BALKEN))). Du siehst weiterhin an dem Beispiel, dass wir als erstes Argument den Datensatz in die Funktion ggplot übergeben haben. Wir hätten daher ebenso schreiben können:

Oder auch:

Oder auch:

Eine leere Fläche ist nun nicht sonderlich interessant, daher müssen wir ein sogenanntes geom hinzufügen. geoms sind fest definierte Visualisierungen, zum Beispiel ein Balkendiagram oder ein Histogramm. Eine Liste dieser geoms findest du hier.

In diesem Seminar sind für uns folgende geoms relevant:

Als nächstes fügen wir das geom geom_histogram hinzu, um ein Histogramm zu erzeugen:

Ein paar wenige Mitarbeiter verdienen sehr viel Geld im Monat, die meisten allerdings um die 3000 Dollar. Wir könnten uns ebenso fragen, ob ältere Mitarbeiter mehr verdienen als jüngere Mitarbeiter?

Zwei Dinge haben sich nun geändert. Erstens, wir haben explizit eine y-Achse definiert, da in unserem Datensatz Werte stecken, die diese Definition möglich machen. Zweitens haben wir anstatt dem geom_histogram das geom_point verwendet, um ein Streudiagramm zu erzeugen. Du wirst gleich noch mehrere dieser geoms kennen lernen. Das Schema für die Erstellung von Visualsierungen in ggplot lautet daher:

4.6.2 Grammar of Graphics

ggplot2 setzt die Idee der Grammar of Graphics um. Die Grundidee ist Folgende. In jeder Datenvisualisierung müssen wir Werte visuellen Komponenten zuordnen. Zum Beispiel möchten wir dass Ausprägungen einer nominalskalierten Variable Farben zugeordnet werden. Dies passiert häufig bei Wahlergebnissen in denen die Balken farblich anhand der Parteien dargestellt sind. Wir könnten ebenso einer Zahl einer Höhe zuordnen, indem die Zahl 6 relativ höher ist als die Zahl 3. Solche Zuordnungen zwischen Werten und visuellen Komponenten nennen wir Aesthetics. Du hast die Aesthetics bereits in unserem Beispiel durch die Funktion aes kennen gelernt. Hier ein paar weitere Beispiele:

  • Nominalskaliserte Daten werden Farben zugeordnet: aes(fill = education)
  • Intervallskalierten Daten wird die Fläche eines Kreises zugeordnet: aes(size = monthly_income)
  • Die Punkte aller Mitarbeiter mit einem exzellenten Rating sollen Farben zugeordnet werden: aes(color = performance_rating).

Bei jeder Visualisierung müssen Werte in Visualisierungen umgewandelt werden. Wir könnten zum Beispiel die Fläche eines Kreises einer Variable zuordnen, beispielsweise der Anzahl der in der Firma gearbeiteten Jahre:

Diese Zuordnung ist eine Aesthetic. Die Zahl der Arbeitsjahre wird der Fläche eines Kreises zugeordnet. Wir können genausogut den Punkten eine Farbe abhängig der kategoriale Variablen education zuordnen:

Oder beides:

In der Datenvisualisierung versuchen wir empirische Werte grafischen Darstellungen zuzuordnen (z.B. Farben, Größen, Längen, Flächen). Diese Zuordnung nennen wir Aesthetic.

Aesthetics können sowohl in der ggplot Funktion als auch innerhalb eines geoms aufgeschrieben werden:

Ist äquivalent zu:

Beides ist legitim. Als generelle Regel ist es dennoch ratsam, Aesthetics, die nur für ein geom gelten auch in diesem aufzuschreiben.

Erstellen wir mit unserem Wissen eine komplexere Visualisierung mit verschiedenen Aesthetics:

Diese Visualisieurng würden wir zwar nicht veröffentlichen, sie zeigt aber bereits, welche Möglichkeiten wir mit ggplot haben. Folgende Aesthetics werden bei dieser Visualisierung hinzugefügt:

  • Die Balken erhalten abhängig der Variable job_role eine eigene Farbe
  • Die Balken erhalten eine Transparenz durch alpha (Werte von 0 bis 1)
  • Die Punkte erhalten eine Transparenz durch alpha
  • Die Punkte erhalten eine Farbe abhängig der nominalskalierten Variable work_life_balance

4.6.3 Layering

Visualisierungen haben unterschiedliche Layer. Jeder Plot in ggplot2 beispielsweise fängt mit einem leeren Canvas an:

Dies ist tatsächlich eine Visualisierung, nur dass wir der Visualisierungen keine Layer zugeordnet haben. Fügen wir die Achsen hinzu:

Als Nächstes fügen wir Boxplots hinzu:

Im nächsten Schritt möchten wir die einzelnen Werte der Mitarbeiter über dem Boxplot sehen:

Du erkennst, dass die Punkte über den Boxplots liegen. Visualisierungen werden in der Idee der Grammar of Graphics daher durch verschiedene Layer erstellt, die wir aufeinanderschichten. Das meinen wir auch ganz wörtlich. Schau dir nun folgende Visualisierung an und achte darauf, dass der Befehl geom_jitter früher eingefügt wurde als der Befehl geom_boxplot:

Die Punkte sind nun hinter den Boxplots, da dieses Layer vorher hinzugefügt wurde.