Weiter zum Inhalt

Einstieg in den Tidyverse: Tutorial

Starte mit der Analyse der Titanic-Daten in R und dem tidyverse: Lerne, wie du deine Daten mit dplyr und ggplot2 filterst, sortierst, zusammenfasst, veränderst und visualisierst!
Aktualisiert 18. Sept. 2026  · 8 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Dieses Tutorial ist die verschriftlichte Version eines Facebook-Live-Events von letzter Woche. Das Thema war „Introduction to the Tidyverse“, und hier führen wir dich durch den gesamten Inhalt der gemeinsamen Code-Session!

Den ersten Teil der Session kannst du dir hier ansehen:

Und den zweiten Teil hier:

Hinweis: Den gesamten Code zur Session findest du in diesem Repository.

Der Kern des tidyverse umfasst Pakete, die du in der täglichen Datenanalyse wahrscheinlich nutzt, etwa ggplot2 für Datenvisualisierung und dplyr für Datenaufbereitung. In diesem Tutorial konzentrierst du dich auf diese beiden.

Merke: Ein Package ist im Grunde ein Werkzeugkasten, um mit Daten zu arbeiten. Wenn du mehr über Packages in R wissen willst, sieh dir dieses Tutorial an.

Mehr zum Tidyverse findest du in David Robinsons Introduction to Tidyverse Kurs auf DataCamp und den Learn the Tidyverse Ressourcen.

action diagram

Erste Schritte

Installiere zunächst das tidyverse, falls noch nicht geschehen:

# Install the tidyverse
# install.packages("tidyverse")

Jetzt, da du das tidyverse installiert hast, ist es Zeit, deine Daten zu laden und dir erste Beobachtungen anzusehen.

In diesem Tutorial erkundest du den Titanic-Datensatz. Jede Zeile entspricht einer Person, jede Variable einem Merkmal wie Name, Age und Survived (überlebt oder nicht).

Lade deine Daten so:

 # Import the Tidyverse
library(tidyverse)

# Import data
passengers <- read.csv("data/train.csv")

# Check out the first several observations of your dataframe
passengers

##   PassengerId Survived Pclass
## 1           1        0      3
## 2           2        1      1
## 3           3        1      3
## 4           4        1      1
## 5           5        0      3
## 6           6        0      3
##                                                  Name    Sex Age SibSp
## 1                             Braund, Mr. Owen Harris   male  22     1
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female  38     1
## 3                              Heikkinen, Miss. Laina female  26     0
## 4        Futrelle, Mrs. Jacques Heath (Lily May Peel) female  35     1
## 5                            Allen, Mr. William Henry   male  35     0
## 6                                    Moran, Mr. James   male  NA     0
##   Parch           Ticket    Fare Cabin Embarked
## 1     0        A/5 21171  7.2500              S
## 2     0         PC 17599 71.2833   C85        C
## 3     0 STON/O2. 3101282  7.9250              S
## 4     0           113803 53.1000  C123        S
## 5     0           373450  8.0500              S
## 6     0           330877  8.4583              Q

Hinweis: Der Pfad, den du an read.csv() übergibst, kann je nach Setup variieren. Wenn du denselben Dateipfad beibehalten willst, schau dir die Ordnerstruktur dieses Projekts im GitHub-Repository an, das du hier findest.

Wenn du mehr über die Variablen wissen willst, die du beim Ausführen von passengers siehst, wirf einen Blick in die Datensatzbeschreibung.

Für einen schnellen Überblick über deine Daten kannst du die Funktion summary() verwenden:

# Summarize titanic
summary(passengers)

