##Objetivo
Consultar y analizar el conjunto de datos de jugadores de FIFA. Para la elaboracion de tablas y graficas mas importantes.
##Descripcion
Descripción
Explorar determinando tablas y visualización de datos del conjunto de datos FIFA. Los datos se encuentran en la dirección: https://www.kaggle.com/karangadiya/fifa19?select=data.csv
El conjunto de datos data.csv incluye los atributos de los jugadores de la última edición de FIFA 2019 como Edad, Nacionalidad, Total, Potencial, Club, Valor, Salario, Pie preferido, Reputación internacional, Pie débil, Movimientos de habilidad, Ritmo de trabajo, Posición, Número de camiseta, Unido, Prestado desde, Contrato válido hasta , Altura, Peso, LS, ST, RS, LW, LF, CF, RF, RW, LAM, CAM, RAM, LM, LCM, CM, RCM, RM, LWB, LDM, CDM, RDM, RWB, LB, LCB , CB, RCB, RB, Centros, Remate, Rumbo, Precisión, Pases cortos, Voleas, Regate, Curva, FK Precisión, Pases largos, Control de balón, Aceleración, Sprint Velocidad, Agilidad, Reacciones, Equilibrio, Potencia de disparo, Salto, Resistencia, Fuerza, Tiros lejanos, Agresión , Intercepciones, Posicionamiento, Visión, Penalizaciones, Serenidad, Marcaje, Entrada de pie, Entrada deslizante, GKDiving, GKHandling, GKKicking, GKPositioning, GKReflexes y Cláusula de liberación.
##Insctrucciones Cargar librerías Cargar los datos Limpiar datos Explorar datos Analizar datos Visualizar datos *Comunicar datos
##Cargar librerias Librerias necesarias:
library(readr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(fdth)
##
## Attaching package: 'fdth'
## The following objects are masked from 'package:stats':
##
## sd, var
library(ggplot2)
library(fdth)
##Cargar los Datos de la Base de Datos FIFA
getwd()
## [1] "C:/Users/pc/Documents/RStudio"
datos.fifa <- read.csv(file = "data.csv", encoding = "UTF-8")
*Visualizar primeros 10 datos y los atributos que vamos a usar (mas reelevantes).
head(datos.fifa[,c(3,4,6,8,9,10,12,13,14,15,27,28)], 10)
## Name Age Nationality Overall Potential Club
## 1 L. Messi 31 Argentina 94 94 FC Barcelona
## 2 Cristiano Ronaldo 33 Portugal 94 94 Juventus
## 3 Neymar Jr 26 Brazil 92 93 Paris Saint-Germain
## 4 De Gea 27 Spain 91 93 Manchester United
## 5 K. De Bruyne 27 Belgium 91 92 Manchester City
## 6 E. Hazard 27 Belgium 91 91 Chelsea
## 7 L. Modric 32 Croatia 91 91 Real Madrid
## 8 L. Suárez 31 Uruguay 91 91 FC Barcelona
## 9 Sergio Ramos 32 Spain 91 91 Real Madrid
## 10 J. Oblak 25 Slovenia 90 93 Atlético Madrid
## Value Wage Special Preferred.Foot Height Weight
## 1 \200110.5M \200565K 2202 Left 5'7 159lbs
## 2 \20077M \200405K 2228 Right 6'2 183lbs
## 3 \200118.5M \200290K 2143 Right 5'9 150lbs
## 4 \20072M \200260K 1471 Right 6'4 168lbs
## 5 \200102M \200355K 2281 Right 5'11 154lbs
## 6 \20093M \200340K 2142 Right 5'8 163lbs
## 7 \20067M \200420K 2280 Right 5'8 146lbs
## 8 \20080M \200455K 2346 Right 6'0 190lbs
## 9 \20051M \200380K 2201 Right 6'0 181lbs
## 10 \20068M \20094K 1331 Right 6'2 192lbs
tail(datos.fifa[,c(3,4,6,8,9,10,12,13,14,15,27,28)], 10)
## Name Age Nationality Overall Potential
## 18198 D. Holland 18 Republic of Ireland 47 61
## 18199 J. Livesey 18 England 47 70
## 18200 M. Baldisimo 18 Canada 47 69
## 18201 J. Young 18 Scotland 47 62
## 18202 D. Walsh 18 Republic of Ireland 47 68
## 18203 J. Lundstram 19 England 47 65
## 18204 N. Christoffersson 19 Sweden 47 63
## 18205 B. Worman 16 England 47 67
## 18206 D. Walker-Rice 17 England 47 66
## 18207 G. Nugent 16 England 46 66
## Club Value Wage Special Preferred.Foot Height Weight
## 18198 Cork City \20060K \2001K 1362 Right 5'10 141lbs
## 18199 Burton Albion \20060K \2001K 792 Right 5'11 154lbs
## 18200 Vancouver Whitecaps FC \20070K \2001K 1303 Right 5'6 150lbs
## 18201 Swindon Town \20060K \2001K 1203 Left 5'9 157lbs
## 18202 Waterford FC \20060K \2001K 1098 Left 6'1 168lbs
## 18203 Crewe Alexandra \20060K \2001K 1307 Right 5'9 134lbs
## 18204 Trelleborgs FF \20060K \2001K 1098 Right 6'3 170lbs
## 18205 Cambridge United \20060K \2001K 1189 Right 5'8 148lbs
## 18206 Tranmere Rovers \20060K \2001K 1228 Right 5'10 154lbs
## 18207 Tranmere Rovers \20060K \2001K 1321 Right 5'10 176lbs
##Limpiar Datos
Un proceso de limpieza de datos no sólo es encontrar basura como NA o valores vacíos null y saber que hacer con ellos, en muchos casos se requiere transformar variables, eliminar datos y agregar variables para dejar listos para realiar análisis de datos posteriores. Agregar Pais de club dependiendo del pais de donse sea el club. Agregar Region de club: [“AFRICA”,“ASIA”,“OCEANIA”, “CONCACAF”, “EUROPA”,“SUDAMERICA”] Agregar variable estatura en metros numérica de Heigth Agregar variable peso en kgs numérica de la variable Weight Generar un conjunto de datos mas manipulable para resolver el análisis del CASO.
*Cargar las funciones requeridas desde otro r.
source(file = "misfunciones.r")
*Declarar las nuevas variables limpias para cambiar las medidas de la estatura en cm y el peso en kg.
datos.fifa <- mutate(datos.fifa, Estatura = festatura(Height), Pesokgs = flbskgs(Weight))
*Hacer lectura de las columnas utilizadas mas las nuevas variables incluidas.
datos.fifa.reduc <- select(datos.fifa, Name, Age, Nationality, Overall, Potential, Club, Value, Preferred.Foot, Position, Height, Weight, Estatura, Pesokgs)
head(datos.fifa.reduc)
## Name Age Nationality Overall Potential Club
## 1 L. Messi 31 Argentina 94 94 FC Barcelona
## 2 Cristiano Ronaldo 33 Portugal 94 94 Juventus
## 3 Neymar Jr 26 Brazil 92 93 Paris Saint-Germain
## 4 De Gea 27 Spain 91 93 Manchester United
## 5 K. De Bruyne 27 Belgium 91 92 Manchester City
## 6 E. Hazard 27 Belgium 91 91 Chelsea
## Value Preferred.Foot Position Height Weight Estatura Pesokgs
## 1 \200110.5M Left RF 5'7 159lbs 1.70 72.12
## 2 \20077M Right ST 6'2 183lbs 1.88 83.01
## 3 \200118.5M Right LW 5'9 150lbs 1.75 68.04
## 4 \20072M Right GK 6'4 168lbs 1.93 76.20
## 5 \200102M Right RCM 5'11 154lbs 1.80 69.85
## 6 \20093M Right LF 5'8 163lbs 1.73 73.94
##Comenzar el analisis de Datos.
¿Cuantos registros son?
paste("Cantidad de registros", nrow(datos.fifa.reduc))
## [1] "Cantidad de registros 18207"
¿Cuantas variables utilizaremos?
paste("Cantidad de variables", ncol(datos.fifa.reduc))
## [1] "Cantidad de variables 13"
¿Que tipo de variables son?
str(datos.fifa.reduc)
## 'data.frame': 18207 obs. of 13 variables:
## $ Name : chr "L. Messi" "Cristiano Ronaldo" "Neymar Jr" "De Gea" ...
## $ Age : int 31 33 26 27 27 27 32 31 32 25 ...
## $ Nationality : chr "Argentina" "Portugal" "Brazil" "Spain" ...
## $ Overall : int 94 94 92 91 91 91 91 91 91 90 ...
## $ Potential : int 94 94 93 93 92 91 91 91 91 93 ...
## $ Club : chr "FC Barcelona" "Juventus" "Paris Saint-Germain" "Manchester United" ...
## $ Value : chr "\200110.5M" "\20077M" "\200118.5M" "\20072M" ...
## $ Preferred.Foot: chr "Left" "Right" "Right" "Right" ...
## $ Position : chr "RF" "ST" "LW" "GK" ...
## $ Height : chr "5'7" "6'2" "5'9" "6'4" ...
## $ Weight : chr "159lbs" "183lbs" "150lbs" "168lbs" ...
## $ Estatura : num 1.7 1.88 1.75 1.93 1.8 1.73 1.73 1.83 1.83 1.88 ...
## $ Pesokgs : num 72.1 83 68 76.2 69.8 ...
##Frecuencia.
Frecuencia de la cantidad de jugadores por pais.
nacion <- datos.fifa.reduc %>%
group_by (Nationality) %>%
summarise(n = n())
## `summarise()` ungrouping output (override with `.groups` argument)
Paises con mas registros (primeros 10)
nacion <- arrange(nacion, desc(n))
head(nacion, 10)
## # A tibble: 10 x 2
## Nationality n
## <chr> <int>
## 1 England 1662
## 2 Germany 1198
## 3 Spain 1072
## 4 Argentina 937
## 5 France 914
## 6 Brazil 827
## 7 Italy 702
## 8 Colombia 618
## 9 Japan 478
## 10 Netherlands 453
Paises con menos registros (ultimos 10)
tail(nacion, 10)
## # A tibble: 10 x 2
## Nationality n
## <chr> <int>
## 1 New Caledonia 1
## 2 Oman 1
## 3 Palestine 1
## 4 Puerto Rico 1
## 5 Qatar 1
## 6 Rwanda 1
## 7 São Tomé & Príncipe 1
## 8 South Sudan 1
## 9 St Lucia 1
## 10 United Arab Emirates 1
Grafica de los paises con mas registros (primeros 10)
ggplot(data = head(nacion, 10), aes(x = Nationality, y = n, color=Nationality)) +
geom_bar(stat = "identity")
Grafica de los ultimos 10 paises con menos registros
ggplot(data = tail(nacion, 10), aes(x = Nationality, y = n, color=Nationality)) +
geom_bar(stat = "identity")
##Analisis por edades
age.nacion <- datos.fifa.reduc %>%
group_by (Nationality) %>%
summarise(n = n(), media = round(mean(Age),2), mediana = round(median(Age),2))
## `summarise()` ungrouping output (override with `.groups` argument)
age.nacion <- arrange(age.nacion, media)
head(age.nacion, 10)
## # A tibble: 10 x 4
## Nationality n media mediana
## <chr> <int> <dbl> <dbl>
## 1 Indonesia 1 17 17
## 2 Botswana 1 20 20
## 3 Rwanda 1 21 21
## 4 Tanzania 3 22 22
## 5 Zambia 9 22.2 21
## 6 Afghanistan 4 22.5 22
## 7 Chad 2 22.5 22.5
## 8 Antigua & Barbuda 4 22.8 22
## 9 Dominican Republic 2 23 23
## 10 Jordan 1 23 23
tail(age.nacion, 10)
## # A tibble: 10 x 4
## Nationality n media mediana
## <chr> <int> <dbl> <dbl>
## 1 Fiji 1 30 30
## 2 Guam 1 30 30
## 3 New Caledonia 1 30 30
## 4 Kuwait 1 31 31
## 5 Palestine 1 31 31
## 6 São Tomé & Príncipe 1 31 31
## 7 Trinidad & Tobago 4 31.8 28.5
## 8 Ethiopia 1 32 32
## 9 Puerto Rico 1 34 34
## 10 Oman 1 36 36
La media total de todos los registros
la.media<- round(mean(age.nacion$n),0)
la.media
## [1] 111
Registro de valores siguiendo como variable la media
age.nacion.mean.n <- filter(age.nacion, n >= mean(age.nacion$n)) # Se puede utilizar la variable la.media
age.nacion.mean.n <- arrange(age.nacion.mean.n, media)
head(age.nacion.mean.n, 10)
## # A tibble: 10 x 4
## Nationality n media mediana
## <chr> <int> <dbl> <dbl>
## 1 Nigeria 121 23.1 22
## 2 Ghana 114 23.7 23
## 3 Netherlands 453 24 24
## 4 England 1662 24.0 23
## 5 Norway 341 24.0 24
## 6 Denmark 336 24.2 24
## 7 Mexico 366 24.3 23
## 8 Belgium 260 24.3 23
## 9 Germany 1198 24.3 24
## 10 Australia 236 24.4 24
tail(age.nacion.mean.n, 10)
## # A tibble: 10 x 4
## Nationality n media mediana
## <chr> <int> <dbl> <dbl>
## 1 Senegal 130 25.4 25.5
## 2 Serbia 126 25.6 26
## 3 Portugal 322 25.8 25
## 4 Italy 702 25.9 26
## 5 China PR 392 26.1 26
## 6 Japan 478 26.2 26
## 7 Argentina 937 26.2 26
## 8 Korea Republic 335 26.4 26
## 9 Uruguay 149 26.6 26
## 10 Brazil 827 27.6 27
Grafica de jugadores mas jovenes basandonos en la media
ggplot(data = head(age.nacion.mean.n, 10), aes(Nationality, media)) +
geom_boxplot()
Grafica de jugadores menos jovenes basandonos en la media
ggplot(data = tail(age.nacion.mean.n, 10), aes(Nationality, media)) +
geom_boxplot()
Conjunto de datos de edades reducido
ggplot(data = datos.fifa.reduc, aes(x = Nationality, y = Age)) +
geom_boxplot()
Top 10 conforme a la media de la edad
paises.top <- head(age.nacion.mean.n$Nationality, 10)
paises.top
## [1] "Nigeria" "Ghana" "Netherlands" "England" "Norway"
## [6] "Denmark" "Mexico" "Belgium" "Germany" "Australia"
Jugadores top 10
datos.fifa.paises.top.mean.n <- filter(datos.fifa, Nationality %in% paises.top)
head(datos.fifa.paises.top.mean.n[,c(3,4,6)])
## Name Age Nationality
## 1 K. De Bruyne 27 Belgium
## 2 E. Hazard 27 Belgium
## 3 T. Kroos 28 Germany
## 4 H. Kane 24 England
## 5 M. ter Stegen 26 Germany
## 6 T. Courtois 26 Belgium
ggplot(data = datos.fifa.paises.top.mean.n, aes(x = Nationality, y = Age, color=Nationality)) +
geom_boxplot()
### Frecuencia de equipos por pais
datos.fifa.reduc.merge <- merge(x = datos.fifa.reduc, y=clubs.nation,
by.x = 'Club', by.y = 'club')
Ordenar los clu por paises
head(arrange(datos.fifa.reduc.merge, desc(country)), 10)
## Club Name Age Nationality Overall Potential
## 1 Atlanta United M. Ambrose 24 United States 63 67
## 2 Atlanta United L. Kunga 19 United States 57 73
## 3 Atlanta United C. McCann 30 Republic of Ireland 66 66
## 4 Atlanta United F. Escobar 23 Argentina 67 74
## 5 Atlanta United A. Wheeler-Omiunu 23 United States 58 64
## 6 Atlanta United K. Kratz 31 Germany 67 67
## 7 Atlanta United E. Remedi 23 Argentina 71 79
## 8 Atlanta United J. Larentowicz 34 United States 68 68
## 9 Atlanta United J. Hernández 21 Venezuela 62 71
## 10 Atlanta United M. Robinson 21 United States 61 72
## Value Preferred.Foot Position Height Weight Estatura Pesokgs country
## 1 \200400K Left LB 5'9 165lbs 1.75 74.84 USA
## 2 \200220K Left LM 5'8 150lbs 1.73 68.04 USA
## 3 \200475K Left LB 6'1 165lbs 1.85 74.84 USA
## 4 \200900K Right RB 6'0 165lbs 1.83 74.84 USA
## 5 \200170K Right CM 5'9 174lbs 1.75 78.93 USA
## 6 \200675K Right CAM 5'8 159lbs 1.73 72.12 USA
## 7 \2003M Right LDM 5'7 159lbs 1.70 72.12 USA
## 8 \200270K Right CDM 6'1 174lbs 1.85 78.93 USA
## 9 \200400K Left LB 5'7 157lbs 1.70 71.21 USA
## 10 \200375K Right CB 6'2 185lbs 1.88 83.91 USA
## confederaion continent
## 1 CONMEBOL SOUTH AMERICA
## 2 CONMEBOL SOUTH AMERICA
## 3 CONMEBOL SOUTH AMERICA
## 4 CONMEBOL SOUTH AMERICA
## 5 CONMEBOL SOUTH AMERICA
## 6 CONMEBOL SOUTH AMERICA
## 7 CONMEBOL SOUTH AMERICA
## 8 CONMEBOL SOUTH AMERICA
## 9 CONMEBOL SOUTH AMERICA
## 10 CONMEBOL SOUTH AMERICA
Quitar duplicados y utilizar solo pais y clun
datos.fifa.only.club.coutry <- select(datos.fifa.reduc.merge, Club, country)
datos.fifa.only.club.coutry <- distinct(datos.fifa.only.club.coutry)
head(datos.fifa.only.club.coutry)
## Club country
## 1
## 2 SSV Jahn Regensburg
## 3 1. FC Heidenheim 1846
## 4 1. FC Kaiserslautern
## 5 1. FC Köln Germany
## 6 1. FC Magdeburg Germany
Tala de frecuencias resultante de los paises y equipos
tabla <- data.frame(fdt_cat(datos.fifa.only.club.coutry$country)) %>%
select (Category,f)
names(tabla) <- c("Country", "Equipos")
tabla <- tabla[-1,]
tabla <- filter(tabla, !Country == "")
head(tabla , 10)
## Country Equipos
## 1 England 48
## 2 Spain 28
## 3 USA 24
## 4 Italy 23
## 5 Germany 22
## 6 México 18
## 7 France 15
## 8 Argentina 12
## 9 China 10
## 10 Brazil 9
tail(tabla, 10)
## Country Equipos
## 23 South Corea 3
## 24 Turkey 3
## 25 Austria 2
## 26 Canada 2
## 27 Scotland 2
## 28 Ucrania 2
## 29 Australia 1
## 30 Corea 1
## 31 Denmark 1
## 32 Uruguay 1
Diarama de arras de los paises con mas y menos equipos
ggplot(data = head(tabla,10), aes(Country, Equipos)) +
geom_col()
ggplot(data = tail(tabla,10), aes(Country, Equipos)) +
geom_col()
Juadores por clu
jug.por.club <- datos.fifa.reduc.merge %>%
group_by (Club) %>%
summarise(n = n())
## `summarise()` ungrouping output (override with `.groups` argument)
jug.por.club
## # A tibble: 638 x 2
## Club n
## <chr> <int>
## 1 "" 241
## 2 " SSV Jahn Regensburg" 29
## 3 "1. FC Heidenheim 1846" 28
## 4 "1. FC Kaiserslautern" 26
## 5 "1. FC Köln" 28
## 6 "1. FC Magdeburg" 26
## 7 "1. FC Nürnberg" 29
## 8 "1. FC Union Berlin" 28
## 9 "1. FSV Mainz 05" 32
## 10 "Aalborg BK" 27
## # ... with 628 more rows
jug.por.club.top.ten <-head(arrange(jug.por.club, desc(n)),10)
jug.por.club.top.ten
## # A tibble: 10 x 2
## Club n
## <chr> <int>
## 1 "" 241
## 2 "Arsenal" 33
## 3 "AS Monaco" 33
## 4 "Atlético Madrid" 33
## 5 "Borussia Dortmund" 33
## 6 "Burnley" 33
## 7 "Cardiff City" 33
## 8 "CD Leganés" 33
## 9 "Chelsea" 33
## 10 "Eintracht Frankfurt" 33
jug.por.club.bot.ten <- tail(arrange(jug.por.club, desc(n)),10)
jug.por.club.bot.ten
## # A tibble: 10 x 2
## Club n
## <chr> <int>
## 1 Grêmio 20
## 2 Internacional 20
## 3 Paraná 20
## 4 Santos 20
## 5 Sport Club do Recife 20
## 6 Tromsø IL 20
## 7 Vitória 20
## 8 Limerick FC 19
## 9 Sligo Rovers 19
## 10 Derry City 18
###Interpretacion
Despues de limpiar los datos para el analisis se pueden observar los siguientes resultados:
*Se hizo el procedimiento para sacar la frecuencia de los jugadores registrados por pais en el cual podemos observar lo siguiente:
*El pais con mas jugadores registrados es Inglaterra con 1662. Lo que nos puede hacer pesar que hay muchos equipos registrados de ese pais o que los jugadores son muy buenos.
*En 2do le sigue alemania con 1198, en 3ero España con 1072.
*La mayoria de las nacionalidades con mas jugadores son del continente europeo a excepcion de los paises como: Argentina, Brazil y colombia que son Sur-Americanos.
Se puede pareciar tambien lo siguiente:
*Hay aproximadamente 10 o mas nacionalidades que tienen registrados un solo jugador que a simple vista se ve que son del continente africano.
#Edad
Se hizo el siguiente analisis de edades de los jugadores donde se puede analizar lo siguiente:
Principalmente se tomo la media general como base para identificar si hay mas jugadores de edad mayor a la media o menor a la media.
*En nuestro analisis no se aprecia mucho el cambio porque algunos paises solo tienen pocos jugadores.
Por lo cual se comenzaron a tomar los valores de la media de edad de los jugadores de los equipos que tienen registrados una media mayor en jugadores regitrados.
En donde se puede mostrar lo siguiente:
El equipo con mas jugadores registrados que es Inglaterra tiene una media aproximada de edad de sus jugadores entre "23 a 24 años de edad.
Las edades de los jugadores tienen en promedio de 22 a 24 años.
La media de los jugadores con mayor edad es de 25 a 27 años.
Haciendo una grafica de todos los datos por edades se puede ver que hay pocos con edad mayor a los 40.
Pero hay en menor cantidad jugadores menores de 20 años.
#Club
En el siguiente analisis se puede observar que los club con mayor presencia son de Europa.
Se hizo un Top 10 de los paises con mas equipos registrados donde se observa lo siguiente:
Ingraterra sigue liderando con 48 equipos registrados, lo que nos da como una hipotesis cierta de que: -Inglaterra tiene mas jugadores registrados porque tiene mas equipos registrados.
En 2ndo ligar le sigue España con 28, en 3ero Estados Unidos.
DATO CURIOSO: Alemania ocupa el 2ndo lugar en jugadores registrados pero solo tiene 22 equipos registrados, mucho menor que Italia, EUA y España.
Mexico se localiza en el top 10 de paises con mas equipos registrados de los cuales son 18.
Se hizo el top 10 de los equipos con menos equipos registrados de los cuales la mayoria tiene de 3 a 1. Que pueden llegar a ser un dato pòco extenso de explicar. Siendo Uruguay, Corea, Australia de los paises con un solo equipo registrado.
#Top de jugadores por club
En el siguiebte analisis no hay mucha diferencia ni se puede ver un gran cambio por las siguientes cuestiones.
*Se requieren 11 jugadores en la cancha mas 3 cambios que se pueden hacer, en donde algunos equipos requieren 2 equipos completos de 14 jugadores para distintos juegos (amistoso o de liga).
*Por lo cual aparece que la gran mayoria de los equipos tienen registrados aproximadamente “28 a 29 jugadores”
*Solo se aprecia un equipo con 32 jugadores registrados.
Top 10 equipos con menos jugadores
*Los equipos con menos jugadores tienen entre 18 a 20 jug."
#Gracias por la atencion#