TP1 - tidyverse olímpico

En este práctico vamos a usar los paquetes del {tidyverse} para explorar los datos históricos de los Juegos Olímpicos desde Atenas 1896 a Rio 2016 (faltan Tokio 2020 y Pekín 2022).

Antes de empezar les recordamos que tienen que instalar los paquetes del {tidyverse} y adjuntarlo a la sesión de R ejecutando las dos líneas a continuación (si ya instalaron los paquetes del {tidyverse} no hace falta que corran la primera línea):

install.packages("tidyverse")
library(tidyverse)

Cómo cargar los datos

Los datos históricos de los Juegos Olímpicos son un dataset de Kaggle. Para cargarlos a su sesión de R los pueden encontrar en el repositorio de la materia, en las carpetas docs/Practicos/tidyverse/data, copiarlos en su carpeta de trabajo y leerlos utilizando la función read_csv() del paquete {readr}.

dictionary_tbl <- read_csv("dictionary.csv")
summer_tbl <- read_csv("summer.csv")
winter_tbl <- read_csv("winter.csv")

Los datos

dictionary_tbl, winter_tbl y summer_tbl son tres (tristes) tibbles que contienen información sobre los países participantes de los juegos Olímpicos y resultados de los juegos de invierno y de verano, respectivamente.

Les dejamos la exploración de las observaciones y las variables a ustedes. Recuerden que tienen funciones como str(), summary(), head() o View() que pueden resultar muy útiles para empezar a entender el contenido de cada tibble.

Las consignas

La idea es que pongan en práctica todas las funcionalidades del tidyverse que vimos en las clases, cosas como el piping o los verbos de {dplyr}. Es por eso que les recomendamos que, aunque existan métodos alternativos para obtener las respuestas a estas consignas, intenten utilizar las herramientas que les acabamos de mencionar.

Por supuesto que con lo que vimos en las clases no les va a alcanzar para resolver las consignas, pero para todo lo que no está en las clases existe google.

Vamos a ver qué jugo🥤les podemos sacar a estos datos…

  1. Empecemos con algo sencillo: ¿Qué simboliza cada fila del tibble? ¿Es una medalla por país o por atleta?.

    Pista: usemos View() para visualizar summer_tbl antes de hacer ninguna operación. En la columna Athlete ¿Qué pasa en los deportes de equipo? Si de ahora en adelante vamos a estar interesados en las medallas por país ¿Esta bien calcular las medallas totales sumando las filas del tibble? ¿Cómo podemos hacer para solucionarlo?.

    Acá una propuesta (hagan lo mismo para winter_tbl):

# Acomodemos el tibble
summer_por_disciplina_tbl <- summer_tbl %>% 
    group_by(Year, City, Sport, Country, Discipline, Event, Gender, Medal) %>%
    summarise() # No hace ninguna operación, simplemente se queda con una sola de las ocurrencias
  1. Ahora que ya tenemos las medallas por país (y no por atleta 😉) para cada disciplina, usando group_by() y los verbos de {dplyr}, creen un nuevo tibble (oro_por_pais) que tenga, de forma ordenada, la cantidad de medallas de oro que ganó cada país en toda la historia de los Juegos Olímpicos de verano.

    Pista: Si queremos ordenar algo de forma descendente en dplyr tenemos que usar arrange(desc(variable)).

  2. ¿Y si ahora queremos ver cuántas de Oro, de Plata y de Bronce? ¿Cómo deberíamos modificar el pipe %>% de análisis?

  3. ¿Y para quedarnos con los países en oro_por_pais con más de 5 medallas de oro? ¿Está Argentina🇦🇷 (ARG) en ese grupo?

  4. ¿Quién ganó más medallas de oro en Hockey sobre hielo (Ice Hockey) masculino, Canadá (CAN) o la Unión Soviética (URS)?

    Pista: Para filtrar una columna de acuerdo a varios posibles valores discretos les recomiendo investigar el operador %in%.

  5. Armemos un tibble con los nombres de los medallistas olímpicos argentinos en deportes acuáticos y la disciplina, evento, juego y medalla que ganaron.

    Pista: Para seleccionar más de una columna hay que hacer una lista usando c() y se recomienda utilizar all_of().

  6. ¿Cuáles son los tres países con más medallas de oro en total (juegos de invierno y verano)?

    Pista 1: para combinar dos tibbles con las mismas columnas pueden usar bind_rows().

    Pista 2: Para quedarse con los tres primeros valores pueden usar la función slice_head() con n = 3.

  7. Aprovechemos los datos de dictionary_tbl para pensar un poco en la cantidad de medallas por millón de habitantes. Armemos un tibble que contenga la cantidad de medallas per cápita por país. ¿Qué pasó con la Unión Soviética (URS)?

    Pista 1: Para juntar dos tibbles pueden usar la función inner_join()

    Pista 2: Para descartar las filas con valores NA pueden usar la función drop_na()

  8. ¿Cuántos medallistas olímpicos de invierno que ganaron bronce tienen de nombre John?

    Opción 1: La función str_split() de {stringr} nos separa un string en base a un separador que les damos. Por ejemplo str_split("Juan Perez", pattern = " ") nos de la lista "Juan" "Perez", y de esta forma accedemos a su primer elemento str_split("Juan Perez", pattern = " ")[[1]][1].

    Opción 2: La función str_detect() de {stringr} nos devuelve un TRUE si encuentra un patrón en el texto y un FALSE si no. Por ejemplo, str_detect("Juan Perez", "Juan", negate = FALSE) devuelve TRUE y str_detect("Pedro Perez", "Juan", negate = FALSE) devuelve FALSE.

    Recuerden también usar el verbo mutate().