##   PassengerId       Survived          Pclass     
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000  
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000  
##  Median :446.0   Median :0.0000   Median :3.000  
##  Mean   :446.0   Mean   :0.3838   Mean   :2.309  
##  3rd Qu.:668.5   3rd Qu.:1.0000   3rd Qu.:3.000  
##  Max.   :891.0   Max.   :1.0000   Max.   :3.000  
##                                                  
##                                     Name         Sex           Age       
##  Abbing, Mr. Anthony                  :  1   female:314   Min.   : 0.42  
##  Abbott, Mr. Rossmore Edward          :  1   male  :577   1st Qu.:20.12  
##  Abbott, Mrs. Stanton (Rosa Hunt)     :  1                Median :28.00  
##  Abelson, Mr. Samuel                  :  1                Mean   :29.70  
##  Abelson, Mrs. Samuel (Hannah Wizosky):  1                3rd Qu.:38.00  
##  Adahl, Mr. Mauritz Nils Martin       :  1                Max.   :80.00  
##  (Other)                              :885                NA's   :177    
##      SibSp           Parch             Ticket         Fare       
##  Min.   :0.000   Min.   :0.0000   1601    :  7   Min.   :  0.00  
##  1st Qu.:0.000   1st Qu.:0.0000   347082  :  7   1st Qu.:  7.91  
##  Median :0.000   Median :0.0000   CA. 2343:  7   Median : 14.45  
##  Mean   :0.523   Mean   :0.3816   3101295 :  6   Mean   : 32.20  
##  3rd Qu.:1.000   3rd Qu.:0.0000   347088  :  6   3rd Qu.: 31.00  
##  Max.   :8.000   Max.   :6.0000   CA 2144 :  6   Max.   :512.33  
##                                   (Other) :852                   
##          Cabin     Embarked
##             :687    :  2   
##  B96 B98    :  4   C:168   
##  C23 C25 C27:  4   Q: 77   
##  G6         :  4   S:644   
##  C22 C26    :  3           
##  D          :  3           
##  (Other)    :186

Mach dasselbe mit einem Pipe %>%, einem der praktischsten Werkzeuge im tidyverse:

# Summarize titanic using a pipe
passengers %>%
  summary()

##   PassengerId       Survived          Pclass     
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000  
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000  
##  Median :446.0   Median :0.0000   Median :3.000  
##  Mean   :446.0   Mean   :0.3838   Mean   :2.309  
##  3rd Qu.:668.5   3rd Qu.:1.0000   3rd Qu.:3.000  
##  Max.   :891.0   Max.   :1.0000   Max.   :3.000  
##                                                  
##                                     Name         Sex           Age       
##  Abbing, Mr. Anthony                  :  1   female:314   Min.   : 0.42  
##  Abbott, Mr. Rossmore Edward          :  1   male  :577   1st Qu.:20.12  
##  Abbott, Mrs. Stanton (Rosa Hunt)     :  1                Median :28.00  
##  Abelson, Mr. Samuel                  :  1                Mean   :29.70  
##  Abelson, Mrs. Samuel (Hannah Wizosky):  1                3rd Qu.:38.00  
##  Adahl, Mr. Mauritz Nils Martin       :  1                Max.   :80.00  
##  (Other)                              :885                NA's   :177    
##      SibSp           Parch             Ticket         Fare       
##  Min.   :0.000   Min.   :0.0000   1601    :  7   Min.   :  0.00  
##  1st Qu.:0.000   1st Qu.:0.0000   347082  :  7   1st Qu.:  7.91  
##  Median :0.000   Median :0.0000   CA. 2343:  7   Median : 14.45  
##  Mean   :0.523   Mean   :0.3816   3101295 :  6   Mean   : 32.20  
##  3rd Qu.:1.000   3rd Qu.:0.0000   347088  :  6   3rd Qu.: 31.00  
##  Max.   :8.000   Max.   :6.0000   CA 2144 :  6   Max.   :512.33  
##                                   (Other) :852                   
##          Cabin     Embarked
##             :687    :  2   
##  B96 B98    :  4   C:168   
##  C23 C25 C27:  4   Q: 77   
##  G6         :  4   S:644   
##  C22 C26    :  3           
##  D          :  3           
##  (Other)    :186

Tipp: Wenn du mehr über den Pipe-Operator in R wissen willst, sieh dir dieses Tutorial an.

Mach dasselbe, nachdem du Beobachtungen mit fehlenden Werten entfernt hast. Kleiner Hinweis: Du kannst Pipes verketten!

