Tabellarische und grafische Darstellung

Tabellen

Praktische Umsetzung mit Statistiksoftware

In diesem Abschnitt zeigen wir, wie die besprochenen Tabellen mit Statistiksoftware erstellt werden können.

array(3) { [0]=> array(21) { ["mblockType"]=> string(4) "Text" ["ShinyApp"]=> string(0) "" ["ShinyTitle"]=> string(0) "" ["ShinyDescription"]=> string(0) "" ["TextTitle"]=> string(0) "" ["TextCols"]=> string(1) "1" ["TextText1"]=> string(1759) "*Beispieldaten herunterladen:* [dat.csv](/media/dat.csv) ### Datenbeispiel Unser Beispieldatensatz (hypothetisches Datenbeispiel) liegt als CSV-Datei vor. Die Daten können mit der read.csv-Funktion eingelesen werden (der korrekte Pfad zum Speicherort muss angegeben werden): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r dat <- read.csv("C:/... Pfad .../dat.csv") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Die Funktion erzeugt ein Objekt vom Typ data.frame, dem wir links vom Zuweisungspfeil (<-) den Namen "dat" geben. Der Datensatz enthält u.a. die Variablen *punkte* (erzielte Punktzahl in einem Test), *schlafdauer* (Schlafdauer in der Nacht vor dem Test in Std.), *lernzeit* (insgesamt für den Test aufgewendete Lernzeit in Std.) und *lsport* (Lieblingssportart). Einzelne Variablen können als Datensatzname$Variablenname angesprochen werden, z.B.: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r dat$punkte [1] 93.0 76.5 79.5 85.0 66.5 71.0 56.5 77.0 59.0 63.5 72.0 70.0 96.0 72.0 62.5 76.5 86.0 57.5 [19] 60.0 73.5 64.5 54.0 85.0 64.0 57.5 54.0 76.5 41.0 58.5 87.5 62.5 62.5 100.5 86.0 66.5 79.5 [37] 77.0 67.5 58.5 92.5 94.5 77.0 76.0 67.0 44.5 86.5 70.0 81.5 90.5 78.0 80.5 74.0 56.5 60.0 [55] 83.0 70.0 49.0 57.0 48.0 70.5 96.5 106.0 65.5 86.5 87.5 89.5 64.0 86.0 62.0 94.5 52.0 73.5 [73] 77.0 83.5 62.5 52.5 51.5 86.5 70.5 57.5 68.0 103.0 79.0 75.0 113.5 78.0 104.5 84.5 63.5 46.0 [91] 102.5 77.0 73.5 71.0 106.0 79.0 77.5 87.0 92.5 11.5 83.5 86.5 78.5 67.5 71.0 61.5 31.0 50.5 [109] 87.5 66.5 67.0 60.5 61.5 83.5 66.0 97.0 79.5 83.5 82.0 63.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Die Ausgabe zeigt die 120 beobachteten Werte der Variable *punkte*." ["TextText2"]=> string(0) "" ["H5pTitle"]=> string(0) "" ["H5pDescription"]=> string(0) "" ["H5pCode"]=> string(0) "" ["MtmTitle"]=> string(0) "" ["MtmText"]=> string(0) "" ["CodeTitle"]=> string(0) "" ["CodeCode"]=> string(0) "" ["CodeType"]=> string(1) "R" ["SliderTitle"]=> string(0) "" ["SliderText"]=> string(0) "" ["REX_MEDIALIST_1"]=> string(0) "" ["AccordeonTitle"]=> string(0) "" ["AccordeonItems"]=> string(0) "" } [1]=> array(21) { ["mblockType"]=> string(3) "Mtm" ["ShinyApp"]=> string(0) "" ["ShinyTitle"]=> string(0) "" ["ShinyDescription"]=> string(0) "" ["TextTitle"]=> string(0) "" ["TextCols"]=> string(1) "1" ["TextText1"]=> string(0) "" ["TextText2"]=> string(0) "" ["H5pTitle"]=> string(0) "" ["H5pDescription"]=> string(0) "" ["H5pCode"]=> string(0) "" ["MtmTitle"]=> string(67) "Wie bekomme ich einen Überblick über einen unbekannten Datensatz?" ["MtmText"]=> string(2801) "Für einen ersten Überblick über die Struktur des Datensatzes und die im Datensatz enthaltenen Variablen kann die Funktion str(dat) verwendet werden: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r str(dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Diese liefert das folgende Ergebnis: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r 'data.frame': 120 obs. of 25 variables: $ X : int 94 66 78 28 3 113 16 11 96 99 ... $ punkte : num 93 76.5 79.5 85 66.5 71 56.5 77 59 63.5 ... $ schlafdauer : num 6.2 5.3 5.5 7 6.5 6.4 5.7 6.8 5.4 6.8 ... $ lernzeit : num 8.2 7 6.8 7.3 7.3 3.9 4.9 7.6 2.5 9.2 ... $ nachhilfe : int 1 1 1 1 1 0 0 1 0 0 ... $ zeugnis_mathe_roh : num 101.3 89.7 86.2 83.6 86.8 ... $ zeugnis_mathe_punkte : int 13 11 10 10 10 11 9 10 9 10 ... $ zeugnis_mathe_note : Factor w/ 4 levels "ausreichend",..: 1 2 2 2 2 2 3 2 3 2 ... $ zeugnis_deutsch_punkte: int 8 9 10 6 10 10 9 12 5 13 ... $ zeugnis_deutsch_note : Factor w/ 4 levels "ausreichend",..: 3 3 2 4 2 2 3 2 4 1 ... $ lsport : Factor w/ 6 levels "Andere Sportart",..: 4 5 1 3 3 4 3 3 4 4 ... $ sport_fb : int 0 1 0 1 1 1 1 1 1 1 ... $ sport_bb : int 0 0 1 0 0 0 0 1 1 0 ... $ sport_sw : int 1 1 1 1 0 0 1 1 1 1 ... $ sport_tn : int 0 0 0 0 0 0 0 0 1 0 ... $ sport_an : int 1 0 1 1 0 0 1 1 1 1 ... $ sport_no : int 0 0 0 0 0 0 0 0 0 0 ... $ sport_test : int 0 1 1 0 1 1 0 1 1 1 ... $ kantine_zufr : int 4 4 3 5 3 2 2 1 3 2 ... $ taschengeld : int 33 30 29 35 28 32 41 36 34 34 ... $ lauf100 : num 14.3 13.2 13.9 14 15 14.2 14.1 14.8 15.2 13.8 ... $ lauf1000 : num 234 229 210 222 227 ... $ lauf5000 : num 489 465 484 486 461 ... $ kugel : num 8.15 9.26 8.47 8.37 7.56 ... $ lfach : Factor w/ 7 levels "anderes Fach",..: 2 2 2 2 2 2 2 2 2 2 ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Zu den einzelnen Variablen zeigt die Ausgabe deren Speicherformat (*int* für "integer", *num* für "numeric" — beides Zahlenwerte, *Factor* für nicht-numerische Variablen) und die jeweils ersten Werte im Datensatz. In der Benutzeroberfläche R-Studio liefert der **Data Viewer** zudem einen Einblick in den Datensatz als Datentabelle. Aufgerufen wird er mit der Funktion ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r View(dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ So sieht ein Ausschnitt aus dem Data Viewer aus: ![r_data_viewer_ausschnitt.png](index.php?rex_media_type=markitupImage&rex_media_file=r_data_viewer_ausschnitt.png)" ["CodeTitle"]=> string(0) "" ["CodeCode"]=> string(0) "" ["CodeType"]=> string(0) "" ["SliderTitle"]=> string(0) "" ["SliderText"]=> string(0) "" ["REX_MEDIALIST_1"]=> string(0) "" ["AccordeonTitle"]=> string(0) "" ["AccordeonItems"]=> string(0) "" } [2]=> array(21) { ["mblockType"]=> string(4) "Text" ["ShinyApp"]=> string(0) "" ["ShinyTitle"]=> string(0) "" ["ShinyDescription"]=> string(0) "" ["TextTitle"]=> string(8) "Tabellen" ["TextCols"]=> string(1) "1" ["TextText1"]=> string(2075) "Für eine einfache Häufigkeitstabelle verwenden wir die Funktion table(): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r > table(dat$lsport) Andere Sportart Basketball Fußball Keine Sportart 14 18 34 32 Schwimmen Tennis 16 6 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Relative Häufigkeiten erhalten wir mit der Funktion prop.table(): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r > prop.table(table(dat$lsport)) Andere Sportart Basketball Fußball Keine Sportart 0.1166667 0.1500000 0.2833333 0.2666667 Schwimmen Tennis 0.1333333 0.0500000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Kumulierte Anteile können wir uns mit der Funktion cumsum() anzeigen lassen: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r > cumsum(prop.table(table(dat$kantine_zufr))) 1 2 3 4 5 0.09243697 0.41176471 0.65546218 0.88235294 1.00000000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bei einem Merkmal mit sehr vielen Ausprägungen — wie etwa *punkte* — bietet eine Häufigkeitstabelle keine gute Übersicht über die Verteilung. Wir erstellen eine neue Variable *punkte_kat*, die eine kategorisierte Version der Variable *punkte* darstellt. Dazu teilen wir die Variable *punkte* mit der Funktion cut() in Gruppen mit definierten Grenzen auf. Mit breaks definieren wir die Grenzen und mit labels geben wir den gebildeten Gruppen Bezeichnungen: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r > dat$punkte_kat <- cut(dat$punkte, + breaks = c(0,19.9,39.9,59.9,79.9,99.9,120), + labels = c("0-19,5", + "20-39,5", + "40-59,5", + "60-79,5", + "80-99,5", + "100-120")) > table(dat$punkte_kat) 0-19,5 20-39,5 40-59,5 60-79,5 80-99,5 100-120 1 1 20 59 32 7 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " ["TextText2"]=> string(0) "" ["H5pTitle"]=> string(0) "" ["H5pDescription"]=> string(0) "" ["H5pCode"]=> string(0) "" ["MtmTitle"]=> string(8) "Tabellen" ["MtmText"]=> string(2139) "Für eine einfache Häufigkeitstabelle verwenden wir die Funktion table(): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r > table(dat$lsport) Andere Sportart Basketball Fußball Keine Sportart 14 18 34 32 Schwimmen Tennis 16 6 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Relative Häufigkeiten erhalten wir mit der Funktion prop.table(): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r > prop.table(table(dat$lsport)) Andere Sportart Basketball Fußball Keine Sportart 0.1166667 0.1500000 0.2833333 0.2666667 Schwimmen Tennis 0.1333333 0.0500000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Kumulierte Anteile können wir uns mit der Funktion cumsum() anzeigen lassen: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r > cumsum(prop.table(table(dat$kantine_zufr))) 1 2 3 4 5 0.09243697 0.41176471 0.65546218 0.88235294 1.00000000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bei einem Merkmal mit sehr vielen Ausprägungen — wie etwa *punkte* — bietet eine Häufigkeitstabelle keine gute Übersicht über die Verteilung. Wir erstellen eine neue Variable *punkte_kat*, die eine kategorisierte Version der Variable *punkte* darstellt. Dazu teilen wir die Variable *punkte* mit der Funktion cut() in Gruppen mit definierten Grenzen auf. Mit breaks definieren wir die Grenzen und mit labels geben wir den gebildeten Gruppen Bezeichnungen: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r > dat$punkte_kat <- cut(dat$punkte, + breaks = c(0,19.9,39.9,59.9,79.9,99.9,120), + labels = c("0-19,5", + "20-39,5", + "40-59,5", + "60-79,5", + "80-99,5", + "100-120")) > table(dat$punkte_kat) 0-19,5 20-39,5 40-59,5 60-79,5 80-99,5 100-120 1 1 20 59 32 7 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Ergänzen: Tabellarische Darstellung von Mehrfachnennungen]" ["CodeTitle"]=> string(0) "" ["CodeCode"]=> string(0) "" ["CodeType"]=> string(0) "" ["SliderTitle"]=> string(0) "" ["SliderText"]=> string(0) "" ["REX_MEDIALIST_1"]=> string(0) "" ["AccordeonTitle"]=> string(0) "" ["AccordeonItems"]=> string(0) "" } }

