Appendix C — Soluciones de ejercicios

Este anexo detalla resultados validos para todos los ejercicios desde el capitulo 1 al 6. Recuerda que pueden existir mas de una manera de resolver los ejercicios de forma correcta.

C.0.1 Capitulo 3 - Lectura de datos

En el portal de datos de Argentina encontramos muchos conjuntos de datos con informacion oficial. Vamos a descargar y leer un archivo de Excel.

  1. Dirigirse a esta pagina web con datos abiertos: https://datos.gob.ar/dataset/produccion-innovacion-productiva-empresas-que-mas-invierten-id-nivel-mundial

  2. Realizar los pasos necesarios para descargar el archivo de Excel del conjunto de datos “Las 50 empresas más innovadoras entre 2013 y 2019” de forma programatica.

  3. Cargar el conjunto de datos en r y explorar su estructura con la función str().

  4. Contestar:

4.1 ¿Cuántas columnas y filas tiene el data.frame?

4.2 ¿Qué tipo de dato hay en cada columna? ¿el tipo de dato es correcto según el contenido que vez?

4.3 ¿Que funcion usaste para leer el archivo de Excel?

Al final del ejercicio deberías tener un archivo .qmd o .R con el código que lo resuelve. Nombrá el archivo siguiendo los consejos que vimos en clase.

C.0.1.1 Soluciones

# 1. Descargar el archivo de Excel

url <- "https://datos.produccion.gob.ar/dataset/369e2ef5-f8bc-4b37-a3e7-f7ad8d5fceb7/resource/64aa7c24-2adc-46f1-b60d-1d34e2c7dbee/download/las-50-empresas-mas-innovadoras-entre-2013-y-2019.xlsx"

download.file(url, destfile = "empresas-que-mas-invierten-en-innovacion.xlsx")

# 2. Leer el archivo de Excel

library(readxl)

empresas <- read_excel("empresas-que-mas-invierten-en-innovacion.xlsx")

# 3. Explorar la estructura del data.frame

str(empresas)

# 4. Contestar

# 4.1. Tiene 5 columnas y 50 fila

# 4.2. empresa es caracter, pais_origen es caracter, sector_productivo es caracter, inversion_acumulada_2013_2019_EUR es numerico y varion_porcentual_2013_2019 es numerico. Si el tipo de dato es correcto.

# 4.3 Se uso la funcion read_excel() del paquete readxl

C.1 Capitulo 4 - Manipulación de datos ordenados I

Es hora de revisar lo que vimos hasta acá.

  1. Descargá el archivo que se encuentra en este link y guardalo en tu proyecto de trabajo en clase.
  2. Resolvé los ejercicios propuestos de lectura (yapa!) y de filtros. En algunos casos tendrías que reemplazar los _____ con el código correspondiente. En otros casos el ejercicio te pedirá escribir el código desde cero.
  3. El archivo tiene más ejercicios, pero no te adelantes. Vamos a ver esos temas a continuación.

¿Te acordás del ejercicio que arrancaste cuando vimos filtros? Es hora de completarlo!

  1. Completá los ejercicios de este archivo que ya deberías tener en tu proyecto.
  2. Te vas a encontrar con ejercicios para practicar summarise() y mutate(). De nuevo, en algunos casos tendrías que reemplazar los _____ con el código correspondiente. En otros casos el ejercicio te pedirá escribir el código desde cero.
  3. Cuando hayas terminado, knitea el archivo para generar un html y ver como queda el resultado.

C.1.1 Soluciones

Este archivo incluye ejercicios para practicar como manipular datos usando dplyr. Es importante que guardes este archivo en el proyecto de RStudio que usas durante las clases.
Seguiremos trabajando con los datos de pingüinos.

Siempre arrancamos cargando las librerías que vamos a usar. Completá el código y corré el bloque de código para comenzar.

# Cargá las librerias necesarias en este bloque de código

library(dplyr)
library(readr)

Es momento de leer los datos de pingüinos (si, también hay que practicar leer datos).

# Lectura de datos de pinguinos
pinguinos <- read_csv(here::here("datos/pinguinos.csv"))

C.1.1.1 Filtrando datos

Completá el código y correlo para verificar el resultado.

¿Cuántos pingüinos tienen aletas de más de 225 mm?

pinguinos |> 
  filter(largo_aleta_mm > 225)

¿Algún pingüino tiene un pico de exactamente 40.9 mm?

pinguinos |> 
  filter(largo_pico_mm == 40.9)

¿Cuántos pingüinos hembra hay en la especie Papúa?

pinguinos |> 
  filter(especie == "Papúa", sexo == "hembra")

C.1.1.2 Resumiendo los datos

¿Cuántos pingüinos hay en cada isla?