# Summarize titanic after dropping na
passengers %>%
  drop_na() %>%
  summary()

##   PassengerId       Survived          Pclass     
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000  
##  1st Qu.:222.2   1st Qu.:0.0000   1st Qu.:1.000  
##  Median :445.0   Median :0.0000   Median :2.000  
##  Mean   :448.6   Mean   :0.4062   Mean   :2.237  
##  3rd Qu.:677.8   3rd Qu.:1.0000   3rd Qu.:3.000  
##  Max.   :891.0   Max.   :1.0000   Max.   :3.000  
##                                                  
##                                     Name         Sex           Age       
##  Abbing, Mr. Anthony                  :  1   female:261   Min.   : 0.42  
##  Abbott, Mr. Rossmore Edward          :  1   male  :453   1st Qu.:20.12  
##  Abbott, Mrs. Stanton (Rosa Hunt)     :  1                Median :28.00  
##  Abelson, Mr. Samuel                  :  1                Mean   :29.70  
##  Abelson, Mrs. Samuel (Hannah Wizosky):  1                3rd Qu.:38.00  
##  Adahl, Mr. Mauritz Nils Martin       :  1                Max.   :80.00  
##  (Other)                              :708                               
##      SibSp            Parch                 Ticket         Fare       
##  Min.   :0.0000   Min.   :0.0000   347082      :  7   Min.   :  0.00  
##  1st Qu.:0.0000   1st Qu.:0.0000   3101295     :  6   1st Qu.:  8.05  
##  Median :0.0000   Median :0.0000   347088      :  6   Median : 15.74  
##  Mean   :0.5126   Mean   :0.4314   CA 2144     :  6   Mean   : 34.69  
##  3rd Qu.:1.0000   3rd Qu.:1.0000   382652      :  5   3rd Qu.: 33.38  
##  Max.   :5.0000   Max.   :6.0000   S.O.C. 14879:  5   Max.   :512.33  
##                                    (Other)     :679                   
##          Cabin     Embarked
##             :529    :  2   
##  B96 B98    :  4   C:130   
##  C23 C25 C27:  4   Q: 28   
##  G6         :  4   S:554   
##  C22 C26    :  3           
##  D          :  3           
##  (Other)    :167

Vielleicht ist dir die konsequente Schreibweise im obigen Code aufgefallen. Das liegt daran, dass du einem Styleguide folgst. In der Datenwissenschaft und in der Programmierung allgemein ist es wichtig, sich früh an einen Styleguide zu gewöhnen. Wie Hadley Wickham im tidyverse style guide schreibt,

Guter Code-Stil ist wie richtige Zeichensetzung: Man kommt auch ohne aus, aberesmachtdasLesenerheblichleichter.

Im nächsten Abschnitt kümmerst du dich mit dplyr um Data Wrangling: Du filterst deine Daten, sortierst sie und erstellst neue Features, indem du bestehende veränderst.

Bereite deine Daten auf

Jetzt ist es Zeit, deine Daten zu erkunden und erste Einblicke zu gewinnen. Du verwendest dplyr-Verben wie filter(), arrange() und mutate() – sie tun genau das, was ihre Namen versprechen.

Angenommen, du möchtest eine bestimmte Teilmenge wählen, zum Beispiel alle Beobachtungen, bei denen „Sex“ auf 'female' steht. dplyr ermöglicht das intuitiv und in einer Sprache, die dem Denken und Sprechen über Daten entspricht.

Das Verb filter wählt nur die Zeilen aus, die die Bedingung erfüllen. So sieht das aus:

# Filter to get all "male" rows
passengers %>%
  filter(Sex == "male")

##   PassengerId Survived Pclass                           Name  Sex Age
## 1           1        0      3        Braund, Mr. Owen Harris male  22
## 2           5        0      3       Allen, Mr. William Henry male  35
## 3           6        0      3               Moran, Mr. James male  NA
## 4           7        0      1        McCarthy, Mr. Timothy J male  54
## 5           8        0      3 Palsson, Master. Gosta Leonard male   2
## 6          13        0      3 Saundercock, Mr. William Henry male  20
##   SibSp Parch    Ticket    Fare Cabin Embarked
## 1     1     0 A/5 21171  7.2500              S
## 2     0     0    373450  8.0500              S
## 3     0     0    330877  8.4583              Q
## 4     0     0     17463 51.8625   E46        S
## 5     3     1    349909 21.0750              S
## 6     0     0 A/5. 2151  8.0500              S

