2.5. Revisión de datos pre-limpieza:
#Primeros 3
head(datos_fifa[,c(3,4,6,8,9,10,12,13,14,15,27,28)], 3)
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
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
#último 3
tail(datos_fifa[,c(3,4,6,8,9,10,12,13,14,15,27,28)], 3)
Name Age Nationality Overall Potential Club Value
18205 B. Worman 16 England 47 67 Cambridge United \20060K
18206 D. Walker-Rice 17 England 47 66 Tranmere Rovers \20060K
18207 G. Nugent 16 England 46 66 Tranmere Rovers \20060K
Wage Special Preferred.Foot Height Weight
18205 \2001K 1189 Right 5'8 148lbs
18206 \2001K 1228 Right 5'10 154lbs
18207 \2001K 1321 Right 5'10 176lbs
3. Limpiar los datos:
feet_inch_to_m <- function(height){
est_m <- as.numeric(substring(height, 1,1)) * 30.48 +
as.numeric(substring(height, 3,4)) * 2.54
est_m <- round(est_m/100,2)
est_m
}
lb_to_kg <- function(pounds){
kgs <- as.numeric(substring(pounds, 1,3))
kgs <- round(kgs * 0.453592,2)
kgs
}
mk_to_pesos <- function(m_k) {
options(scipen=999)
pesos <- substr(m_k,2,nchar(m_k)-1)
pesos <- as.numeric(pesos)
pesos
}
#Crear nuevas columnas
datos_fifa <- mutate(datos_fifa, Height_m = feet_inch_to_m(Height),
Weight_kg = lb_to_kg(Weight))
#Reducir dataframe
datos_fifa_2 <- select(datos_fifa, Name, Age, Nationality,
Overall, Potential, Club, Value,
Preferred.Foot, Position, Height, Weight,Height_m, Weight_kg)
4. Revisión de datos post-limpieza:
Registros:
paste("Cantidad de registros: ",nrow(datos_fifa_2))
[1] "Cantidad de registros: 18207"
Variables:
paste("Cantidad de variables: ",ncol(datos_fifa_2))
[1] "Cantidad de variables: 13"
Tipos de variables:
str(datos_fifa_2)
'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" ...
$ Height_m : num 1.7 1.88 1.75 1.93 1.8 1.73 1.73 1.83 1.83 1.88 ...
$ Weight_kg : num 72.1 83 68 76.2 69.8 ...
5. Análisis de datos
Frecuencia de jugadores por nacionalidad:
frec_nacionalidad <- datos_fifa_2 %>%
group_by(Nationality) %>%
summarise(Total = n()) %>%
arrange(desc(Total))
frec_nacionalidad
# A tibble: 164 x 2
Nationality Total
<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
# ... with 154 more rows
Gráfica de barras:
#Primeros 10
ggplot(data = head(frec_nacionalidad, 10), aes(x = Nationality, y = Total, color = Nationality)) + geom_bar(stat = 'identity')

#últimos 10
ggplot(data = tail(frec_nacionalidad, 10), aes(x = Nationality, y = Total, color = Nationality)) + geom_bar(stat = 'identity')

Datos:
head(media_nacionalidad, 10)
# A tibble: 10 x 4
Nationality Total Mean Median
<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(media_nacionalidad, 10)
# A tibble: 10 x 4
Nationality Total Mean Median
<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
media_nacion_edad <- filter(media_nacionalidad, Total >= mean(media_nacionalidad$Total)) %>%
arrange(Mean)
Gráfica de cajas:
#Primeros 10
ggplot(data = head(media_nacion_edad, 10), aes(x = Nationality, y = Mean)) +
geom_boxplot()

# Últimos 10
ggplot(data = tail(media_nacion_edad, 10), aes(x = Nationality, y = Mean)) +
geom_boxplot()

