Datensatz “FIFA 19 complete player dataset”

Der Datensatz enthält detaillierte Attribute für jeden Spieler, der in der neuesten Ausgabe der FIFA 19-Datenbank registriert ist.

Bearbeitung Datensatz

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 ) 

Aufgabe 1

Datentypen

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

Grafik/Kennzahl 1: Histogramm/Arithmetisches Mittel

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")

Grafik 2: Balkendiagramm

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)   

Kennzahl 2: Arithmetisches Mittel/Median

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

Aufgabe 2

Grafik 1: Streudiagramm

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)

Grafik 2: Gestapeltes Balkendiagramm

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")   

Aufgabe 4

Grafik 1: Streudiagramm

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()

Grafik 2: Streudiagramm

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"))