3.9 Grundlagen tidyverse

Tidyverse ist eine Vielzahl an Paketen, welche von Hadley Wickam entwickelt wurde. Hadley Wickam ist Chief Data Scientist bei R-Studio und versucht mit der Entwicklung von tidyverse, die Analyse von Daten in R zu vereinfachen. Alle Pakete haben eine einheitliche Philosophie und arbeiten reibungslos miteinander. Hier ein kurzes Beispiel, welches du am Ende dieser Einheit verstehen wirst:

## # A tibble: 6 x 4
##      id   age monthly_income job_satisfaction
##   <dbl> <dbl>          <dbl> <chr>           
## 1   747    41          19973 High            
## 2   852    56          19943 Low             
## 3   166    50          19926 Medium          
## 4   750    52          19845 Very High       
## 5  1010    58          19701 Low             
## 6  1155    47          19658 High

Bei diesem Beispiel ist folgendes passiert: Zunächst haben wir den Datensatz gefiltert, sodass nur Frauen im Datensatz sind. Danach haben wir alle Frauen nach ihrem monatlichen Einkommen absteigend sortiert. Im Anschluss haben wir ein paar Variablen aus dem Datensatz entnommen und nur die ersten Werte dieses Datensatzes angezeigt. Du siehst, dass die Vokabeln der Funktion genau das tun, was wir uns ausdenken. Du siehst ebenso, dass wir häufigen Gebrauch des Pipe-Operators %>% machen.

3.9.1 glimpse

Die Variablen in einem Datensatz können wir mit der Funktion glimpse

## Observations: 1,470
## Variables: 17
## $ id                         <dbl> 1, 2, 3, 4, …
## $ age                        <dbl> 41, 49, 37, …
## $ department                 <chr> "Sales", "Re…
## $ distance_from_home         <dbl> 1, 8, 2, 3, …
## $ education                  <chr> "College", "…
## $ employee_count             <dbl> 1, 1, 1, 1, …
## $ gender                     <chr> "Female", "M…
## $ job_role                   <chr> "Sales Execu…
## $ job_satisfaction           <chr> "Very High",…
## $ marital_status             <chr> "Single", "M…
## $ monthly_income             <dbl> 5993, 5130, …
## $ num_companies_worked       <dbl> 8, 1, 6, 1, …
## $ performance_rating         <chr> "Excellent",…
## $ total_working_years        <dbl> 8, 10, 7, 8,…
## $ work_life_balance          <chr> "Bad", "Bett…
## $ years_at_company           <dbl> 6, 10, 0, 8,…
## $ years_since_last_promotion <dbl> 0, 1, 0, 3, …

Links siehst du die Variablen, rechts die ersten Werte der einzelnen Variablen des Datensatzes. Das erste Argument der Funktion glimpse ist .data. Dies steht für den Datensatz. Wir hätten daher ebenso schreiben können:

Es ist allerdings gebräuchlicher, das Argument .data in tidyverse wegzulassen.

3.9.2 count

Mithilfe von count können wir die Häufigkeit nominalskalierter Daten zählen. Beispielsweise: Wie viele Frauen und Männer sind im Datensatz?

## # A tibble: 2 x 2
##   gender     n
##   <chr>  <int>
## 1 Female   588
## 2 Male     882

Oder, wie viele Frauen und Männer sind in der jeweiligen Abteilung?

## # A tibble: 6 x 3
##   gender department                 n
##   <chr>  <chr>                  <int>
## 1 Female Human Resources           20
## 2 Female Research & Development   379
## 3 Female Sales                    189
## 4 Male   Human Resources           43
## 5 Male   Research & Development   582
## 6 Male   Sales                    257

Oder, wie werden die Mitarbeiter von ihren Vorgesetzten bewertet?

## # A tibble: 2 x 2
##   performance_rating     n
##   <chr>              <int>
## 1 Excellent           1244
## 2 Outstanding          226

3.9.3 select

Datensätze haben manchmal viele Variablen. Um den Überblick zu behalten, können wir uns mit select nur ein paar wenige Variablen ansehen. Selektieren wir beispielsweise aus unserem Datensatz nur die Variablen id und age:

## # A tibble: 1,470 x 2
##       id   age
##    <dbl> <dbl>
##  1     1    41
##  2     2    49
##  3     3    37
##  4     4    33
##  5     5    27
##  6     6    32
##  7     7    59
##  8     8    30
##  9     9    38
## 10    10    36
## # … with 1,460 more rows

