Sitzung 4 Visualisierungen

4.1 Lernziele dieser Sitzung

Sie können…

  • einfache Befehle zur Visualisierung in Base R anwenden.
  • die Grammatik von ggplot2 für Visualisierungen in Grundzügen wiedergeben und anwenden.
  • eigene Ideen für Visualisierungen entwickeln und umsetzen.

4.2 Voraussetzungen

Für diese Lektion benötigen wir das Paket tidyverse:

library(tidyverse)

Und einen Datensatz, der in Form eines tibble vorliegt. Der Beispieldatensatz diamonds wird mitgeliefert:

diamonds
## # A tibble: 53,940 × 10
##    carat cut       color clarity depth table price     x     y     z
##    <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1  0.23 Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
##  2  0.21 Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
##  3  0.23 Good      E     VS1      56.9    65   327  4.05  4.07  2.31
##  4  0.29 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
##  5  0.31 Good      J     SI2      63.3    58   335  4.34  4.35  2.75
##  6  0.24 Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
##  7  0.24 Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
##  8  0.26 Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
##  9  0.22 Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
## 10  0.23 Very Good H     VS1      59.4    61   338  4     4.05  2.39
## # … with 53,930 more rows

Wenn wir mögen, können wir ihn mit der Funktion data() explizit in unser Environment laden:

data(diamonds)

4.3 Überblick

Einen ersten Überblick kriegen wir zum Einen durch den Befehl str(), der uns die Typen in den Spalten anzeigt:

str(diamonds)
## tibble [53,940 × 10] (S3: tbl_df/tbl/data.frame)
##  $ carat  : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
##  $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
##  $ color  : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
##  $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
##  $ depth  : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
##  $ table  : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
##  $ price  : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
##  $ x      : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
##  $ y      : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
##  $ z      : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...

Zum Anderen gibt die Hilfefunktion Auskunft über den Datensatz und die einzelnen Variablen (Metadaten):

?diamonds

Einen Überblick über die wichtigsten statistischen Parameter erhalten wir mit:

summary(diamonds)
##      carat               cut        color        clarity          depth      
##  Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065   Min.   :43.00  
##  1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258   1st Qu.:61.00  
##  Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194   Median :61.80  
##  Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171   Mean   :61.75  
##  3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066   3rd Qu.:62.50  
##  Max.   :5.0100                     I: 5422   VVS1   : 3655   Max.   :79.00  
##                                     J: 2808   (Other): 2531                  
##      table           price             x                y         
##  Min.   :43.00   Min.   :  326   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:56.00   1st Qu.:  950   1st Qu.: 4.710   1st Qu.: 4.720  
##  Median :57.00   Median : 2401   Median : 5.700   Median : 5.710  
##  Mean   :57.46   Mean   : 3933   Mean   : 5.731   Mean   : 5.735  
##  3rd Qu.:59.00   3rd Qu.: 5324   3rd Qu.: 6.540   3rd Qu.: 6.540  
##  Max.   :95.00   Max.   :18823   Max.   :10.740   Max.   :58.900  
##                                                                   
##        z         
##  Min.   : 0.000  
##  1st Qu.: 2.910  
##  Median : 3.530  
##  Mean   : 3.539  
##  3rd Qu.: 4.040  
##  Max.   :31.800  
## 

4.4 Visualisierung mit dem Standardpaket

Es gibt in R mehrere grundlegend verschiedene Möblichkeiten, Daten zu visualiseren. Für einen schnellen Überblick sind z.B. hist() und boxplot() hilfreich:

hist(diamonds$price)

boxplot(diamonds$x)

4.5 Visualisierung mit ggplot()

Das Paket ggplot2 ist Teil vom tidyverse. Hiermit lassen sich sehr flexible Graphiken gestalten. Wir werden ausschließlich mit diesem System arbeiten.

Die Syntax ist dabei auf den ersten Blick etwas komplexer.

Am Anfang steht der Befehl ggplot(x) mit dem Datensatz als Parameter

ggplot(data=diamonds)

Mit einem Mapping-Parameter legen wir die Dimensionen fest:

ggplot(data=diamonds, mapping=aes(x=price, y=carat))

Das gleiche ohne Parameternamen:

ggplot(diamonds, aes(price, carat))

Nun kann mit dem +-Operator ein geometrischer Layer hinzugefügt werden:

ggplot(diamonds, aes(x=carat, y=price)) +
  geom_point()

Weitere geom-Layer lassen sich mit dem +-Operator hinzufügen:

ggplot(diamonds, aes(x=carat, y=price)) +
  geom_point() +
  geom_smooth()

Die Layer-Funktionen können durch Parameter angepasst werden:

ggplot(diamonds, aes(x=carat, y=price)) +
  geom_point(size=0.5) +
  geom_smooth(color="red")

Dabei lassen sich in den einzelnen Layers mappings hinzufügen oder verändern:

ggplot(diamonds, aes(x=carat, y=price)) +
  geom_point(aes(color=clarity), size=0.5) +
  geom_smooth(color="red")

Schließlich lassen sich noch viele weitere optische Aspekte anpassen, z.B. Achsen, Farben, etc.:

ggplot(diamonds, aes(x=carat, y=price)) +
  geom_point(aes(color=clarity), size=0.5) +
  geom_smooth(color="red") +
  scale_x_continuous("Karatzahl", breaks=seq(0,5,0.5)) +
  scale_y_continuous("Preis") +
  scale_color_brewer("Klarheit") +
  theme_dark()

4.6 Aufgaben

Versuchen Sie, folgende Visualisierungen des Datensatzes diamonds auszugeben:

ggplot(diamonds, aes(x = cut)) +
  geom_bar(aes(fill = color))

ggplot(diamonds, aes(x = depth, y = price)) +
  geom_point(alpha = 0.1, aes(color = cut)) +
  guides(colour = guide_legend(override.aes = list(alpha = 1)))

ggplot(diamonds, aes(x = color, y = price)) +
  geom_boxplot(aes(color = color), outlier.colour = NA) +
  facet_wrap(~cut) +
  theme(legend.position = "none") +
  scale_x_discrete("Farbe") +
  scale_y_continuous("Preis")

4.6.1 R for Data Science

Schauen Sie sich die Publikation R for Data Science an.

Was ist das für ein Buch? Wer ist das Zielpublikum?

Lesen Sie das Kapitel 3: Data Visualization und vollziehen Sie die Visualisierungen nach.

Bearbeiten Sie die Aufgaben.

Bearbeiten Sie die RStudio Primers zu Datenvisualisierung.