Beim Blick auf die Ergebnisse wird deutlich: Viele Männer haben das Sinken der RMS Titanic nicht überlebt. Spannend – das schauen wir uns später im Tutorial noch genauer an!

Hinweis: Du kannst dplyr-Code wie einen Satz lesen: Nimm die Daten und (%>%) filtere sie nach der Bedingung, dass das Geschlecht männlich ist. Der oben gezeigte Code verändert den ursprünglichen Data Frame nicht. filter(Sex = "male") ist ein häufiger Fehler (Hugo ist er auch passiert!); es gibt einen hilfreichen tidyverse Error Guide.

# Filter to get all "female" rows
passengers %>%
  filter(Sex == "female")

##   PassengerId Survived Pclass
## 1           2        1      1
## 2           3        1      3
## 3           4        1      1
## 4           9        1      3
## 5          10        1      2
## 6          11        1      3
##                                                  Name    Sex Age SibSp
## 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female  38     1
## 2                              Heikkinen, Miss. Laina female  26     0
## 3        Futrelle, Mrs. Jacques Heath (Lily May Peel) female  35     1
## 4   Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female  27     0
## 5                 Nasser, Mrs. Nicholas (Adele Achem) female  14     1
## 6                     Sandstrom, Miss. Marguerite Rut female   4     1
##   Parch           Ticket    Fare Cabin Embarked
## 1     0         PC 17599 71.2833   C85        C
## 2     0 STON/O2. 3101282  7.9250              S
## 3     0           113803 53.1000  C123        S
## 4     2           347742 11.1333              S
## 5     0           237736 30.0708              C
## 6     1          PP 9549 16.7000    G6        S

Frauen scheinen eine deutlich höhere Überlebenswahrscheinlichkeit gehabt zu haben – zumindest auf den ersten Blick.

Bei der Erkundung von Daten solltest du Fragen stellen und nach bestem Wissen beantworten. Vielleicht möchtest du die Beobachtungen nach aufsteigendem Fare sortieren, um Muster zu erkennen. Das geht mit arrange():

# Arrange by increasing Fare
passengers %>%
  arrange(Fare)

##   PassengerId Survived Pclass                            Name  Sex Age
## 1         180        0      3             Leonard, Mr. Lionel male  36
## 2         264        0      1           Harrison, Mr. William male  40
## 3         272        1      3    Tornquist, Mr. William Henry male  25
## 4         278        0      2     Parkes, Mr. Francis "Frank" male  NA
## 5         303        0      3 Johnson, Mr. William Cahoone Jr male  19
## 6         414        0      2  Cunningham, Mr. Alfred Fleming male  NA
##   SibSp Parch Ticket Fare Cabin Embarked
## 1     0     0   LINE    0              S
## 2     0     0 112059    0   B94        S
## 3     0     0   LINE    0              S
## 4     0     0 239853    0              S
## 5     0     0   LINE    0              S
## 6     0     0 239853    0              S

Viele der Menschen mit sehr niedrigen Ticketpreisen haben nicht überlebt. Ein interessanter Befund, den du allein durch Sortieren entdeckt hast!

Du kannst auch nach absteigendem Fare sortieren:

# Arrange by decreasing Fare
passengers %>%
  arrange(desc(Fare))

