Dataset

En esta libreta vamos a trabajar con un conjunto de datos que contiene los datos de la FIFA de la copa del mundo. Disponéis de los archivos ya descargados en la sección de recursos. Utilizaremos estos tres ficheros:

Introducción

Mediante esta libreta vamos a explorar los datos almacenados en estos tres ficheros y a responder preguntas haciendo operaciones y transformaciones con pandas. Además de completar las celdas de código para responder a los ejercicios, cuando así se indique se deberá incluir texto en markdown explicando la información o las conclusiones extraídas.

library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
# Cargamos el conjunto de datos
df_partidos <- read.csv("~/Maestrías/Maestria Data Science & Big data/4. Introducción a los lenguajes de programación/1. Fundamentos de python/Clase # 3. Fundamentos de R/WorldCupMatches.csv")

df_jugadores <- read.csv("~/Maestrías/Maestria Data Science & Big data/4. Introducción a los lenguajes de programación/1. Fundamentos de python/Clase # 3. Fundamentos de R/WorldCupPlayers.csv")

df_copas <- read.csv("~/Maestrías/Maestria Data Science & Big data/4. Introducción a los lenguajes de programación/1. Fundamentos de python/Clase # 3. Fundamentos de R/WorldCups.csv")

1. Exploración bases de datos

1.1. World Cup Matches

Usar las funcioneshead y summary para explorar el dataframe df_partidos. Documentar en markdown brevemente la información almacenada en cada dataframe (columnas y tipo de datos).

head(df_partidos)
##   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
## 4 1930 14 Jul 1930 - 14:50  Group 3        Pocitos Montevideo         Romania
## 5 1930 15 Jul 1930 - 16:00  Group 1 Parque Central Montevideo       Argentina
## 6 1930 16 Jul 1930 - 14:45  Group 1 Parque Central Montevideo           Chile
##   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
## 4               3               1           Peru                      2549
## 5               1               0         France                     23409
## 6               3               0         Mexico                      9249
##   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)
## 4                    1                    0  WARNKEN Alberto (CHI)
## 5                    0                    0    REGO Gilberto (BRA)
## 6                    1                    0  CRISTOPHE Henry (BEL)
##                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
## 4      LANGENUS Jean (BEL)   MATEUCCI Francisco (URU)     201    1098
## 5     SAUCEDO Ulises (BOL) RADULESCU Constantin (ROU)     201    1085
## 6  APHESTEGUY Martin (URU)        LANGENUS Jean (BEL)     201    1095
##   Home.Team.Initials Away.Team.Initials
## 1                FRA                MEX
## 2                USA                BEL
## 3                YUG                BRA
## 4                ROU                PER
## 5                ARG                FRA
## 6                CHI                MEX
summary(df_partidos)
##       Year        Datetime            Stage             Stadium         
##  Min.   :1930   Length:4572        Length:4572        Length:4572       
##  1st Qu.:1970   Class :character   Class :character   Class :character  
##  Median :1990   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :1985                                                           
##  3rd Qu.:2002                                                           
##  Max.   :2014                                                           
##  NA's   :3720                                                           
##      City           Home.Team.Name     Home.Team.Goals  Away.Team.Goals
##  Length:4572        Length:4572        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  
##                                        NA's   :3720     NA's   :3720   
##  Away.Team.Name     Win.conditions       Attendance     Half.time.Home.Goals
##  Length:4572        Length:4572        Min.   :  2000   Min.   :0.000       
##  Class :character   Class :character   1st Qu.: 30000   1st Qu.:0.000       
##  Mode  :character   Mode  :character   Median : 41580   Median :0.000       
##                                        Mean   : 45165   Mean   :0.709       
##                                        3rd Qu.: 61375   3rd Qu.:1.000       
##                                        Max.   :173850   Max.   :6.000       
##                                        NA's   :3722     NA's   :3720        
##  Half.time.Away.Goals   Referee          Assistant.1        Assistant.2       
##  Min.   :0.000        Length:4572        Length:4572        Length:4572       
##  1st Qu.:0.000        Class :character   Class :character   Class :character  
##  Median :0.000        Mode  :character   Mode  :character   Mode  :character  
##  Mean   :0.428                                                                
##  3rd Qu.:1.000                                                                
##  Max.   :5.000                                                                
##  NA's   :3720                                                                 
##     RoundID            MatchID          Home.Team.Initials Away.Team.Initials
##  Min.   :     201   Min.   :       25   Length:4572        Length:4572       
##  1st Qu.:     262   1st Qu.:     1189   Class :character   Class :character  
##  Median :     337   Median :     2191   Mode  :character   Mode  :character  
##  Mean   :10661773   Mean   : 61346868                                        
##  3rd Qu.:  249722   3rd Qu.: 43950059                                        
##  Max.   :97410600   Max.   :300186515                                        
##  NA's   :3720       NA's   :3720
str(df_partidos)
## '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" ...
colnames(df_partidos)
##  [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"