Top 10 nacionalidades.
top_10 <- head(media_nacion_edad$Nationality, 10)
top_10
[1] "Nigeria" "Ghana" "Netherlands" "England" "Norway"
[6] "Denmark" "Mexico" "Belgium" "Germany" "Australia"
Top 10 nacionalidades en dataframe:
paises_top <- filter(datos_fifa_2, Nationality %in% top_10)
head(paises_top[,c(2,3,6)])
Age Nationality Club
1 27 Belgium Manchester City
2 27 Belgium Chelsea
3 28 Germany Real Madrid
4 24 England Tottenham Hotspur
5 26 Germany FC Barcelona
6 26 Belgium Real Madrid
Diagrama de cajas del top 10 de nacionalidades:
ggplot(data = paises_top, aes(x = Nationality, y = Age, color = Nationality)) + geom_boxplot()

Frecuencia de equipos por país
Diagrama del top 10 de equipos
data_w_country <- merge(x = datos_fifa_2, y = clubs_per_nation,
by.x = 'Club', by.y = 'club')
Crear conjunto de clubs y países:
datos_pais_club <- select(data_w_country, Club, country)
datos_pais_club <- distinct(datos_pais_club)
head(datos_pais_club)
Club country
1
2 SSV Jahn Regensburg
3 1. FC Heidenheim 1846
4 1. FC Kaiserslautern
5 1. FC Magdeburg Germany
6 1. FC Union Berlin
Tabla de frecuencias por país
frecuencia <- data.frame(fdt_cat(datos_pais_club$country)) %>%
select(Category, f)
names(frecuencia) <- c("Pais", "Equipos")
frecuencia <- frecuencia[-1,]
frecuencia <- filter(frecuencia, !Pais == "")
head(frecuencia, 10)
Pais Equipos
1 England 48
2 USA 24
3 Italy 22
4 Spain 22
5 Germany 17
6 Mexico 15
7 France 13
8 Argentina 10
9 China 10
10 Ireland 8
tail(frecuencia, 10)
Pais Equipos
22 South Corea 3
23 Canada 2
24 Chile 2
25 Scotland 2
26 Turkey 2
27 Ucrania 2
28 Australia 1
29 Austria 1
30 Corea 1
31 Denmark 1
Diagrama de barras, 10 más - 10 menos
ggplot(data = head(frecuencia, 10), aes(Pais, Equipos, color = Pais)) + geom_col()

ggplot(data = tail(frecuencia, 10), aes(Pais, Equipos, color = Pais)) + geom_col()