Beispieldaten herunterladen: dat.csv

Datenbeispiel

Unser Beispieldatensatz (hypothetisches Datenbeispiel) liegt als CSV-Datei vor. Die Daten können mit der read.csv-Funktion eingelesen werden (der korrekte Pfad zum Speicherort muss angegeben werden):

dat <- read.csv("C:/... Pfad .../dat.csv")

Die Funktion erzeugt ein Objekt vom Typ data.frame, dem wir links vom Zuweisungspfeil (<-) den Namen "dat" geben.

Der Datensatz enthält u.a. die Variablen punkte (erzielte Punktzahl in einem Test), schlafdauer (Schlafdauer in der Nacht vor dem Test in Std.), lernzeit (insgesamt für den Test aufgewendete Lernzeit in Std.) und lsport (Lieblingssportart). Einzelne Variablen können als Datensatzname$Variablenname angesprochen werden, z.B.:

dat$punkte
[1]  93.0  76.5  79.5  85.0  66.5  71.0  56.5  77.0  59.0  63.5  72.0  70.0  96.0  72.0  62.5  76.5  86.0  57.5
[19]  60.0  73.5  64.5  54.0  85.0  64.0  57.5  54.0  76.5  41.0  58.5  87.5  62.5  62.5 100.5  86.0  66.5  79.5
[37]  77.0  67.5  58.5  92.5  94.5  77.0  76.0  67.0  44.5  86.5  70.0  81.5  90.5  78.0  80.5  74.0  56.5  60.0
[55]  83.0  70.0  49.0  57.0  48.0  70.5  96.5 106.0  65.5  86.5  87.5  89.5  64.0  86.0  62.0  94.5  52.0  73.5
[73]  77.0  83.5  62.5  52.5  51.5  86.5  70.5  57.5  68.0 103.0  79.0  75.0 113.5  78.0 104.5  84.5  63.5  46.0
[91] 102.5  77.0  73.5  71.0 106.0  79.0  77.5  87.0  92.5  11.5  83.5  86.5  78.5  67.5  71.0  61.5  31.0  50.5
[109]  87.5  66.5  67.0  60.5  61.5  83.5  66.0  97.0  79.5  83.5  82.0  63.0

