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:
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)
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
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.
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?
#?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.
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")
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