Análisis de data.

El DataFrame presenta información sobre los partidos disputados desde el año 1930 hasta el 2014, es una base de datos compuesta por 4572 filas con 852 datos no nulos (4572-3720 = 852); y 20 columnas con 8 variables de tipo int y 12 de tipo chr.

Entre todas las variables a destacar están: Home Team Goals, Away Team Goals, Home Team Name, Away Team Name, Stadium, Attendance, Stage; que nos permite extraer estadísticas sobre:

  • Goles por equipo en cada mundial.
  • Goles por país.
  • Partidos con mayor asistencia.
  • Estadios con mayor asistencia.
  • Resultados de los partidos por equipos locales vs visitantes.
  • Series de tiempo de asistencia a los estadios más visitados.
  • Series de tiempo de los equipos de interés para mirar su evolución en cada mundial.
  • Correlación del equipo ganador vs el lugar de juego.

1.2. World Cup Players

head(df_jugadores)
##   RoundID MatchID Team.Initials          Coach.Name Line.up Shirt.Number
## 1     201    1096           FRA CAUDRON Raoul (FRA)       S            0
## 2     201    1096           MEX    LUQUE Juan (MEX)       S            0
## 3     201    1096           FRA CAUDRON Raoul (FRA)       S            0
## 4     201    1096           MEX    LUQUE Juan (MEX)       S            0
## 5     201    1096           FRA CAUDRON Raoul (FRA)       S            0
## 6     201    1096           MEX    LUQUE Juan (MEX)       S            0
##        Player.Name Position Event
## 1      Alex THEPOT       GK      
## 2  Oscar BONFIGLIO       GK      
## 3 Marcel LANGILLER           G40'
## 4     Juan CARRENO           G70'
## 5  Ernest LIBERATI               
## 6     Rafael GARZA        C
summary(df_jugadores)
##     RoundID            MatchID          Team.Initials       Coach.Name       
##  Min.   :     201   Min.   :       25   Length:37784       Length:37784      
##  1st Qu.:     263   1st Qu.:     1199   Class :character   Class :character  
##  Median :     337   Median :     2216   Mode  :character   Mode  :character  
##  Mean   :11056474   Mean   : 63622330                                        
##  3rd Qu.:  255931   3rd Qu.: 97410003                                        
##  Max.   :97410600   Max.   :300186515                                        
##    Line.up           Shirt.Number   Player.Name          Position        
##  Length:37784       Min.   : 0.00   Length:37784       Length:37784      
##  Class :character   1st Qu.: 5.00   Class :character   Class :character  
##  Mode  :character   Median :11.00   Mode  :character   Mode  :character  
##                     Mean   :10.73                                        
##                     3rd Qu.:17.00                                        
##                     Max.   :23.00                                        
##     Event          
##  Length:37784      
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
str(df_jugadores)
## 'data.frame':    37784 obs. of  9 variables:
##  $ RoundID      : int  201 201 201 201 201 201 201 201 201 201 ...
##  $ MatchID      : int  1096 1096 1096 1096 1096 1096 1096 1096 1096 1096 ...
##  $ Team.Initials: chr  "FRA" "MEX" "FRA" "MEX" ...
##  $ Coach.Name   : chr  "CAUDRON Raoul (FRA)" "LUQUE Juan (MEX)" "CAUDRON Raoul (FRA)" "LUQUE Juan (MEX)" ...
##  $ Line.up      : chr  "S" "S" "S" "S" ...
##  $ Shirt.Number : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Player.Name  : chr  "Alex THEPOT" "Oscar BONFIGLIO" "Marcel LANGILLER" "Juan CARRENO" ...
##  $ Position     : chr  "GK" "GK" "" "" ...
##  $ Event        : chr  "" "" "G40'" "G70'" ...
colnames(df_jugadores)
## [1] "RoundID"       "MatchID"       "Team.Initials" "Coach.Name"   
## [5] "Line.up"       "Shirt.Number"  "Player.Name"   "Position"     
## [9] "Event"