Die Ausgabe zeigt die 120 beobachteten Werte der Variable punkte.

Für einen ersten Überblick über die Struktur des Datensatzes und die im Datensatz enthaltenen Variablen kann die Funktion str(dat) verwendet werden:

str(dat)

Diese liefert das folgende Ergebnis:

     'data.frame':  120 obs. of  25 variables:
     $ X                     : int  94 66 78 28 3 113 16 11 96 99 ...
     $ punkte                : num  93 76.5 79.5 85 66.5 71 56.5 77 59 63.5 ...
     $ schlafdauer           : num  6.2 5.3 5.5 7 6.5 6.4 5.7 6.8 5.4 6.8 ...
     $ lernzeit              : num  8.2 7 6.8 7.3 7.3 3.9 4.9 7.6 2.5 9.2 ...
     $ nachhilfe             : int  1 1 1 1 1 0 0 1 0 0 ...
     $ zeugnis_mathe_roh     : num  101.3 89.7 86.2 83.6 86.8 ...
     $ zeugnis_mathe_punkte  : int  13 11 10 10 10 11 9 10 9 10 ...
     $ zeugnis_mathe_note    : Factor w/ 4 levels "ausreichend",..: 1 2 2 2 2 2 3 2 3 2 ...
     $ zeugnis_deutsch_punkte: int  8 9 10 6 10 10 9 12 5 13 ...
     $ zeugnis_deutsch_note  : Factor w/ 4 levels "ausreichend",..: 3 3 2 4 2 2 3 2 4 1 ...
     $ lsport                : Factor w/ 6 levels "Andere Sportart",..: 4 5 1 3 3 4 3 3 4 4 ...
     $ sport_fb              : int  0 1 0 1 1 1 1 1 1 1 ...
     $ sport_bb              : int  0 0 1 0 0 0 0 1 1 0 ...
     $ sport_sw              : int  1 1 1 1 0 0 1 1 1 1 ...
     $ sport_tn              : int  0 0 0 0 0 0 0 0 1 0 ...
     $ sport_an              : int  1 0 1 1 0 0 1 1 1 1 ...
     $ sport_no              : int  0 0 0 0 0 0 0 0 0 0 ...
     $ sport_test            : int  0 1 1 0 1 1 0 1 1 1 ...
     $ kantine_zufr          : int  4 4 3 5 3 2 2 1 3 2 ...
     $ taschengeld           : int  33 30 29 35 28 32 41 36 34 34 ...
     $ lauf100               : num  14.3 13.2 13.9 14 15 14.2 14.1 14.8 15.2 13.8 ...
     $ lauf1000              : num  234 229 210 222 227 ...
     $ lauf5000              : num  489 465 484 486 461 ...
     $ kugel                 : num  8.15 9.26 8.47 8.37 7.56 ...
     $ lfach                 : Factor w/ 7 levels "anderes Fach",..: 2 2 2 2 2 2 2 2 2 2 ...

