Datos Mundiales de Fútbol 1830 - 2014
Trofeo del Mundial de Fútbol
Los datos usados en el siguiente trabajo se pueden encontrar en FIFA World Cup.
Además, se ha tomado como base al trabajo realizado en FIFA World Cup ( Data analysis ).
Las librerias utilizadas para la realización del presente trabajo son:
library(Amelia)## Loading required package: Rcpp
## ##
## ## Amelia II: Multiple Imputation
## ## (Version 1.8.0, built: 2021-05-26)
## ## Copyright (C) 2005-2022 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
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(ggplot2)
library(highcharter)## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Highcharts (www.highcharts.com) is a Highsoft software product which is
## not free for commercial and Governmental use
library(stringr)
library(memisc)## Loading required package: lattice
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
##
## Attaching package: 'memisc'
## The following object is masked from 'package:ggplot2':
##
## syms
## The following objects are masked from 'package:dplyr':
##
## collect, recode, rename, syms
## The following objects are masked from 'package:stats':
##
## contr.sum, contr.treatment, contrasts
## The following object is masked from 'package:base':
##
## as.array
library(tidyr)Base de Datos
Vamos a descargar los datos y procederemos a realizar el análisis exploratorio de los mismos.
data <- read.csv(file = "DATA/WorldCupMatches.csv")
info <- read.csv("DATA/WorldCups.csv")head(data,3)## Year Datetime Stage Stadium City Home.Team.Name
## 1 1930 13 Jul 1930 - 15:00 Group 1 Pocitos Montevideo France
## 2 1930 13 Jul 1930 - 15:00 Group 4 Parque Central Montevideo USA
## 3 1930 14 Jul 1930 - 12:45 Group 2 Parque Central Montevideo Yugoslavia
## Home.Team.Goals Away.Team.Goals Away.Team.Name Win.conditions Attendance
## 1 4 1 Mexico 4444
## 2 3 0 Belgium 18346
## 3 2 1 Brazil 24059
## Half.time.Home.Goals Half.time.Away.Goals Referee
## 1 3 0 LOMBARDI Domingo (URU)
## 2 2 0 MACIAS Jose (ARG)
## 3 2 0 TEJADA Anibal (URU)
## Assistant.1 Assistant.2 RoundID MatchID
## 1 CRISTOPHE Henry (BEL) REGO Gilberto (BRA) 201 1096
## 2 MATEUCCI Francisco (URU) WARNKEN Alberto (CHI) 201 1090
## 3 VALLARINO Ricardo (URU) BALWAY Thomas (FRA) 201 1093
## Home.Team.Initials Away.Team.Initials
## 1 FRA MEX
## 2 USA BEL
## 3 YUG BRA
head(info,3)## Year Country Winner Runners.Up Third Fourth GoalsScored
## 1 1930 Uruguay Uruguay Argentina USA Yugoslavia 70
## 2 1934 Italy Italy Czechoslovakia Germany Austria 70
## 3 1938 France Italy Hungary Brazil Sweden 84
## QualifiedTeams MatchesPlayed Attendance
## 1 13 18 590.549
## 2 16 17 363.000
## 3 15 18 375.700
Los nombres de las variables son:
#En la base de datos de los partidos.
names(data)## [1] "Year" "Datetime" "Stage"
## [4] "Stadium" "City" "Home.Team.Name"
## [7] "Home.Team.Goals" "Away.Team.Goals" "Away.Team.Name"
## [10] "Win.conditions" "Attendance" "Half.time.Home.Goals"
## [13] "Half.time.Away.Goals" "Referee" "Assistant.1"
## [16] "Assistant.2" "RoundID" "MatchID"
## [19] "Home.Team.Initials" "Away.Team.Initials"
#En la base de datos histórica por mundial.
names(info)## [1] "Year" "Country" "Winner" "Runners.Up"
## [5] "Third" "Fourth" "GoalsScored" "QualifiedTeams"
## [9] "MatchesPlayed" "Attendance"
Limpieza de datos
Analizamos los tipos de datos que tenemos en cada una de las bases de datos.
# En la base de datos que contiene información de los partidos disputados tenemos:
str(data)## 'data.frame': 4572 obs. of 20 variables:
## $ Year : int 1930 1930 1930 1930 1930 1930 1930 1930 1930 1930 ...
## $ Datetime : chr "13 Jul 1930 - 15:00 " "13 Jul 1930 - 15:00 " "14 Jul 1930 - 12:45 " "14 Jul 1930 - 14:50 " ...
## $ Stage : chr "Group 1" "Group 4" "Group 2" "Group 3" ...
## $ Stadium : chr "Pocitos" "Parque Central" "Parque Central" "Pocitos" ...
## $ City : chr "Montevideo " "Montevideo " "Montevideo " "Montevideo " ...
## $ Home.Team.Name : chr "France" "USA" "Yugoslavia" "Romania" ...
## $ Home.Team.Goals : int 4 3 2 3 1 3 4 3 1 1 ...
## $ Away.Team.Goals : int 1 0 1 1 0 0 0 0 0 0 ...
## $ Away.Team.Name : chr "Mexico" "Belgium" "Brazil" "Peru" ...
## $ Win.conditions : chr " " " " " " " " ...
## $ Attendance : int 4444 18346 24059 2549 23409 9249 18306 18306 57735 2000 ...
## $ Half.time.Home.Goals: int 3 2 2 1 0 1 0 2 0 0 ...
## $ Half.time.Away.Goals: int 0 0 0 0 0 0 0 0 0 0 ...
## $ Referee : chr "LOMBARDI Domingo (URU)" "MACIAS Jose (ARG)" "TEJADA Anibal (URU)" "WARNKEN Alberto (CHI)" ...
## $ Assistant.1 : chr "CRISTOPHE Henry (BEL)" "MATEUCCI Francisco (URU)" "VALLARINO Ricardo (URU)" "LANGENUS Jean (BEL)" ...
## $ Assistant.2 : chr "REGO Gilberto (BRA)" "WARNKEN Alberto (CHI)" "BALWAY Thomas (FRA)" "MATEUCCI Francisco (URU)" ...
## $ RoundID : int 201 201 201 201 201 201 201 201 201 201 ...
## $ MatchID : int 1096 1090 1093 1098 1085 1095 1092 1097 1099 1094 ...
## $ Home.Team.Initials : chr "FRA" "USA" "YUG" "ROU" ...
## $ Away.Team.Initials : chr "MEX" "BEL" "BRA" "PER" ...
Apreciamos que tenemos 4572 observaciones y 20 variables en la base de datos que contiene información de los partidos que se han jugado.
Descripción de variables
des_data <- data.frame(VARIABLE= names(data), DESCRIPCION=c("Año en el cual el partido se ha disputado", "Fecha del partido en formato de 24 horas","La ronda a la cual pertenecía el partido","Nombre del estadio donde se disputó el partido","Nombre de la ciudad en donde se jugó el partido","Nombre del país que jugó como Local","Goles marcados del equipo local","Goles marcados del equipo visitante","Nombre del país que jugó como Visitante","Condiciones en las que se ganó el partido","Total de asistentes al partido","Goles marcados por el equipo local durante el primer tiempo","Goles marcados por el equipo visitante durante el primer tiempo","Nombre del árbitro","Nombre del primer asistente","Nombre del segundo asistente","Código único de la fase en la que se disputó el partido","Código único del partido","Abreviatura del nombre del país local","Abreviatura del nombre del país visitante"))
des_data## VARIABLE
## 1 Year
## 2 Datetime
## 3 Stage
## 4 Stadium
## 5 City
## 6 Home.Team.Name
## 7 Home.Team.Goals
## 8 Away.Team.Goals
## 9 Away.Team.Name
## 10 Win.conditions
## 11 Attendance
## 12 Half.time.Home.Goals
## 13 Half.time.Away.Goals
## 14 Referee
## 15 Assistant.1
## 16 Assistant.2
## 17 RoundID
## 18 MatchID
## 19 Home.Team.Initials
## 20 Away.Team.Initials
## DESCRIPCION
## 1 Año en el cual el partido se ha disputado
## 2 Fecha del partido en formato de 24 horas
## 3 La ronda a la cual pertenecía el partido
## 4 Nombre del estadio donde se disputó el partido
## 5 Nombre de la ciudad en donde se jugó el partido
## 6 Nombre del país que jugó como Local
## 7 Goles marcados del equipo local
## 8 Goles marcados del equipo visitante
## 9 Nombre del país que jugó como Visitante
## 10 Condiciones en las que se ganó el partido
## 11 Total de asistentes al partido
## 12 Goles marcados por el equipo local durante el primer tiempo
## 13 Goles marcados por el equipo visitante durante el primer tiempo
## 14 Nombre del árbitro
## 15 Nombre del primer asistente
## 16 Nombre del segundo asistente
## 17 Código único de la fase en la que se disputó el partido
## 18 Código único del partido
## 19 Abreviatura del nombre del país local
## 20 Abreviatura del nombre del país visitante
# En la base de datos sobre la información de cada mundial tenemos:
str(info)## 'data.frame': 20 obs. of 10 variables:
## $ Year : int 1930 1934 1938 1950 1954 1958 1962 1966 1970 1974 ...
## $ Country : chr "Uruguay" "Italy" "France" "Brazil" ...
## $ Winner : chr "Uruguay" "Italy" "Italy" "Uruguay" ...
## $ Runners.Up : chr "Argentina" "Czechoslovakia" "Hungary" "Brazil" ...
## $ Third : chr "USA" "Germany" "Brazil" "Sweden" ...
## $ Fourth : chr "Yugoslavia" "Austria" "Sweden" "Spain" ...
## $ GoalsScored : int 70 70 84 88 140 126 89 89 95 97 ...
## $ QualifiedTeams: int 13 16 15 13 16 16 16 16 16 16 ...
## $ MatchesPlayed : int 18 17 18 22 26 35 32 32 32 38 ...
## $ Attendance : chr "590.549" "363.000" "375.700" "1.045.246" ...
En la base de datos que nos brinda información relevante sobre cada copa del mundo tenemos 20 observaciones de 10 variables.
Notemos que en la variable Attendance es de tipo caracter, pero nos brinda información sobre la cantidad de asistencia a los partidos disputados, por lo cual se esperaría que sea de tipo numérico. A continuación, realizaremos dicho cambio:
info$Attendance <- gsub("\\.","",info$Attendance)
info$Attendance <- as.integer(info$Attendance)
str(info)## 'data.frame': 20 obs. of 10 variables:
## $ Year : int 1930 1934 1938 1950 1954 1958 1962 1966 1970 1974 ...
## $ Country : chr "Uruguay" "Italy" "France" "Brazil" ...
## $ Winner : chr "Uruguay" "Italy" "Italy" "Uruguay" ...
## $ Runners.Up : chr "Argentina" "Czechoslovakia" "Hungary" "Brazil" ...
## $ Third : chr "USA" "Germany" "Brazil" "Sweden" ...
## $ Fourth : chr "Yugoslavia" "Austria" "Sweden" "Spain" ...
## $ GoalsScored : int 70 70 84 88 140 126 89 89 95 97 ...
## $ QualifiedTeams: int 13 16 15 13 16 16 16 16 16 16 ...
## $ MatchesPlayed : int 18 17 18 22 26 35 32 32 32 38 ...
## $ Attendance : int 590549 363000 375700 1045246 768607 819810 893172 1563135 1603975 1865753 ...
Descripción de variables
des_info <- data.frame(VARIABLE= names(info), DESCRIPCION=c("Año del mundial","País anfitrión del mundial","País campeón del torneo","País que ocupa el segundo lugar","País que ocupa el tercer lugar", "País que ocupa el cuarto lugar","Goles totales marcados en el mundial","Total de equipos participantes","Total de partidos jugados en el torneo","Total de asistencia de todos los partidos" ))
des_info## VARIABLE DESCRIPCION
## 1 Year Año del mundial
## 2 Country País anfitrión del mundial
## 3 Winner País campeón del torneo
## 4 Runners.Up País que ocupa el segundo lugar
## 5 Third País que ocupa el tercer lugar
## 6 Fourth País que ocupa el cuarto lugar
## 7 GoalsScored Goles totales marcados en el mundial
## 8 QualifiedTeams Total de equipos participantes
## 9 MatchesPlayed Total de partidos jugados en el torneo
## 10 Attendance Total de asistencia de todos los partidos
Valores faltantes
Identificamos los valores perdidos por variable, para lo cual nos apoyaremos de una gráfica.
# Para la base de datos sobre los partidos disputados:
missmap(data)# Para la base de datos de los datos relevantes de cada mundial:
missmap(info)En la base de datos sobre la información general no existen valores faltantes mientras que en la base de datos de los partidos si existen, por lo cual procederemos a realizar un análisis específico a dicha base.
# Para constatar el total de valores faltantes vamos a calcular el total de valores faltantes en toda la base de datos.
sum(is.na.data.frame(data))## [1] 29762
#Dado que nos da una gran cantidad de valores vacíos vamos a contar el total de datos faltantes en cada variable.
sapply(data, function(x) sum(is.na(x)))## Year Datetime Stage
## 3720 0 0
## Stadium City Home.Team.Name
## 0 0 0
## Home.Team.Goals Away.Team.Goals Away.Team.Name
## 3720 3720 0
## Win.conditions Attendance Half.time.Home.Goals
## 0 3722 3720
## Half.time.Away.Goals Referee Assistant.1
## 3720 0 0
## Assistant.2 RoundID MatchID
## 0 3720 3720
## Home.Team.Initials Away.Team.Initials
## 0 0
# Notemos que en varias variables tienen una cantidad de datos faltantes iguales, esto nos puede dar una idea de que tenemos filas completamente vacías, para lo cual visualizaremos la parte final de la base de datos.
tail(data,5)## Year Datetime Stage Stadium City Home.Team.Name Home.Team.Goals
## 4568 NA NA
## 4569 NA NA
## 4570 NA NA
## 4571 NA NA
## 4572 NA NA
## Away.Team.Goals Away.Team.Name Win.conditions Attendance
## 4568 NA NA
## 4569 NA NA
## 4570 NA NA
## 4571 NA NA
## 4572 NA NA
## Half.time.Home.Goals Half.time.Away.Goals Referee Assistant.1 Assistant.2
## 4568 NA NA
## 4569 NA NA
## 4570 NA NA
## 4571 NA NA
## 4572 NA NA
## RoundID MatchID Home.Team.Initials Away.Team.Initials
## 4568 NA NA
## 4569 NA NA
## 4570 NA NA
## 4571 NA NA
## 4572 NA NA
# Confirmamos lo previsto, existen gran cantidad de filas completamente vacías al final de la base de datos, por lo cual procederemos a borrar dichas filas.
matches <- na.omit(data)
# Comprobamos que los datos finales de la base de datos sean los correctos, pues se esperaría que corresponda a los datos de la final jugada en 2014.
tail(matches,5)## Year Datetime Stage Stadium
## 848 2014 05 Jul 2014 - 17:00 Quarter-finals Arena Fonte Nova
## 849 2014 08 Jul 2014 - 17:00 Semi-finals Estadio Mineirao
## 850 2014 09 Jul 2014 - 17:00 Semi-finals Arena de Sao Paulo
## 851 2014 12 Jul 2014 - 17:00 Play-off for third place Estadio Nacional
## 852 2014 13 Jul 2014 - 16:00 Final Estadio do Maracana
## City Home.Team.Name Home.Team.Goals Away.Team.Goals
## 848 Salvador Netherlands 0 0
## 849 Belo Horizonte Brazil 1 7
## 850 Sao Paulo Netherlands 0 0
## 851 Brasilia Brazil 0 3
## 852 Rio De Janeiro Germany 1 0
## Away.Team.Name Win.conditions Attendance
## 848 Costa Rica Netherlands win on penalties (4 - 3) 51179
## 849 Germany 58141
## 850 Argentina Argentina win on penalties (2 - 4) 63267
## 851 Netherlands 68034
## 852 Argentina Germany win after extra time 74738
## Half.time.Home.Goals Half.time.Away.Goals Referee
## 848 0 0 Ravshan IRMATOV (UZB)
## 849 0 5 RODRIGUEZ Marco (MEX)
## 850 0 0 C�neyt �AKIR (TUR)
## 851 0 2 HAIMOUDI Djamel (ALG)
## 852 0 0 Nicola RIZZOLI (ITA)
## Assistant.1 Assistant.2 RoundID MatchID
## 848 RASULOV Abduxamidullo (UZB) KOCHKAROV Bakhadyr (KGZ) 255953 300186488
## 849 TORRENTERA Marvin (MEX) QUINTERO Marcos (MEX) 255955 300186474
## 850 DURAN Bahattin (TUR) ONGUN Tarik (TUR) 255955 300186490
## 851 ACHIK Redouane (MAR) ETCHIALI Abdelhak (ALG) 255957 300186502
## 852 Renato FAVERANI (ITA) Andrea STEFANI (ITA) 255959 300186501
## Home.Team.Initials Away.Team.Initials
## 848 NED CRC
## 849 BRA GER
## 850 NED ARG
## 851 BRA NED
## 852 GER ARG
# Finalmente, volvemos a verificar que no existan datos faltantes en nuestra base de datos.
sum(is.na.data.frame(matches))## [1] 0
Valores atípicos
Cambiaremos los nombres inusuales en la base de datos.
unique(matches$Home.Team.Name)## [1] "France" "USA"
## [3] "Yugoslavia" "Romania"
## [5] "Argentina" "Chile"
## [7] "Uruguay" "Brazil"
## [9] "Paraguay" "Austria"
## [11] "Hungary" "Switzerland"
## [13] "Sweden" "Germany"
## [15] "Spain" "Italy"
## [17] "Czechoslovakia" "Cuba"
## [19] "England" "Germany FR"
## [21] "Turkey" "Soviet Union"
## [23] "Northern Ireland" "Mexico"
## [25] "Wales" "Portugal"
## [27] "Korea DPR" "Peru"
## [29] "Belgium" "Bulgaria"
## [31] "German DR" "Zaire"
## [33] "Poland" "Australia"
## [35] "Scotland" "Netherlands"
## [37] "Haiti" "Tunisia"
## [39] "Algeria" "Honduras"
## [41] "Canada" "Morocco"
## [43] "Korea Republic" "Iraq"
## [45] "Denmark" "rn\">United Arab Emirates"
## [47] "Costa Rica" "Cameroon"
## [49] "rn\">Republic of Ireland" "Colombia"
## [51] "Norway" "Nigeria"
## [53] "Saudi Arabia" "Bolivia"
## [55] "Russia" "Greece"
## [57] "Jamaica" "South Africa"
## [59] "Japan" "Croatia"
## [61] "China PR" "Senegal"
## [63] "Slovenia" "Ecuador"
## [65] "rn\">Trinidad and Tobago" "rn\">Serbia and Montenegro"
## [67] "Angola" "Czech Republic"
## [69] "Togo" "Iran"
## [71] "C�te d'Ivoire" "Ghana"
## [73] "Ukraine" "Serbia"
## [75] "New Zealand" "Slovakia"
## [77] "IR Iran" "rn\">Bosnia and Herzegovina"
Reemplazamos por los valores adecuados.
matches$Home.Team.Name[matches$Home.Team.Name=="Germany FR"] <- "Germany"
matches$Home.Team.Name[matches$Home.Team.Name=="IR Iran"] <- "Iran"
matches$Home.Team.Name[matches$Home.Team.Name=="rn\">United Arab Emirates"] <- "United Arab Emirates"
matches$Home.Team.Name[matches$Home.Team.Name=="rn\">Republic of Ireland"] <- "Republic of Ireland"
matches$Home.Team.Name[matches$Home.Team.Name=="rn\">Trinidad and Tobago"] <- "Trinidad and Tobago"
matches$Home.Team.Name[matches$Home.Team.Name=="rn\">Serbia and Montenegro"] <- "Serbia and Montenegro"
matches$Home.Team.Name[matches$Home.Team.Name=="rn\">Bosnia and Herzegovina"] <- "Bosnia and Herzegovina"
matches$Home.Team.Name[matches$Home.Team.Name=="C�te d'Ivoire"] <- "Ivory Coast"unique(matches$Home.Team.Name)## [1] "France" "USA" "Yugoslavia"
## [4] "Romania" "Argentina" "Chile"
## [7] "Uruguay" "Brazil" "Paraguay"
## [10] "Austria" "Hungary" "Switzerland"
## [13] "Sweden" "Germany" "Spain"
## [16] "Italy" "Czechoslovakia" "Cuba"
## [19] "England" "Turkey" "Soviet Union"
## [22] "Northern Ireland" "Mexico" "Wales"
## [25] "Portugal" "Korea DPR" "Peru"
## [28] "Belgium" "Bulgaria" "German DR"
## [31] "Zaire" "Poland" "Australia"
## [34] "Scotland" "Netherlands" "Haiti"
## [37] "Tunisia" "Algeria" "Honduras"
## [40] "Canada" "Morocco" "Korea Republic"
## [43] "Iraq" "Denmark" "United Arab Emirates"
## [46] "Costa Rica" "Cameroon" "Republic of Ireland"
## [49] "Colombia" "Norway" "Nigeria"
## [52] "Saudi Arabia" "Bolivia" "Russia"
## [55] "Greece" "Jamaica" "South Africa"
## [58] "Japan" "Croatia" "China PR"
## [61] "Senegal" "Slovenia" "Ecuador"
## [64] "Trinidad and Tobago" "Serbia and Montenegro" "Angola"
## [67] "Czech Republic" "Togo" "Iran"
## [70] "Ivory Coast" "Ghana" "Ukraine"
## [73] "Serbia" "New Zealand" "Slovakia"
## [76] "Bosnia and Herzegovina"
unique(matches$Away.Team.Name)## [1] "Mexico" "Belgium"
## [3] "Brazil" "Peru"
## [5] "France" "Bolivia"
## [7] "Paraguay" "Romania"
## [9] "Chile" "USA"
## [11] "Yugoslavia" "Argentina"
## [13] "Egypt" "Netherlands"
## [15] "Switzerland" "Sweden"
## [17] "Spain" "Hungary"
## [19] "Austria" "Germany"
## [21] "Czechoslovakia" "Dutch East Indies"
## [23] "Norway" "Poland"
## [25] "Cuba" "Italy"
## [27] "England" "Scotland"
## [29] "Turkey" "Korea Republic"
## [31] "Germany FR" "Uruguay"
## [33] "Wales" "Northern Ireland"
## [35] "Soviet Union" "Colombia"
## [37] "Bulgaria" "Korea DPR"
## [39] "Portugal" "Israel"
## [41] "Morocco" "El Salvador"
## [43] "Australia" "Haiti"
## [45] "German DR" "Zaire"
## [47] "IR Iran" "Tunisia"
## [49] "Iran" "Cameroon"
## [51] "New Zealand" "Algeria"
## [53] "Honduras" "Kuwait"
## [55] "Iraq" "Denmark"
## [57] "Canada" "rn\">Republic of Ireland"
## [59] "rn\">United Arab Emirates" "Costa Rica"
## [61] "Saudi Arabia" "Russia"
## [63] "Greece" "Nigeria"
## [65] "South Africa" "Japan"
## [67] "Croatia" "Jamaica"
## [69] "Senegal" "Slovenia"
## [71] "Ecuador" "China PR"
## [73] "C�te d'Ivoire" "Czech Republic"
## [75] "Ghana" "Togo"
## [77] "Ukraine" "rn\">Trinidad and Tobago"
## [79] "rn\">Serbia and Montenegro" "Angola"
## [81] "Slovakia" "Serbia"
## [83] "rn\">Bosnia and Herzegovina"
matches$Away.Team.Name[matches$Away.Team.Name=="Germany FR"] <- "Germany"
matches$Away.Team.Name[matches$Away.Team.Name=="IR Iran"] <- "Iran"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">United Arab Emirates"] <- "United Arab Emirates"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">Republic of Ireland"] <- "Republic of Ireland"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">Trinidad and Tobago"] <- "Trinidad and Tobago"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">Serbia and Montenegro"] <- "Serbia and Montenegro"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">Bosnia and Herzegovina"] <- "Bosnia and Herzegovina"
matches$Away.Team.Name[matches$Away.Team.Name=="C�te d'Ivoire"] <- "Ivory Coast"unique(matches$Away.Team.Name)## [1] "Mexico" "Belgium" "Brazil"
## [4] "Peru" "France" "Bolivia"
## [7] "Paraguay" "Romania" "Chile"
## [10] "USA" "Yugoslavia" "Argentina"
## [13] "Egypt" "Netherlands" "Switzerland"
## [16] "Sweden" "Spain" "Hungary"
## [19] "Austria" "Germany" "Czechoslovakia"
## [22] "Dutch East Indies" "Norway" "Poland"
## [25] "Cuba" "Italy" "England"
## [28] "Scotland" "Turkey" "Korea Republic"
## [31] "Uruguay" "Wales" "Northern Ireland"
## [34] "Soviet Union" "Colombia" "Bulgaria"
## [37] "Korea DPR" "Portugal" "Israel"
## [40] "Morocco" "El Salvador" "Australia"
## [43] "Haiti" "German DR" "Zaire"
## [46] "Iran" "Tunisia" "Cameroon"
## [49] "New Zealand" "Algeria" "Honduras"
## [52] "Kuwait" "Iraq" "Denmark"
## [55] "Canada" "Republic of Ireland" "United Arab Emirates"
## [58] "Costa Rica" "Saudi Arabia" "Russia"
## [61] "Greece" "Nigeria" "South Africa"
## [64] "Japan" "Croatia" "Jamaica"
## [67] "Senegal" "Slovenia" "Ecuador"
## [70] "China PR" "Ivory Coast" "Czech Republic"
## [73] "Ghana" "Togo" "Ukraine"
## [76] "Trinidad and Tobago" "Serbia and Montenegro" "Angola"
## [79] "Slovakia" "Serbia" "Bosnia and Herzegovina"
matches$Away.Team.Name[matches$Away.Team.Name=="Germany FR"] <- "Germany"
matches$Away.Team.Name[matches$Away.Team.Name=="IR Iran"] <- "Iran"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">United Arab Emirates"] <- "United Arab Emirates"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">Republic of Ireland"] <- "Republic of Ireland"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">Trinidad and Tobago"] <- "Trinidad and Tobago"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">Serbia and Montenegro"] <- "Serbia and Montenegro"
matches$Away.Team.Name[matches$Away.Team.Name=="rn\">Bosnia and Herzegovina"] <- "Bosnia and Herzegovina"
matches$Away.Team.Name[matches$Away.Team.Name=="C�te d'Ivoire"] <- "Ivory Coast"unique(matches$Away.Team.Name)## [1] "Mexico" "Belgium" "Brazil"
## [4] "Peru" "France" "Bolivia"
## [7] "Paraguay" "Romania" "Chile"
## [10] "USA" "Yugoslavia" "Argentina"
## [13] "Egypt" "Netherlands" "Switzerland"
## [16] "Sweden" "Spain" "Hungary"
## [19] "Austria" "Germany" "Czechoslovakia"
## [22] "Dutch East Indies" "Norway" "Poland"
## [25] "Cuba" "Italy" "England"
## [28] "Scotland" "Turkey" "Korea Republic"
## [31] "Uruguay" "Wales" "Northern Ireland"
## [34] "Soviet Union" "Colombia" "Bulgaria"
## [37] "Korea DPR" "Portugal" "Israel"
## [40] "Morocco" "El Salvador" "Australia"
## [43] "Haiti" "German DR" "Zaire"
## [46] "Iran" "Tunisia" "Cameroon"
## [49] "New Zealand" "Algeria" "Honduras"
## [52] "Kuwait" "Iraq" "Denmark"
## [55] "Canada" "Republic of Ireland" "United Arab Emirates"
## [58] "Costa Rica" "Saudi Arabia" "Russia"
## [61] "Greece" "Nigeria" "South Africa"
## [64] "Japan" "Croatia" "Jamaica"
## [67] "Senegal" "Slovenia" "Ecuador"
## [70] "China PR" "Ivory Coast" "Czech Republic"
## [73] "Ghana" "Togo" "Ukraine"
## [76] "Trinidad and Tobago" "Serbia and Montenegro" "Angola"
## [79] "Slovakia" "Serbia" "Bosnia and Herzegovina"
Realizamos los resúmenes respectivos de cada base de datos.
summary(matches)## Year Datetime Stage Stadium
## Min. :1930 Length:850 Length:850 Length:850
## 1st Qu.:1970 Class :character Class :character Class :character
## Median :1990 Mode :character Mode :character Mode :character
## Mean :1985
## 3rd Qu.:2002
## Max. :2014
## City Home.Team.Name Home.Team.Goals Away.Team.Goals
## Length:850 Length:850 Min. : 0.000 Min. :0.000
## Class :character Class :character 1st Qu.: 1.000 1st Qu.:0.000
## Mode :character Mode :character Median : 2.000 Median :1.000
## Mean : 1.811 Mean :1.022
## 3rd Qu.: 3.000 3rd Qu.:2.000
## Max. :10.000 Max. :7.000
## Away.Team.Name Win.conditions Attendance Half.time.Home.Goals
## Length:850 Length:850 Min. : 2000 Min. :0.0000
## Class :character Class :character 1st Qu.: 30000 1st Qu.:0.0000
## Mode :character Mode :character Median : 41580 Median :0.0000
## Mean : 45165 Mean :0.7106
## 3rd Qu.: 61375 3rd Qu.:1.0000
## Max. :173850 Max. :6.0000
## Half.time.Away.Goals Referee Assistant.1 Assistant.2
## Min. :0.0000 Length:850 Length:850 Length:850
## 1st Qu.:0.0000 Class :character Class :character Class :character
## Median :0.0000 Mode :character Mode :character Mode :character
## Mean :0.4294
## 3rd Qu.:1.0000
## Max. :5.0000
## RoundID MatchID Home.Team.Initials Away.Team.Initials
## Min. : 201 Min. : 25 Length:850 Length:850
## 1st Qu.: 262 1st Qu.: 1188 Class :character Class :character
## Median : 337 Median : 2184 Mode :character Mode :character
## Mean :10686257 Mean : 60784892
## 3rd Qu.: 249722 3rd Qu.: 43950058
## Max. :97410600 Max. :300186515
summary(info)## Year Country Winner Runners.Up
## Min. :1930 Length:20 Length:20 Length:20
## 1st Qu.:1957 Class :character Class :character Class :character
## Median :1976 Mode :character Mode :character Mode :character
## Mean :1975
## 3rd Qu.:1995
## Max. :2014
## Third Fourth GoalsScored QualifiedTeams
## Length:20 Length:20 Min. : 70.0 Min. :13.00
## Class :character Class :character 1st Qu.: 89.0 1st Qu.:16.00
## Mode :character Mode :character Median :120.5 Median :16.00
## Mean :119.0 Mean :21.25
## 3rd Qu.:145.2 3rd Qu.:26.00
## Max. :171.0 Max. :32.00
## MatchesPlayed Attendance
## Min. :17.0 Min. : 363000
## 1st Qu.:30.5 1st Qu.: 874832
## Median :38.0 Median :1734864
## Mean :41.8 Mean :1872882
## 3rd Qu.:55.0 3rd Qu.:2725173
## Max. :64.0 Max. :3587538
Análisis de Datos
Mayor Cantidad de Copas Mundiales ganadas
winner <- count(info,info$Winner, sort=TRUE)
colnames(winner) <- c("Country","Number of Worlds Cup")
winner## Country Number of Worlds Cup
## 1 Brazil 5
## 2 Italy 4
## 3 Germany FR 3
## 4 Argentina 2
## 5 Uruguay 2
## 6 England 1
## 7 France 1
## 8 Germany 1
## 9 Spain 1
Concluimos que el país que más veces ha ganado copas mundiales de fútbol es Brasil.
Brasil
Mayor Cantidad de finales de la Copa del Mundo perdidas.
runnerup <- count(info,info$Runners.Up, sort=TRUE)
colnames(runnerup) <- c("Country","Number of Second places")
runnerup## Country Number of Second places
## 1 Argentina 3
## 2 Germany FR 3
## 3 Netherlands 3
## 4 Brazil 2
## 5 Czechoslovakia 2
## 6 Hungary 2
## 7 Italy 2
## 8 France 1
## 9 Germany 1
## 10 Sweden 1
Notamos que los países que más veces han perdido una final de la copa del Mundo son Argentina, República Federal de Alemania y Países Bajos.
Mayor Cantidad de terceros lugares obtenidos en el Mundial.
third <- count(info,info$Third, sort=TRUE)
colnames(third) <- c("Country","Number of Third places")
third## Country Number of Third places
## 1 Germany 3
## 2 Brazil 2
## 3 France 2
## 4 Poland 2
## 5 Sweden 2
## 6 Austria 1
## 7 Chile 1
## 8 Croatia 1
## 9 Germany FR 1
## 10 Italy 1
## 11 Netherlands 1
## 12 Portugal 1
## 13 Turkey 1
## 14 USA 1
Observamos que Alemania es el país que más veces a quedado en tercer puesto en las Copas Mundiales de Fútbol.
Alemania
Resumen general del podio ocupado en los mundiales.
resumen <- merge(winner, runnerup, by='Country', all=TRUE)
resumen2 <- merge(resumen, third, by='Country', all=TRUE)
resumen2[is.na(resumen2)] <- 0
resumen2 <- gather(resumen2,key="Position",value="Times",2:4)
resumen2## Country Position Times
## 1 Argentina Number of Worlds Cup 2
## 2 Austria Number of Worlds Cup 0
## 3 Brazil Number of Worlds Cup 5
## 4 Chile Number of Worlds Cup 0
## 5 Croatia Number of Worlds Cup 0
## 6 Czechoslovakia Number of Worlds Cup 0
## 7 England Number of Worlds Cup 1
## 8 France Number of Worlds Cup 1
## 9 Germany Number of Worlds Cup 1
## 10 Germany FR Number of Worlds Cup 3
## 11 Hungary Number of Worlds Cup 0
## 12 Italy Number of Worlds Cup 4
## 13 Netherlands Number of Worlds Cup 0
## 14 Poland Number of Worlds Cup 0
## 15 Portugal Number of Worlds Cup 0
## 16 Spain Number of Worlds Cup 1
## 17 Sweden Number of Worlds Cup 0
## 18 Turkey Number of Worlds Cup 0
## 19 Uruguay Number of Worlds Cup 2
## 20 USA Number of Worlds Cup 0
## 21 Argentina Number of Second places 3
## 22 Austria Number of Second places 0
## 23 Brazil Number of Second places 2
## 24 Chile Number of Second places 0
## 25 Croatia Number of Second places 0
## 26 Czechoslovakia Number of Second places 2
## 27 England Number of Second places 0
## 28 France Number of Second places 1
## 29 Germany Number of Second places 1
## 30 Germany FR Number of Second places 3
## 31 Hungary Number of Second places 2
## 32 Italy Number of Second places 2
## 33 Netherlands Number of Second places 3
## 34 Poland Number of Second places 0
## 35 Portugal Number of Second places 0
## 36 Spain Number of Second places 0
## 37 Sweden Number of Second places 1
## 38 Turkey Number of Second places 0
## 39 Uruguay Number of Second places 0
## 40 USA Number of Second places 0
## 41 Argentina Number of Third places 0
## 42 Austria Number of Third places 1
## 43 Brazil Number of Third places 2
## 44 Chile Number of Third places 1
## 45 Croatia Number of Third places 1
## 46 Czechoslovakia Number of Third places 0
## 47 England Number of Third places 0
## 48 France Number of Third places 2
## 49 Germany Number of Third places 3
## 50 Germany FR Number of Third places 1
## 51 Hungary Number of Third places 0
## 52 Italy Number of Third places 1
## 53 Netherlands Number of Third places 1
## 54 Poland Number of Third places 2
## 55 Portugal Number of Third places 1
## 56 Spain Number of Third places 0
## 57 Sweden Number of Third places 2
## 58 Turkey Number of Third places 1
## 59 Uruguay Number of Third places 0
## 60 USA Number of Third places 1
ggplot()+geom_bar(data=resumen2,aes(x=Country,y=Times,fill=Position),stat='identity',position='dodge')+coord_flip() +xlab("País")+ ylab("Veces") + ggtitle("Número de podios de cada país")Apreciamos que el país que más veces ha quedado en el podio de los mundiales es la selección de Brasil, cabe resaltar que si consideramos los datos de Alemania y la República Federal de Alemania como uno solo, se convertiría en el país con más podios ocupados.
Número de Goles por País
home <- data.frame(Countries=matches$Home.Team.Name,Goals=matches$Home.Team.Goals)
away <- data.frame(Countries=matches$Away.Team.Name,Goals=matches$Away.Team.Goals)
home <- home %>%group_by(Countries) %>% summarise(Sum_goals_h = sum(Goals))
away <- away %>%group_by(Countries) %>% summarise(Sum_goals_a = sum(Goals))
total_goals <- merge(home, away, by='Countries', all=TRUE)
total_goals[is.na(total_goals)] <- 0
total_goals <- total_goals %>% mutate(Total=Sum_goals_h+Sum_goals_a)
total_goals <- data.frame(Countries=total_goals$Countries,Total=total_goals$Total)
total_goals <- total_goals[order(total_goals$Total,decreasing=TRUE),]
head(total_goals,5)## Countries Total
## 29 Germany 231
## 9 Brazil 225
## 3 Argentina 133
## 38 Italy 128
## 27 France 108
total_most_goals <- head(total_goals,30)
d <- ggplot(total_most_goals,aes(y=Countries,x=Total))
d+geom_col(fill=1:30)+xlab("Cantidad")+ylab("País")+ ggtitle("Número de Goles por Países")Resaltamos que el país que más goles ha marcado en todos los mundiales jugados es Alemania, seguido de Brasil y Argentina.
Asistencia a cada mundial de fútbol
info %>% hchart('bar',hcaes(x='as.character(Year)',y='Attendance')) %>% hc_add_theme(hc_theme_flat()) %>% hc_title(text = "Asistencia a cada mundial") %>% hc_xAxis(title = list(text = "Año")) %>% hc_yAxis(title = list(text = "Cantidad de asistentes"))Mediante el gráfico realizado, notamos que el mundial del 94 fue el que tuvo mayor asistencia de todos los disputados, seguido de los mundiales del 2006 y 2014.
Número de equipos participantes por mundial de fútbol
info %>% hchart('line',hcaes(x='Year',y='QualifiedTeams')) %>% hc_add_theme(hc_theme_alone()) %>% hc_title(text = "Equipos participantes en cada mundial") %>% hc_xAxis(title = list(text = "Año")) %>% hc_yAxis(title = list(text = "Cantidad de equipos"))Observamos que con el paso de los años se han ido incrementando los equipos participantes en cada mundial.
Goles marcados por Mundial
info2 <- info
info2$Year <- as.character(info2$Year)
info2 %>% hchart('bar',hcaes(x='Year',y='GoalsScored')) %>% hc_add_theme(hc_theme_darkunica()) %>% hc_title(text = "Goles anotados en cada mundial") %>% hc_xAxis(title = list(text = "Año")) %>% hc_yAxis(title = list(text = "Cantidad de goles"))Observamos que en los últimos mundiales disputados existe una mayor cantidad de goles anotados en comparación a los primeros.
Partidos disputados por Copa del Mundo.
info2 %>% hchart('bar',hcaes(x='Year',y='QualifiedTeams')) %>% hc_add_theme(hc_theme_538()) %>% hc_title(text = "Partidos disputados por cada mundial") %>% hc_xAxis(title = list(text = "Año")) %>% hc_yAxis(title = list(text = "Cantidad de partidos"))Notamos que existe una menor cantidad de partidos jugados en los primeros mundiales a comparación de los últimos, esto se debe, como vimos en gráficas anteriores, que existió notable diferencia en la cantidad de participantes.Además, esto nos ayuda a explicar la diferencia de goles por mundial, pues es intuitivo que a menor cantidad de partidos jugados se espera menos goles marcados.
Partidos con mayor número de asistencia
top10 <- matches[order(matches$Attendance,decreasing = TRUE),]
top10 <- head(top10,10)
names <- str_c(top10$Home.Team.Name," vs ",top10$Away.Team.Name,", ",top10$Stage,", ",top10$Year)
top10 <- data.frame(Partido=names,Asistencia=top10$Attendance)
top10 %>% hchart('bar',hcaes(x='Partido',y='Asistencia')) %>% hc_add_theme(hc_theme_flatdark()) %>% hc_title(text = "Partidos con más asistencia de los mundiales")%>% hc_xAxis(title = list(text = "Partido, Fase, Año.")) %>% hc_yAxis(title = list(text = "Cantidad de asistentes"))Apreciamos que entre los partidos con más asistencia no existen similitudes, pues no todos son en las finales, ni los partidos inaugurales, no existe una fase que determine la mayor asistencia del público, por lo tanto la afluencia de asistentes se da por el interés de ver a los equipos enfrentarse.
Porcentaje de partidos ganados por equipo local y visitante
Resultados <- ifelse(matches$Home.Team.Goals>matches$Away.Team.Goals,"Home_Team_Win",ifelse(matches$Home.Team.Goals<matches$Away.Team.Goals,"Away_Team_Win","Draw"))
tabla <- data.frame(table(Resultados))
tabla <- mutate(tabla, porcentaje = round((Freq/sum(Freq)*100),2))
tabla$porcentaje <- as.character(tabla$porcentaje)
tabla$porcentaje <- str_c(tabla$porcentaje," %")
tabla## Resultados Freq porcentaje
## 1 Away_Team_Win 174 20.47 %
## 2 Draw 190 22.35 %
## 3 Home_Team_Win 486 57.18 %
hchart(tabla, "pie", hcaes(x=Resultados,y=Freq),dataLabels = list(format = "{point.name}<br>({point.porcentaje})")) %>% hc_add_theme(hc_theme_superheroes())%>% hc_title(text = "Resultados por Equipos Visitantes y Locales") Finalmente, podemos notar que los equipos que juegan de local tienen un mayor porcentaje de victorias frente a los que juegan de visitante y a los partidos que terminan empatados.