Data Science 1 - Programmieren & Visualisieren
Saskia Otto
Universität Hamburg, IMF
Wintersemester 2022/2023
Typische Manipulationen | Kernfunktion in ‘dplyr’ |
---|---|
Manipuliere Beobachtungen (Zeilen) | filter() , arrange() |
Manipuliere Variablen (Spalten) | select() , rename() , mutate() , transmute() , |
Fasse Beobachtungen zusammen | summarise() |
Gruppiere Beobachtungen | group_by() , ungroup() |
Kombiniere Tabellen | bind_rows , bind_cols und join_ Funktionen |
(‘Linf’ = mittlere maximale Länge, ‘K’ = Rate in der sich der Fisch an ‘Linf’ annähert)
Mit freundlicher Genehmigung der Fotografen von fishbase.org (Konstantinos I. Stergiou, Jim Greenfield) und uwphoto.no(Rudolf Svensen).
arrange()
→ sortiert Zeilen (also Beobachtungen) nach spezifischen Variablen:
filter()
→ extrahiert Reihen, die ein logisches Kriterium erfüllen:
Verknüpfte Abfragen in filter()
werden mit Kommata aufgeführt (UND-Operator):
select()
→ extrahiert Spalten nach Namen oder mittels Helferfunktion:
select()
Quelle: ältere Version des sog. cheatsheets
Data Transformation with dplyr (lizensiert unter CC-BY-SA).
rename()
→ ändert die Namen einzelner Variablen (neuerName = alterName
):
mutate()
und transmute()
→ erstellen neue Variablen:
mutate()
/ transmute()
Du kannst jede Berechnung mit einer Variablen machen solange diese vektorisiert ist:
Quelle: ältere Version des sog. cheatsheets Data Transformation with dplyr (lizensiert unter CC-BY-SA).
%>%
|>
|>
arbeiten!|>
können diverse Funktionsaufrufe sequenziell miteinander verknüpfen werden, ohne Zwischenobjekte zu erstellen.|>
leitet den Inhalt des Objekts auf der linken Seite in den Ausdruck auf der rechten Seite.|>
| Wie?|>
| InterpretationErinnert doch fast an ein Kochrezept, oder?
|>
summarise()
→ reduziert Variablen zu Einzelwerten:
Quelle: ältere Version des sog. cheatsheets
Data Transformation with dplyr (lizensiert unter CC-BY-SA).
Es gibt 2 sehr nützliche Funktionen, die man anstelle von summarise()
nutzen kann:
count()
→ zur Berechnung der Anzahl an Zeilendistinct()
→ zum Entfernen von Duplikaten (Zeilen mit komplett gleichem Inhalt in den jeweiligen Spalten)distinct()
# A tibble: 15 × 2
Species Sepal.Length
<fct> <dbl>
1 setosa 5.1
2 setosa 4.9
3 setosa 4.7
4 setosa 4.6
5 setosa 5
6 setosa 5.4
7 setosa 4.4
8 setosa 4.8
9 setosa 4.3
10 setosa 5.8
11 setosa 5.7
12 setosa 5.2
13 setosa 5.5
14 setosa 4.5
15 setosa 5.3
→ Wie Sie sehen, wurden die 50 Zeilen auf 15 reduziert.
iris
1Berechnung einer Statistik für mehrere Variablen gleichzeitig:
iris |>
summarise(
SL_mean = mean(Sepal.Length),
SW_mean = mean(Sepal.Width),
PL_mean = mean(Petal.Length),
PW_mean = mean(Petal.Width)
)
SL_mean SW_mean PL_mean PW_mean
1 5.843333 3.057333 3.758 1.199333
→ Viel Schreibarbeit wenn mehr als nur der Mittelwert berechnet werden soll…
across()
Berechnung einer Statistik für mehrere Variablen gleichzeitig:
across()
| 2Berechnung mehrerer deskriptiver Statistiken für alle kontinuerlichen Variablen → hier muss eine Liste dem .fns
Argument übergeben werden:
iris |>
summarise(
across(
.cols = Sepal.Length:Petal.Width,
.fns = list(mean = mean, median = median, sd = sd)
)
)
Sepal.Length_mean Sepal.Length_median Sepal.Length_sd Sepal.Width_mean
1 5.843333 5.8 0.8280661 3.057333
Sepal.Width_median Sepal.Width_sd Petal.Length_mean Petal.Length_median
1 3 0.4358663 3.758 4.35
Petal.Length_sd Petal.Width_mean Petal.Width_median Petal.Width_sd
1 1.765298 1.199333 1.3 0.7622377
…was ist, wenn wir die Statistiken für bestimmte Gruppen (wie hier die Arten) getrennt bestimmen wollen????
group_by()
nimmt eine existierende Tabelle und konvertiert sie in eine gruppierte Tabelle, in der Operationen gruppenweise durchgeführt werden können.ungroup()
entfernt Gruppierungen (bei summarise()
nicht nötig, aber bei z.B. count()
).iris
iris |>
group_by(Species) |> # einfach diesen Befehl einschieben
summarise(
across(
.cols = Sepal.Length:Petal.Width,
.fns = mean
)
)
# A tibble: 3 × 5
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
<fct> <dbl> <dbl> <dbl> <dbl>
1 setosa 5.01 3.43 1.46 0.246
2 versicolor 5.94 2.77 4.26 1.33
3 virginica 6.59 2.97 5.55 2.03
iris
iris
bind_rows()
→ hängt 2 oder mehr Tabellen zeilenweise aneinander:
intersect()
, union()
, setdiff()
bind_cols()
→ hängt 2 oder mehr Tabellen spaltenweise aneinander:
XXX_join()
Funktionen!XXX_join()
→ Die Funktionsgruppe verbindet Tabellen basierend auf gleichen Werten in übereinstimmenden Spalten:
Cheatsheet zum tidyr Paket frei verfügbar unter diesem Link.
Download Link (alternativ auch im Moodle-Kurs)
Dann testen Sie doch Ihr Wissen in folgendem Abschlussquiz…
Bei weiteren Fragen: saskia.otto(at)uni-hamburg.de
Diese Arbeit is lizenziert unter einer Creative Commons Attribution-ShareAlike 4.0 International License mit Ausnahme der entliehenen und mit Quellenangabe versehenen Abbildungen.
Kurswebseite: Data Science 1