Zu den einzelnen Variablen zeigt die Ausgabe deren Speicherformat (int für "integer", num für "numeric" — beides Zahlenwerte, Factor für nicht-numerische Variablen) und die jeweils ersten Werte im Datensatz.

In der Benutzeroberfläche R-Studio liefert der Data Viewer zudem einen Einblick in den Datensatz als Datentabelle. Aufgerufen wird er mit der Funktion

View(dat)

So sieht ein Ausschnitt aus dem Data Viewer aus:

r_data_viewer_ausschnitt.png

Tabellen

Für eine einfache Häufigkeitstabelle verwenden wir die Funktion table():

> table(dat$lsport)
Andere Sportart      Basketball         Fußball  Keine Sportart 
             14              18              34              32 
Schwimmen          Tennis 
       16               6 

Relative Häufigkeiten erhalten wir mit der Funktion prop.table():

> prop.table(table(dat$lsport))
Andere Sportart      Basketball         Fußball  Keine Sportart 
      0.1166667       0.1500000       0.2833333       0.2666667 
      Schwimmen          Tennis 
      0.1333333       0.0500000 

Kumulierte Anteile können wir uns mit der Funktion cumsum() anzeigen lassen:

> cumsum(prop.table(table(dat$kantine_zufr)))
         1          2          3          4          5 
0.09243697 0.41176471 0.65546218 0.88235294 1.00000000 

Bei einem Merkmal mit sehr vielen Ausprägungen — wie etwa punkte — bietet eine Häufigkeitstabelle keine gute Übersicht über die Verteilung. Wir erstellen eine neue Variable punkte_kat, die eine kategorisierte Version der Variable punkte darstellt. Dazu teilen wir die Variable punkte mit der Funktion cut() in Gruppen mit definierten Grenzen auf. Mit breaks definieren wir die Grenzen und mit labels geben wir den gebildeten Gruppen Bezeichnungen:

> dat$punkte_kat <- cut(dat$punkte,
+                       breaks = c(0,19.9,39.9,59.9,79.9,99.9,120),
+                       labels = c("0-19,5", 
+                                  "20-39,5",
+                                  "40-59,5",
+                                  "60-79,5",
+                                  "80-99,5",
+                                  "100-120"))
> table(dat$punkte_kat)

 0-19,5 20-39,5 40-59,5 60-79,5 80-99,5 100-120 
      1       1      20      59      32       7 

Diagramme für nominale und ordinale Merkmale

Diagramme für metrische Merkmale

Häufigkeit, relative Häufigkeit und Dichte in Histogrammen

In diesem Abschnitt zeigen wir verschiedene Möglichkeiten, die y-Achse eines Histogramms zu spezifizieren.

Boxplots

Plots im Vergleich

Praktische Umsetzung mit Statistiksoftware