Análisis de data.

El DataFrame presenta información sobre los jugadores que han jugado en cada partido disputado desde el año 1930 hasta el 2014, es una base de datos compuesta por 37784 filas; y 9 columnas con 3 variables de tipo int y 6 de tipo chr.

Entre todas las variables a destacar están: RoundID, MatchID, Team Initials, Player Name, que son variables de utilidad para responder a diferentes preguntas una vez se logre concatenar las dos primeras columnas con la primera base de datos:

Las preguntas a responder pueden ser:

  • Jugadores que más partidos jugaron en un mundial.
  • Relación de jugadores de un equipo en particular con respecto a si ganaron un partido o no, y utilizar también las posiciones aunque posiblemente no haya suficientes datos sobre Position.

1.3. World Cups

head(df_copas)
##   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
## 4 1950      Brazil    Uruguay         Brazil  Sweden      Spain          88
## 5 1954 Switzerland Germany FR        Hungary Austria    Uruguay         140
## 6 1958      Sweden     Brazil         Sweden  France Germany FR         126
##   QualifiedTeams MatchesPlayed Attendance
## 1             13            18    590.549
## 2             16            17    363.000
## 3             15            18    375.700
## 4             13            22  1.045.246
## 5             16            26    768.607
## 6             16            35    819.810
summary(df_copas)
##       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   Length:20         
##  1st Qu.:30.5   Class :character  
##  Median :38.0   Mode  :character  
##  Mean   :41.8                     
##  3rd Qu.:55.0                     
##  Max.   :64.0
str(df_copas)
## '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" ...
colnames(df_copas)
##  [1] "Year"           "Country"        "Winner"         "Runners.Up"    
##  [5] "Third"          "Fourth"         "GoalsScored"    "QualifiedTeams"
##  [9] "MatchesPlayed"  "Attendance"

Análisis de data.

El DataFrame presenta información sobre las clasificaciones de 1er hasta 4to lugar obtenidas a lo largo de cada partido disputado desde el año 1930 hasta el 2014, es una base de datos compuesta por 20 filas con datos no nulos; y 10 columnas con 4 variables de tipo int y 6 de tipo chr.

Entre todas las variables a destacar están: Year, Country, el puesto obtenido, GoalsScored y Attendance, para dar respuesta a preguntas como:

  • Número de triunfos obtenidos por equipo en cada puesto entre los años 1930 y 2014.
  • Concatenar con la segunda tabla para identificar los jugadores que más veces jugaron en el mundial donde obtuvieron la copa y posiblemente correlacionarlo con las Positions de los jugadores.

2. Limpieza de datos

Una de las cosas que llama la atención es la alta presencia de valores perdidos en el DataFrame df_partidos. Cuando trabajamos con datos obtenidos del mundo real siempre nos toparemos con problemas relacionados con la medición, captura o almacenamiento de dicha información.

Localiza las filas con valores perdidos. Analizar y documentar en markdown a qué se deben estos valores perdidos. Finalmente usar la función drop_na sobre el DataFrame para eliminar los valores perdidos del DataFrame, y almacena el resultado en df_partidos de nuevo.

Con la siguiente línea de código se van a sumar todos los valores nulos por columna, y al mismo tiempo identificar si hay valores nulos

