Skip to content
Snippets Groups Projects

Nikobranch

Open Nikolay Nikolaev requested to merge nikobranch into master
Files
2
+ 46
38
@@ -25,7 +25,7 @@ Link zum Datensatz auf Kaggle: https://www.kaggle.com/code/karnikakapoor/board-g
### Inhalt
Der Datensatz umfasst 20.343 Einträge und enthält verschiedene Informationen zu Brettspielen. Hier sind die Spalten und ihre jeweiligen Inhalte:
Der Originale Datensatz umfasst 20.343 Einträge und enthält verschiedene Informationen zu Brettspielen. Allerdings wurde der Datensatz für diese Übung auf 500 Einträge gekürzt. Hier sind die Spalten und ihre jeweiligen Inhalte:
**ID**: Eine eindeutige Identifikationsnummer für jedes Brettspiel im Datensatz.*(Integer)*\
**Name:** Der Name des Brettspiels.*(String)*\
@@ -48,9 +48,9 @@ Diese Spalten bieten eine breite Palette von Informationen über die charakteris
### Hypothesen
Wir haben zwei Hypothesen formuliert, die wir im "Datenanalyse"-Abschnitt testen werden.
**Hypothese 1:** Spiele mit höheren Complexity Score haben niedriger anzahl von Owned Users.
**Hypothese 1:** Die durchschnittliche Spielzeit betraegt 30 minuten.
**Hypothese 2:** Spiele mit höheren Complexity Score haben höhere Play Time.
**Hypothese 2:** Pro Spiel haben 15000 leute eine Bewertung gegeben.
@@ -58,7 +58,7 @@ Wir haben zwei Hypothesen formuliert, die wir im "Datenanalyse"-Abschnitt testen
### Einlesen von Daten
Um Datensätze mit R zu analysieren, mussen diese zuerst eingelesen werden. Je nach Struktur
Um Datensätze mit R zu analysieren, müssen diese zuerst eingelesen werden. Je nach Struktur
des Datenfiles kommen verschiedene Einlese-Befehle zur Anwendung. Es können u.a. Textfiles
(.txt, .dat), Datenfiles (.csv) und Excel-Files eingelesen werden.
@@ -72,15 +72,15 @@ install.packages("readxl")
library (readxl)
```
Der Package ist schonmal installiert und wird verwendet, deswegen lässt R nicht zu, dass es wieder installiert wird.
Das Package ist schonmal installiert und wird verwendet, deswegen lässt R nicht zu, dass es wieder installiert wird.
Wir jetzt können unser Datensatz einlesen:
Jetzt können wir unseren Datensatz einlesen:
```{r read-data, exercise=TRUE}
gameData <- read_excel("bgg_dataset.xlsx", sheet = "Sheet")
```
Aufgrund der Arbeitsverzeichnis funktioniert leider diese Funktion in diesem Dokument nicht, aber keine Sorge, wir haben sie im Hintergrund genauso wie hier benutzt.
Aufgrund des Arbeitsverzeichnis funktioniert leider diese Funktion in diesem Dokument nicht, aber keine Sorge, wir haben sie im Hintergrund genauso wie hier benutzt.
Wir können jetzt unsere Daten benutzen:
@@ -101,11 +101,11 @@ Schreiben Sie den Code, um die Spalte `Mechanics` zu lesen:
```
```{r read-mechanics-column-hint}
gameData$`Mechanics`
gameData$Mechanics
```
*Wie Sie weitere Dateientypen einlesen und benutzen kannst, finden Sie in diesem [Tutorial von Björn Walther](https://bjoernwalther.com/daten-in-r-importieren/)*
*Wie Sie weitere Dateientypen einlesen und benutzen können, finden Sie in diesem [Tutorial von Björn Walther](https://bjoernwalther.com/daten-in-r-importieren/)*
### Leerstellen beheben
@@ -138,16 +138,16 @@ gameData$`Mechanics` <- tolower(gameData$`Mechanics`)
gameData$`Mechanics`
```
Somit wurden alle String in der "Mechanics"-Spalte zur Lowercase gecastet.
Somit wurden alle Zeichenketten in der Spalte "Mechanics" in Kleinbuchstaben umgewandelt.
#### Ersetzen von Werten:
```{r replace-variable, exercise=TRUE}
gameData$`Mechanics` <- gsub("Action", "ACTION", gameData$`Mechanics`)
gameData$`Mechanics` <- gsub("Action", "!!!ACTION!!!", gameData$`Mechanics`)
gameData$`Mechanics`
```
Somit haben wir alle treffer für "Action" mit "ACTION" ersetzt.
Somit haben wir alle treffer für "Action" mit "!!!ACTION!!!" ersetzt.
#### Behandlung von fehlenden Werten:
@@ -159,9 +159,9 @@ Dieser Befehl ersetzt fehlende Werte durch der Median der vorhandenen Werten in
#### Entfernen von Duplikaten
Dieser Befehl entfernt Duplikaten basierend auf allen Spalten.
Wir haben aber in unserem Datensatz keine Duplikaten. \
Zum Veranschaulichen, benutzen wir ein Vector.
Dieser Befehl entfernt Duplikate basierend auf alle Spalten.
Wir haben aber in unserem Datensatz keine Duplikate. \
Zum Veranschaulichen benutzen wir ein Vector.
```{r remove-duplicates, exercise=TRUE}
vector <- c(1, 2, 3, 3, 5, 2, 1, 7, 10, 5)
@@ -170,8 +170,6 @@ vector <- unique(vector)
vector
```
So werden die Duplikate aus dem Datensatz entfernt.
#### Behandlung von Sonderzeichen
```{r replace-special-chars, exercise=TRUE}
@@ -179,13 +177,13 @@ gameData$`Mechanics` <- gsub("[^a-zA-Z0-9 ]", "", gameData$`Mechanics`)
gameData$`Mechanics`
```
Dieser Befehl entfernt Sonderzeichen in der Spalte "Mechanics". In diesem Fall sind Characters, die nicht eine Buchstabe oder Ziffer sind, entfernt worden (auch die Kommas).
Dieser Befehl entfernt Sonderzeichen in der Spalte "Mechanics". In diesem Fall sind Characters, die nicht ein Buchstabe oder Ziffer sind, entfernt worden (auch die Kommas).
#### Notice
Diese Beispiele sind allgemeiner Natur, und Sie sollten sie an Ihre spezifischen Daten und Probleme anpassen. Inkonsistenzen und Leerstellen können in verschiedenen Formen auftreten, und es ist wichtig, die geeigneten Methoden für Ihre speziellen Daten anzuwenden. Beachten Sie auch, dass Datenbereinigung oft datenabhängig ist, und eine gründliche Analyse der Daten ist vor der Bereinigung ratsam.
### Jetzt sind Sie dran! Testen Sie was Sie in diesem Abschnitt über Daten einlesen gelernt haben:
### Jetzt sind Sie dran! Testen Sie, was Sie in diesem Abschnitt über Daten einlesen, gelernt haben:
```{r second-quiz}
quiz(
@@ -202,10 +200,10 @@ quiz(
answer("install.packages()")
),
question("Welcher Packet benutzen wir, um XLSX-Dateien zu lesen?",
answer("readxl()", correct = TRUE),
answer("readxls()"),
answer("readexcel()"),
answer("excelread()")
answer("readxl", correct = TRUE),
answer("readxls"),
answer("readexcel"),
answer("excelread")
),
question("Wie lassen sich einzelne Spalten aus dem Datensatz auslesen?",
answer("dataset&\\`column\\`"),
@@ -219,9 +217,9 @@ quiz(
## Datenanalyse
In diesem Teil wird beschrieben, wie man verschiedene Daten mit Funktionen ermitteln kann.\
Hierfuer sollte man sich die Daten erneut anschauen.\
Fuer diesen Teil ist es wichtig zu wissen, wie man auf eine Spalte zugreifen kann. Dies macht man in dem man die Variable in dem der Datensatz gespeichert ist (hier gameData) angibt und den Spaltennamen in entweder zwei eckigen Klammern oder hinter einem $ Zeichen definiert.\
Die Syntax waere dann beispielsweise:\
Hierfür sollte man sich die Daten erneut anschauen.\
Für diesen Teil ist es wichtig zu wissen, wie man auf eine Spalte zugreifen kann. Dies macht man in dem man die Variable in dem der Datensatz gespeichert ist (hier gameData) angibt und den Spaltennamen in entweder zwei eckigen Klammern oder hinter einem $ Zeichen definiert.\
Die Syntax wäre dann beispielsweise:\
```data[["column"]])``` oder ```data$column```, bzw. ```data$"spaced column name"```\
\
Die Tabelle unten zeigt alle Daten aus dem Datensatz. Mit den Pfeilen in der oberen Reihe kann man die durch die Spalten schalten.
@@ -232,10 +230,10 @@ head(gameData)
### Mittelwert
Der Mittelwert bestimmt den Durchschnitt aller gegebenen Werte. Die Rechnung dafuer ist:\
Der Mittelwert bestimmt den Durchschnitt aller gegebenen Werte. Die Rechnung dafür ist:\
$(x_{1} + x_{2} + \cdots + x_{n}) / x$\
\
Um den Mittelwert einer Spalte zu bestimmen, vewendet man die 'mean()' Funktion verwenden. In diese setzt man die Variable in der die Daten gespeichert sind (gameData) und gibt die gewuenschte Spalte an.\
Um den Mittelwert einer Spalte zu bestimmen, vewendet man die 'mean()' Funktion verwenden. In diese setzt man die Variable in der die Daten gespeichert sind (gameData) und gibt die gewünschte Spalte an.\
\
Bestimmen Sie den Mittelwert von "Play Time".
```{r mean, exercise=TRUE}
@@ -286,10 +284,10 @@ Sie sollten hier den Wert 77.91056 bekommen.
### Lineare Regression
Die Lineare Regression bestimmt das Verhaeltnis zwischen zwei Werten(-sets).\
Die Lineare Regression bestimmt das Verhältnis zwischen zwei Werten(-sets).\
\
Die Varianz wird durch die 'lm()' Funktion bestimmt Hier uebergibt man Daten welche mit einem Tilde-Symbol (~) verbunden sind, also beispielsweise ```lm(x~y)```.\
Bestimmen sie die Lineare Regression mit "Users Rated" im Verhaeltnis zu "Owned Users".
Die Varianz wird durch die 'lm()' Funktion bestimmt Hier übergibt man Daten welche mit einem Tilde-Symbol (~) verbunden sind, also beispielsweise ```lm(x~y)```.\
Bestimmen sie die Lineare Regression mit "Users Rated" im Verhältnis zu "Owned Users".
```{r linear-regression, exercise=TRUE}
raters <- gameData$"Users Rated"
owned <- gameData$"Owned Users"
@@ -297,7 +295,7 @@ owned <- gameData$"Owned Users"
Falls man etwas mehr information will, kann man die Eingabe (oder die Variale in welche man dies gespeichert hat) noch in die ```summary()``` Funktion schreiben.\
Weiterhin kann man dies auf ein Plot abbilden. Dazu verwendet man die ```plot()``` Funktion in welche man einen x und y Wert eingibt, zusammen mit Optionen wie das Plot aussehen soll. Mehr information dazu findet man [in der Dokumentation](https://www.rdocumentation.org/packages/graphics/versions/3.6.2/topics/plot).\
Mit ```abline()``` kann man die Regressionslinie der lm Funktion abbilden. Dazu wird die lm Funktion, oder die Variable in der diese gespeichert ist, an ```abline()``` uebergeben.
Mit ```abline()``` kann man die Regressionslinie der lm Funktion abbilden. Dazu wird die lm Funktion, oder die Variable in der diese gespeichert ist, an ```abline()``` übergeben.\
```{r lm-plot-example}
raters <- gameData$"Users Rated"
owned <- gameData$"Owned Users"
@@ -310,23 +308,31 @@ Versuchen Sie nun den oben gezeigten Plot selbst zu erstellen. Die Farbe und Par
```{r lm-plot, exercise=TRUE, exercise.lines=5}
raters <- gameData$"Users Rated"
owned <- gameData$"Owned Users"
cavg <- gameData$"Complexity Average"
x = lm()
plot(, , pch = 16, col = "blue")
```
Mithilfe der Linearen Regression kann man nun die Hypothesen entweder beweisen oder widerlegen.
\
### Hypothesentest
R hat Funktionen zum Testen von Hypothesen. Hier kann man nun den [T-Test](https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/t.test) anwenden. In der Funktion ```t.test()``` werden die beiden Wertesets eingegeben. Der ausgegebene p-Wert (p-value) kann dann mit dem Signifikanzwert (typischerweise 5%(0.05)) verglichen werden. Ist der Wert groesser als 0.05 kann man annehmen, dass die Null-Hypothese stimmt.\
Die Alternative Hypothese, oder das, was man eigentlich beweisen will, wird ebenfalls im Bericht gezeigt. Einen Testdurchschnitt kann man mit dem Parameter ```mu={value}``` angeben.
```{r hypothesis-test, exercise=TRUE, exercise.lines=4}
ptime <- gameData$"Play Time"
rated <- gameData$"Users Rated"
```
```{r hypothesis-quiz}
quiz(
question("Spiele mit hoeherem Complexity Score haben eine niedrigere Anzahl von Owned Users.",
answer("Wahr", correct = TRUE),
answer("Falsch")
question("Die durchschnittliche Spielzeit betraegt 30 minuten.",
answer("Wahr"),
answer("Falsch", correct = TRUE)
),
question("Spiele mit hoeherem Complexity Score haben hoehere Play Time.",
question("Pro Spiel haben 15000 leute eine Bewertung gegeben.",
answer("Wahr", correct = TRUE),
answer("Falsch")
)
@@ -442,7 +448,9 @@ Geben Sie nun ein Säulendiagramm mit den Werten von "Complexity Average" und Ac
barplot(gameData[["Complexity Average"]], xlab = "Spiel" , ylab = "Score")
```
\
\
***Weitere gute Tutorials zu Diagrammen in RStudio findet man bei Björn Walther: https://bjoernwalther.com/tutorials-fuer-r/ ***
## Über uns
Loading