array(3) { [0]=> array(21) { ["mblockType"]=> string(4) "Text" ["ShinyApp"]=> string(0) "" ["ShinyTitle"]=> string(0) "" ["ShinyDescription"]=> string(0) "" ["TextTitle"]=> string(0) "" ["TextCols"]=> string(1) "1" ["TextText1"]=> string(1759) "*Beispieldaten herunterladen:* [dat.csv](/media/dat.csv) ### Datenbeispiel Unser Beispieldatensatz (hypothetisches Datenbeispiel) liegt als CSV-Datei vor. Die Daten können mit der read.csv-Funktion eingelesen werden (der korrekte Pfad zum Speicherort muss angegeben werden): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r dat <- read.csv("C:/... Pfad .../dat.csv") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Die Funktion erzeugt ein Objekt vom Typ data.frame, dem wir links vom Zuweisungspfeil (<-) den Namen "dat" geben. Der Datensatz enthält u.a. die Variablen *punkte* (erzielte Punktzahl in einem Test), *schlafdauer* (Schlafdauer in der Nacht vor dem Test in Std.), *lernzeit* (insgesamt für den Test aufgewendete Lernzeit in Std.) und *lsport* (Lieblingssportart). Einzelne Variablen können als Datensatzname$Variablenname angesprochen werden, z.B.: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r dat$punkte [1] 93.0 76.5 79.5 85.0 66.5 71.0 56.5 77.0 59.0 63.5 72.0 70.0 96.0 72.0 62.5 76.5 86.0 57.5 [19] 60.0 73.5 64.5 54.0 85.0 64.0 57.5 54.0 76.5 41.0 58.5 87.5 62.5 62.5 100.5 86.0 66.5 79.5 [37] 77.0 67.5 58.5 92.5 94.5 77.0 76.0 67.0 44.5 86.5 70.0 81.5 90.5 78.0 80.5 74.0 56.5 60.0 [55] 83.0 70.0 49.0 57.0 48.0 70.5 96.5 106.0 65.5 86.5 87.5 89.5 64.0 86.0 62.0 94.5 52.0 73.5 [73] 77.0 83.5 62.5 52.5 51.5 86.5 70.5 57.5 68.0 103.0 79.0 75.0 113.5 78.0 104.5 84.5 63.5 46.0 [91] 102.5 77.0 73.5 71.0 106.0 79.0 77.5 87.0 92.5 11.5 83.5 86.5 78.5 67.5 71.0 61.5 31.0 50.5 [109] 87.5 66.5 67.0 60.5 61.5 83.5 66.0 97.0 79.5 83.5 82.0 63.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Die Ausgabe zeigt die 120 beobachteten Werte der Variable *punkte*." ["TextText2"]=> string(0) "" ["H5pTitle"]=> string(0) "" ["H5pDescription"]=> string(0) "" ["H5pCode"]=> string(0) "" ["MtmTitle"]=> string(0) "" ["MtmText"]=> string(0) "" ["CodeTitle"]=> string(0) "" ["CodeCode"]=> string(0) "" ["CodeType"]=> string(1) "R" ["SliderTitle"]=> string(0) "" ["SliderText"]=> string(0) "" ["REX_MEDIALIST_1"]=> string(0) "" ["AccordeonTitle"]=> string(0) "" ["AccordeonItems"]=> string(0) "" } [1]=> array(21) { ["mblockType"]=> string(3) "Mtm" ["ShinyApp"]=> string(0) "" ["ShinyTitle"]=> string(0) "" ["ShinyDescription"]=> string(0) "" ["TextTitle"]=> string(0) "" ["TextCols"]=> string(1) "1" ["TextText1"]=> string(0) "" ["TextText2"]=> string(0) "" ["H5pTitle"]=> string(0) "" ["H5pDescription"]=> string(0) "" ["H5pCode"]=> string(0) "" ["MtmTitle"]=> string(67) "Wie bekomme ich einen Überblick über einen unbekannten Datensatz?" ["MtmText"]=> string(2794) "Für einen ersten Überblick über die Struktur des Datensatzes und die im Datensatz enthaltenen Variablen kann die Funktion str(dat) verwendet werden: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r str(dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ liefert das folgende Ergebnis: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r 'data.frame': 120 obs. of 25 variables: $ X : int 94 66 78 28 3 113 16 11 96 99 ... $ punkte : num 93 76.5 79.5 85 66.5 71 56.5 77 59 63.5 ... $ schlafdauer : num 6.2 5.3 5.5 7 6.5 6.4 5.7 6.8 5.4 6.8 ... $ lernzeit : num 8.2 7 6.8 7.3 7.3 3.9 4.9 7.6 2.5 9.2 ... $ nachhilfe : int 1 1 1 1 1 0 0 1 0 0 ... $ zeugnis_mathe_roh : num 101.3 89.7 86.2 83.6 86.8 ... $ zeugnis_mathe_punkte : int 13 11 10 10 10 11 9 10 9 10 ... $ zeugnis_mathe_note : Factor w/ 4 levels "ausreichend",..: 1 2 2 2 2 2 3 2 3 2 ... $ zeugnis_deutsch_punkte: int 8 9 10 6 10 10 9 12 5 13 ... $ zeugnis_deutsch_note : Factor w/ 4 levels "ausreichend",..: 3 3 2 4 2 2 3 2 4 1 ... $ lsport : Factor w/ 6 levels "Andere Sportart",..: 4 5 1 3 3 4 3 3 4 4 ... $ sport_fb : int 0 1 0 1 1 1 1 1 1 1 ... $ sport_bb : int 0 0 1 0 0 0 0 1 1 0 ... $ sport_sw : int 1 1 1 1 0 0 1 1 1 1 ... $ sport_tn : int 0 0 0 0 0 0 0 0 1 0 ... $ sport_an : int 1 0 1 1 0 0 1 1 1 1 ... $ sport_no : int 0 0 0 0 0 0 0 0 0 0 ... $ sport_test : int 0 1 1 0 1 1 0 1 1 1 ... $ kantine_zufr : int 4 4 3 5 3 2 2 1 3 2 ... $ taschengeld : int 33 30 29 35 28 32 41 36 34 34 ... $ lauf100 : num 14.3 13.2 13.9 14 15 14.2 14.1 14.8 15.2 13.8 ... $ lauf1000 : num 234 229 210 222 227 ... $ lauf5000 : num 489 465 484 486 461 ... $ kugel : num 8.15 9.26 8.47 8.37 7.56 ... $ lfach : Factor w/ 7 levels "anderes Fach",..: 2 2 2 2 2 2 2 2 2 2 ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Zu den einzelnen Variablen zeigt die Ausgabe deren Speicherformat (*int* für "integer", *num* für "numeric" - beides Zahlenwerte, *Factor* für nicht-numerische Variablen) und die jeweils ersten Werte im Datensatz. In der Benutzeroberfläche R-Studio liefert der **Data Viewer** zudem einen Einblick in den Datensatz als Datentabelle. Aufgerufen wird er mit der Funktion ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r View(dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ So sieht ein Ausschnitt aus dem Data Viewer aus: ![r_data_viewer_ausschnitt.png](index.php?rex_media_type=markitupImage&rex_media_file=r_data_viewer_ausschnitt.png)" ["CodeTitle"]=> string(0) "" ["CodeCode"]=> string(0) "" ["CodeType"]=> string(0) "" ["SliderTitle"]=> string(0) "" ["SliderText"]=> string(0) "" ["REX_MEDIALIST_1"]=> string(0) "" ["AccordeonTitle"]=> string(0) "" ["AccordeonItems"]=> string(0) "" } [2]=> array(21) { ["mblockType"]=> string(4) "Text" ["ShinyApp"]=> string(0) "" ["ShinyTitle"]=> string(0) "" ["ShinyDescription"]=> string(0) "" ["TextTitle"]=> string(9) "Diagramme" ["TextCols"]=> string(1) "1" ["TextText1"]=> string(3534) "Ein Säulendiagramm erstellen wir mit der Funktion barplot(). Da wir die Häufigkeiten der einzelnen Ausprägungen abbilden möchten, geben wir der Funktion nicht die Variable direkt, sondern die Häufigkeitstabelle der Variable, also table(dat$lsport): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r barplot(table(dat$lsport)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Für ein Säulendiagramm verwenden wir die zusätzliche Option horiz=T: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r barplot(table(dat$lsport), horiz=T) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ein Kreisdiagramm erstellen wir mit der Funktion pie(). Mit der Option clockwise bestimmen wir die Richtung der Anordnung: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r pie(table(dat$lsport), clockwise = T) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Mit der Funktion hist() erstellen wir Histogramme: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r hist(dat$punkte) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Einen Dichteplot erzeugen wir folgendermaßen: Zuerst wird die Dichtefunktion mit density() berechnet, welche anschließend abgebildet wird mit plot(): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r plot(density(dat$punkte)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Mit boxplot() erzeugen wir ein Boxplot. Mit der Option horizontal = T wird die Box gedreht, also horizontal dargestellt. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r boxplot(dat$punkte, horizontal = T) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #### Gestaltungsoptionen Die gezeigten Diagramme können beliebig gestaltet werden, z.B. folgendermaßen: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r hist(dat$punkte, main = "Histogramm Punktezahl", # Titel xlab = "Punktezahl", # Beschriftung x-Achse ylab = "Häufigkeit", # Beschriftung y-Achse bty = "c" # Art der Umrandung ) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Darüber hinaus existieren viele weitere Gestaltungsmöglichkeiten. Wie ein Diagramm sinnvoll zu gestalten ist, hängt von der jeweiligen Verteilung und von der Fragestellung ab. #### Diagramme speichern Die aktuelle Grafik können wir mit der Funktion savePlot() in eine Datei speichern. Dabei sind verschiedene Dateitypen möglich, z.B. PNG oder PDF Der Pfad zum Speicherort muss angepasst werden: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r savePlot(filename = "C:/... Pfad .../hist_punkte.png", type = "png") savePlot(filename = "C:/... Pfad .../hist_punkte.pdf", type = "pdf") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Alternativ kann mit pdf() oder mit png() eine Datei erstellt werden und anschließend das Diagramm erzeugt und damit in die Datei geschrieben werden. Abschließend wird die Datei mit dev.off() geschlossen. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r pdf("hist_punkte.pdf") hist(dat$punkte) dev.off() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ oder ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r png("hist_punkte.png") hist(dat$punkte) dev.off() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Die Größe der Abbildung kann mit den Optionen width und height definiert werden. Bei dem PDF werden die Angaben in inches gemacht, z.B. wird folgendermaßen eine 5 inches breite und 4 inches hohe Abbildung gespeichert: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r pdf("hist_punkte.pdf", width = 5, height = 4) hist(dat$punkte) dev.off() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bei einem PNG werden Breite und Höhe stattdessen in Pixeln angegeben. Die folgende Abbildung ist beispielsweise 420 Pixel breit und 240 Pixel hoch: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r png("hist_punkte.png", width = 420, height = 240) hist(dat$punkte) dev.off() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " ["TextText2"]=> string(0) "" ["H5pTitle"]=> string(0) "" ["H5pDescription"]=> string(0) "" ["H5pCode"]=> string(0) "" ["MtmTitle"]=> string(0) "" ["MtmText"]=> string(0) "" ["CodeTitle"]=> string(0) "" ["CodeCode"]=> string(0) "" ["CodeType"]=> string(0) "" ["SliderTitle"]=> string(0) "" ["SliderText"]=> string(0) "" ["REX_MEDIALIST_1"]=> string(0) "" ["AccordeonTitle"]=> string(0) "" ["AccordeonItems"]=> string(0) "" } }

