library(learnr)
knitr::opts_chunk$set(echo = FALSE)

library(ggplot2)
library(dplyr)
library(tidyr)
library(plotly)
library(hflights)
library(janitor)
library(lubridate)
library(visdat)

vuelos <- hflights %>%
  clean_names()

vuelos <- vuelos %>% 
  unite(year, month, dayof_month, col = "fecha", sep = "-") %>%
  mutate(fecha = ymd(fecha))

mayores_atrasos <- vuelos %>%
  group_by(dest) %>%
  summarise(
    promedio = mean(arr_delay, na.rm = TRUE)
  ) %>% 
  arrange(desc(promedio)) %>%
  slice(1:10) %>%
  select(dest) %>%
  pull()

destinos_atrasos <- vuelos %>%
  filter(dest %in% mayores_atrasos)

sfo <- vuelos %>% 
  filter(dest ==  "SFO")

vuelos_cancelados <- vuelos %>%
  group_by(unique_carrier) %>%
  summarise(
    total = sum(cancelled, na.rm = TRUE)
  ) %>% 
  arrange(desc(total)) %>%
  slice(1:5) %>% 
  select(unique_carrier) %>%
  pull()

vuelos_cancelados <- vuelos %>%
  filter(unique_carrier %in% vuelos_cancelados)

vuelos_por_aerolinea <- vuelos_cancelados %>%
  mutate(mes = month(fecha)) %>%
  group_by(unique_carrier, mes) %>%
  tally()

vuelos_cancelados_mes <- vuelos_cancelados %>%
  mutate(mes = month(fecha))

aerolineas_vuelos <- vuelos_cancelados_mes %>%
  left_join(vuelos_por_aerolinea, by = c("unique_carrier", "mes"))

cancelaciones_por_aerolinea <- vuelos_cancelados %>%
  mutate(mes = month(fecha)) %>%
  group_by(unique_carrier, mes) %>%
  summarise(total_cancelaciones = sum(cancelled)
  )

aerolineas_vuelos <- aerolineas_vuelos %>%
  left_join(cancelaciones_por_aerolinea, by = c("unique_carrier", "mes"))

aerolineas_vuelos <- aerolineas_vuelos %>% 
  mutate(cancelaciones_proporcional = total_cancelaciones / n)
knitr::include_graphics("https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png")

Datos: hfligths -> vuelos_cancelados

vuelos

Los datos de la sesión provienen del set de datos hflights, el cual coniene los vuelos que salieron de los aeropuertos de Houston, Estados Unidos (IAH y HOU) en el 2011. Usaremos vuelos_cancelados para los ejercicios ya que para los ejercicios solo queremos analizar los vuelos cancelados. vuelos_cancelados tiene 19 variables y 209,137 observaciones.

glimpse(vuelos_cancelados)

Descripción de las variables:

| Variable | Descripción | | :----------: | :---------------------: | | fecha | Fecha en la que se dió el vuelo | | day_of_week | Día de la semana en el que ocurrió el vuelo | | dep_time | Hora de salida | | arr_time | Hora de llegada | | unique_carrier | Abreviación de la aerolínea | | flight_num | Número de vuelo | | tail_num | Número de la cola del avión | | actual_elapsed_time | Tiempo transcurrido en minutos | | air_time | Tiempo de vuelo en minutos | | arr_delay | Retraso de llegada en minutos | | dep_delay | Retraso de salida en minutos | | origin | Lugar de donde salió el vuelo | | dest | Destino del vuelo | | distance | Distancia del vuelo en millas | | taxi_in | Tiempo desde que el avión aterriza hasta que llega a su ala | | taxi_out | Tiempo que dura el avión es despegar desde que empieza a impulsarse | | cancelled | Indicador de si el vuelo fue cancelado o no | | cancellation_code | Razón de cancelación: A = aerolínea, B = clima, C = sistema, D = seguridad | | diverted | Indicador de si el vuelo fue desviado o no |

Ejercicios

Queremos responder las preguntas:

