Datenbasis
Datenherkunft
In diesem Praktikum verwenden wir das Dataset “Board Games Analysis 🎲🎲🎯”. Die Daten wurden ursprünglich aus der BoardGameGeek-Datenbank extrahiert und anschließend auf Kaggle hochgeladen, wo sie zu einem Datensatz zusammengeführt wurden.
Link zum Notebook auf Kaggle: https://www.kaggle.com/code/karnikakapoor/board-games-analysis
Link zum Datensatz auf Kaggle: https://www.kaggle.com/code/karnikakapoor/board-games-analysis/input
Inhalt
Der Datensatz umfasst 20.343 Einträge und enthält verschiedene Informationen zu Brettspielen. 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)
Year: Das Jahr, in dem das Brettspiel veröffentlicht
wurde.(Integer)
Published: Informationen über die Veröffentlichung des
Spiels.(Integer)
Min Players: Die minimale Anzahl von Spielern, die das
Spiel spielen können.(Integer)
Max Players: Die maximale Anzahl von Spielern, die das
Spiel unterstützt.(Integer)
Play Time: Die durchschnittliche Spielzeit des
Brettspiels.(Integer)
Min Age: Die empfohlene minimale Altersgruppe für
Spieler des Spiels.(Integer)
Users Rated: Die Anzahl der Benutzer, die das Spiel
bewertet haben.(Double)
Rating Average: Der durchschnittliche Bewertungswert
des Spiels durch Benutzer.(Double)
BGG Rank: Die Rangposition des Spiels auf
BoardGameGeek.(Integer)
Complexity Average: Der durchschnittliche
Schwierigkeitsgrad des Spiels.(Double)
Owned Users: Die Anzahl der Benutzer, die das Spiel
besitzen.(Integer)
Mechanics: Informationen über die Spielmechanismen, die
im Brettspiel verwendet werden.(String)
Domains: Die Domänen oder Kategorien, zu denen das
Brettspiel gehört.(String)
Diese Spalten bieten eine breite Palette von Informationen über die charakteristischen Merkmale, Bewertungen und Eigenschaften der aufgeführten Brettspiele im Datensatz. Die Daten können für Analysen und Erkenntnisse im Bereich der Brettspielindustrie sowie für die Beurteilung von Präferenzen und Trends unter den Spielern verwendet werden.
Hypothesen
Wir formulieren zwei Hypothesen, die wir im “Datenanalyse”-Abschnitt testen werden.
Hypothese 1: Spiele mit höheren Complexity Score haben niedriger anzahl von Owned Users.
Hypothese 2: Spiele mit höheren Complexity Score haben höhere Play Time.
Datenaufbereitung
Einlesen von Daten
Um Datensätze mit R zu analysieren, mussen 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.
XLSX-Dateien in R importieren
In diesem Tutorial benutzen wir eine .xlsx Datei, die wir einlesen müssen. XLSX-Dateien lassen sich aus Excel heraus speichern und sind heutzutage weit verbreitet. Wir lesen hier die Datei “bgg_dataset.xlsx” mit dem Befehl read_excel in den Dataframe data_xlsx ein.
Für diese Aufgabe bietet sich das readxl-Paket an, das am einfachsten mit den folgenden Befehlen installiert und geladen wird:
install.packages("readxl")
library (readxl)
Wie du sehen kannst, ist der Package schonmal installiert und wird verwendet, deswegen lässt R nicht zu, dass es wieder installiert wird.
Wir können unser Datensatz einlesen:
gameData <- read_excel("bgg_dataset.xlsx", sheet = "Sheet")
Leider funktioniert 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:
gameData
Nur eine Spalte aus dem Datensatz lässt sich wie folgt lesen:
gameData$`Year Published`
Zeit zum üben!
Schreiben Sie den Code, um die Spalte Mechanicszu
lesen:
gameData$`Mechanics`
Wie Sie weitere Dateientypen einlesen und benutzen kannst, finden Sie in diesem Tutorial von Björn Walther.
Leerstellen beheben
Das Beheben von Leerstellen in R Studio erfordert spezifische Schritte, die je nach Art der Daten und der Art der Probleme variieren können.
In einer bestimmten Spalte:
gameData$`Year Published` <- trimws(gameData$`Year Published`)
gameData$`Year Published`
In allen Spalten:
gameData <- lapply(gameData, trimws)
gameData
In unserem Dataset scheint alles gut zu sein, deswegen haben wir keine Änderungen nach Ausführung den Befehlen.
Inkonsistenzen beheben
Das Beheben von Leerstellen in R Studio erfordert spezifische Schritte, die je nach Art der Daten und der Art der Probleme variieren können.
Standardisierung der Schreibweise:
gameData$`Mechanics` <- tolower(gameData$`Mechanics`)
gameData$`Mechanics`
Somit wurden alle String in der “Mechanics”-Spalte zur Lowercase gecastet.
Ersetzen von Werten:
gameData$`Mechanics` <- gsub("Action", "ACTION", gameData$`Mechanics`)
gameData$`Mechanics`
Somit haben wir alle “Action” Strings mit “ACTION” ersetzt.
Behandlung von fehlenden Werten:
gameData$`Rating Average`[is.na(gameData$`Rating Average`)] <- mean(gameData$`Rating Average`, na.rm = TRUE)
Dieser Befehl ersetzt fehlende Werte durch der Median der vorhandenen Werten in der Spalte.
Entfernen von Duplikaten
gameData <- unique(gameData)
Dieser Befehl entfernt Duplikaten basierend auf allen Spalten. Wir haben aber in unserem Datensatz keine Duplikaten.
Behandlung von Sonderzeichen
gameData$`Mechanics` <- gsub("[^a-zA-Z0-9 ]", "", gameData$`Mechanics`)
Dieser Befehl entfernt Sonderzeichen in der Spalte “Mechanics”.
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:
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:
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.
Mittelwert
Der Mittelwert bestimmt den Durchschnitt aller gegebenen Werte. Die Rechnung dafuer 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.
Bestimmen Sie den Mittelwert von “Play Time”.
Sie sollten hier den Wert 99.884 bekommen.
Median
Der Median ist der Mittelpunkt aller gegebenen Werte.Der Median wird durch die ‘median()’ Funktion bestimmt.
Da das schreiben von
gameData[["Play Time"]] etwas dauert,
kann man ab hier die Variable ‘ptime’ verwenden.Bestimmen Sie den Median von “Play Time”.
ptime <- gameData[["Play Time"]]
Sie sollten hier den Wert 90 bekommen.
Varianz
Die Varianz bestimmt die Verteilung um den Mittelwert.Die Varianz wird durch die ‘var()’ Funktion bestimmt.
Bestimmen sie die Varianz von “Play Time”.
ptime <- gameData$"Play Time"
Sie sollten hier den Wert 6070.055 bekommen.
Standardabweichung
Die Standardabweichung bestimmt die Wurzel Verteilung um den Mittelwert.Die Varianz wird durch die ‘sd()’ Funktion bestimmt.
Bestimmen sie die Standardabweichung von “Play Time”.
ptime <- gameData$"Play Time"
Sie sollten hier den Wert 77.91056 bekommen.
Lineare Regression
Die Lineare Regression bestimmt das Verhaeltnis 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”.
raters <- gameData$"Users Rated"
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.
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.

raters <- gameData$"Users Rated"
owned <- gameData$"Owned Users"
x = lm()
plot(, , pch = 16, col = "blue")
Mithilfe der Linearen Regression kann man nun die Hypothesen entweder
beweisen oder widerlegen.
Hypothesentest
Ergebnispräsentation
In diesem Kapitel beschäftigen wir uns mit ausgewählten grafischen Darstellungsmöglichkeiten von Daten und wie man diese in RStudio erstellen kann.
Streudiagramm
Ein Steudiagramm wird häufig verwendet, um einen Zusammenhang zwischen Variablen darzustellen. In RStudio kann man mit Hilfe des plot()-Befehls ein solches Streudiagramm erzeugen. Hier ein Beispiel:

Der Code für dieses Streudiagramms ist grob zusammengefasst:
plot(gameData[[“xxx”]],gameData[[“yyy”]],xlim=c(a,z))
Enthalten sind hier drei Parameter, die beiden Variablen und eine Begrenzung. Wobei xlim eine Begrenzung der x-Achse, und damit die Begrenzung der Werte von “xxx” darstellt, um ein genaueres Bild zu erhalten.
Erstellen Sie nun anhand des Beispiels ein einfaches Streudiagramm welches den Zusammenhang zwischen “Min Age” und “Complexity Average” darstellt:
plot(gameData[["Complexity Average"]],gameData[["Min Age"]])
Boxplot-Diagramm
Ein Boxplot ist ein Diagramm, dass verschiedene Lageparameter und
Streuparameter abbildet und damit einen ersten groben Überblick über
eine Verteilung gibt. Meistens verwendet man einen Boxplot um schnell
eine Übersicht über Median, Quartile, Minimal- und Maximalwerte sowie
Ausreißer zu erhalten.
Folgend ein Beispiel:

Anhand des Beispiels nun ein kleines Quiz zur Verdeutlichung der
Begrifflichkeiten:
Um ein Boxplot-Diagramm zu erstellen, muss man das ggplot2-package
installiert haben, der grobe Syntax fürs Diagramm selbst sieht wiefolgt
aus:
ggplot(gameData, aes(y = .data[[“xxx”]], group = .data[[“yyy”]],
x = .data[[“yyy”]])) + geom_boxplot()
Säulendiagramme
Das bekannte Säulendiagramm wird meistens verwendet um eine Veränderung im Laufe der Zeit zu zeigen. Mit Säulendiagrammen kann man Steigerung, Rückgang, Stagnation als auch eine Häufigkeitsverteilung deutlich zeigen. Um ein Säulendiagramm in R mit Häufigkeitsverteilung zu erhalten, gibt man den Befehl:barplot(table(gameData[[“xxx”]]) ein und kann um die Achsen näher zu beschreiben noch **xlab=““** und ylab=”” einfügen.
Folgend ein Beispiel für ein Säulendiagramm mit Häufigkeitsverteilung:

Geben Sie nun ein Säulendiagramm mit den Werten von”Complexity Average” und Achsenbeschriftung aus:
barplot(gameData[["Complexity Average"]], xlab = "Spiel" , ylab = "Score")
Teaminfos
Nikolay Nikolaev
Maximilian Fronmüller
Lino Cortese