Beispieldaten herunterladen: dat.csv

Datenbeispiel

Unser Beispieldatensatz (hypothetisches Datenbeispiel) liegt als CSV-Datei vor. Die Daten können mit der read.csv-Funktion eingelesen werden (der korrekte Pfad zum Speicherort muss angegeben werden):

dat <- read.csv("C:/... Pfad .../dat.csv")

Die Funktion erzeugt ein Objekt vom Typ data.frame, dem wir links vom Zuweisungspfeil (<-) den Namen "dat" geben.

Der Datensatz enthält u.a. die Variablen punkte (erzielte Punktzahl in einem Test), schlafdauer (Schlafdauer in der Nacht vor dem Test in Std.), lernzeit (insgesamt für den Test aufgewendete Lernzeit in Std.) und lsport (Lieblingssportart). Einzelne Variablen können als Datensatzname$Variablenname angesprochen werden, z.B.:

dat$punkte
[1]  93.0  76.5  79.5  85.0  66.5  71.0  56.5  77.0  59.0  63.5  72.0  70.0  96.0  72.0  62.5  76.5  86.0  57.5
[19]  60.0  73.5  64.5  54.0  85.0  64.0  57.5  54.0  76.5  41.0  58.5  87.5  62.5  62.5 100.5  86.0  66.5  79.5
[37]  77.0  67.5  58.5  92.5  94.5  77.0  76.0  67.0  44.5  86.5  70.0  81.5  90.5  78.0  80.5  74.0  56.5  60.0
[55]  83.0  70.0  49.0  57.0  48.0  70.5  96.5 106.0  65.5  86.5  87.5  89.5  64.0  86.0  62.0  94.5  52.0  73.5
[73]  77.0  83.5  62.5  52.5  51.5  86.5  70.5  57.5  68.0 103.0  79.0  75.0 113.5  78.0 104.5  84.5  63.5  46.0
[91] 102.5  77.0  73.5  71.0 106.0  79.0  77.5  87.0  92.5  11.5  83.5  86.5  78.5  67.5  71.0  61.5  31.0  50.5
[109]  87.5  66.5  67.0  60.5  61.5  83.5  66.0  97.0  79.5  83.5  82.0  63.0