Wir können ebenso manche Variablen aus einem Datensatz entfernen, indem wir ein - vor die Variable setzen:

## # A tibble: 1,470 x 2
##       id   age
##    <dbl> <dbl>
##  1     1    41
##  2     2    49
##  3     3    37
##  4     4    33
##  5     5    27
##  6     6    32
##  7     7    59
##  8     8    30
##  9     9    38
## 10    10    36
## # … with 1,460 more rows

Hierdurch wird der gleiche Output generiert. Der Unterschied zum vorherigen Beispiel besteht darin, dass wir zunächst drei Variablen selektieren und danach die dritte Variable wieder aus dem Datensatz entfernen.

Wir können ebenso mehrere Variablen selektieren, die nebeneinander liegen, indem wir die erste Variable und die letzte Variable angeben und dazwischen ein : setzen:

## # A tibble: 1,470 x 5
##       id   age department             distance_from_home education    
##    <dbl> <dbl> <chr>                               <dbl> <chr>        
##  1     1    41 Sales                                   1 College      
##  2     2    49 Research & Development                  8 Below College
##  3     3    37 Research & Development                  2 College      
##  4     4    33 Research & Development                  3 Master       
##  5     5    27 Research & Development                  2 Below College
##  6     6    32 Research & Development                  2 College      
##  7     7    59 Research & Development                  3 Bachelor     
##  8     8    30 Research & Development                 24 Below College
##  9     9    38 Research & Development                 23 Bachelor     
## 10    10    36 Research & Development                 27 Bachelor     
## # … with 1,460 more rows

Wenn du die Daten so selektieren möchtest, hilft es zunächst mit colnames die Reihenfolge der Variablen anzuschauen:

##  [1] "id"                         "age"                       
##  [3] "department"                 "distance_from_home"        
##  [5] "education"                  "employee_count"            
##  [7] "gender"                     "job_role"                  
##  [9] "job_satisfaction"           "marital_status"            
## [11] "monthly_income"             "num_companies_worked"      
## [13] "performance_rating"         "total_working_years"       
## [15] "work_life_balance"          "years_at_company"          
## [17] "years_since_last_promotion"

3.9.4 arrange

Mit der arrange Funktion können wir Daten sortieren. Die Funktion ähnelt der Sortierungsfunktion bei Excel:

Bei Excel weiß man nur nicht immer so recht, was Markierung erweitern bedeutet und ob die Sortierung auch geklappt hat. Das gleiche funktioniert durch die arrange Funktion folgendermaßen:

## # A tibble: 1,470 x 17
##       id   age department distance_from_h… education employee_count gender
##    <dbl> <dbl> <chr>                 <dbl> <chr>              <dbl> <chr> 
##  1   297    18 Research …                3 Bachelor               1 Male  
##  2   302    18 Sales                    10 Bachelor               1 Female
##  3   458    18 Sales                     5 Bachelor               1 Male  
##  4   728    18 Research …                5 College                1 Male  
##  5   829    18 Research …                8 Below Co…              1 Male  
##  6   973    18 Research …                1 Bachelor               1 Female
##  7  1154    18 Sales                     3 College                1 Female
##  8  1312    18 Research …               14 Bachelor               1 Female
##  9   128    19 Sales                    22 Below Co…              1 Male  
## 10   150    19 Research …                3 Below Co…              1 Female
## # … with 1,460 more rows, and 10 more variables: job_role <chr>,
## #   job_satisfaction <chr>, marital_status <chr>, monthly_income <dbl>,
## #   num_companies_worked <dbl>, performance_rating <chr>,
## #   total_working_years <dbl>, work_life_balance <chr>,
## #   years_at_company <dbl>, years_since_last_promotion <dbl>

In diesem Fall sind die Werte von klein nach groß angeordnet. Wir können dies umdrehen, indem wir den Variablennamen in die Funktion desc packen:

## # A tibble: 1,470 x 17
##       id   age department distance_from_h… education employee_count gender
##    <dbl> <dbl> <chr>                 <dbl> <chr>              <dbl> <chr> 
##  1   412    60 Research …                7 Bachelor               1 Female
##  2   428    60 Sales                    28 Bachelor               1 Female
##  3   537    60 Sales                    16 Master                 1 Male  
##  4   880    60 Sales                     7 Master                 1 Male  
##  5  1210    60 Research …                1 Master                 1 Male  
##  6     7    59 Research …                3 Bachelor               1 Female
##  7    64    59 Sales                    25 Bachelor               1 Female
##  8    71    59 Sales                     1 Below Co…              1 Female
##  9   106    59 Human Res…                2 Master                 1 Female
## 10   226    59 Research …                3 Bachelor               1 Male  
## # … with 1,460 more rows, and 10 more variables: job_role <chr>,
## #   job_satisfaction <chr>, marital_status <chr>, monthly_income <dbl>,
## #   num_companies_worked <dbl>, performance_rating <chr>,
## #   total_working_years <dbl>, work_life_balance <chr>,
## #   years_at_company <dbl>, years_since_last_promotion <dbl>

