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í.
Resumen: Podríamos decir que, aunque en las últimas décadas muchos deportes han ganado popularidad, el fútbol es el deporte más extendido y seguido por aficionados, al menos a nivel europeo. Además, otros continentes como América o Ásia que no han tenido una cultura histórica futbolera como en Europa, están pasando por un proceso de extensión de dicho deporte en sus territorios. Sin embargo, la opinión popular de los aficionados nos dice que las mejores competiciones se juegan en Europa. Por ello, voy a analizar las 5 principales ligas de fútbol europeo.
Competiciones a analizar: La Liga (liga española), Bundesliga (Liga alemana), Serie A (Liga italiana), Premier League (Liga inglesa) y Ligue 1 (Liga fracesa).
Como se ha comentado a lo largo del curso y, tras mi experiencia trabajando con datos del INE en el Trabajo de Equipo, la principal problemática suele girar entorno al estado en que recibimos los datos. En mi caso, he trabajado con datos obtenidos de la plataforma Kaggle, plataforma dedicada al posteo de data frames. Esto ha hecho que los datos con los que he trabajado estubieran muy arreglados. Simplemente he tenido que renombrar y seleccionar.
#Importamos al Global Environment el archivo descargado de Kaggle
df_futbol <- rio::import("./datos/Football teams.csv")
#La unica limpieza que hacemos son los nombres, para poner los que tenemos más familiarizados
df_futbol <- df_futbol %>%
rename(Equipo = Team, Liga=Tournament, Tiros=Shots, Amarillas=yellow_cards, Rojas=red_cards, Goles=Goals)
Como he comentado anteriormente, Kaggle es una plataforma que, entre otras funciones, sirve para postear trabajos relacionados con los datos. Lo curioso es que puedes encontrar datos de todo tipo. Desde precios de activos financieros hasta datos deportivos. En mi caso me he basado en datos de los siguientes usuarios :
varpit94
TANUJLEOMESSI
AHMET ÇALIŞ
RUPESH KR SINGH
RIBACKI
En este gráfico, se puede apreciar el máximo y el mínimo de goles anotados por un equipo de cada liga, así como el número promedio de goles que se han marcado en esa liga. Por tanto, podemos ver que el equipo que más goles ha anotado juega en la Bundesliga, el equipo que menos tantos ha conseguido juega para la Premier League. Además, por término medio, la Bundesliga es la competición con más goles y La Liga es la que menos tiene.
p1 <- ggplot (data= df_futbol, aes (x=Liga, y=Goles, fill=Liga))+
geom_boxplot() +
labs(title = "Gráfico 1: Goles por Liga",
fill = "Competición" ) +
theme_dark()+
theme(legend.position = "none") +
theme(text = element_text(face = "bold"))
ggplotly(p1)
En este caso se pueden observar el TOP 10 de los equipos con más goles y con menos goles. Nos encontramos con que la Bundesliga tiene 4 equipos dentro del TOP 10 de más anotadores, cosa que concuerda con lo explicado en el Punto 3. Por otra parte, otro hecho destacable es que la Serie A no tiene ningún equipo en el TOP 10 menos goleadores.
Cabe destacar que, aunque es un TOP 10, aparecen + - 10 equipos debido a que hay empate en el número de goles.
df_mas <- df_futbol %>%
filter(min_rank(desc(Goles))<10)
df_menos <- df_futbol %>%
filter(min_rank(Goles)<10)
pmas <- ggplot(data= df_mas, aes(x=Equipo, y=Goles))+
geom_bar(stat="identity",aes(fill=Liga),colour="Black")+
labs(title= "Top10 equipos más goleadores")+
theme(text = element_text(face = "bold")) + theme_minimal()
ggplotly(pmas)
pmenos <- ggplot(data= df_menos, aes(x=Equipo, y=Goles))+
geom_bar(stat="identity",aes(fill=Liga),colour="Black")+
labs(title= "Top10 equipos menos goleadores")+
theme(text = element_text(face = "bold"))+ theme_minimal()
pmenos <- pmenos + lims(y=c(0,100))
ggplotly(pmenos)
p2 <- pmas + pmenos
p2
Antes que nada, hay que destacar que he elegido establecer una escala libre en cada competición para poder exagerar las formas y que sea más visual. Por tanto, a la hora de analizar hay que tener en cuenta la escala del eje y. Podemos apreciar que, como se ha demostrado anteriormente, la Serie A, aunque concentra muchos de sus equipos en la parte bja del gráfico: rango de goles 40-60, no tiene ningún equipo que anote menos de 39 goles, a diferencia de lo que ocurre por ejemplo en la Premier League, donde hay un equipo con 19 goles.
p3 <- ggplot(data= df_futbol, aes(x=Liga, y=Goles, fill=Liga)) +
geom_violin() +
facet_wrap(Liga~., scales = "free")+
geom_jitter() +
theme_classic()+
theme(legend.position = "none")
ggplotly(p3)
En esta ocasión se intenta demostrar si hay una relación entre el % de posesión, la cantidad de tiros por partido y el número de goles anotados. La pregunta que nos podríamos hacer sería: ¿Los que más marcan son los que mas tiros hacen y más mantienen el balón?. Primero que nada se puede observar que la línea de tendencia es creciente, cosa que se traduce en que a medida que el % de posesión y el número de tiros aumentan, tambien lo hace el número de goles. Además, se puede observar que el equipo que más posesión tiene se encuentra en La Liga y hemos visto anteriormente que no es el más goleador. Por tanto, como el más goleador se encuentra en la Bundesliga, para ver quien es el que más goles marcará, influye en mayor medida el número de tiros que se hacen por partido.
p4 <- ggballoonplot(data= df_futbol ,x="Possession", y="Tiros", fill="Liga")+
theme_classic()+
labs(title = "Grafico 4: Relación Posesión-Tiros-Goles")+
geom_smooth(color="black")
p4
En esta ocasión se pretende mostrar los 10 equipos con más tarjetas, tanto rojas como amarillas. El equipo más “duro” fué el Getafe, de La Liga, el cual también está dentro del TOP3 tarjetas rojas. El equipo con más amonestaciones graves (tarjetas rojas) es el Marseille, de la Ligue 1, con un total de 9 rojas.
df_5 <- df_futbol %>%
group_by(Liga) %>%
mutate(Total = Amarillas + Rojas) %>%
select(Equipo ,Amarillas, Rojas, Total ) %>%
top_n(2, Total)
p5 <- ggplot(df_5) +
aes(x = Equipo, fill = Rojas, weight = Total) +
geom_bar() +
scale_fill_distiller(palette = "Reds", direction = 1) +
labs(x = "Equipo",
y ="Total Tarjetas",
title = "Top 10 equipos más amonestados",
subtitle = "Tarjetas amarillas y rojas",
fill = "Rojas") +
ggthemes::theme_base()
ggplotly(p5)
Por último, he querido mostrar la valoración general (Rating) de todos los equipos. Se puede apreciar que el mejor equipo en la temporada 20/21 fué el Manchester City, de la liga inglesa, mientras que el peor fué el Schalke 04, de la liga alemana. Cabe destacar también que los ingleses tienen la mayor parte de sus equipos en el rango de rating 6.6 - 7
p6 <- ggplot(df_futbol, aes(x=Equipo, y=Rating, fill=Liga))+
geom_point()+
facet_grid(cols=vars(Liga))+
theme(legend.position = "none")+
labs(title="Rating de los equipos")
ggplotly(p6)
Se han analizado parámetros de las que son consideradas cómo las mejores ligas europeas, pero ¿cual es la mejor liga?. Esto depende del gusto de cada aficionado, pero el consenso general nos dice que esta decisión va variando. Hasta la temporada, aproximadamente, 18/19, La Liga (liga española) era considerada la mejor, con equipos que dieron mucho espectáculo y con mucha calidad de fútbol (ejemplo, el gran % de posesión actual de sus equipos). Hoy por hoy, los ingleses son considerados como los principales creadores de espectáculo futbolístico, entre otras, gracias a su velocidad de juego
Kaggle
rPubs
ggPlot
Tutoriales
- 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-05
- Packages -------------------------------------------------------------------
package * version date lib source
abind 1.4-5 2016-07-21 [1] CRAN (R 4.1.1)
assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.1.1)
backports 1.2.1 2020-12-09 [1] CRAN (R 4.1.1)
broom 0.7.9 2021-07-27 [1] CRAN (R 4.1.1)
bslib 0.3.1 2021-10-06 [1] CRAN (R 4.1.1)
car 3.0-12 2021-11-06 [1] CRAN (R 4.1.2)
carData * 3.0-4 2020-05-22 [1] CRAN (R 4.1.1)
cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.1.1)
class 7.3-19 2021-05-03 [2] CRAN (R 4.1.1)
classInt 0.4-3 2020-04-07 [1] CRAN (R 4.1.1)
cli 3.0.1 2021-07-17 [1] CRAN (R 4.1.1)
clipr 0.7.1 2020-10-08 [1] CRAN (R 4.1.1)
colorspace 2.0-2 2021-06-24 [1] CRAN (R 4.1.1)
crayon 1.4.2 2021-10-29 [1] CRAN (R 4.1.1)
crosstalk * 1.1.1 2021-01-12 [1] CRAN (R 4.1.1)
curl 4.3.2 2021-06-23 [1] CRAN (R 4.1.1)
data.table 1.14.0 2021-02-21 [1] CRAN (R 4.1.1)
DBI 1.1.1 2021-01-15 [1] CRAN (R 4.1.1)
dbplyr 2.1.1 2021-04-06 [1] CRAN (R 4.1.1)
desc 1.4.0 2021-09-28 [1] CRAN (R 4.1.1)
details 0.2.1 2020-01-12 [1] CRAN (R 4.1.1)
digest 0.6.28 2021-09-23 [1] CRAN (R 4.1.1)
dplyr * 1.0.7 2021-06-18 [1] CRAN (R 4.1.1)
e1071 1.7-8 2021-07-28 [1] CRAN (R 4.1.1)
ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.1.1)
evaluate 0.14 2019-05-28 [1] CRAN (R 4.1.1)
extrafont 0.17 2014-12-08 [1] CRAN (R 4.1.1)
extrafontdb 1.0 2012-06-11 [1] CRAN (R 4.1.1)
fansi 0.5.0 2021-05-25 [1] CRAN (R 4.1.1)
farver 2.1.0 2021-02-28 [1] CRAN (R 4.1.1)
fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.1.1)
forcats * 0.5.1 2021-01-27 [1] CRAN (R 4.1.1)
foreign 0.8-81 2020-12-22 [2] CRAN (R 4.1.1)
formatR 1.11 2021-06-01 [1] CRAN (R 4.1.1)
fs 1.5.0 2020-07-31 [1] CRAN (R 4.1.1)
gdtools 0.2.3 2021-01-06 [1] CRAN (R 4.1.1)
generics 0.1.1 2021-10-25 [1] CRAN (R 4.1.1)
gganimate * 1.0.7 2020-10-15 [1] CRAN (R 4.1.1)
ggplot2 * 3.3.5 2021-06-25 [1] CRAN (R 4.1.1)
ggpubr * 0.4.0 2020-06-27 [1] CRAN (R 4.1.2)
ggrepel * 0.9.1 2021-01-15 [1] CRAN (R 4.1.2)
ggsignif 0.6.3 2021-09-09 [1] CRAN (R 4.1.2)
ggThemeAssist * 0.1.5 2016-08-13 [1] CRAN (R 4.1.1)
ggthemes 4.2.4 2021-01-20 [1] CRAN (R 4.1.1)
gifski 1.4.3-1 2021-05-02 [1] CRAN (R 4.1.2)
glue 1.5.0 2021-11-07 [1] CRAN (R 4.1.2)
gtable 0.3.0 2019-03-25 [1] CRAN (R 4.1.1)
haven 2.4.3 2021-08-04 [1] CRAN (R 4.1.1)
highr 0.9 2021-04-16 [1] CRAN (R 4.1.1)
hms 1.1.0 2021-05-17 [1] CRAN (R 4.1.1)
hrbrthemes * 0.8.0 2020-03-06 [1] CRAN (R 4.1.1)
htmltools 0.5.2 2021-08-25 [1] CRAN (R 4.1.1)
htmlwidgets 1.5.4 2021-09-08 [1] CRAN (R 4.1.1)
httpuv 1.6.3 2021-09-09 [1] CRAN (R 4.1.1)
httr 1.4.2 2020-07-20 [1] CRAN (R 4.1.1)
jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.1.1)
jsonlite 1.7.2 2020-12-09 [1] CRAN (R 4.1.1)
KernSmooth 2.23-20 2021-05-03 [2] CRAN (R 4.1.1)
klippy * 0.0.0.9500 2021-11-30 [1] Github (rlesur/klippy@378c247)
knitr * 1.36 2021-09-29 [1] CRAN (R 4.1.1)
labeling 0.4.2 2020-10-20 [1] CRAN (R 4.1.1)
later 1.3.0 2021-08-18 [1] CRAN (R 4.1.1)
lattice 0.20-44 2021-05-02 [2] CRAN (R 4.1.1)
lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.1.1)
lifecycle 1.0.1 2021-09-24 [1] CRAN (R 4.1.1)
lubridate 1.7.10 2021-02-26 [1] CRAN (R 4.1.1)
magrittr 2.0.1 2020-11-17 [1] 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 [1] CRAN (R 4.1.1)
miniUI 0.1.1.1 2018-05-18 [1] CRAN (R 4.1.1)
modelr 0.1.8 2020-05-19 [1] CRAN (R 4.1.1)
munsell 0.5.0 2018-06-12 [1] 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 [1] CRAN (R 4.1.1)
patchwork * 1.1.1 2020-12-17 [1] CRAN (R 4.1.1)
pillar 1.6.4 2021-10-18 [1] CRAN (R 4.1.1)
pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.1.1)
plotly * 4.9.4.1 2021-06-18 [1] CRAN (R 4.1.1)
png 0.1-7 2013-12-03 [1] CRAN (R 4.1.1)
prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.1.1)
progress 1.2.2 2019-05-16 [1] CRAN (R 4.1.1)
promises 1.2.0.1 2021-02-11 [1] CRAN (R 4.1.1)
proxy 0.4-26 2021-06-07 [1] CRAN (R 4.1.1)
purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.1.1)
R6 2.5.1 2021-08-19 [1] CRAN (R 4.1.1)
RColorBrewer * 1.1-2 2014-12-07 [1] CRAN (R 4.1.1)
Rcpp 1.0.7 2021-07-07 [1] CRAN (R 4.1.1)
reactable * 0.2.3 2020-10-04 [1] CRAN (R 4.1.1)
readr * 2.0.1 2021-08-10 [1] CRAN (R 4.1.1)
readxl * 1.3.1 2019-03-13 [1] CRAN (R 4.1.1)
reprex 2.0.1 2021-08-05 [1] CRAN (R 4.1.1)
rio * 0.5.27 2021-06-21 [1] CRAN (R 4.1.1)
rlang 0.4.12 2021-10-18 [1] CRAN (R 4.1.1)
rmarkdown 2.11 2021-09-14 [1] CRAN (R 4.1.1)
rprojroot 2.0.2 2020-11-15 [1] CRAN (R 4.1.1)
rstatix 0.7.0 2021-02-13 [1] CRAN (R 4.1.2)
rstudioapi 0.13 2020-11-12 [1] CRAN (R 4.1.1)
Rttf2pt1 1.3.9 2021-07-22 [1] CRAN (R 4.1.1)
rvest 1.0.1 2021-07-26 [1] CRAN (R 4.1.1)
sass 0.4.0 2021-05-12 [1] CRAN (R 4.1.1)
scales 1.1.1 2020-05-11 [1] CRAN (R 4.1.1)
sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.1.1)
sf * 1.0-2 2021-07-26 [1] CRAN (R 4.1.1)
shiny 1.7.1 2021-10-02 [1] CRAN (R 4.1.1)
stringi * 1.7.5 2021-10-04 [1] CRAN (R 4.1.1)
stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.1.1)
systemfonts 1.0.3 2021-10-13 [1] CRAN (R 4.1.1)
tibble * 3.1.5 2021-09-30 [1] CRAN (R 4.1.1)
tidyr * 1.1.3 2021-03-03 [1] CRAN (R 4.1.1)
tidyselect 1.1.1 2021-04-30 [1] CRAN (R 4.1.1)
tidyverse * 1.3.1 2021-04-15 [1] CRAN (R 4.1.1)
tweenr 1.0.2 2021-03-23 [1] CRAN (R 4.1.1)
tzdb 0.1.2 2021-07-20 [1] CRAN (R 4.1.1)
units 0.7-2 2021-06-08 [1] CRAN (R 4.1.1)
utf8 1.2.2 2021-07-24 [1] CRAN (R 4.1.1)
vctrs 0.3.8 2021-04-29 [1] CRAN (R 4.1.1)
viridisLite 0.4.0 2021-04-13 [1] CRAN (R 4.1.1)
withr 2.4.2 2021-04-18 [1] CRAN (R 4.1.1)
xfun 0.28 2021-11-04 [1] CRAN (R 4.1.2)
xml2 1.3.2 2020-04-23 [1] CRAN (R 4.1.1)
xtable 1.8-4 2019-04-21 [1] CRAN (R 4.1.1)
yaml 2.2.1 2020-02-01 [1] CRAN (R 4.1.1)
zip 2.2.0 2021-05-31 [1] CRAN (R 4.1.1)
[1] C:/Users/ruben/Documents/R/win-library/4.1
[2] C:/Program Files/R/R-4.1.1/library