Jugadores por club, con diagrama top 10
players_per_club <- data_w_country %>%
group_by(Club) %>%
summarise(Total = n())
f_top_10_per_club <- head(arrange(players_per_club, desc(Total)),10)
l_top_10_per_club <- tail(arrange(players_per_club, desc(Total)),10)
f_top_10_per_club
# A tibble: 10 x 2
Club Total
<chr> <int>
1 "" 241
2 "Arsenal" 33
3 "AS Monaco" 33
4 "Borussia Dortmund" 33
5 "Burnley" 33
6 "Cardiff City" 33
7 "Chelsea" 33
8 "Eintracht Frankfurt" 33
9 "Empoli" 33
10 "Everton" 33
l_top_10_per_club
# A tibble: 10 x 2
Club Total
<chr> <int>
1 Botafogo 20
2 Chapecoense 20
3 Cruzeiro 20
4 Fluminense 20
5 Internacional 20
6 Santos 20
7 Sport Club do Recife 20
8 Limerick FC 19
9 Sligo Rovers 19
10 Derry City 18
Valor promedio de los jugadores en Ámerica del Sur, Noteámeritca y Europa.
value_data <- data_w_country %>%
mutate(data_w_country, Valor = ifelse(substr(Value, nchar(Value), nchar(Value)) == 'M', mk_to_pesos(Value)*1000000, mk_to_pesos(Value)*100)) %>%
filter(Valor > 0)
head(value_data)
Club Name Age Nationality Overall Potential Value
1 SSV Jahn Regensburg S. Nachreiner 29 Germany 68 68 \200700K
2 SSV Jahn Regensburg A. Dej 26 Poland 67 70 \200925K
3 SSV Jahn Regensburg A. Geipl 26 Germany 68 70 \200900K
4 SSV Jahn Regensburg P. Pentke 33 Germany 70 70 \200900K
5 SSV Jahn Regensburg H. Al Ghaddioui 27 Morocco 64 64 \200475K
6 SSV Jahn Regensburg B. Saller 25 Germany 68 71 \200925K
Preferred.Foot Position Height Weight Height_m Weight_kg country confederaion
1 Right CB 6'2 170lbs 1.88 77.11
2 Right CM 5'9 163lbs 1.75 73.94
3 Right RDM 5'10 161lbs 1.78 73.03
4 Right GK 6'3 187lbs 1.91 84.82
5 Right ST 6'3 203lbs 1.91 92.08
6 Right RB 5'10 154lbs 1.78 69.85
continent Valor
1 70000
2 92500
3 90000
4 90000
5 47500
6 92500
tail(value_data)
Club Name Age Nationality Overall Potential Value
14888 Yokohama F. Marinos T. Nishiyama 18 Japan 53 67 \200110K
14889 Yokohama F. Marinos R. Yamanaka 25 Japan 65 70 \200600K
14890 Yokohama F. Marinos D. Cvetinovic 29 Serbia 70 70 \2001.4M
14891 Yokohama F. Marinos Y. Otsu 28 Japan 68 68 \200900K
14892 Yokohama F. Marinos T. Kubo 17 Japan 64 85 \200975K
14893 Yokohama F. Marinos T. Ogihara 26 Japan 64 67 \200475K
Preferred.Foot Position Height Weight Height_m Weight_kg country
14888 Right CB 5'11 152lbs 1.80 68.95
14889 Left LB 5'7 143lbs 1.70 64.86
14890 Right LCB 6'1 174lbs 1.85 78.93
14891 Right LCM 5'11 161lbs 1.80 73.03
14892 Left CAM 5'8 148lbs 1.73 67.13
14893 Left CM 6'0 157lbs 1.83 71.21
confederaion continent Valor
14888 11000
14889 60000
14890 1400000
14891 90000
14892 97500
14893 47500
Media del valor de cada continente, donde:
* Ámerica del Sur = ‘SOUTH AMERICA’
* Norteámerica = ‘NORTH AMERICA’
* Europa = ‘EUROPE’
value_data <- value_data %>%
filter(!continent == "")
Gráficas de caja detallada:
ggplot(value_data, aes(x = continent, y = Valor )) +
geom_boxplot() +
geom_hline(yintercept = mean(value_data$Valor), color = "red") +
labs(title = "Valor económico de los jugadores", subtitle = paste("Valor económico medio = ", round(mean(value_data$Valor),2)))

Misma gráfica pero con más color:
ggplot(value_data, aes(x = continent, y = Valor)) +
geom_boxplot() +
geom_jitter(aes(color = continent)) +
geom_hline(yintercept = mean(value_data$Valor), color = "red") +
labs(title = "Valor económico de los jugadores", subtitle = paste("Valor económico medio = ", round(mean(value_data$Valor),2)))

Interpretación:
De un total de 18,207 registros y 89 variables, tomando de estas como principales ‘Age’, ‘Nationality’, ‘Club’, ‘Value’, ‘Preferred foot’, ‘Height’, ‘Weight’, se obtuvo:
* Los jugadores más jóvenes por nacionalidad están en Indonesia con una media y mediana de 17 años de edad, mientras que los más grandes en Oman con 36 años de edad.
* Los jugadores más jóvenes por club están en FC Nordsjælland con una media y mediana de 20.25 y 19 años de edad respectivamente, mientras que los más grandes en Paraná con 31.60 y 34 años de edad.
* Entre los clubes con más jugadores se encuentran: Arsenal, Chelsea, FC Barcelona, Liverpool, Manchester United, Real Madrid, con 33 jugadores.
* Europa y América del Sur son los que mejor pagan a sus clubes, ocupando Europa el mejor lugar.
* La mayoría de los jugadores prefiere el pie derecho para tirar.
* La media y mediana de la altura de los jugadores es de 181.26 y 180.3 cm respectivamente.
* La media y mediana del peso de los jugadores es de 75.28 y 74.84 kg respectivamente.