##   PassengerId Survived Pclass                               Name    Sex
## 1         259        1      1                   Ward, Miss. Anna female
## 2         680        1      1 Cardeza, Mr. Thomas Drake Martinez   male
## 3         738        1      1             Lesurer, Mr. Gustave J   male
## 4          28        0      1     Fortune, Mr. Charles Alexander   male
## 5          89        1      1         Fortune, Miss. Mabel Helen female
## 6         342        1      1     Fortune, Miss. Alice Elizabeth female
##   Age SibSp Parch   Ticket     Fare       Cabin Embarked
## 1  35     0     0 PC 17755 512.3292                    C
## 2  36     0     1 PC 17755 512.3292 B51 B53 B55        C
## 3  35     0     0 PC 17755 512.3292        B101        C
## 4  19     3     2    19950 263.0000 C23 C25 C27        S
## 5  23     3     2    19950 263.0000 C23 C25 C27        S
## 6  24     3     2    19950 263.0000 C23 C25 C27        S

Am oberen Ende gibt es tatsächlich mehr Überlebende!

Manchmal willst du neue Variablen erstellen. Du weißt, dass Parch die Anzahl der Eltern und Kinder ist, während SibSp die Anzahl der Geschwister und Ehepartner angibt. Beides zusammen ergibt eine neue Variable FamSize. Das ist Feature Engineering und ein wichtiger Teil von Machine Learning!

Um die neue Variable zu erzeugen, mutate()st du die ursprünglichen Spalten in eine neue.

# Create new column FamSize (size of family)
passengers %>%
  mutate(FamSize = Parch + SibSp)

##   PassengerId Survived Pclass
## 1           1        0      3
## 2           2        1      1
## 3           3        1      3
## 4           4        1      1
## 5           5        0      3
## 6           6        0      3
##                                                  Name    Sex Age SibSp
## 1                             Braund, Mr. Owen Harris   male  22     1
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female  38     1
## 3                              Heikkinen, Miss. Laina female  26     0
## 4        Futrelle, Mrs. Jacques Heath (Lily May Peel) female  35     1
## 5                            Allen, Mr. William Henry   male  35     0
## 6                                    Moran, Mr. James   male  NA     0
##   Parch           Ticket    Fare Cabin Embarked FamSize
## 1     0        A/5 21171  7.2500              S       1
## 2     0         PC 17599 71.2833   C85        C       1
## 3     0 STON/O2. 3101282  7.9250              S       0
## 4     0           113803 53.1000  C123        S       1
## 5     0           373450  8.0500              S       0
## 6     0           330877  8.4583              Q       0

Hinweis: mutate() kann neue Spalten erzeugen, aber auch bestehende verändern – ähnlich wie eine Mutation in der Biologie. Nicht ganz wörtlich zu nehmen, aber hilfreich zur Einordnung des Verbs.

Mit der neuen Variable kannst du weitere Fragen stellen, etwa: „Ist es möglich, dass größere Familien eine geringere Überlebensrate hatten?“.

Um diese Hypothese zu prüfen, erstelle wie oben FamSize als Summe aus Parch und SibSp und sortiere dann nach absteigendem FamSize:

# Create new column FamSize (size of family)
# Arrange by decreasing FamSize
passengers %>%
  mutate(FamSize = Parch + SibSp) %>%
  arrange(desc(FamSize))

##   PassengerId Survived Pclass                         Name    Sex Age
## 1         160        0      3   Sage, Master. Thomas Henry   male  NA
## 2         181        0      3 Sage, Miss. Constance Gladys female  NA
## 3         202        0      3          Sage, Mr. Frederick   male  NA
## 4         325        0      3     Sage, Mr. George John Jr   male  NA
## 5         793        0      3      Sage, Miss. Stella Anna female  NA
## 6         847        0      3     Sage, Mr. Douglas Bullen   male  NA
##   SibSp Parch   Ticket  Fare Cabin Embarked FamSize
## 1     8     2 CA. 2343 69.55              S      10
## 2     8     2 CA. 2343 69.55              S      10
## 3     8     2 CA. 2343 69.55              S      10
## 4     8     2 CA. 2343 69.55              S      10
## 5     8     2 CA. 2343 69.55              S      10
## 6     8     2 CA. 2343 69.55              S      10

Alle in der größten Familie haben nicht überlebt! Das ist aufschlussreich: Vielleicht konnten Mitglieder großer Familien die Titanic nicht rechtzeitig verlassen.

Da Nullen und Einsen nicht besonders aussagekräftig sind, wandel die Werte in Survived in die Strings No und Yes um (und erzeuge einen neuen Data Frame):