Die Ausgabe zeigt die 120 beobachteten Werte der Variable punkte.

Für einen ersten Überblick über die Struktur des Datensatzes und die im Datensatz enthaltenen Variablen kann die Funktion str(dat) verwendet werden:

str(dat)

liefert das folgende Ergebnis:

     'data.frame':  120 obs. of  25 variables:
     $ X                     : int  94 66 78 28 3 113 16 11 96 99 ...
     $ punkte                : num  93 76.5 79.5 85 66.5 71 56.5 77 59 63.5 ...
     $ schlafdauer           : num  6.2 5.3 5.5 7 6.5 6.4 5.7 6.8 5.4 6.8 ...
     $ lernzeit              : num  8.2 7 6.8 7.3 7.3 3.9 4.9 7.6 2.5 9.2 ...
     $ nachhilfe             : int  1 1 1 1 1 0 0 1 0 0 ...
     $ zeugnis_mathe_roh     : num  101.3 89.7 86.2 83.6 86.8 ...
     $ zeugnis_mathe_punkte  : int  13 11 10 10 10 11 9 10 9 10 ...
     $ zeugnis_mathe_note    : Factor w/ 4 levels "ausreichend",..: 1 2 2 2 2 2 3 2 3 2 ...
     $ zeugnis_deutsch_punkte: int  8 9 10 6 10 10 9 12 5 13 ...
     $ zeugnis_deutsch_note  : Factor w/ 4 levels "ausreichend",..: 3 3 2 4 2 2 3 2 4 1 ...
     $ lsport                : Factor w/ 6 levels "Andere Sportart",..: 4 5 1 3 3 4 3 3 4 4 ...
     $ sport_fb              : int  0 1 0 1 1 1 1 1 1 1 ...
     $ sport_bb              : int  0 0 1 0 0 0 0 1 1 0 ...
     $ sport_sw              : int  1 1 1 1 0 0 1 1 1 1 ...
     $ sport_tn              : int  0 0 0 0 0 0 0 0 1 0 ...
     $ sport_an              : int  1 0 1 1 0 0 1 1 1 1 ...
     $ sport_no              : int  0 0 0 0 0 0 0 0 0 0 ...
     $ sport_test            : int  0 1 1 0 1 1 0 1 1 1 ...
     $ kantine_zufr          : int  4 4 3 5 3 2 2 1 3 2 ...
     $ taschengeld           : int  33 30 29 35 28 32 41 36 34 34 ...
     $ lauf100               : num  14.3 13.2 13.9 14 15 14.2 14.1 14.8 15.2 13.8 ...
     $ lauf1000              : num  234 229 210 222 227 ...
     $ lauf5000              : num  489 465 484 486 461 ...
     $ kugel                 : num  8.15 9.26 8.47 8.37 7.56 ...
     $ lfach                 : Factor w/ 7 levels "anderes Fach",..: 2 2 2 2 2 2 2 2 2 2 ...