# Contar el número de valores nulos por columna
num_nulos <- colSums(is.na(df_partidos))
num_nulos
##                 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
# Contar el número de valores nulos por columna
num_nulos <- colSums(is.na(df_jugadores))
num_nulos
##       RoundID       MatchID Team.Initials    Coach.Name       Line.up 
##             0             0             0             0             0 
##  Shirt.Number   Player.Name      Position         Event 
##             0             0             0             0
# Contar el número de valores nulos por columna
num_nulos <- colSums(is.na(df_copas))
num_nulos
##           Year        Country         Winner     Runners.Up          Third 
##              0              0              0              0              0 
##         Fourth    GoalsScored QualifiedTeams  MatchesPlayed     Attendance 
##              0              0              0              0              0

Solo se encontraron valores nulos en la base de datos df_partidos, procederemos a eliminarlos.

df_partidos_sin_nulos <- drop_na(df_partidos)
df_partidos = df_partidos_sin_nulos
num_nulos <- colSums(is.na(df_partidos))
num_nulos
##                 Year             Datetime                Stage 
##                    0                    0                    0 
##              Stadium                 City       Home.Team.Name 
##                    0                    0                    0 
##      Home.Team.Goals      Away.Team.Goals       Away.Team.Name 
##                    0                    0                    0 
##       Win.conditions           Attendance Half.time.Home.Goals 
##                    0                    0                    0 
## Half.time.Away.Goals              Referee          Assistant.1 
##                    0                    0                    0 
##          Assistant.2              RoundID              MatchID 
##                    0                    0                    0 
##   Home.Team.Initials   Away.Team.Initials 
##                    0                    0

Volvemos a verificar que no hayan datos nulos, y que tampoco se hayan eliminado datos importantes por analizar.

summary(df_partidos)
##       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
# Identificar columnas con valores duplicados
filas_duplicadas <- df_partidos[duplicated(df_partidos) | duplicated(df_partidos, fromLast = TRUE), ]
head(filas_duplicadas)
##     Year             Datetime          Stage             Stadium
## 821 2014 28 Jun 2014 - 13:00     Round of 16    Estadio Mineirao
## 822 2014 28 Jun 2014 - 17:00     Round of 16 Estadio do Maracana
## 823 2014 30 Jun 2014 - 13:00     Round of 16    Estadio Nacional
## 824 2014 04 Jul 2014 - 17:00  Quarter-finals    Estadio Castelao
## 825 2014 04 Jul 2014 - 13:00  Quarter-finals Estadio do Maracana
## 826 2014 08 Jul 2014 - 17:00     Semi-finals    Estadio Mineirao
##                City Home.Team.Name Home.Team.Goals Away.Team.Goals
## 821 Belo Horizonte          Brazil               1               1
## 822 Rio De Janeiro        Colombia               2               0
## 823       Brasilia          France               2               0
## 824      Fortaleza          Brazil               2               1
## 825 Rio De Janeiro          France               0               1
## 826 Belo Horizonte          Brazil               1               7
##     Away.Team.Name                   Win.conditions Attendance
## 821          Chile Brazil win on penalties (3 - 2)       57714
## 822        Uruguay                                       73804
## 823        Nigeria                                       67882
## 824       Colombia                                       60342
## 825        Germany                                       74240
## 826        Germany                                       58141
##     Half.time.Home.Goals Half.time.Away.Goals                       Referee
## 821                    0                    0             WEBB Howard (ENG)
## 822                    1                    0           Bj�rn KUIPERS (NED)
## 823                    0                    0             GEIGER Mark (USA)
## 824                    1                    0 Carlos VELASCO CARBALLO (ESP)
## 825                    0                    1           PITANA Nestor (ARG)
## 826                    0                    5         RODRIGUEZ Marco (MEX)
##                        Assistant.1              Assistant.2 RoundID   MatchID
## 821        MULLARKEY Michael (ENG)        Darren CANN (ENG)  255951 300186487
## 822        Sander VAN ROEKEL (NED)     Erwin ZEINSTRA (NED)  255951 300186491
## 823                HURD Sean (USA)       FLETCHER Joe (CAN)  255951 300186462
## 824 ALONSO FERNANDEZ Roberto (ESP)         YUSTE Juan (ESP)  255953 300186461
## 825           MAIDANA Hernan (ARG) BELATTI Juan Pablo (ARG)  255953 300186485
## 826        TORRENTERA Marvin (MEX)    QUINTERO Marcos (MEX)  255955 300186474
##     Home.Team.Initials Away.Team.Initials
## 821                BRA                CHI
## 822                COL                URU
## 823                FRA                NGA
## 824                BRA                COL
## 825                FRA                GER
## 826                BRA                GER
# Eliminar filas duplicadas y comprobar
df_partidos_sin_duplicados <- unique(df_partidos)
df_partidos = df_partidos_sin_duplicados
filas_duplicadas <- df_partidos[duplicated(df_partidos) | duplicated(df_partidos, fromLast = TRUE), ]
head(filas_duplicadas)
##  [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  
## <0 rows> (o 0- extensión row.names)