# Turn numerical values of Survived column to "No" & "Yes" (new data frame)
passengers1 <- passengers %>%
  mutate(Survived = ifelse(Survived == 0, "No", "Yes"))
passengers1

##   PassengerId Survived Pclass
## 1           1       No      3
## 2           2      Yes      1
## 3           3      Yes      3
## 4           4      Yes      1
## 5           5       No      3
## 6           6       No      3
##                                                  Name    Sex Age SibSp
## 1                             Braund, Mr. Owen Harris   male  22     1
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female  38     1
## 3                              Heikkinen, Miss. Laina female  26     0
## 4        Futrelle, Mrs. Jacques Heath (Lily May Peel) female  35     1
## 5                            Allen, Mr. William Henry   male  35     0
## 6                                    Moran, Mr. James   male  NA     0
##   Parch           Ticket    Fare Cabin Embarked
## 1     0        A/5 21171  7.2500              S
## 2     0         PC 17599 71.2833   C85        C
## 3     0 STON/O2. 3101282  7.9250              S
## 4     0           113803 53.1000  C123        S
## 5     0           373450  8.0500              S
## 6     0           330877  8.4583              Q

Visualisiere deine Daten

Um deine Daten mit ggplot2 zu plotten, gibst du drei Dinge an:

  • Deine Daten
  • Deine Aesthetics (zum Beispiel, was auf der x-Achse liegt)
  • Deine Layer (zum Beispiel Balkendiagramm, Streudiagramm)

Zuerst erstellst du ein Balkendiagramm von Sex, um zu sehen, wie viele Männer und Frauen an Bord der Titanic waren:

# Plot barplot of passenger Sex
ggplot(passengers, aes(x = Sex)) +
  geom_bar()

barplot

Am Diagramm erkennst du, dass etwa 600 Männer und 300 Frauen an Bord der RMS Titanic waren.

Hinweis: Die Funktion aes() dient dazu, die aesthetischen Eigenschaften des Plots auf Variablen in den Daten abzubilden. Mehr dazu in Modern Dive von Chester Ismay & Albert Y. Kim.

Weiter geht’s mit Streudiagrammen. Ist das Age eines Passagiers mit dem gezahlten Fare korreliert?

# Scatter plot of Age vs Fare
ggplot(passengers, aes(x = Age, y = Fare)) +
  geom_point()

## Warning: Removed 177 rows containing missing values (geom_point).

scatter plot

Schon dieser Plot liefert viele Einsichten: Viele der Personen mit höherem Fahrpreis waren deutlich älter. Möglicherweise stieg der Preis mit dem Alter. Außerdem fallen sofort zwei Ausreißer oben im Plot auf – die könntest du weiter untersuchen!

Du kannst deinen ggplot2-Code wie einen Satz lesen – genau wie oben bei dplyr: „Nimm die Daten titanic, mappe Age auf die x-Achse und Fare auf die y-Achse und füge Punkte als Layer hinzu.“

Nimm den vorherigen Plot und färbe die Punkte nach Sex, um Zusammenhänge zwischen Sex, Age und Fare zu erkennen:

# Scatter plot of Age vs Fare colored by Sex
ggplot(passengers %>% drop_na(), aes(x = Age, y = Fare, color = Sex)) +
  geom_point()

scatter plot 2

Unten, bei den niedrigen Preisen, siehst du viele Männer. Oben bildet sich ein Cluster von Frauen, die etwas älter waren und auch mehr für die Passage bezahlt haben.

Drei Variablen in einem Plot zu zeigen (zwei numerische, Age und Fare, und eine kategoriale, Sex) ist schon stark. Aber was, wenn du zusätzlich Survived betrachten willst? Das geht mit Faceting, also dem gleichzeitigen Erzeugen mehrerer Plots:

# Scatter plot of Age vs Fare colored by Sex faceted by Survived
ggplot(passengers1, aes(x = Age, y = Fare, color = Sex)) +
  geom_point() +
  facet_grid(~Survived)

