Direkt zum Hauptbereich

DataMining the Soccer World Cup 2014



To predict the results of sport events is always fun - and an enormous challenge. Especially in a tournament like the soccer world cup: Teams compete who play very rarely against each other. In soccer, luck is one of the most important factors (which means most of the data available represents noise…) - especially in a knock out tournament… So what could be more hopeless and more fun than using data-mining to predict the results. The codecentric guys did an excellent job in providing data on past tournaments. But matchday is coming soon and we need a dataset with the actual tournament to apply a model. And this is what I did.
The R-script creates a new dataset with all possible combinations of teams playing against each other in the 2014 world cup. And it reconstructs the actual values of the codecentric-features for these matches. So, if you build a model on the codecentric data, you can easily apply this new dataset to predict new values. In the following posts, I will demonstrate some models and hopefully my students get inspired to build some models by themselves.


#load the codecentric data from
#https://raw.githubusercontent.com/codecentric/soccer-prediction-2014/master/3-compute-features/2-league-based/output/soccerDataWithFeatures.csv

df=read.csv2("games-with-graph-features.csv", as.is=T)
#select relevant columns
df=df[,-c(1,2,5:24,27,28,31:38, 48,49,110:132)]
colnames(df)
#many colums are characters, I don't know why...
wrongClass=as.numeric(which(sapply(df,class)=="character"))
for(i in wrongClass[-c(1,2)]) df[,i]=as.numeric(df[,i])
Teams = c("BRA","HRV","MEX","CMR","ESP","NLD","CHL","AUS",
          "COL","GRC","CIV","JPN","URY","CRI","ENG","ITA",
          "CHE","ECU","FRA","HND","ARG","BIH","IRN","NGA",
          "DEU","PRT","GHA","USA","BEL","DZA","RUS","KOR")
#all names should be in the dataframe
Teams %in% df[,1]

#build a matrix with all combinations
TeamsWC = t(combn(Teams,2))
WC = matrix(NA,dim(TeamsWC)[1],dim(df)[2]-2)
WC = as.data.frame(WC)
WC=cbind(TeamsWC,WC)
colnames(WC)=colnames(df)
WC[,1:2]=TeamsWC[,1:2]

#create a function to catch the latest values for the teams
getValue=function(ha,team,value){
  df[max(which(df[,ha]==team)),value]
}

#automatical grap values for "home" columns
HomeCols = which(grepl("home",colnames(WC))&!grepl("minus",colnames(WC)))
for(i in HomeCols[-c(1:3)]){
  WC[,i]=mapply(getValue,1,WC[,1],i)
}

#and the same for away...
AwayCols = which(grepl("away",colnames(WC))&!grepl("minus",colnames(WC)))
for(i in AwayCols[-c(1:3)]){
  WC[,i]=mapply(getValue,2,WC[,2],i)
}

#let's re-calculate the difference-colums
WC[,11]=WC[,7]-WC[,9]
WC[,12]=WC[,8]-WC[,10]
WC[,15]=WC[,13]-WC[,14]
WC[,seq(18,75,3)]=WC[,seq(16,73,3)]-WC[,seq(17,74,3)]

#...and set the goals to 0, so that no NA is causing trouble...
WC[,c(3:6)]=0
View(WC)

#save and start building model!
write.csv(WC,"WorldCup2014.csv", row.names=F)

And here is a boxplot of my first predictions. You can see, Spain will become world champion. More on this later.

Comments welcome!

Kommentare

  1. I added a Group-variable:

    #now we create a variable for the groups
    GroupA = c("BRA","HRV","MEX","CMR")
    GroupB = c("ESP","NLD","CHL","AUS")
    GroupC = c("COL","GRC","CIV","JPN")
    GroupD = c("URY","CRI","ENG","ITA")
    GroupE = c("CHE","ECU","FRA","HND")
    GroupF = c("ARG","BIH","IRN","NGA")
    GroupG = c("DEU","PRT","GHA","USA")
    GroupH = c("BEL","DZA","RUS","KOR")

    getGroup = function(x){
    return(ifelse(any(GroupA %in% x), "A",
    ifelse(any(GroupB %in% x), "B",
    ifelse(any(GroupC %in% x), "C",
    ifelse(any(GroupD %in% x), "D",
    ifelse(any(GroupE %in% x), "E",
    ifelse(any(GroupF %in% x), "F",
    ifelse(any(GroupG %in% x), "G","H"))))))))
    }

    WC$Group1 = sapply(as.character(WC[,1]), getGroup)
    WC$Group2 = sapply(as.character(WC[,2]), getGroup)

    AntwortenLöschen
  2. Looking for live sex cams? Have a peek at BongaCams.

    AntwortenLöschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

