Data Science 1 - Programmieren & Visualisieren
Saskia Otto
Universität Hamburg, IMF
Wintersemester 2022/2023
Die Datenaufbereitung
Modifiziert von: R for Data Science von Wickam & Grolemund, 2017 (lizensiert unter CC-BY-NC-ND 3.0 US).
read.table()
→ Liest eine Datei im Tabellenformat ein und erstellt daraus einen data frame:
Funktion | Details |
---|---|
read.table(file, header = FALSE, sep = "", dec = ".") |
Importiert Datei im Tabellenformat (Leerzeichen-separiert) |
read.csv(file, header = TRUE, sep = ",", dec = ".") |
Importiert CSV-Datei (Komma-separiert) |
read.csv2(file, header = TRUE, sep = ";", dec = ",") |
Importiert CSV-Datei (Semikolon-separiert, Komma als Dezimalzeichen) |
read.delim(file, header = TRUE, sep = "\\t", dec = ".") |
Importiert Tab-separierte Textdatei |
read.delim2(file, header = TRUE, sep = "\\t", dec = ",") |
Importiert Tab-separierte Textdatei (mit Komma als Dezimalzeichen) |
read.csv()
:str()
, head()
/tail()
, View()
und summary()
:'data.frame': 11 obs. of 2 variables:
$ Verzehr : num 1868 140 256 719 1714 ...
$ Wachstum: num 482.2 -90.5 -40.3 236 512.7 ...
Verzehr Wachstum
1 1868.0 482.2
2 140.3 -90.5
3 255.6 -40.3
4 718.8 236.0
5 1714.4 512.7
6 1149.1 296.6
Verzehr Wachstum
Min. : 140.3 Min. :-90.50
1st Qu.: 323.8 1st Qu.:-15.05
Median : 718.8 Median :198.00
Mean : 856.2 Mean :180.02
3rd Qu.:1323.5 3rd Qu.:349.80
Max. :1868.0 Max. :512.70
# Angabe der URL im Dateinamen
fang <- read.csv(file = "https://saskiaotto.github.io/bio-bsc-data-science-1/Fangprotokoll.csv")
str(fang)
'data.frame': 8 obs. of 22 variables:
$ Schiff : chr "Alkor" "Alkor" "Alkor" "Alkor" ...
$ Reise : int 551 551 551 551 551 551 551 551
$ Station : chr "43-3" "43-3" "43-3" "43-3" ...
$ Hol : int 9 9 9 9 9 9 9 9
$ Datum : chr "10.03.2021" "10.03.2021" "10.03.2021" "10.03.2021" ...
$ Startzeit : chr "11:36:00" "11:36:00" "11:36:00" "11:36:00" ...
$ Endzeit : chr "12:21:00" "12:21:00" "12:21:00" "12:21:00" ...
$ Schleppdauer : int 45 45 45 45 45 45 45 45
$ Fangbeginn_Breite : num 54.5 54.5 54.5 54.5 54.5 ...
$ Fangbeginn_Laenge : num 11.3 11.3 11.3 11.3 11.3 ...
$ Hieven_Breite : num 54.5 54.5 54.5 54.5 54.5 ...
$ Hieven_Laenge : num 11.4 11.4 11.4 11.4 11.4 ...
$ Fanggeraet : chr "JFT" "JFT" "JFT" "JFT" ...
$ Wassertiefe : int 30 30 30 30 30 30 30 30
$ Fangtiefe : num 26.5 26.5 26.5 26.5 26.5 26.5 26.5 26.5
$ Netzoeffnung : num 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5
$ Grundtau_Boden : int 0 0 0 0 0 0 0 0
$ Schleppgeschw : num 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6
$ Globalstrahlung : int 380 380 380 380 380 380 380 380
$ Gesamtgewicht_Hol_kg: num 61.5 61.5 61.5 61.5 61.5 ...
$ Art : chr "Hering" "Sprotte" "Dorsch" "Wittling" ...
$ Gesamtzahl : int 50 6565 3 2 1 149 49 1
Wenn Sie Ihre Daten exportieren wollen, um sie dann mit anderen Programmen zu bearbeiten, verwenden Sie am besten das gleiche Format wie beim Import.
Die meisten Importfunktionen haben ein Äquivalent zum Exportieren:
write.table()
, write.csv()
, write.csv2()
Verzehr Wachstum Ratio
1 1868.0 482.2 0.2581370
2 140.3 -90.5 -0.6450463
3 255.6 -40.3 -0.1576682
Nach Veränderung → im gleichen CSV-Format abspeichern und später in z.B. Calc öffnen:
‘data frame(s)’ können als .R oder .Rdata Objekt mit
save(dataframe1, dataframe2,.., file = "filename.Rdata")
abgespeichertload(file = "filename.Rdata")
geladen werden.Auf geht’s ins ‘TIDYVERSUM’…
Ist eine Sammlung von R Paketen, die die gleiche Philosophie teilen und aufeinander abgestimmt sind:
Modifiziert von: R for Data Science von Wickam & Grolemund, 2017 (lizensiert unter CC-BY-NC-ND 3.0 US).
Am einfachsten ist die Installation (und das spätere Laden) eines einzigen Paketes, welches weitere Pakete installiert und später lädt, mit:
write.csv(row.names = FALSE)
, readr::write_csv()
library()
und require()
.Wenn ein spezifisches Paket geladen wird, wird es als ‘default’ zum Suchpfad hinzugefügt:
Modifiziert von: Advanced R von H. Wickam, 2014
Du kannst Dir den Suchpfad explizit anzeigen lassen mit search()
.
[1] ".GlobalEnv" "tools:rstudio" "package:stats"
[4] "package:graphics" "package:grDevices" "package:utils"
[7] "package:datasets" "package:methods" "Autoloads"
[10] "package:base"
Nach dem Laden von tidyverse werden 8 weitere ‘tidyverse’ Pakete mit geladen (es wird dabei auch ein Konflikt mit Funktionsnamen angezeigt - filter()
und lag()
existieren in 2 Paketen):
── Attaching packages ─────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0 ✔ purrr 0.3.5
✔ tibble 3.1.8 ✔ dplyr 1.0.10
✔ tidyr 1.2.1 ✔ stringr 1.4.1
✔ readr 2.1.3 ✔ forcats 0.5.2
── Conflicts ────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
Lasst uns den Suchpfad noch mal anzeigen:
[1] ".GlobalEnv" "package:forcats" "package:stringr"
[4] "package:dplyr" "package:purrr" "package:readr"
[7] "package:tidyr" "package:tibble" "package:ggplot2"
[10] "package:tidyverse" "tools:rstudio" "package:stats"
[13] "package:graphics" "package:grDevices" "package:utils"
[16] "package:datasets" "package:methods" "Autoloads"
[19] "package:base"
9 Pakete wurden insgesamt hinzugefügt (direkt nach der globalen Umgebung). Neben dem Paket tidyverse noch die Pakete: forcats, stringr, dplyr, purrr, readr, tidyr, tibble und ggplot2
Pakete werden aus dem Suchpfad einfach mit detach()
entfernt
Oder indem die Box neben dem Paketnamen im ‘Packages’ Fenster entfernt wird:
?packagename
(z.B. ?tidyverse
) aufrufen, erhalten Sie weitere Informationen zu den Kernaufgaben des Pakets und den verfügbaren Funktionen. Manchmal gibt es auch Weblinks für weitere Infos.tidyr::drop_na(data, ...)
: Lässt ganze Reihen, die fehlende Werte enthält, entfallen. tidyr::fill(data, ..., .direction = c("down", "up"))
: Füllt fehlende Werte mit den vorherigen (direction = “down”) oder nachfolgenden (direction = “up”) Einträgen auf. tidyr::replace_na(data, replace = list(), ...)
: Ersetzt fehlende Werte mit einem spezifischen Wert für jede Spalte.Das ‘tidyr’ Paket bietet zwei Funktionen für den Wechsel des Formats:
pivot_longer()
(ehemals gather()
)pivot_wider()
(ehemals spread()
)pivot_longer()
→ bewegt Spaltennamen in eine Schlüsselspalte und rafft die Werte der Spalten in eine einzelne Spalte zusammen.
iris
# A tibble: 600 × 3
Species Leaf.Param Size
<fct> <chr> <dbl>
1 setosa Sepal.Length 5.1
2 setosa Sepal.Width 3.5
3 setosa Petal.Length 1.4
4 setosa Petal.Width 0.2
5 setosa Sepal.Length 4.9
6 setosa Sepal.Width 3
7 setosa Petal.Length 1.4
8 setosa Petal.Width 0.2
9 setosa Sepal.Length 4.7
10 setosa Sepal.Width 3.2
11 setosa Petal.Length 1.3
12 setosa Petal.Width 0.2
13 setosa Sepal.Length 4.6
14 setosa Sepal.Width 3.1
15 setosa Petal.Length 1.5
16 setosa Petal.Width 0.2
17 setosa Sepal.Length 5
18 setosa Sepal.Width 3.6
19 setosa Petal.Length 1.4
20 setosa Petal.Width 0.2
21 setosa Sepal.Length 5.4
22 setosa Sepal.Width 3.9
23 setosa Petal.Length 1.7
24 setosa Petal.Width 0.4
25 setosa Sepal.Length 4.6
26 setosa Sepal.Width 3.4
27 setosa Petal.Length 1.4
28 setosa Petal.Width 0.3
29 setosa Sepal.Length 5
30 setosa Sepal.Width 3.4
31 setosa Petal.Length 1.5
32 setosa Petal.Width 0.2
33 setosa Sepal.Length 4.4
34 setosa Sepal.Width 2.9
35 setosa Petal.Length 1.4
36 setosa Petal.Width 0.2
37 setosa Sepal.Length 4.9
38 setosa Sepal.Width 3.1
39 setosa Petal.Length 1.5
40 setosa Petal.Width 0.1
41 setosa Sepal.Length 5.4
42 setosa Sepal.Width 3.7
43 setosa Petal.Length 1.5
44 setosa Petal.Width 0.2
45 setosa Sepal.Length 4.8
46 setosa Sepal.Width 3.4
47 setosa Petal.Length 1.6
48 setosa Petal.Width 0.2
49 setosa Sepal.Length 4.8
50 setosa Sepal.Width 3
51 setosa Petal.Length 1.4
52 setosa Petal.Width 0.1
53 setosa Sepal.Length 4.3
54 setosa Sepal.Width 3
55 setosa Petal.Length 1.1
56 setosa Petal.Width 0.1
57 setosa Sepal.Length 5.8
58 setosa Sepal.Width 4
59 setosa Petal.Length 1.2
60 setosa Petal.Width 0.2
61 setosa Sepal.Length 5.7
62 setosa Sepal.Width 4.4
63 setosa Petal.Length 1.5
64 setosa Petal.Width 0.4
65 setosa Sepal.Length 5.4
66 setosa Sepal.Width 3.9
67 setosa Petal.Length 1.3
68 setosa Petal.Width 0.4
69 setosa Sepal.Length 5.1
70 setosa Sepal.Width 3.5
71 setosa Petal.Length 1.4
72 setosa Petal.Width 0.3
73 setosa Sepal.Length 5.7
74 setosa Sepal.Width 3.8
75 setosa Petal.Length 1.7
76 setosa Petal.Width 0.3
77 setosa Sepal.Length 5.1
78 setosa Sepal.Width 3.8
79 setosa Petal.Length 1.5
80 setosa Petal.Width 0.3
81 setosa Sepal.Length 5.4
82 setosa Sepal.Width 3.4
83 setosa Petal.Length 1.7
84 setosa Petal.Width 0.2
85 setosa Sepal.Length 5.1
86 setosa Sepal.Width 3.7
87 setosa Petal.Length 1.5
88 setosa Petal.Width 0.4
89 setosa Sepal.Length 4.6
90 setosa Sepal.Width 3.6
91 setosa Petal.Length 1
92 setosa Petal.Width 0.2
93 setosa Sepal.Length 5.1
94 setosa Sepal.Width 3.3
95 setosa Petal.Length 1.7
96 setosa Petal.Width 0.5
97 setosa Sepal.Length 4.8
98 setosa Sepal.Width 3.4
99 setosa Petal.Length 1.9
100 setosa Petal.Width 0.2
# … with 500 more rows
Uups, unser Datensatz ist jetzt ein tibble geworden????? ➟ Dazu gleich mehr!
pivot_wider()
→ bewegt einzigartige Werte der Schlüsselspalte in die Spaltennamen und verbreitet die Werte der Spalte auf neue Spalten.
read_XXX()
Funktionen des ‘readr’ Pakets.vignette("tibble")
.Bestehende ‘data frames’ lassen sich mit tibble::as_tibble(your_dataframe)
umwandeln.
[1] "data.frame"
[1] "tbl_df" "tbl" "data.frame"
Wie Sie sehen, iris_tbl
erbt auch die ‘data.frame’ Klasse, hat jetzt aber eine zusätzliche ‘tbl’ bzw. ‘tbl_df’ Klasse.
print()
und ändern Sie die Argumente:
Cheatsheet zum tidyr Paket frei verfügbar unter diesem Link.
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