Datos Mundiales de Fútbol 1830 - 2014

La Copa Mundial de Fútbol de la FIFA, o simplemente llamada el Mundial de Fútbol, es una competición internacional de fútbol disputada por los equipos nacionales masculinos senior de los miembros de la Federación Internacional de Fútbol Asociación (FIFA), el organismo rector mundial del deporte. El campeonato se ha otorgado cada cuatro años desde el torneo inaugural en 1930, excepto en 1942 y 1946 cuando no se llevó a cabo debido a la Segunda Guerra Mundial. Para el presente trabajo vamos a tomar en cuenta los mundiales llevados a cabo hasta 2014, en el cual el campeón fue Alemania, que ganó su cuarto título en el torneo de 2014 en Brasil.

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.