Zu den einzelnen Variablen zeigt die Ausgabe deren Speicherformat (int für "integer", num für "numeric" - beides Zahlenwerte, Factor für nicht-numerische Variablen) und die jeweils ersten Werte im Datensatz.

In der Benutzeroberfläche R-Studio liefert der Data Viewer zudem einen Einblick in den Datensatz als Datentabelle. Aufgerufen wird er mit der Funktion

View(dat)

So sieht ein Ausschnitt aus dem Data Viewer aus:

r_data_viewer_ausschnitt.png

Diagramme

Ein Säulendiagramm erstellen wir mit der Funktion barplot(). Da wir die Häufigkeiten der einzelnen Ausprägungen abbilden möchten, geben wir der Funktion nicht die Variable direkt, sondern die Häufigkeitstabelle der Variable, also table(dat$lsport):

barplot(table(dat$lsport))

Für ein Säulendiagramm verwenden wir die zusätzliche Option horiz=T:

barplot(table(dat$lsport), horiz=T)

Ein Kreisdiagramm erstellen wir mit der Funktion pie(). Mit der Option clockwise bestimmen wir die Richtung der Anordnung:

pie(table(dat$lsport), clockwise = T)

Mit der Funktion hist() erstellen wir Histogramme:

hist(dat$punkte)

Einen Dichteplot erzeugen wir folgendermaßen: Zuerst wird die Dichtefunktion mit density() berechnet, welche anschließend abgebildet wird mit plot():

plot(density(dat$punkte))

Mit boxplot() erzeugen wir ein Boxplot. Mit der Option horizontal = T wird die Box gedreht, also horizontal dargestellt.

boxplot(dat$punkte, horizontal = T)

Gestaltungsoptionen

Die gezeigten Diagramme können beliebig gestaltet werden, z.B. folgendermaßen:

hist(dat$punkte, 
     main = "Histogramm Punktezahl",    # Titel
     xlab = "Punktezahl",               # Beschriftung x-Achse
     ylab = "Häufigkeit",               # Beschriftung y-Achse
     bty = "c"                          # Art der Umrandung
)

Darüber hinaus existieren viele weitere Gestaltungsmöglichkeiten. Wie ein Diagramm sinnvoll zu gestalten ist, hängt von der jeweiligen Verteilung und von der Fragestellung ab.

Diagramme speichern

Die aktuelle Grafik können wir mit der Funktion savePlot() in eine Datei speichern. Dabei sind verschiedene Dateitypen möglich, z.B. PNG oder PDF Der Pfad zum Speicherort muss angepasst werden:

savePlot(filename = "C:/... Pfad .../hist_punkte.png", type = "png")
savePlot(filename = "C:/... Pfad .../hist_punkte.pdf", type = "pdf")

Alternativ kann mit pdf() oder mit png() eine Datei erstellt werden und anschließend das Diagramm erzeugt und damit in die Datei geschrieben werden. Abschließend wird die Datei mit dev.off() geschlossen.

pdf("hist_punkte.pdf")
hist(dat$punkte)
dev.off()

oder

png("hist_punkte.png")
hist(dat$punkte)
dev.off()

Die Größe der Abbildung kann mit den Optionen width und height definiert werden. Bei dem PDF werden die Angaben in inches gemacht, z.B. wird folgendermaßen eine 5 inches breite und 4 inches hohe Abbildung gespeichert:

pdf("hist_punkte.pdf", width = 5, height = 4)
hist(dat$punkte)
dev.off()

Bei einem PNG werden Breite und Höhe stattdessen in Pixeln angegeben. Die folgende Abbildung ist beispielsweise 420 Pixel breit und 240 Pixel hoch:

png("hist_punkte.png", width = 420, height = 240)
hist(dat$punkte)
dev.off()
Creative Commons Lizenzvertrag

Dieses Werk ist lizenziert unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International Lizenz.

Autor*innen dieses Artikels

Sebastian Gerhartz, Adrian Neuser, Lisa Rüge

Diese Seite wurde zuletzt am 15.01.2024 aktualisiert.