Se encontraron y se eliminaron las filas con datos duplicados en cada una de las variables, debido a que estas pueden afectar las estadísticas calculadas para alguna de las preguntas planteadas.

Datos perdidos “Causas”.

Algunas de las causas de los valores perdidos en una base de datos son:

Los errores humanos: Estos errores pueden ocurrir debido a la entrada de datos incorrecta, como dejar campos vacíos o ingresar información inválida. También pueden ocurrir por omisiones accidentales, como olvidar completar ciertos campos o no tener la información disponible. Finalmente, la falta de capacitación adecuada para los usuarios en los procedimientos de entrada de datos puede llevar a errores que resulten en valores perdidos.

Los problemas técnicos: Los fallos en el hardware o software pueden corromper los datos o incluso hacer que se pierdan por completo. Las interrupciones en la red también pueden impedir que los datos se guarden correctamente, mientras que los errores durante la importación de datos pueden causar la pérdida de información.

La naturaleza de los datos: Algunos datos simplemente no se recopilan, como cuando una encuesta no incluye una pregunta específica. También pueden existir datos confidenciales que no se pueden recopilar, como información médica personal. Finalmente, eventos inesperados como desastres naturales o ciberataques pueden causar la pérdida de datos.

El diseño de la base de datos: Un diseño inadecuado puede dificultar la captura correcta de los datos o incluso hacer que se pierdan. La falta de mecanismos de validación de datos permite la entrada de información incorrecta o perdida. La integración de datos de diferentes fuentes también puede generar valores perdidos, al igual que las actualizaciones de software o bases de datos.

3. Rango temporal

El dataframe df_copas contiene datos de todos los mundiales disputados. ¿Cuál es el año del mundial más antiguo disputado? ¿Y el año del mundial más reciente?

Pista: recuerda que podemos usar funciones de agregación (min mean, etc.) directamente sobre columnas. Por ejemplo, el siguiente código nos muestra el mayor número de goles marcado en un mundial.

x = min(df_copas$Year)
y = max(df_copas$Year)
cat("El año del mundial más antiguo es: ", x, "\n")
## El año del mundial más antiguo es:  1930
cat("El año del mundial más reciente es: ", y)
## El año del mundial más reciente es:  2014

Opcional: Una vez localizados los años de interés (más antiguo y más reciente) visualizar las filas completas correspondientes a cada año usando la función filter.

fila_mas_antigua <- df_copas %>% 
  filter(Year == x)
  
fila_mas_reciente <- df_copas %>% 
  filter(Year == y)

print(rbind(fila_mas_antigua, fila_mas_reciente))
##   Year Country  Winner Runners.Up       Third     Fourth GoalsScored
## 1 1930 Uruguay Uruguay  Argentina         USA Yugoslavia          70
## 2 2014  Brazil Germany  Argentina Netherlands     Brazil         171
##   QualifiedTeams MatchesPlayed Attendance
## 1             13            18    590.549
## 2             32            64  3.386.810