Værktøj: Rstudio
Scriptet gør flg.:
– Downloader xg-events fra samtlige kampe i grundspillet i #SLDK i 23/24-sæsonen via https://api.superliga.dk/opta-stats/event/“INDSÆTIDHER”/detail-expected-goals appName=superligadk&access_token=5b6ab6f5eb84c60031bbbd24&env=production&locale=da
– Eksporterer alt data til en tabel.
– Henter listen ”SpillerID”
– Kombinerer listen spillerID med tabellens id-numre og får sat klubnavn på alle spillerne i tabellen.
library(httr)
library(jsonlite)
# Eksempel data
event_ids <- extracted_event_ids$EventID
# Opret mappen hvis den ikke allerede findes
if (!dir.exists("exp_goals")) {
dir.create("exp_goals")
}
#kør Url igennem og download filerne
access_token <- "5b6ab6f5eb84c60031bbbd24" # Sørg for at din access_token er gyldig
appName <- "superligadk"
env <- "production"
locale <- "da"
for (event_id in event_ids) {
url <- paste0("https://api.superliga.dk/opta-stats/event/", event_id,
"/detail-expected-goals?appName=", appName,
"&access_token=", access_token,
"&env=", env,
"&locale=", locale)
response <- GET(url)
if (status_code(response) == 200) {
data <- content(response, "text", encoding = "UTF-8")
file_name <- paste0("exp_goals/exp_goals_", event_id, ".json")
write(data, file = file_name)
} else {
cat("Failed to download data for event_id:", event_id, "\n")
}
}
Scriptet downloader alle events for 23/24 i #SLDK grundspillet.
Nu kan man så samkøre denne nye tabel, med basisspillerID-listen, der har SpillerID, TeamID og TeamName som kolonner.
library(jsonlite)
library(dplyr)
# Vælg mappen hvor dine JSON filer er gemt
folder_path <- "exp_goals" # Erstat med den faktiske sti til din mappe
# Find alle JSON filer i mappen
file_paths <- list.files(path = folder_path, pattern = "\\.json$", full.names = TRUE)
# Initialiser en tom DataFrame
final_df <- data.frame()
# Funktion til at indlæse og forberede data fra en enkelt fil
prepare_data <- function(file_path) {
json_data <- fromJSON(file_path)
home_data <- as.data.frame(json_data$expectedGoalsData$home)
away_data <- as.data.frame(json_data$expectedGoalsData$away)
if (!is.null(home_data)) {
home_data$Team <- 'Home'
}
if (!is.null(away_data)) {
away_data$Team <- 'Away'
}
combined_df <- rbind(home_data, away_data)
# Konverter alle kolonner til character for at undgå datatypekonflikter
combined_df[] <- lapply(combined_df, as.character)
return(combined_df)
}
# Loop igennem filerne og saml data
for (file_path in file_paths) {
combined_df <- prepare_data(file_path)
final_df <- rbind(final_df, combined_df, fill = TRUE)
}
# Eftersom alle kolonner blev konverteret til character for at undgå konflikter, konverter relevante kolonner tilbage
final_df$min <- as.integer(final_df$min)
final_df$sec <- as.integer(final_df$sec)
final_df$x <- as.numeric(final_df$x)
final_df$y <- as.numeric(final_df$y)
final_df$expectedGoalsValue <- as.numeric(final_df$expectedGoalsValue)
# Vis de første rækker af den endelige DataFrame
head(final_df)
library(dplyr)
# Antag at sldk_spillerid er din anden DataFrame, som ser sådan ud:
# sldk_spillerid <- data.frame(
# id = c(1016093, 1026781), # eksempel ID'er
# teamname = c("FC Midtjylland", "AGF") # eksempel team navne
# )
# Konverter 'enetPlayerId' i 'final_df' til integer
final_df$enetPlayerId <- as.integer(final_df$enetPlayerId)
# Eller konverter 'id' i 'sldk_spillerid' til character, hvis det passer bedre til din situation
sldk_spillerid$id <- as.character(sldk_spillerid$id)
# Udfør derefter sammenkøringen
final_df <- left_join(final_df, Sldk_spillerID, by = c("enetPlayerId" = "id"))
# Tjek resultatet
head(final_df)
Hvis man ønsker at visualisere dele af data eller alt data, kan man f.eks. vælge at indplotte samtlige 3200 events via “ggplot2” i R.
Mere om det i indlægget her!