library(tidyverse)
library(readxl)
library(summarytools)
library(ggplot2)
library(corrplot)
library(div)
library(htmltools)#Elegir variables numericas para mejor manejo
variable_num <- Fifa_1 %>%
select(`Goals Scored`, `Assists Provided`, `Dribbles per 90 Min`,
`Interceptions per 90 Min`, `Tackles per 90 Min`, `Total Duels Won per 90 Min`, `Appearances`)
# Calcular la matriz de correlación
cor_matrix <- cor(variable_num, use = "complete.obs")
# Mostrar la matriz de correlación
cor_matrix## Goals Scored Assists Provided Dribbles per 90 Min
## Goals Scored 1.00000000 0.77250940 0.3337021
## Assists Provided 0.77250940 1.00000000 0.4233079
## Dribbles per 90 Min 0.33370209 0.42330791 1.0000000
## Interceptions per 90 Min -0.20930835 -0.11789226 -0.1716566
## Tackles per 90 Min -0.07218927 0.03877877 -0.1163693
## Total Duels Won per 90 Min 0.08142639 0.26292785 0.1620224
## Appearances 0.36788386 0.41670430 0.1323213
## Interceptions per 90 Min Tackles per 90 Min
## Goals Scored -0.2093083 -0.07218927
## Assists Provided -0.1178923 0.03877877
## Dribbles per 90 Min -0.1716566 -0.11636929
## Interceptions per 90 Min 1.0000000 0.40918699
## Tackles per 90 Min 0.4091870 1.00000000
## Total Duels Won per 90 Min 0.4900650 0.73902948
## Appearances 0.1777929 0.30425995
## Total Duels Won per 90 Min Appearances
## Goals Scored 0.08142639 0.3678839
## Assists Provided 0.26292785 0.4167043
## Dribbles per 90 Min 0.16202241 0.1323213
## Interceptions per 90 Min 0.49006502 0.1777929
## Tackles per 90 Min 0.73902948 0.3042600
## Total Duels Won per 90 Min 1.00000000 0.4531469
## Appearances 0.45314686 1.0000000
# Visualizar la matriz de correlación
corrplot(cor_matrix, method = "circle", type = "upper",
tl.col = "black", tl.srt = 45, # Títulos en los ejes
addCoef.col = "black", # Añadir coeficientes de correlación
diag = FALSE) # No mostrar los coeficientes en la diagonalNota: El coeficiente de correlación de Pearson (r) es un valor que va de -1 a 1, donde: valores proximos a 1 indican una correlación positiva (cuando una variable aumenta, la otra también lo hace de manera proporcional). valores proximos a -1 indican una Correlación negativa (cuando una variable aumenta, la otra disminuye proporcionalmente) y cuando es cero 0 indica que no hay correlación.
# Promedio de regates por posicion
ggplot(Fifa_1, aes(x = Position, y = `Dribbles per 90 Min`, fill = Position)) +
geom_boxplot(outlier.colour = "red", outlier.size = 3, outlier.shape = 16) + # Añadir color y tamaño a los outliers
labs(title = "Distribución de Regates por Posición", x = "Posición", y = "Regates por 90 Min") +
scale_fill_brewer(palette = "Set3") + # Usar una paleta de colores agradable
theme_minimal() + # Tema limpio
theme(axis.text.x = element_text(angle = 45, hjust = 1), # Rotar etiquetas del eje X
plot.title = element_text(hjust = 0.5)) # Centrar el títuloResumen: Em el gráfico se puede identificar diferencias significativas entre posiciones, las posiciones ofensivas o de extremo suelen mostrar una mediana y valores superiores en regates, lo que refleja una mayor implicación en la generación de desequilibrios y en el juego individual, mientras que las posiciones más defensivas registran cifras menores, acorde a sus funciones en el campo. La variabilidad dentro de cada grupo también es evidente, ya que algunas posiciones presentan un rango intercuartílico amplio, lo que sugiere diferencias en la consistencia del desempeño individual.
#Resumen de goles por club
fifa_club_goals <-Fifa_1 %>%
group_by(Club) %>%
summarise(Goles = sum(`Goals Scored`, na.rm = TRUE))
# Borde a las barras geom_bar
# Agregar etiquetas de valores geom_text
# Tema minimalista y fuente más grande themes_minimal
# Rotación de las etiquetas theme(argumento)
#Líneas de cuadrícula panel.grip.major
ggplot(fifa_club_goals, aes(x = reorder(Club, Goles), y = Goles, fill = Club)) +
geom_bar(stat = "identity", show.legend = FALSE, color = "black", size = 0.5) +
coord_flip() +
geom_text(aes(label = Goles), hjust = -0.2, size = 4, color = "black") +
labs(title = "Relación entre Club y Goles Anotados",
x = "Club", y = "Goles Anotados") +
theme_minimal(base_size = 14) +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 12),
axis.text.y = element_text(size = 12),
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
panel.grid.major.y = element_line(color = "gray80", size = 0.5)) Resumen: Este gráfico agrupa a los jugadores por club y muestra la cantidad de goles anotados por cada equipo.
df_position <- Fifa_1 %>%
group_by(Position) %>%
summarise(Goles = sum(`Goals Scored`), Asistencias = sum(`Assists Provided`)) %>%
pivot_longer(cols = c(Goles, Asistencias), names_to = "Estadística", values_to = "Cantidad")
ggplot(df_position, aes(x = reorder(Position, Cantidad), y = Cantidad, fill = Estadística)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) + # Ajustar el ancho de las barras
coord_flip() +
scale_fill_manual(values = c("skyblue", "salmon")) + # Colores personalizados
geom_text(aes(label = scales::comma(Cantidad)), position = position_dodge(0.7), vjust = -0.3, size = 4) + # Etiquetas en las barras
labs(title = "Comparación de Goles y Asistencias por Posición",
x = "Posición",
y = "Cantidad",
subtitle = "Análisis de goles y asistencias por cada posición en el equipo",
caption = "Fuente: Copa Mundial FIFA 2022 - Selección Argentina") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 12, face = "italic"),
axis.title.x = element_text(size = 12),
axis.title.y = element_text(size = 12),
axis.text.x = element_text(size = 10, angle = 45, hjust = 1), # Lectura de las etiquetas del eje x
axis.text.y = element_text(size = 10),
legend.title = element_text(size = 12),
legend.text = element_text(size = 10)
)Resumen: El gráfico revela que las posiciones orientadas al ataque registran mayores totales de goles y asistencias, lo que respalda la idea de que las funciones ofensivas se complementan: los jugadores que tienen más oportunidades para anotar también suelen estar involucrados en la creación de jugadas y, por tanto, en las asistencias.
ggplot(Fifa_1, aes(x = `Tackles per 90 Min`, y = `Total Duels Won per 90 Min`, color = Position)) +
geom_point(aes(shape = Position), size = 3, alpha = 0.7) +
# Cambiar tamaño y añadir transparencia geom_point
geom_smooth(method = "lm", se = TRUE, color = "orange", linetype = "dashed") +
# Línea de ajuste más clara geom_smooth
scale_color_manual(values = c("red", "blue", "green", "purple", "yellow")) +
# Personalización de colores scale_color_manual
labs(title = "Relación entre Entradas y Duelos Ganados",
subtitle = "Análisis de las entradas por 90 min y los duelos ganados por 90 min",
x = "Entradas por 90 Min",
y = "Duelos Ganados por 90 Min",
caption = "Fuente: Datos de la Copa Mundial FIFA 2022") +
# Añadir subtítulo y caption
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 12, face = "italic"),
plot.caption = element_text(hjust = 1, size = 10, color = "gray"),
axis.title.x = element_text(size = 12),
axis.title.y = element_text(size = 12),
axis.text.x = element_text(size = 10, angle = 45, hjust = 1),
axis.text.y = element_text(size = 10),
legend.title = element_text(size = 12),
legend.text = element_text(size = 10)
)## `geom_smooth()` using formula = 'y ~ x'
Resumen: El gráfico evidencia una correlación positiva entre las entradas y los duelos ganados, lo cual es coherente con la teoría del fútbol: los jugadores que están más activos en la recuperación del balón tienden a ganar más duelos individuales. La diferenciación por posición ayuda a identificar matices en esta relación según el rol del jugador en el campo.
ggplot(Fifa_1, aes(x = `Position`, y = `Tackles per 90 Min`, fill = Position)) +
geom_boxplot(outlier.colour = "red", outlier.size = 3, outlier.shape = 16) + # Añadir color y tamaño a los outliers
labs(title = "Distribución de recuperación de balón por Posición", x = "Posición", y = "Tackles por 90 Min") +
scale_fill_brewer(palette = "Set3") + # paleta de colores
theme_minimal() + # Tema
theme(axis.text.x = element_text(angle = 45, hjust = 1), # Rotar etiquetas del eje X
plot.title = element_text(hjust = 0.5)) # Centrar el títuloResumen: En el gráfico se observa que existen diferencias notables en la distribución de tackles por 90 minutos entre las distintas posiciones, lo que refleja las funciones específicas que desempeñan los jugadores en el campo, las posiciones defensivas suelen mostrar una mediana más alta en tackles, lo que indica una mayor implicación en la recuperación del balón, mientras que otras posiciones, como mediocampistas o delanteros, presentan valores más bajos, acorde con sus roles ofensivos. Además, se aprecia variabilidad dentro de cada grupo: algunas posiciones muestran un rango intercuartílico reducido, lo que sugiere un desempeño defensivo consistente, mientras que otras exhiben mayor dispersión.