Trabajo elaborado para la asignatura “Programación y manejo de datos en la era del Big Data” de la Universitat de València durante el curso 2021-2022. El repo del trabajo está aquí.
La página web de la asignatura y los trabajos de mis compañeros pueden verse aquí.
Desde hace muchos años, La Liga española ha sido una de las principales, e incluso la principal, liga de fútbol del mundo; sin embargo, tras la pandemia del COVID-21, otras ligas están por encima de esta, con más fichajes y más nivel (es el caso de la Premier). En este trabajo analizamos la situación actual de los equipos de primera división, un poquito de su evolución en los últimos años y terminamos con la parte del trabajo que más tiempo le he dedicado: Predicción de resultados de La Liga.
Los datos que he usado para este trabajo provienen del paquete WorldFootballR, donde he podido obtener la mayoría de los datos acerca de los partidos (para la predicción), de los jugadores, de los fichajes…
El procesamiento de los datos lo veremos con detenimiento en cada uno de los apartados siguientes, pues con el paquete WorldFootballR podemos obtener datos de páginas web de deporte diferentes y cada dataset tendrá un tratamiento diferente
En primer lugar, vamos a ver la situación actual del valor de los equipos, que, en principio, se esperaba que liderasen la clasificación este año.
Aquí vemos los equipos con mayor valor de la liga, (suma del valor de todos los jugadores del equipo).
Sin embargo, el valor, no siempre asegura victorias, y es el caso de La Liga este año. Esta temporada está siendo especial, y lo podemos analizar con esta tendencia:
En este gráfico vemos cómo el valor del equipo no lo es todo, y con un valor muy bajo, observamos la situación del Rayo Vallecano, en puesto de Europa, por encima de mucho clubes con un valor de jugadores mayor.
También sorprende, negativamente, el Barcelona, que está firmando una temporada extraña dado el valor de su equipo.
La R= 0,8, nos indica que el 80% de los datos se ve representado por la tendencia mostrada en azul en el gráfico, que, aproximadamente nos indica que inversión habría que realizar para conseguir un número determinado de puntos.
valor<-get_player_market_values("Spain", 2021)
valor<- valor %>% select(squad, player_num, player_age, player_name, player_nationality, current_club,player_foot,
date_joined, contract_expiry, player_market_value_euro)
a<-valor %>% group_by(squad) %>% summarise(valor = sum(player_market_value_euro))
b<-a %>% slice_max(valor, n=5) %>% mutate(escudo= c( "https://logodownload.org/wp-content/uploads/2016/03/real-madrid-logo-escudo-1.png",
"https://4.bp.blogspot.com/-WovWyVV6wK0/WW6rg05K9fI/AAAAAAABNU4/5rrftOg2aX88L8gLqYOnsi4vk5UO0VjTwCLcBGAs/s1600/Club%2BAtletico%2Bde%2BMadrid.png",
"http://assets.stickpng.com/images/584a9b3bb080d7616d298777.png",
"http://assets.stickpng.com/images/584ad36ab519ea740933a8d3.png",
"http://assets.stickpng.com/thumbs/584ad291b519ea740933a8ba.png"))
p1<- ggplot(b, aes(x= reorder(squad, valor), y= valor, fill= squad), width=0.5) +
geom_bar(stat="identity") + scale_fill_brewer(palette = "Accent") +
geom_image(aes(image = escudo), size=0.1) + coord_flip() + theme(legend.position = "none")
p1
clasificacion<- get_season_team_stats("ESP", "M", 2022, "1st", "league_table") %>%
select(Squad,Pts) %>% rename("squad"= "Squad")
a<-a %>% mutate(squad = ifelse(squad == "Athletic Bilbao", "Athletic Club", squad),
squad = ifelse(squad == "Atlético de Madrid", "Atlético Madrid", squad),
squad = ifelse(squad == "CA Osasuna", "Osasuna", squad),
squad = ifelse(squad == "Cádiz CF", "Cádiz", squad),
squad = ifelse(squad == "Celta de Vigo", "Celta Vigo", squad),
squad = ifelse(squad == "Deportivo Alavés", "Alavés", squad),
squad = ifelse(squad == "Elche CF", "Elche", squad),
squad = ifelse(squad == "FC Barcelona", "Barcelona", squad),
squad = ifelse(squad == "Getafe CF", "Getafe", squad),
squad = ifelse(squad == "Granada CF", "Granada", squad),
squad = ifelse(squad == "Levante UD", "Levante", squad),
squad = ifelse(squad == "RCD Espanyol Barcelona", "Espanyol", squad),
squad = ifelse(squad == "RCD Mallorca", "Mallorca", squad),
squad = ifelse(squad == "Real Betis Balompié", "Betis", squad),
squad = ifelse(squad == "Sevilla FC", "Sevilla", squad),
squad = ifelse(squad == "Valencia CF", "Valencia", squad),
squad = ifelse(squad == "Villarreal CF", "Villarreal", squad),)
c<-full_join(a,clasificacion)
ggplot(data = c, aes(valor, Pts, label = squad)) +
geom_point(aes(color=squad)) +
geom_smooth(method = "lm", se = FALSE) +
geom_text_repel() +
theme_classic() +
xlab("Valor del equipo") +
ylab("Puntos") +
theme(legend.position = "none") +
stat_cor(label.x = 50000000, label.y = 42)
Este año, nos sorprende cómo la pelea por la liga no es entre el FC Barcelona, Atlético de Madrid y el Real Madrid.
Aquí vemos la evolución de los últimos años, siendo y la posición en la liga; es decir, cuanto más abajo, mejor.
Este año, como dijimos está siendo diferente y los equipos más pequeños están consiguiendo vencer al FC Barcelona y al Atlético de Madrid; quizás es el año del Pancrudo FC, quién sabe.
veintidos<- get_season_team_stats("ESP", "M", 2022, "1st", "league_table") %>% select(Squad, Rk, Pts, Season_End_Year)
veintiuno<- get_season_team_stats("ESP", "M", 2021, "1st", "league_table") %>% select(Squad, Rk, Pts, Season_End_Year)
veinte<- get_season_team_stats("ESP", "M", 2020, "1st", "league_table") %>% select(Squad, Rk, Pts, Season_End_Year)
diecinueve<- get_season_team_stats("ESP", "M", 2019, "1st", "league_table")%>% select(Squad, Rk, Pts, Season_End_Year)
dieciocho<- get_season_team_stats("ESP", "M", 2018, "1st", "league_table") %>% select(Squad, Rk, Pts, Season_End_Year)
diecisiete<- get_season_team_stats("ESP", "M", 2017, "1st", "league_table")%>% select(Squad, Rk, Pts, Season_End_Year)
dieciseis<- get_season_team_stats("ESP", "M", 2016, "1st", "league_table") %>% select(Squad, Rk, Pts, Season_End_Year)
quince<- get_season_team_stats("ESP", "M", 2015, "1st", "league_table") %>% select(Squad, Rk, Pts, Season_End_Year)
catorce<- get_season_team_stats("ESP", "M", 2014, "1st", "league_table")%>% select(Squad, Rk, Pts, Season_End_Year)
trece<- get_season_team_stats("ESP", "M", 2013, "1st", "league_table") %>% select(Squad, Rk, Pts, Season_End_Year)
doce<- get_season_team_stats("ESP", "M", 2012, "1st", "league_table") %>% select(Squad, Rk, Pts, Season_End_Year)
once<- get_season_team_stats("ESP", "M", 2011, "1st", "league_table")%>% select(Squad, Rk, Pts, Season_End_Year)
diez<- get_season_team_stats("ESP", "M", 2010, "1st", "league_table")%>% select(Squad, Rk, Pts, Season_End_Year)
a<-full_join(veintidos, veintiuno)
b<-full_join(a,veinte)
c<-full_join(b,diecinueve)
d<-full_join(c,dieciocho)
e<-full_join(d,diecisiete)
f<-full_join(e,dieciseis)
g<-full_join(f,quince)
h<-full_join(g,catorce)
i<-full_join(h,trece)
j<-full_join(i,doce)
k<-full_join(j,once)
l<-full_join(k,diez) %>% filter(!Season_End_Year=="2022")
m<- l %>% group_by(Season_End_Year) %>% filter(Squad %in% c( "Real Madrid", "Barcelona", "Atlético Madrid"))
ggplot(m, aes(Season_End_Year, Rk, color=Squad)) + geom_line() +
theme(legend.position = "none")
x<-ggplot(m,aes(x= Season_End_Year, y= Rk)) +
labs(title = "Evolución posiciones en liga",
x= "Año",
y= "Posición",
color = "Equipo") +
geom_point(aes(color= Squad), size= 3) +
geom_line(aes(color= Squad), size= 1.5) +
scale_color_manual(values= c("red", "#900C3F", "white"),
labels = c("Atlético de Madrid",
"FC Barcelona",
"Real Madrid"))+
theme_minimal() +
theme(plot.title = element_text(size = 20, face = "bold",
hjust = 0.5),
axis.title.x = element_text(size = 13, hjust = 1,
vjust = 0),
axis.title.y = element_text(size = 13, hjust = 1, vjust = 1),
legend.title = element_text(face = "bold"),
plot.background = element_rect(colour = "#B082FF"),
panel.background = element_rect(colour = "#B082FF")) +
transition_reveal(Season_End_Year) +
view_follow()
x + theme(panel.grid.major = element_line(colour = "#B082FF"),
panel.grid.minor = element_line(colour = "#B082FF"),
panel.background = element_rect(fill = "#B082FF"),
plot.background = element_rect(fill = "#B082FF"))
Es necesario ver una de las razones por las que poco a poco La Liga ha ido perdiendo calidad frente a otras ligas, y esa razón es la inversión en jugadores de alto nivel:
library(tidyverse)
library(worldfootballR)
library(gridExtra)
library(readr)
spain2020 <- read_csv("./datos/spain2020.csv")
england2020 <- read_csv("./datos/england2020.csv")
france2020 <- read_csv("./datos/france2020.csv")
a<-spain2020 %>% filter(!is.na(transfer_fee)) %>% filter(transfer_type=="Arrivals") %>%
select(country,season, player_name, team_name,transfer_fee, player_age, player_position)%>%
mutate(suma= sum(transfer_fee))
b<- england2020 %>% filter(!is.na(transfer_fee)) %>%
select(country,season, player_name, team_name,transfer_fee, player_age, player_position)%>%
mutate(suma= sum(transfer_fee))
c<- france2020 %>% filter(!is.na(transfer_fee)) %>%
select(country,season, player_name, team_name,transfer_fee, player_age, player_position) %>%
mutate(suma= sum(transfer_fee))
spain2015 <- read_csv("./datos/spain2015.csv")
england2015 <- read_csv("./datos/england2015.csv")
france2015 <- read_csv("./datos/france2015.csv")
d<- spain2015%>% filter(!is.na(transfer_fee)) %>% filter(transfer_type=="Arrivals") %>%
select(country,season, player_name, team_name,transfer_fee, player_age, player_position)%>%
mutate(suma= sum(transfer_fee))
e<-england2015%>% filter(!is.na(transfer_fee)) %>% filter(transfer_type=="Arrivals") %>%
select(country,season, player_name, team_name,transfer_fee, player_age, player_position)%>%
mutate(suma= sum(transfer_fee))
f<-france2015%>% filter(!is.na(transfer_fee)) %>% filter(transfer_type=="Arrivals") %>%
select(country,season, player_name, team_name,transfer_fee, player_age, player_position)%>%
mutate(suma= sum(transfer_fee))
library(ggplot2)
g<-full_join(a, b)
h<-full_join(g,c)
i<-full_join(d,e)
j<-full_join(i,f) %>% filter(!is.na(country))
bar1<-ggplot(h) +
aes(x = country, fill = country, weight = suma) +
geom_bar() +
scale_fill_viridis_d(option = "viridis")+ theme_light()+
theme(plot.subtitle = element_text(size = 10),
axis.title = element_text(size = 9),
plot.title = element_text(size = 13)) +
labs(title = "Inversión en jugadores por país",
x = "Liga (País)", y = "Inversión en jugadores",
subtitle = "Año: 2020") + theme(legend.position = "none")
bar2<- ggplot(j) +
aes(x = country, fill = country, weight = suma) +
geom_bar() +
scale_fill_viridis_d(option = "viridis")+ theme_light()+
theme(plot.subtitle = element_text(size = 10),
axis.title = element_text(size = 9),
plot.title = element_text(size = 13)) +
labs(title = "Inversión en jugadores por país",
x = "Liga (País)", y = "Inversión en jugadores",
subtitle = "Año: 2015") + theme(legend.position = "none")
grid.arrange(bar1, bar2, ncol = 2, widths = c(3.5, 3.5))
Soy del Real Madrid, y Vinicius es un crack, por tanto, me parecía conveniente dedicarle un pequeño apartado a Vini:
El año pasado Vinicius no andaba muy acertado de cara a portería…
La verdad que hasta este año Vinicius fallaba mucho, podemos ver en transparente todos los tiro que hizo y los puntos no transparentes son los que acabaron en gol (pocos).
Sin embargo, este año ha cambiado:
Vemos cómo este año ya ha marcado un porcentaje mucho mayor de goles.
veinte<-understat_league_match_results("La liga", 2020)
uno<-understat_league_match_results("La liga", 2021)
#Otra info-----
team_urls<- understat_team_meta("Real Madrid")
RMA<-understat_team_stats_breakdown("https://understat.com/team/Real_Madrid/2020")
vini<-understat_player_shots("https://understat.com/player/7008")
library(ggplot2)
vini2<-vini %>% mutate(X= X*100) %>% mutate(Y = Y*100)
vini2<- vini2 %>% mutate(resultado = case_when( result == "Goal" ~ "1",
result == "MissedShots" ~ "0.4",
result == "BlockedShot" ~ "0.4",
result == "SavedShot" ~ "0.4",
result == "ShotOnPost" ~ "0.3")) %>%
mutate(resultado= as.numeric(resultado)) %>% mutate(resulta2 = 1-resultado) %>%
filter(!season == 2021)
ggplot(vini2) + annotate_pitch(colour = "white",
fill = "springgreen4",
limits = FALSE) +
geom_point(aes(x=X, y=100-Y, colour= shotType, alpha = resultado), size=7) +
coord_flip(xlim = c(60, 101), ylim = c(-1, 101)) +
theme_pitch() + theme(panel.background = element_rect(fill = "springgreen4"))
vini3<-vini %>% mutate(X= X*100) %>% mutate(Y = Y*100)
vini3<- vini3 %>% mutate(resultado = case_when( result == "Goal" ~ "1",
result == "MissedShots" ~ "0.6",
result == "BlockedShot" ~ "0.6",
result == "SavedShot" ~ "0.5",
result == "ShotOnPost" ~ "0.6")) %>%
mutate(resultado= as.numeric(resultado)) %>% mutate(resulta2 = 1-resultado) %>%
filter(season == 2021)
ggplot(vini3) + annotate_pitch(colour = "white",
fill = "springgreen4",
limits = FALSE) +
geom_point(aes(x=X, y=100-Y, colour= shotType, alpha = resultado), size=7) +
coord_flip(xlim = c(60, 101), ylim = c(-1, 101)) +
theme_pitch() + theme(panel.background = element_rect(fill = "springgreen4"))
Los principales asistentes del Real Madrid esta temporada han sido los siguientes:
Esto explica gran parte de los buenos resultados de Vinicius, el delantero del equipo, Benzema es el principal asistente del Real Madrid, ayudando mucho a quien juega de extremo
a<-get_match_report("https://fbref.com/en/matches/f6fab33c/Getafe-Real-Madrid-January-2-2022-La-Liga")
b<-get_match_summary("https://fbref.com/en/matches/f6fab33c/Getafe-Real-Madrid-January-2-2022-La-Liga")
c<-get_match_lineups("https://fbref.com/en/matches/f6fab33c/Getafe-Real-Madrid-January-2-2022-La-Liga")
d<-get_advanced_match_stats("https://fbref.com/en/matches/f6fab33c/Getafe-Real-Madrid-January-2-2022-La-Liga", "passing", "team")
e<-vini<-understat_player_shots("https://understat.com/player/7008")
e<-e %>% select(minute, player_assisted) %>% group_by(player_assisted) %>% count() %>%
filter(!is.na(player_assisted))
m1<-treemap(e, index = "player_assisted",
vSize = "n",
type = "index",
palette = "BrBG",
border.lwds=3,
border.col=c("white"),
fontface.labels=1,
bg.labels=c("transparent"))
Esta es la parte que más tiempo le he dedicado, he cogido mucha información acerca de las estadísticas de los equipos de La Liga y he creado predicciones de los partidos del fin de semana del 9 de enero (Estas predicciones se han empezado a hacer antes de los partidos del 31 de Diciembre, por lo que los datos de esta jornada no están incluídos).
Vamos a tomar un ejemplo primero de un partido, el Real Madrid Valencia, donde explicaré como lo he hecho y después, usaré el mismo código para todos los partidos y ya veremos si acierto o no…
En este caso, vamos a ver el código, pues la idea es que sea fácil de repetir para cualquier partido y he puesto unas pequeñas instrucciones para copiar y pegar el código en un Rscript y poder usarlo para cada partido
#Intrucciones:
#1- Hacer Ctrl+f y reemplazar (Replace): Real Madrid por el equipo local y Valencia por el equipo Visitante
#2- Modificiar la línea que pone IMPORTANTÍSIMO
#3- Reemplaza 2021-12-31 por la fecha del primer partido de la jornada que estudiamos (haciendo lo mismo que en el paso 1)
library(tidyverse)
library(worldfootballR)
#Jugando con FBREF------
clasificacion<- get_season_team_stats("ESP", "M", 2022, "1st", "league_table") %>%
select(Squad,Rk,Pts,xG, xGA)
datos<- get_match_results("ESP", "M", 2022, "1st")
Las instrucciones son simples, he intentado que sea todo bastante “automático” para cambiar lo menos posible. Los datos de donde siempre, tomamos esta temporada, y a jugar…
Como no sabía muy bien como usar los datos mi idea fue simple, partimos de un marcados = 0, y si el equipo Local gana al Visitante en un ámbito (por ejemplo, de media tira más a puerta), le sumo +1 al marcador; si es al revés, le resto -1. En el caso de que el marcador final quede, por ejemplo:
Marcador: -6; es que el equipo visitante tiene más probabilidad de ganar. Vamos allá:
#Vamos a ver la probabilidad de que gane el Real Madrid
ve<- clasificacion %>%
filter(Squad %in% c("Real Madrid", "Valencia")) %>% #Poner los equipos que quieras (Local y Visitante)
mutate(orden= c(2,1)) %>% slice_min(orden, n=2) %>%
mutate(DxG= xG- lag(xG)) %>% mutate(DPts= Pts - lag(Pts)) %>%
mutate(DxGA= xGA - lag(xGA))
#IMPORTANTÍSIMO, cambiar los números,--> (1,2): Si equipo local es alfabéticamente superior al equipo visitante ej: Real Madrid>Valencia; en caso contrario: (2,1)
prueba<- ve %>% mutate(prueba = 0) %>%
mutate( prueba= ifelse(DPts>15, prueba+1, prueba),
prueba= ifelse(DPts<(-15), prueba-1, prueba),
prueba= ifelse(DxG>0, prueba+1, prueba-1),
prueba= ifelse(DxG>10, prueba+1, prueba),
prueba= ifelse(DxG<(-10), prueba-1, prueba),
prueba= ifelse(DxGA>0, prueba -1, prueba+1))
#Poner el equipo Local (En ambos)
#Cuidado, los datos son del 2021-12-31, se debería poner la fecha de la última jornada
Localv<- datos %>% filter(Home == "Real Madrid") %>% filter(Date<"2021-12-31") %>%
slice_max(Date, n=6) %>% select(Home, HomeGoals, Away, AwayGoals) %>%
mutate(Ganador= HomeGoals-AwayGoals) %>%
mutate(Resultado = ifelse(Ganador >=1, "1", Ganador)) %>%
mutate(Resultado = as.numeric( ifelse(Resultado <= -1, "-1", Resultado))) %>%
summarise(Localv=sum(Resultado)) %>% mutate(Squad= "Real Madrid")
Visitantev <- datos %>% filter(Away=="Real Madrid")%>% filter(Date<"2021-12-31") %>%
slice_max(Date, n=6) %>% select(Home, HomeGoals, Away, AwayGoals) %>%
mutate(Ganador= HomeGoals-AwayGoals) %>%
mutate(Resultado = ifelse(Ganador >=1, "-1", Ganador)) %>%
mutate(Resultado = as.numeric(ifelse(Resultado >= 1, "1", Resultado))) %>%
summarise(Visitantev=sum(Resultado)) %>% mutate(Squad= "Real Madrid")
#Poner el equipo visitante (En ambos)
#Cuidado, los datos son del 2021-12-31, se debería poner la fecha de la última jornada
Locale<- datos %>% filter(Home == "Valencia") %>% filter(Date<"2021-12-31") %>%
slice_max(Date, n=6) %>% select(Home, HomeGoals, Away, AwayGoals) %>%
mutate(Ganador= HomeGoals-AwayGoals) %>%
mutate(Resultado = ifelse(Ganador >=1, "1", Ganador)) %>%
mutate(Resultado = as.numeric( ifelse(Resultado <= -1, "-1", Resultado))) %>%
summarise(Localv=sum(Resultado)) %>% mutate(Squad= "Valencia")
Visitantee <- datos %>% filter(Away=="Valencia")%>% filter(Date<"2021-12-31") %>%
slice_max(Date, n=6) %>% select(Home, HomeGoals, Away, AwayGoals) %>%
mutate(Ganador= HomeGoals-AwayGoals) %>%
mutate(Resultado = ifelse(Ganador >=1, "-1", Ganador)) %>%
mutate(Resultado = as.numeric(ifelse(Resultado >= 1, "1", Resultado))) %>%
summarise(Visitantee=sum(Resultado)) %>% mutate(Squad= "Valencia")
prueba<-full_join(prueba,Localv)
prueba<-full_join(prueba, Visitantee)
prueba<-prueba %>% mutate(DGan= Localv-lag(Visitantee)) %>%
mutate(prueba= ifelse(DGan>0, prueba+1, prueba),
prueba= ifelse(DGan<0, prueba-1, prueba))
#Ahora vamos a crear una variable que sea la suma de todas las variables de defensa: presión con éxito, bloquear un pase... pero como tienen distintas magnitudes, vamos a tipificar la variable para poder sumarlas
vamos<-get_season_team_stats(country = "ESP", gender = "M", season_end_year = 2022,tier="1st", stat_type = "defense")
vamosT<- vamos %>% select(Squad,TklW_Tackles, Succ_Pressures, Blocks_Blocks) %>%
mutate(TklW_Tackles = (TklW_Tackles- mean(TklW_Tackles))/sd(TklW_Tackles)) %>%
mutate(Succ_Pressures = (Succ_Pressures- mean(Succ_Pressures))/sd(Succ_Pressures)) %>%
mutate(Blocks_Blocks = (Blocks_Blocks- mean(Blocks_Blocks))/sd(Blocks_Blocks)) %>%
filter(Squad %in% c("vs Valencia", "Real Madrid")) %>% #vs es el equipo visitante y el otro el equipo local
mutate(Squad = ifelse(Squad=="vs Valencia", "Valencia", Squad)) #Esto es un coñazo pero hay que cambiarlo
prueba<-full_join(prueba, vamosT) %>%
mutate(Ddef= (TklW_Tackles - lag(TklW_Tackles)) + (Succ_Pressures - lag(Succ_Pressures))+ (Blocks_Blocks- lag(Blocks_Blocks)))
prueba<- prueba %>% mutate(prueba = ifelse(Ddef > 0, prueba+1 , prueba-1))
#Vamos a hacer lo mismo con los pases:
vamos2<-get_season_team_stats(country = "ESP", gender = "M", season_end_year = 2022,tier="1st", stat_type = "passing")
vamosT2<- vamos2 %>% select(Squad,Cmp_percent_Total,Ast,A_minus_xA, Final_Third, Prog)%>%
mutate(Cmp_percent_Total = (Cmp_percent_Total- mean(Cmp_percent_Total))/sd(Cmp_percent_Total)) %>%
mutate(Ast = (Ast- mean(Ast))/sd(Ast)) %>%
mutate(A_minus_xA = (A_minus_xA- mean(A_minus_xA))/sd(A_minus_xA)) %>%
mutate(Final_Third = (Final_Third- mean(Final_Third))/sd(Final_Third)) %>%
mutate(Prog = (Prog- mean(Prog))/sd(Prog)) %>%
filter(Squad %in% c("vs Valencia", "Real Madrid")) %>% #vs es el equipo visitante y el otro el equipo local
mutate(Squad = ifelse(Squad=="vs Valencia", "Valencia", Squad)) #Esto es un coñazo pero hay que cambiarlo
prueba<-full_join(prueba, vamosT2) %>%
mutate(Dpas= (Cmp_percent_Total - lag(Cmp_percent_Total)) + (Ast - lag(Ast))+ (A_minus_xA- lag(A_minus_xA))+ (Final_Third - lag(Final_Third))+ (Prog- lag(Prog)))
prueba<- prueba %>% mutate(prueba = ifelse(Dpas > 0, prueba+1 , prueba-1))
#Lo mismo con los disparos:
vamos3<-get_season_team_stats(country = "ESP", gender = "M", season_end_year = 2022,tier="1st", stat_type = "shooting")
vamosT3<- vamos3 %>% select(Squad,Gls_Standard, SoT_Standard,G_per_Sh_Standard) %>%
mutate(Gls_Standard = (Gls_Standard- mean(Gls_Standard))/sd(Gls_Standard)) %>%
mutate(SoT_Standard = (SoT_Standard- mean(SoT_Standard))/sd(SoT_Standard)) %>%
mutate(G_per_Sh_Standard = (G_per_Sh_Standard- mean(G_per_Sh_Standard))/sd(G_per_Sh_Standard)) %>%
filter(Squad %in% c("vs Valencia", "Real Madrid")) %>% #vs es el equipo visitante y el otro el equipo local
mutate(Squad = ifelse(Squad=="vs Valencia", "Valencia", Squad)) #Esto es un coñazo pero hay que cambiarlo
prueba<-full_join(prueba, vamosT3) %>%
mutate(Ddis= (Gls_Standard - lag(Gls_Standard)) + (SoT_Standard - lag(SoT_Standard))+ (G_per_Sh_Standard- lag(G_per_Sh_Standard)))
prueba<- prueba %>% mutate(prueba = ifelse(Ddis > 0, prueba+1 , prueba-1))
#Limpio un poquito el DF prueba:
prueba<- prueba %>% select(Squad, orden, prueba)
#Hago lo mismo con la posesión:
vamos4<-get_season_team_stats(country = "ESP", gender = "M", season_end_year = 2022,tier="1st", stat_type = "possession")
vamosT4<- vamos4 %>% select(Squad, Poss,Succ_percent_Dribbles, Final_Third_Carries)%>%
mutate(Poss = (Poss- mean(Poss))/sd(Poss)) %>%
mutate(Succ_percent_Dribbles = (Succ_percent_Dribbles- mean(Succ_percent_Dribbles))/sd(Succ_percent_Dribbles)) %>%
mutate(Final_Third_Carries = (Final_Third_Carries- mean(Final_Third_Carries))/sd(Final_Third_Carries)) %>%
filter(Squad %in% c("vs Valencia", "Real Madrid")) %>% #vs es el equipo visitante y el otro el equipo local
mutate(Squad = ifelse(Squad=="vs Valencia", "Valencia", Squad)) #Esto es un rollo pero hay que cambiarlo
prueba<-full_join(prueba, vamosT4) %>%
mutate(Ddis= (Poss - lag(Poss)) + (Succ_percent_Dribbles - lag(Succ_percent_Dribbles))+ (Final_Third_Carries- lag(Final_Third_Carries)))
prueba<- prueba %>% mutate(prueba = ifelse(Ddis > 0, prueba+1 , prueba-1))
En vez de marcador, lo llamé prueba, como podemos ver. Y a estas alturas, después de aplicar los criterios que he considerado, está tal que así:
Squad | prueba |
---|---|
Valencia | NA |
Real Madrid | 7 |
Pero esto queda un poco raro… además, surge el problema de que el marcador quede en 0, o en +/- 1, lo cual tampoco sería un resultado muy claro…
Resultado_final<- prueba %>% select(Squad, prueba) %>%
mutate(Ganador = ifelse(prueba > 1, "Equipo local", prueba),
Ganador = ifelse(prueba==1, "Nada concluyente", Ganador),
Ganador = ifelse(prueba==(-1), "Nada concluyente", Ganador),
Ganador = ifelse(prueba==0, "Nada concluyente", Ganador),
Ganador = ifelse(prueba<(-1), "Equipo visitante", Ganador)
Ahora ya lo tenemos… ¿Y qué significa cada cosa? Equipo local y Equipo visitante es el ganador; en el caso de Nada Concluyente, es que el partido va a estar bastante igualado y el resultado será o empate o una victorio por un gol sólo.
Veamos el resultado en el caso del partido Real Madrid-Valencia:
prueba | Ganador |
---|---|
7 | Equipo local |
Y parece que he acertado… el Real Madrid ganó 4-1 al Valencia
prueba | Ganador |
---|---|
0 | Nada concluyente |
Hemos acertado! Y este era difícil… Nada concluyente= Empate o diferencia de un gol.
prueba | Ganador |
---|---|
-3 | Equipo visitante |
prueba | Ganador |
---|---|
1 | Nada concluyente |
prueba | Ganador |
---|---|
-1 | Nada concluyente |
prueba | Ganador |
---|---|
6 | Equipo local |
prueba | Ganador |
---|---|
-1 | Nada concluyente |
prueba | Ganador |
---|---|
3 | Equipo local |
prueba | Ganador |
---|---|
1 | Nada concluyente |
Los dos trabajos en los que me he inspirado han sido:
Recuerda que tienes que mandarme un mail con tu nombre, usuario de Github y nombre de tu trabajo
Recuerda que el repo de Github se ha de llamar EXACTAMENTE “trabajo_BigData”
Por favor, no cambies el primer párrafo. Sirve para dar contexto al trabajo y remitir a los potenciales lectores a la web del curso y poder ver los otros trabajos. Bueno, si que has de cambiar algo: has de sutituir “perezp44” por tu usuario de Github, tanto en el archivo index.Rmd como en el Readme.Rmd
R️ecuerda, el 7 de enero fecha límite para la entrega .(Perdón…)
- Session info ---------------------------------------------------------------
setting value
version R version 4.1.1 (2021-08-10)
os Windows 10 x64
system x86_64, mingw32
ui RTerm
language (EN)
collate Spanish_Spain.1252
ctype Spanish_Spain.1252
tz Europe/Paris
date 2022-01-09
- Packages -------------------------------------------------------------------
package * version date lib source
abind 1.4-5 2016-07-21 [2] CRAN (R 4.1.1)
assertthat 0.2.1 2019-03-21 [2] CRAN (R 4.1.1)
backports 1.2.1 2020-12-09 [2] CRAN (R 4.1.0)
bit 4.0.4 2020-08-04 [2] CRAN (R 4.1.1)
bit64 4.0.5 2020-08-30 [2] CRAN (R 4.1.1)
broom 0.7.9 2021-07-27 [2] CRAN (R 4.1.1)
bslib 0.3.1 2021-10-06 [2] CRAN (R 4.1.1)
car 3.0-11 2021-06-27 [2] CRAN (R 4.1.1)
carData 3.0-4 2020-05-22 [2] CRAN (R 4.1.1)
cellranger 1.1.0 2016-07-27 [2] CRAN (R 4.1.1)
cli 3.0.1 2021-07-17 [2] CRAN (R 4.1.1)
clipr 0.7.1 2020-10-08 [2] CRAN (R 4.1.1)
colorspace 2.0-2 2021-06-24 [2] CRAN (R 4.1.1)
crayon 1.4.2 2021-10-29 [2] CRAN (R 4.1.1)
curl 4.3.2 2021-06-23 [2] CRAN (R 4.1.1)
data.table 1.14.0 2021-02-21 [2] CRAN (R 4.1.1)
DBI 1.1.1 2021-01-15 [2] CRAN (R 4.1.1)
dbplyr 2.1.1 2021-04-06 [2] CRAN (R 4.1.1)
desc 1.3.0 2021-03-05 [2] CRAN (R 4.1.1)
details 0.2.1 2020-01-12 [2] CRAN (R 4.1.1)
digest 0.6.28 2021-09-23 [2] CRAN (R 4.1.1)
dplyr * 1.0.7 2021-06-18 [2] CRAN (R 4.1.1)
DT * 0.19 2021-09-02 [2] CRAN (R 4.1.1)
ellipsis 0.3.2 2021-04-29 [2] CRAN (R 4.1.1)
evaluate 0.14 2019-05-28 [2] CRAN (R 4.1.1)
fansi 0.5.0 2021-05-25 [2] CRAN (R 4.1.1)
farver 2.1.0 2021-02-28 [2] CRAN (R 4.1.1)
fastmap 1.1.0 2021-01-25 [2] CRAN (R 4.1.1)
forcats * 0.5.1 2021-01-27 [2] CRAN (R 4.1.1)
foreign 0.8-81 2020-12-22 [2] CRAN (R 4.1.1)
fs 1.5.0 2020-07-31 [2] CRAN (R 4.1.1)
generics 0.1.1 2021-10-25 [2] CRAN (R 4.1.1)
gganimate * 1.0.7 2020-10-15 [2] CRAN (R 4.1.2)
ggfun 0.0.4 2021-09-17 [2] CRAN (R 4.1.2)
ggimage * 0.3.0 2021-09-29 [2] CRAN (R 4.1.2)
ggplot2 * 3.3.5 2021-06-25 [2] CRAN (R 4.1.1)
ggplotify 0.1.0 2021-09-02 [2] CRAN (R 4.1.2)
ggpubr * 0.4.0 2020-06-27 [2] CRAN (R 4.1.1)
ggrepel * 0.9.1 2021-01-15 [2] CRAN (R 4.1.1)
ggsignif 0.6.3 2021-09-09 [2] CRAN (R 4.1.1)
ggsoccer * 0.1.6 2020-06-21 [1] CRAN (R 4.1.2)
gifski 1.4.3-1 2021-05-02 [2] CRAN (R 4.1.2)
glue 1.4.2 2020-08-27 [2] CRAN (R 4.1.1)
gridBase 0.4-7 2014-02-24 [2] CRAN (R 4.1.1)
gridExtra * 2.3 2017-09-09 [2] CRAN (R 4.1.1)
gridGraphics 0.5-1 2020-12-13 [2] CRAN (R 4.1.1)
gtable 0.3.0 2019-03-25 [2] CRAN (R 4.1.1)
haven 2.4.3 2021-08-04 [2] CRAN (R 4.1.1)
highr 0.9 2021-04-16 [2] CRAN (R 4.1.1)
hms 1.1.0 2021-05-17 [2] CRAN (R 4.1.1)
htmltools 0.5.2 2021-08-25 [2] CRAN (R 4.1.1)
htmlwidgets 1.5.4 2021-09-08 [2] CRAN (R 4.1.1)
httpuv 1.6.3 2021-09-09 [2] CRAN (R 4.1.1)
httr 1.4.2 2020-07-20 [2] CRAN (R 4.1.1)
igraph 1.2.7 2021-10-15 [2] CRAN (R 4.1.1)
jquerylib 0.1.4 2021-04-26 [2] CRAN (R 4.1.1)
jsonlite 1.7.2 2020-12-09 [2] CRAN (R 4.1.1)
kableExtra * 1.3.4 2021-02-20 [2] CRAN (R 4.1.1)
klippy * 0.0.0.9500 2021-11-12 [2] Github (rlesur/klippy@378c247)
knitr * 1.36 2021-09-29 [2] CRAN (R 4.1.1)
labeling 0.4.2 2020-10-20 [2] CRAN (R 4.1.0)
later 1.3.0 2021-08-18 [2] CRAN (R 4.1.1)
lattice 0.20-44 2021-05-02 [2] CRAN (R 4.1.1)
lifecycle 1.0.1 2021-09-24 [2] CRAN (R 4.1.1)
lubridate 1.7.10 2021-02-26 [2] CRAN (R 4.1.1)
magick 2.7.3 2021-08-18 [2] CRAN (R 4.1.1)
magrittr 2.0.1 2020-11-17 [2] CRAN (R 4.1.1)
Matrix 1.3-4 2021-06-01 [2] CRAN (R 4.1.1)
mgcv 1.8-36 2021-06-01 [2] CRAN (R 4.1.1)
mime 0.12 2021-09-28 [2] CRAN (R 4.1.1)
modelr 0.1.8 2020-05-19 [2] CRAN (R 4.1.1)
munsell 0.5.0 2018-06-12 [2] CRAN (R 4.1.1)
nlme 3.1-152 2021-02-04 [2] CRAN (R 4.1.1)
openxlsx 4.2.4 2021-06-16 [2] CRAN (R 4.1.1)
pillar 1.6.4 2021-10-18 [2] CRAN (R 4.1.1)
pkgconfig 2.0.3 2019-09-22 [2] CRAN (R 4.1.1)
plyr 1.8.6 2020-03-03 [2] CRAN (R 4.1.1)
png 0.1-7 2013-12-03 [2] CRAN (R 4.1.1)
prettyunits 1.1.1 2020-01-24 [2] CRAN (R 4.1.1)
progress 1.2.2 2019-05-16 [2] CRAN (R 4.1.1)
promises 1.2.0.1 2021-02-11 [2] CRAN (R 4.1.1)
purrr * 0.3.4 2020-04-17 [2] CRAN (R 4.1.1)
qdapRegex 0.7.2 2017-04-09 [1] CRAN (R 4.1.2)
R6 2.5.1 2021-08-19 [2] CRAN (R 4.1.1)
RColorBrewer * 1.1-2 2014-12-07 [2] CRAN (R 4.1.0)
Rcpp 1.0.7 2021-07-07 [2] CRAN (R 4.1.1)
readr * 2.0.1 2021-08-10 [2] CRAN (R 4.1.1)
readxl 1.3.1 2019-03-13 [2] CRAN (R 4.1.1)
reprex 2.0.1 2021-08-05 [2] CRAN (R 4.1.1)
rio * 0.5.27 2021-06-21 [2] CRAN (R 4.1.1)
rlang 0.4.11 2021-04-30 [2] CRAN (R 4.1.1)
rmarkdown 2.11 2021-09-14 [2] CRAN (R 4.1.1)
rprojroot 2.0.2 2020-11-15 [2] CRAN (R 4.1.1)
rstatix 0.7.0 2021-02-13 [2] CRAN (R 4.1.1)
rstudioapi 0.13 2020-11-12 [2] CRAN (R 4.1.1)
rvest 1.0.2 2021-10-16 [2] CRAN (R 4.1.2)
sass 0.4.0 2021-05-12 [2] CRAN (R 4.1.1)
scales 1.1.1 2020-05-11 [2] CRAN (R 4.1.1)
selectr 0.4-2 2019-11-20 [2] CRAN (R 4.1.1)
sessioninfo 1.1.1 2018-11-05 [2] CRAN (R 4.1.1)
shiny 1.7.1 2021-10-02 [2] CRAN (R 4.1.1)
stringi 1.7.4 2021-08-25 [2] CRAN (R 4.1.1)
stringr * 1.4.0 2019-02-10 [2] CRAN (R 4.1.1)
svglite 2.0.0 2021-02-20 [2] CRAN (R 4.1.1)
systemfonts 1.0.3 2021-10-13 [2] CRAN (R 4.1.1)
tibble * 3.1.4 2021-08-25 [2] CRAN (R 4.1.1)
tidyr * 1.1.3 2021-03-03 [2] CRAN (R 4.1.1)
tidyselect 1.1.1 2021-04-30 [2] CRAN (R 4.1.1)
tidyverse * 1.3.1 2021-04-15 [2] CRAN (R 4.1.1)
treemap * 2.4-3 2021-08-22 [2] CRAN (R 4.1.1)
tweenr 1.0.2 2021-03-23 [2] CRAN (R 4.1.2)
tzdb 0.1.2 2021-07-20 [2] CRAN (R 4.1.1)
utf8 1.2.2 2021-07-24 [2] CRAN (R 4.1.1)
vctrs 0.3.8 2021-04-29 [2] CRAN (R 4.1.1)
viridisLite 0.4.0 2021-04-13 [2] CRAN (R 4.1.1)
vroom 1.5.4 2021-08-05 [2] CRAN (R 4.1.1)
webshot 0.5.2 2019-11-22 [2] CRAN (R 4.1.2)
withr 2.4.2 2021-04-18 [2] CRAN (R 4.1.1)
worldfootballR * 0.4.8 2022-01-06 [1] CRAN (R 4.1.2)
xfun 0.27 2021-10-18 [2] CRAN (R 4.1.1)
xml2 1.3.2 2020-04-23 [2] CRAN (R 4.1.1)
xtable 1.8-4 2019-04-21 [2] CRAN (R 4.1.1)
yaml 2.2.1 2020-02-01 [2] CRAN (R 4.1.0)
yulab.utils 0.0.4 2021-10-09 [2] CRAN (R 4.1.2)
zip 2.2.0 2021-05-31 [2] CRAN (R 4.1.1)
[1] C:/Users/srale/Documents/R/win-library/4.1
[2] C:/Users/srale/Documents/R/R-4.1.1/library