## Warning: Removed 177 rows containing missing values (geom_point).

scatter plot 3

Jetzt wird sichtbar: Viele der Frauen aus dem oberen Bereich des vorherigen Plots haben überlebt, und die meisten, die nicht überlebt haben, zahlten unter 50 Einheiten. Tipp: Finde selbst heraus, um welche Währung es sich handelt!

Erstelle nun erneut das Balkendiagramm von Sex und fülle die Balken diesmal nach Survived:

# Plot barplot of passenger Sex & fill according to Survival
ggplot(passengers1, aes(x = Sex, fill = Survived)) +
  geom_bar()

bar plot 2

Du siehst: Der Großteil der Männer hat nicht überlebt, während über zwei Drittel der Frauen überlebt haben.

Daten zusammenfassen und gruppieren

Nutze das Verb summarise(), um den durchschnittlichen Fahrpreis zu berechnen:

# Check out mean Fare
passengers %>%
  summarise(meanFare = mean(Fare))

##   meanFare
## 1 32.20421

Nutze summarise(), um den Median des Fahrpreises zu berechnen:

# Check out mean Fare
passengers %>%
  summarise(medianFare = median(Fare))

##   medianFare
## 1    14.4542

Mit filter() und summarise() findest du den durchschnittlichen Fahrpreis unter Männern:

# Check out mean Fare for men
passengers %>%
  filter(Sex == "male") %>%
  summarise(meanFare = mean(Fare))

##   meanFare
## 1 25.52389

Und so den durchschnittlichen Fahrpreis unter Frauen:

# Check out mean Fare for women
passengers %>%
  filter(Sex == "female") %>%
  summarise(meanFare = mean(Fare))

##   meanFare
## 1 44.47982

Finde den durchschnittlichen Fahrpreis unter Frauen und wie viele Frauen überlebt haben:

# Check out mean Fare & number of survivors for women
passengers %>%
  filter(Sex == "female") %>%
  summarise(meanFare = mean(Fare), numSurv = sum(Survived))

##   meanFare numSurv
## 1 44.47982     233

Berechne mit group_by() und summarise() den durchschnittlichen Fahrpreis und die Anzahl der Überlebenden nach Geschlecht:

# Check out mean Fare & number of survivors grouped by Sex
passengers %>%
  group_by(Sex) %>%
  summarise(meanFare = mean(Fare), numSurv = sum(Survived))

## # A tibble: 2 x 3
##   Sex    meanFare numSurv
##   <fct>     <dbl>   <int>
## 1 female     44.5     233
## 2 male       25.5     109

Oder den durchschnittlichen Fahrpreis und den Anteil der Überlebenden nach Geschlecht:

# Check out mean Fare & proportion of survivors grouped by Sex
passengers %>%
  group_by(Sex) %>%
  summarise(meanFare = mean(Fare), numSurv = sum(Survived)/n())

## # A tibble: 2 x 3
##   Sex    meanFare numSurv
##   <fct>     <dbl>   <dbl>
## 1 female     44.5   0.742
## 2 male       25.5   0.189

Fazit

In diesem Tutorial bist du mit den Grundlagen der Datenanalyse im tidyverse gestartet. Du hast gelernt, Daten zu filter()n, zu arrange()n und zu mutate()n, sie zu plotten und mit summarise() zusammenzufassen – und das mit dplyr und ggplot2 in einer Syntax, die dem Denken über Daten entspricht. Glückwunsch! Wenn du tiefer einsteigen willst, empfehle ich dir David Robinsons Introduction to Tidyverse Kurs und diese Tools auf weitere Datensätze anzuwenden, die dich interessieren. Teile deine Analysen mit uns auf Twitter unter @DataCamp und @hugobowne. Danke fürs Lesen.

Themen
R
Datenwissenschaft
Datenvisualisierung
Datenanalyse

Mehr über R lernen

Kurs

Einführung in das Tidyverse

4 Std.
394.9K
Mit tidyverse, einer leistungsstarken und beliebten Sammlung von Data Science Tools in R, kannst du deine eigenen Daten erforschen und visualisieren.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow