Der Datensatz enthält detaillierte Attribute für jeden Spieler, der in der neuesten Ausgabe der FIFA 19-Datenbank registriert ist.
Bevor wir mit den Aufgaben anfangen haben, setzten wir uns mit dem Datensatz auseinander. Wir verschafften uns einen Überblick über die Daten und machten anpassungen und haben ein paar Schönheitskorrekturen vorgenommen, sodass wir einen Datensatz hatten welche nicht unnötige Informationen enthielt und wir gut damit arbeiten konnten. Hier ein paar Beispiele:
# Unnötige Spalten löschen
data$Photo <- NULL
# Umwandlung Wert der Spieler (K/M eliminiert)
data$Value <- sub(pattern = "€", replacement = "", x= data$Value)
value_spieler_K <- grepl(pattern = "K", data$Value)
value_spieler <- gsub(pattern = "K", replacement = "", x = data$Value)
value_spieler <- gsub(pattern = "M", replacement = "", x = value_spieler)
value_spieler <- as.numeric(value_spieler)
value_spieler_new <- value_spieler * ifelse(value_spieler_K, 10**3, 10**6)
data$Value <- value_spieler_new
# Schönheitskorrekturen
data$Position <- replace(data$Position,which(data$Position == ""), NA )
Die verschiedenen Datentypen der Variabeln mit einem Beispiel des Datensatzes in einem Datenframe dargestellt.
## ID Name Age Nationality Overall Potential
## datentyp_1 numerisch kategoriell numerisch kategoriell numerisch numerisch
## datentyp_2 diskret nominal diskret nominal diskret diskret
## Beispiel 158023 L. Messi 31 Argentina 94 94
## Club Value Wage Special Preferred.Foot
## datentyp_1 kategoriell numerisch numerisch numerisch kategoriell
## datentyp_2 nominal stetig stetig diskret nominal
## Beispiel FC Barcelona 110500000 565000 2202 Left
## International.Reputation Weak.Foot Skill.Moves Work.Rate
## datentyp_1 numerisch numerisch numerisch kategoriell
## datentyp_2 diskret diskret diskret ordinal
## Beispiel 5 4 4 Medium/ Medium
## Body.Type Position Jersey.Number Joined Loaned.From
## datentyp_1 numerisch kategoriell numerisch kategoriell kategoriell
## datentyp_2 diskret nominal diskret ordinal nominal
## Beispiel Messi RF 10 Jul 1, 2004
## Contract.Valid.Until Height Weight LS ST
## datentyp_1 numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret stetig stetig diskret diskret
## Beispiel 2021 5'7 159lbs 88+2 88+2
## RS LW LF CF RF RW
## datentyp_1 numerisch numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret diskret
## Beispiel 88+2 92+2 93+2 93+2 93+2 92+2
## LAM CAM RAM LM LCM CM
## datentyp_1 numerisch numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret diskret
## Beispiel 93+2 93+2 93+2 91+2 84+2 84+2
## RCM RM LWB LDM CDM RDM
## datentyp_1 numerisch numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret diskret
## Beispiel 84+2 91+2 64+2 61+2 61+2 61+2
## RWB LB LCB CB RCB RB
## datentyp_1 numerisch numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret diskret
## Beispiel 64+2 59+2 47+2 47+2 47+2 59+2
## Crossing Finishing HeadingAccuracy ShortPassing Volleys Dribbling
## datentyp_1 numerisch numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret diskret
## Beispiel 84 95 70 90 86 97
## Curve FKAccuracy LongPassing BallControl Acceleration
## datentyp_1 numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret
## Beispiel 93 94 87 96 91
## SprintSpeed Agility Reactions Balance ShotPower Jumping
## datentyp_1 numerisch numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret diskret
## Beispiel 86 91 95 95 85 68
## Stamina Strength LongShots Aggression Interceptions Positioning
## datentyp_1 numerisch numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret diskret
## Beispiel 72 59 94 48 22 94
## Vision Penalties Composure Marking StandingTackle SlidingTackle
## datentyp_1 numerisch numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret diskret
## Beispiel 94 75 96 33 28 26
## GKDiving GKHandling GKKicking GKPositioning GKReflexes
## datentyp_1 numerisch numerisch numerisch numerisch numerisch
## datentyp_2 diskret diskret diskret diskret diskret
## Beispiel 6 11 15 14 8
## Release.Clause
## datentyp_1 numerisch
## datentyp_2 stetig
## Beispiel 226500000
Wir haben das Alter der Spieler in einem Histogramm dargestellt, das Durchschnitsalter berechnet und eingezeichnet.
# Histogramm
hist(data$Age, breaks = seq(15,50), main = "Alter der Spieler", xlab = "Alter",
ylab = "Anzahl Spieler")
# Durchschnittsalter
durchschnitt_alter <- round(mean(data$Age), digits = 1)
durchschnitt_alter <- paste("Durchschnittsalter =", as.character(durchschnitt_alter))
text(x =40 , y= 1000, durchschnitt_alter , pos= c(3,4), cex = 0.8)
abline(v=25.1, lwd=2, col="blue")
Wir haben uns gefragt, welche Position ist wie stark besetzt? Im Fifa gibt es ganz viele spezifische Positionen. Da es für nicht Fifa Spieler schwierig ist, mit diesen Positionen etwas anzufangen, haben wir noch eine extra Spalte dem Datensatz hinzugefügt, wo wir die vielen spezifischen Positionen vom Fussball den drei Hauptkategorien, Verteidigung, Mittelfeld und Angriff, zugeordnet haben. In der Grafik haben wir dann die Balken des Balkendiagramms mit den drei verschiedenen Farben eingefärbt, damit auch nicht Kenner sich einen Überblick verschaffen können.
# Balkendiagramm
barplot(table(Position_new, data$Position), col= c("lightcoral",
"lightgreen", "lightblue"), las = 2, cex.names = 0.6, main = "Positionen")
# Legende
legend("top", legend = c("Verteidigung", "Mittelfeld", "Angriff"),
fill = c("lightblue", "lightgreen", "lightcoral"), bty = "n", cex = 0.7)
Im Fussball ist es so, dass Starspieler einen massiv höheren Wert haben als “normale” Spieler. Um dies zu beweisen, haben wir einmal das arithmetische Mittel und einmal den Median berechnet. Dabei kann man schön sehen, dass das arithmetische Mittel viel höher ist als der Median.
# Arithmetische Mittel
mean(data$Value) # Dollar
## [1] 2410696
# Median
median(data$Value) # Dollar
## [1] 675000
Wir wollten herausfinden, wie stark der Zusammenhang von der Gesammtbewertung und dem Wert des Spielers ist. Was wir erwarteten: Je höher die Gesammtbewertung umso höher der Wert des Spielers. Wie aus dem Streudiagramm zu entnehmen ist, besteht eine starker Zusammenhang von der Gesammtbewertung mit dem Wert des Spielers. Hierbei ist zu beachten, dass die Werte der Y-Achse logarithmiert wurden. Die Berechnung der Spearman-Korrelation bestätigt diese Annahme.
# Streudiagramm
plot(data$Overall, data$Value,
main = "Zusammenhang Overallwertung/Wert Spieler",
xlab = "Overall Wertung", ylab = "Wert Spieler", log = "y")
# Spearman-Korrelation
cor_1 <- cor(data$Overall, data$Value, method = "spearman")
cor_1 <- round(cor_1, digits = 3)
cor_1 <- paste("Korrelation =",as.character(cor_1))
text(x = 55 , y= 8e+07, cor_1 , pos= c(3,4), cex = 0.8)
Hier haben wir uns dazu entschieden, aus fünf verschiedenen europäischen Ländern den Top Ligen, jeweils zwei gute Fussballclubs herauszusuchen. Grafisch stellten wir dar, wie gross der proportionale Anteil an Spielern dieser Länder in einem Club ist. Die Spieler, welche nicht aus einem dieser fünf Länder kommen, haben wir als Rest zusammengefasst. Wie der Grafik zu entnehmen ist, hat jeder Club einen hohen Anteil an Spielern aus dem eigenem Land. Es ist zu beachten, dass der Rest jeweils sehr gross ist. Es hat uns wunder genommen, wie der absolute Anteil pro Land ist und wir konnten feststellen, dass bei jedem Club ausser Manchester City der grösste absolute Anteil jeweils aus dem eigenen Land kommt. Dies kann man jedoch nicht aus der Grafik entnehmen.
# Balkendiagramm
barplot(prop.table(table(spieler_plot_nationality, spieler_plot_club),
margin = 2), col = c("lightpink","lightblue", "lightyellow",
"lightgreen", "lightcoral", "white"), las = 2)
# Legende
legend("top", legend = c("England", "France", "Italy", "Spain", "Germany",
"Rest"), fill = c("lightpink", "lightblue", "lightgreen", "lightcoral",
"lightyellow", "white"), bty = "o", bg = "white")
Spielt man Fifa Ultimateteam, nimmt das Durchhaltevermögen eines Spielers von Spiel zu Spiel ab, was bewirkt, dass er mit der Zeit nicht mehr so gut spielt. Damit das Durchhaltevermögen wieder steigt, muss man ihn mehrere Spiele pausieren lassen, damit er sich erholen kann. Das Durchhaltevermögen ist Abhängig von der Ausdauer und der Kraft des Spielers. Wir wollen herausfinden, von welcher Position man am meisten Spieler auf der Auswechselbank haben sollte, damit man immer genügend Spieler der richtigen Position zum Auswechseln hat. Wie der Grafik zu entnehmen ist, sollte man am meisten Verteidiger auf der Auswechselbank haben.
ggplot(mapping = aes(x = Ausdauer, y = Kraft, colour = Position)) +
geom_point() + geom_smooth()
Wir beziehen uns auf die vorherige Frage. Da man nur beschränkt Ressourcen in Fifa Ultimateteam hat, kann man sich nicht nur die teuersten und besten Spieler kaufen. Hat man eine gute Start 11, aber eine schlechte Auswechselbank, kann dies zum Problem werden, wenn man einen Spieler auswechseln muss, da er sich erholen muss und man gezwungen ist, ihn durch einen schlechteren Spieler zu ersetzen. Das Ziel dieser Grafik ist es, zu erkennen, ob man anstatt einem gewissen Spieler auch einen anderen Spieler kaufen könnte, welcher zwar gleich gut ist, jedoch billiger im Einkaufspreis ist und denoch ein besseres Durchhaltevermögen hat. Dies wäre eine Optimierung, bei welcher man Geld einspart, welches beim Einkauf von weiteren Spielern zu gute kommt. Hierfür haben wir das Durchhaltevermögen in verschiedene Stuffen eingeteilt. Die Stuffen haben verschieden grosse Abstände, da ein Spieler mit einem Durchhaltevermögen unter 60 nicht wirklich zu gebrauchen ist und wir uns auf den Bereich zwischen 75 bis 95 fokusieren wollten, da man ja ein gutes Team haben möchte. Da es nur einen Spieler mit Durchhaltevermögen über 90 gibt, haben wir den letzten Bereich wieder vergrössert. Möchte man nun einen Spieler kaufen und sieht in der Grafik, dass es weiter unten einen dunkleren Punkt gibt, sollte man diesen Spieler nehmen, da er ein besseres Durchhaltevermögen hat und man gleichzeitig Ressourcen einspart.
Durchhaltevermögen <- cut(x=Durchhaltevermögen, breaks=c(15,60,75,80,85,95))
library(ggplot2)
p <- ggplot(mapping = aes(x = Overall, y = Value, colour = Durchhaltevermögen))+
geom_point() + scale_y_log10()
p + scale_color_manual(values = c("white", "yellow", "orange", "red", "red4"))