Nun siehst du, dass die Variable age von groß nach klein geordnet ist. Wir können auch mehrere Variablen sortieren:

## # A tibble: 1,470 x 2
##      age distance_from_home
##    <dbl>              <dbl>
##  1    18                  1
##  2    18                  3
##  3    18                  3
##  4    18                  5
##  5    18                  5
##  6    18                  8
##  7    18                 10
##  8    18                 14
##  9    19                  1
## 10    19                  2
## # … with 1,460 more rows

Du siehst nun, dass innerhalb eines Alters auch die Variable distance_from_home von klein nach groß angeordnet wurde.

3.9.5 filter

Mit filter können wir einzelne Reihen filtern. Beispielsweise können wir mit filter einen Datensatz um alle Personen filtern, die männlich sind:

## # A tibble: 882 x 2
##       id gender
##    <dbl> <chr> 
##  1     2 Male  
##  2     3 Male  
##  3     5 Male  
##  4     6 Male  
##  5     8 Male  
##  6     9 Male  
##  7    10 Male  
##  8    11 Male  
##  9    13 Male  
## 10    14 Male  
## # … with 872 more rows

Wenn du nach exakten Werte filterst, wie beispielsweise das Geschlecht, musst du zwei == verwenden.

Oder wir filtern den Datensatz um alle Personen, die mindestens 28 Jahre alt sind:

## # A tibble: 1,260 x 2
##       id   age
##    <dbl> <dbl>
##  1     1    41
##  2     2    49
##  3     3    37
##  4     4    33
##  5     6    32
##  6     7    59
##  7     8    30
##  8     9    38
##  9    10    36
## 10    11    35
## # … with 1,250 more rows

Wir können ebenso nach mehreren Werten filtern, indem wir die Filterkriterien mit einem , trennen:

## # A tibble: 9 x 3
##      id   age gender
##   <dbl> <dbl> <chr> 
## 1   128    19 Male  
## 2   178    19 Male  
## 3   297    18 Male  
## 4   423    19 Male  
## 5   458    18 Male  
## 6   689    19 Male  
## 7   728    18 Male  
## 8   829    18 Male  
## 9   854    19 Male
## # A tibble: 9 x 3
##      id   age gender
##   <dbl> <dbl> <chr> 
## 1   128    19 Male  
## 2   178    19 Male  
## 3   297    18 Male  
## 4   423    19 Male  
## 5   458    18 Male  
## 6   689    19 Male  
## 7   728    18 Male  
## 8   829    18 Male  
## 9   854    19 Male

3.9.6 mutate

Mit mutate erstellen wir neue Variablen in einem Datensatz:

## # A tibble: 1,470 x 3
##       id monthly_income yearly_income
##    <dbl>          <dbl>         <dbl>
##  1     1           5993         71916
##  2     2           5130         61560
##  3     3           2090         25080
##  4     4           2909         34908
##  5     5           3468         41616
##  6     6           3068         36816
##  7     7           2670         32040
##  8     8           2693         32316
##  9     9           9526        114312
## 10    10           5237         62844
## # … with 1,460 more rows

Zunächst muss der Name der neuen Variable benannt werden (yearly_income). Anschließend folgt ein =. Hinter dem = schreibt man auf, wie die Variable berechnet wird. Möchte man mehrere neue Variablen einfügen, kann man die Befehle mit einem Komma trennen:

## # A tibble: 1,470 x 4
##       id monthly_income yearly_income salary_above_average
##    <dbl>          <dbl>         <dbl> <lgl>               
##  1     1           5993         71916 FALSE               
##  2     2           5130         61560 FALSE               
##  3     3           2090         25080 FALSE               
##  4     4           2909         34908 FALSE               
##  5     5           3468         41616 FALSE               
##  6     6           3068         36816 FALSE               
##  7     7           2670         32040 FALSE               
##  8     8           2693         32316 FALSE               
##  9     9           9526        114312 TRUE                
## 10    10           5237         62844 FALSE               
## # … with 1,460 more rows