pinguinos |> 
  group_by(isla) |> 
  summarise(n())

¿Todas las especies viven en las mismas islas?

pinguinos |> 
  group_by(isla, especie) |> 
  summarise(n())

¿Cuánto pesa el pinguino más liviano y el más pesado de cada especie?

pinguinos |> 
  group_by(isla, especie) |> 
  summarise(mas_liviano = min(masa_corporal_g, na.rm = TRUE),
            mas_pesado = max(masa_corporal_g, na.rm = TRUE))

C.1.1.3 Transformando variables

Calculá la relación entre el alto y el largo del pico (alto_pico_mm/largo_pico_mm)

pinguinos |> 
  mutate(pico = alto_pico_mm/largo_pico_mm)

Transformá todas las variables de mm a cm.

pinguinos |> 
  mutate(largo_pico_cm = largo_pico_mm/10,
         alto_pico_cm = alto_pico_mm/10,
         largo_aleta_cm = largo_aleta_mm/10)

C.2 Capitulo 6 - Graficado datos

Modificá el siguiente código para obtener el gráfico que se muestra más abajo.

paises |> 
  group_by(continente, _____) |> 
  summarise(esperanza_de_vida_media = mean(esperanza_de_vida)) |> 
  ggplot(aes(anio, ________________)) +  
  geom_point(aes(color = continente), size = 3, shape = _____) +
  geom_smooth(color = continente) 

C.2.1 Solucion grafico Esperanza de Vida

paises |> 
  group_by(continente, anio) |> 
  summarise(esperanza_de_vida_media = mean(esperanza_de_vida)) |> 
  ggplot(aes(anio, esperanza_de_vida_media)) +  
  geom_smooth(aes(color = continente)) +
  geom_point(aes(color = continente), shape = 8, size = 3) 

Es hora de revisar lo que vimos hasta acá.

  1. Descargá el archivo que se encuentra en este link y guardalo en tu proyecto de trabajo en clase.
  2. Resolvé los ejercicios propuestos. En algunos casos tendrías que reemplazar los _____ con el código correspondiente. En otros casos el ejercicio te pedirá escribir el código desde cero.

C.2.2 Soluciones - ejercicios ggplot

En este archivo vas a encontrar ejercicios para practicar cómo hacer gráficos con ggplot2. En este caso vamos a usar datos que forman parte de un paquete llamado datos. De hecho este paquete tiene muchas bases de datos en español. Antes de empezar a trabajar recordá instalar este nuevo paquete y el paquete lubridate desde la consola.

# Cargá ggplot2 y dplyr
library(ggplot2)
library(dplyr)

clima <- datos::clima #esta es otra manera de acceder a las funciones y datos de un paquete

Esta base de datos tiene datos de distintas variables meterológicas en 3 aeropuertos (en la columna origen) a lo largo de un año. Revisa que columnas incluyen y como se llaman en el siguiente bloque de código.

str(clima)

Habrás notado que no hay una única columna con la fecha y la hora, está separada en varias columnas, vamos a crear esta columna con mutate() y la función make_datetime() de lubridate.

clima <- clima |> 
  mutate(fecha_hora = lubridate::make_datetime(anio, mes, dia, hora))

¿Cómo es la relación entre el punto de rocio (a que temperatura el vapor de agua se condensa) y la humedad?

ggplot(clima, aes(punto_rocio, humedad)) +
  geom_point()

Sumá un suavizado para visuzalizar mejor la relación. Usá el método lm.

ggplot(clima, aes(punto_rocio, humedad)) +
  geom_point() +
  geom_smooth(method = "lm")

Veamos ahora como cambia la temperatura a lo largo del año parada estación. El gráfico resultante debería tener el tiempo en el eje x y mostrar 3 lineas de distinto color, una para cada estación.

¿En qué parte del mundo están estos aeropuertos?

ggplot(clima, aes(fecha_hora, temperatura)) +
  geom_line(aes(color = origen))

Generá boxplots para analizar como se comporta el precio según la claridad para cada tipo de corte como se ve acá.

C.2.3 Solucion Bloxplots

ggplot(diamantes, aes(claridad, precio, fill = claridad)) +
  geom_boxplot() +
  facet_wrap(~corte)

C.3 Capitulo 7 - Manipulacion de Datos II

  • Creá una nueva tabla, llamada paises_superduper_ancho que tenga una columna para cada variable, anio y país. (Consejo: la tabla final tiene que tener 5 filas).

  • ¿Cómo es la tabla más ancha posible que podés generar con estos datos? ¿Cuántas filas y columnas tiene?

C.3.1 Solucion

paises_superduper_ancho <- pivot_wider(paises_largo, 
            names_from = c(variable, anio, pais), 
            names_sep = "-",
            values_from = valor)