Kritik an dem Science-Artikel der Priesemann-Gruppe „Inferring change points in the spread of COVID-19 reveals the effectiveness of interventions“

Der Science-Artikel von Dehning et al. (2020) gilt als Beleg für die Effektivität der Corona-Maßnahmen in Deutschland im März 2020. Wir glauben, dass der Artikel gravierende Fehler enthält und daher nichts darüber aussagt, ob insbesondere das Kontaktverbot vom 23.03.2020, irgendeinen Effekt hatte. Unsere Kritik haben wir bei Science eingereicht und sie ist hier zu finden: https://science.sciencemag.org/content/369/6500/eabb9789/tab-e-letters Im folgenden übersetze ich unseren Beitrag und gehe anschließend auf die Frage ein, wie Wissenschaft unter COVID-19-Bedingungen funktioniert und was daran bedenklich ist. Eine Kritik an ‘Inferring change points in the spread of COVID-19 reveals the effectiveness of interventions’ Wir haben den Artikel ‘Inferring change points in the spread of COVID-19 reveals the effectiveness of interventions’ analysiert und dabei gravierende Unstimmigkeiten im Design der Studie festgestellt: Anstatt das Datum der Wendepunkte (wann sich die COVID-19-Entwicklung i

Deep-Dive Impfeffektivität: Eine kritische Datenanalyse der RKI-Berechnungen / Teil 1: Die Methode

Die Einschätzung, wie effektiv die COVID-Impfung ist, ist eine der politisch relevantesten Kennzahlen derzeit. Insbesondere für die Einschätzungen der Angemessenheit einr Impfpflicht ist diese Zahl extrem wichtig. In der Vergangenheit hat sich immer wieder gezeigt, dass die Berechnungen des RKI nicht in jeder Hinsicht eindeutig sind, sondern auf vielen Annahmen beruhen, die man auch kritisch hinterfragen kann und muss. Für die politische Datenwissenschaft ist es daher essenziell, diese Berechnungen nachvollziehbar zu machen. In diesem Beitrag wird das methodische Vorgehen des RKI zur Berechnung der Impfeffektivität analysiert. Die Informationen dazu entstammen den RKI-Wochenberichten .  In einem zweiten Teil habe ich die konkreten Berechnungen des RKI so weit wie möglich rekonstruiert und kann daher zeigen, wie stark die Ergebnisse schwanken, wenn Annahmen leicht verändert werden. Meine Erkenntnisse aus der folgenden Analyse: Das RKI verwendet zur Berechnung der Impfeffektivität die Me

Neue Veröffentlichung: Der Aufstieg der #AfD in den Sozialen Netzwerken

Das Political Data Science Team hat eine neue Veröffentlichung zum Thema " The Rise of Germanys AfD: A Social Media Analysis " vorzuweisen. Erstautor ist der fabelhafte Juan Carlos Medina Serrano und der Artikel ist als open access erschienen als: Serrano, Juan Carlos Medina, Morteza Shahrezaye, Orestis Papakyriakopoulos, and Simon Hegelich. "The Rise of Germany's AfD: A Social Media Analysis." In Proceedings of the 10th International Conference on Social Media and Society, pp. 214-223. ACM, 2019. URL:  https://dl.acm.org/citation.cfm?id=3328562 Cross-platform-analysis Ein großes Problem in der aktuellen Social Media Forschung ist, dass meistens nur einzelne Plattformen (und häufig nur Twitter) betrachtet werden. Wir untersuchen in dem Artikel Twitter, Facebook, Instagram und YouTube und schauen auf die Beiträge der deutschen Parteien. Der Vergleich von unterschiedlichen Plattformen ist nicht nur deshalb wichtig, weil ansonsten ein sehr verzerrtes Bild en