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)
## 
## 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(tidyr)
# Cargamos el conjunto de datos WorldCupMatches
df_partidos <- read.csv("WorldCupMatches.csv")
# View(df_partidos)

1. Exploración

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).

No es necesario hacer una documentación exhaustiva, tan solo comentar aspectos principales como qué tipo de información almacena el DataFrame, cuántas filas y columnas tiene, y comentar las columnas que se consideren más relevantes.

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

La salida de head(df_partidos) es útil para visualizar una pequeña muestra de los datos y confirmar que se cargaron correctamente, permitiendo inspeccionar las columnas, los nombres y la estructura del data frame.

s<-summary(df_partidos)
s
##       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.: 61374   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

Comparación de describe() y summary()

En Python, describe() excluye por defecto las variables categóricas (de tipo texto) a menos que se utilice include=‘all’. En R, summary() incluye variables categóricas automáticamente, mostrando su clase y los valores más frecuentes. Python incluye un recuento explícito de valores no nulos (count) en cada columna. R no incluye explícitamente este conteo, pero sí muestra el número de NA’s (datos faltantes). En Python, se incluye explícitamente la desviación estándar (std), la cual no aparece en la salida de R por defecto. En R, se proporciona información del tipo de variable (Class y Mode), lo cual no se presenta en la salida de Python.

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 perdido. 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.

#?apply
#apply(X, MARGIN, FUN, ..., simplify = TRUE)
apply(X = is.na(df_partidos), MARGIN = 2, FUN = sum) #contar el números de datos perdidos utilizanzonddo la funció apply, donde Margin 1 si es por filas y 2 si es por columnas, fun, la funcion a aplicar
##                 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

En primer lugar se observa que para las variables Year, Home.Team.Goals, Away.Team.Goals, Attendance, Half.time.Home.Goals, Half.time.Away.Goals, RoundID y MatchID coninciden con 3720 faltantes.
¿a qué se deben estos valores perdidos?

  • Algunos partidos pueden haberse jugado en época no se registraron algunos datos, por falta de interés.
  • Detalles como los nombres de los árbitros y numero de asistentes pueden faltar en partidos más antiguos.
  • Los datos mas antiguos suelen ser menos detallados que los datos recientes, debido a la fanta de digitilización o documentación.
  • Datos mal ingresados o incompletos durante la carga inicial.
  • Algunos partidos pueden no haber sido incluidos en el proceso de recopilación inicial
#?drop_na
#drop_na(data, ...)
df_partidos <- df_partidos %>% drop_na()
nrow(df_partidos)
## [1] 850

Con los valores NaN eliminados del Data Frame, se puede interpretar la información de la siguiente manera: El DataFrame ahora tiene 850 filas Esto indica que se eliminaron 3720 filas que contenían valores faltantes en alguna de las columnas.Se mantienen las 20 columnas originales.

3. Cargar datos

Crear las variables df_jugadores y df_copas que contengan los dataframes correspondientes a la lectura de los csv WorldCupPlayers y WorldCups.

df_jugadores <- read.csv("WorldCupPlayers.csv")
df_copas <- read.csv("WorldCups.csv")

4. 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.

#min(df_copas$Year)
print(paste("El año del mundial más antiguo disputado es:", min(df_copas$Year)))
## [1] "El año del mundial más antiguo disputado es: 1930"
# ¿Y el año del mundial más reciente?
#max(df_copas$Year)
print(paste("El año del mundial más reciente disputado es:", max(df_copas$Year)))
## [1] "El año del mundial más reciente disputado 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.

df_copas %>% 
  filter(Year == min(df_copas$Year))
##   Year Country  Winner Runners.Up Third     Fourth GoalsScored QualifiedTeams
## 1 1930 Uruguay Uruguay  Argentina   USA Yugoslavia          70             13
##   MatchesPlayed Attendance
## 1            18    590.549
df_copas %>% 
  filter(Year == max(df_copas$Year))
##   Year Country  Winner Runners.Up       Third Fourth GoalsScored QualifiedTeams
## 1 2014  Brazil Germany  Argentina Netherlands Brazil         171             32
##   MatchesPlayed Attendance
## 1            64  3.386.810