¿Cómo es la distribución del número de vuelos cancelados por aerolínea? ¿Qué patrón se ve a través de los meses?

Para responder esto, vamos a dividir el proceso en pasos:

1. Saque cantidad de vuelos cancelados por aerolinea

Cree un nuevo set de datos que, partiendo de vuelos_cancelados, tenga una nueva variable llamada mes que represente el mes dentro de fecha y luego agrupe por aerolínea (unique_carrier) y por mes. Por último debe "contar" los vuelos que resultan usando tally().

vuelos_por_aerolinea <- vuelos_cancelados %>%
vuelos_por_aerolinea <- vuelos_cancelados %>%
  mutate(mes = month(fecha)) %>%
  group_by(unique_carrier, mes) %>%
  tally()

2. Agregue la columna mes a vuelos_cancelados en un nuevo set de datos

Cree un nuevo conjunto de datos que le agregue la columna mes creada en el ejercicio anterior a vuelos_cancelados

vuelos_cancelados_mes <- vuelos_cancelados %>%
vuelos_cancelados_mes <- vuelos_cancelados %>%
  mutate(mes = month(fecha))

3. Una los dos conjuntos de datos anteriores

Anteriormente creamos dos sets de datos: vuelos_por_aerolinea y vuelos_cancelados_mes. Ahora unalos para obtener un conjunto de datos con el mes y la cantidad de vuelos cancelados por aerolínea.

aerolineas_vuelos <- 
aerolineas_vuelos <- vuelos_cancelados_mes %>%
  left_join(vuelos_por_aerolinea, by = c("unique_carrier", "mes"))

4. Saque cantidad de cancelaciones por aerolinea

Partiendo de vuelos cancelados, cree un nuevo conjunto de datos donde hayan 3 columnas: la aerolínea (unique_carrier), mes, y el total de cancelaciones (total_cancelaciones).

cancelaciones_por_aerolinea <- vuelos_cancelados %>%
cancelaciones_por_aerolinea <- vuelos_cancelados %>%
  mutate(mes = month(fecha)) %>%
  group_by(unique_carrier, mes) %>%
  summarise(total_cancelaciones = sum(cancelled))

5. Una aerolineas_vuelos y cancelaciones_por_aerolinea

Anteriormente creamos dos sets de datos: aerolineas_vuelos y cancelaciones_por_aerolinea. Ahora unalos para obtener un conjunto de datos con lo que tenia aerolineas_vuelos más el total de cancelaciones por aerolínea. Llámelo aerolineas_vuelos nuevamente.

aerolineas_vuelos <-
aerolineas_vuelos <- aerolineas_vuelos %>%
  left_join(cancelaciones_por_aerolinea, by = c("unique_carrier", "mes"))

6. A aerolineas_vuelos agreguele una columna con la proporción que representa cada total de cancelaciones

Hemos estado trabajando en el set de datos aerolineas_vuelos pero aun falta agregarle una columna que sea la proporción del total de cancelaciones para cada aerolínea. Llame a esta nueva variable cancelaciones_proporcional.

aerolineas_vuelos <- aerolineas_vuelos %>%
aerolineas_vuelos <- aerolineas_vuelos %>%
  mutate(cancelaciones_proporcional = total_cancelaciones / n)

7. Grafique la proporción de cancelaciones para cada mes por aerolínea

Usando el set de datos aerolineas_vuelos cree un gráfico donde el eje y sea cancelaciones_proporcional y el eje x mes y que además permite diferenciar por aerolínea (unique_carrier). Puede hacer as.factor(mes) para que sea visualmente más placentero el gráfico.

ggplot(aerolineas_vuelos)
ggplot(aerolineas_vuelos, aes(
    x = as.factor(mes), 
    y = cancelaciones_proporcional, 
    group = unique_carrier,
    fill = unique_carrier)) +
  geom_bar(stat = "summary", fun.y = "mean", position = "dodge") 


ixpantia/ixpantia.introR documentation built on Jan. 25, 2024, 2:32 p.m.