[[1]]
[1] 1 2 3
[[2]]
[1] "a"
[[3]]
[1] TRUE FALSE TRUE
[[4]]
[1] 2.3 5.9 1.1 4.8 11.0
Data Science 1 - Programmieren & Visualisieren
Saskia Otto & Monika Eberhard
Universität Hamburg, IMF
Wintersemester 2024/2025
Datenstrukturen in R lassen sich bzgl. ihrer Dimensionalität und der Homogenität bzw. Heterogenität ihrer Datentypen in fünf verschiedene Objekttypen unterscheiden:
Dimensionen | Homogen | Heterogen |
---|---|---|
1D | (Atomarer) Vektor | Liste |
2D | Matrix | ‘Data frame’ (& ‘Tibbles’) |
>2D | ‘Array’ |
list()
erstellt:Quelle: R for Data Science von Wickam & Grolemund, 2017 (lizensiert unter CC-BY-NC-ND 3.0 US).
Eine nützliche Funktion zum Anzeigen der Objektstruktur ist str()
:
Quelle: R for Data Science von Wickam & Grolemund, 2017 (lizensiert unter CC-BY-NC-ND 3.0 US).
Matrizen sind 2-dimensionale Objekte dessen Elemente alle den gleichen Datentyp haben müssen. Sie werden vor allem in der numerischen Modellierung verwendet.
matrix()
erstellt:Arrays sind multi-dimensionale Objekte des gleichen Datentyps. Sie werden in der Datenanalyse in R aber eher selten genutzt und daher hier nicht näher beschrieben.
data.frame()
erstellen, welche Vektoren mit Namen als Input nimmt:as.data.frame()
und wieder zurück mit as.matrix()
(solange der Datentyp gleich ist):length()
in 2- und multi-dimensionalen Objekten lässt sich verallgemeinern zu
names()
zeigt in ‘data frames’ den Spaltennamen an:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
[Zeilen, Spalten]
Teile einer Matrix mittels Positionsindexierung auswählen und neu abspeichern:
$
$
ist eine Kurzschreibweise (‘shorthand notation’) zum Extrahieren von benannten Elementen in einer Liste.df[Zeilenabfrage, Spalten]
Auswahl aller Spalten und der Zeilen, wo die Werte in Spalte ‘x_neu’ >= 5 sind.
$
Operator anhängen00:40
PlantGrowth
- ObjekttypSchauen Sie sich folgenden Datensatz an:
PlantGrowth
- ObjektstrukturSchauen Sie sich die Struktur vom PlantGrowth
Datensatz an:
'data.frame': 30 obs. of 2 variables:
$ weight: num 4.17 5.58 5.18 6.11 4.5 4.61 5.17 4.53 5.33 5.14 ...
$ group : Factor w/ 3 levels "ctrl","trt1",..: 1 1 1 1 1 1 1 1 1 1 ...
Funktion | Statistik |
---|---|
sum() |
Summe |
mean() |
Arithmetischer Mittelwert |
median() |
Median |
min() |
Minimalwert |
max() |
Maximalwert |
range() |
Bereich zwischen Minimum und Maximum |
var() |
Varianz |
sd() |
Standardabweichung |
quantile() |
Quantilen |
cov() |
Kovarianz |
cor() |
(Pearsons) Korrelationskoeffizient |
summary() |
Berechnet unterschiedliche Statistiken |
Es gibt keine built-in Funktion für den Standardfehler und den Variationskoeffizienten sowie die Schiefe und Kurtosis!
summary()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
Beispiel der Übungsaufgabe aus Woche 3
(Beim folgenden Code-Fenster sind oben rechts 2 Buttons versteckt: Fullscreen und In die Zwischenablage kopieren
\(\rightarrow\) einfach mit der Maus rüber hovern und Button wählen.)
# AUFGABE: Fuellen Sie die Luecken '...' und fuehren Sie den Code in R aus.
# Bitte vorab pruefen ob das readODS bzw. readxl Paket installiert werden muss!
# ------------------------------ Vorbereitung ----------------------------------
#### Laden von Paketen
...(tidyverse)
#### Eigene Funktionen
# -------------------- Import und Datenaufbereitung ----------------------------
#### Import von Calc- und Excel-Dateien (ODS- und XLSX-Format)
# Import einer ODS-Datei mit dem 'readODS' Paket
kabeljau <- readODS::read_ods("DS1_W03_Streudiagramm_Kabeljau.ods",
sheet = "Daten_Visualisierung")
# Struktur anzeigen lassen
...(kabeljau)
# Import einer XLSX-Datei mit z.B. dem 'readxl' Paket
kabeljau2 <- readxl::read_excel("DS1_W03_Streudiagramm_Kabeljau.xlsx",
sheet = "Daten_Visualisierung")
# Struktur anzeigen lassen
...(kabeljau2)
#### Datensichtung und -transformation
# Anpassen der Spaltennamen
...(kabeljau) <- c("verzehr", "wachstum")
...(kabeljau) # Struktur nochmal pruefen
# Wertebereich pruefen mit der 'Zusammenfassung'-Funktion
...(kabeljau)
# ---------------------- Lineare Regression: Berechnung ------------------------
# (-> Lektion L03 in DSB-02-Datenexploration mit R)
#### Manuelle Berechnung
# Um Tipparbeit zu sparen, speichern wir die Spalten als einzelne Vektoren
x <- kabeljau... # richtige Indexierung für die Spalte 'verzehr'
y <- kabeljau... # richtige Indexierung für die Spalte 'wachstum'
# Steigungsparameter b berechnen
b <- ...(x = x, y = y)/ ...(x) # der shortcut mit der Kovarianz und Varianz
b
# Achsenabschnitt a berechnen
a <- ...(y) - b*...(x)
a
# Das Bestimmtheitsmass R^2 berechnen
y_obs <- ... # die vorhergesagten Werte
ss_gesamt <- ...( (y - ...(y))^2 ) # Summenquadrate Gesamt
ss_regression <- ...( (y_obs - ...(y))^2 ) # Summenquadrate der Regression
R2 <- round(.../..., 4) # was wird durch was geteilt?
R2
##### Zum Vergleich die Regression automatisch berechnen mit lm()
# Erstellung des Modells
mod <- lm(formula = wachstum ~ verzehr, data = kabeljau)
mod
# Ausgabe nur der beiden Koeffizienten
coef(mod)
# Ausgabe aller wichtigen Statistiken des Modells, inklusive von R^2
# (mehr dazu in Data Science 2)
summary(mod)
# ------------------- Lineare Regression: Visualisierung ----------------------
#### Visualisierung mit den Basisfunktionen (-> Lektion L02 und L03 in DSB-02)
# Sog. high-level Funktion plot()
plot(x = kabeljau$verzehr, y = kabeljau$wachstum,
pch = 15, cex = 1.2, col = "#004586",
xlab = "Verzehr/Konsum (J/g/Tag", ylab = "Wachstum (J/g/Tag")
# Sog. low-level Funktionen, die Elemente in den angezeigten Plot einfuegen
abline(a = a, b = b)
title(
main = paste0("wachstum = ", round(a, 3), " + ", round(b, 3), "*verzehr"),
sub = paste0("Bestimmtheitsmaß R^2 = ", R2)
) # (paste0() verkettet Zeichen miteinander)
#### Visualisierung mit ggplot2 (-> siehe swirl-Kurs DSB-04)
kabeljau |>
ggplot(aes(x = verzehr, y = wachstum)) + # initiert Plot
geom_point(colour = "#004586", shape = 15, size = 3) +
# Punktelemente hinzufuegen
geom_abline(slope = b, intercept = a) +
# Achsenbeschriftung anpassen und Titel hinzufuegen
labs(x = "Verzehr/Konsum (J/g/Tag", y = "Wachstum (J/g/Tag",
title = str_c("wachstum = ", round(a, 3), " + ", round(b, 3), "*verzehr"),
subtitle = str_c("Bestimmtheitsmaß R^2 = ", R2)) +
# das Layout anpassen
theme_classic()
… im swirl-Kurs werden Sie direkt an die Hand genommen und Stück für Stück angeleitet.
Siehe auch DSB cheatsheet
Basic R functions (auf Moodle).
Siehe auch DSB cheatsheet
Basic R functions (auf Moodle).
Dann machen Sie doch einfach die nächsten swirl Lektionen auch schon…
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