#install.packages("tidyverse")
#install.packages("pacman")
#install.packages("nycflights13") #Acá estan los datos que vamos a utilizar
#install.packages("ggplot2")
#install.packages("dplyr")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.1 ✔ stringr 1.5.2
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(pacman)
library(dplyr)
library(ggplot2)
library(nycflights13)
head(flights)
## # A tibble: 6 × 19
## year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
## <int> <int> <int> <int> <int> <dbl> <int> <int>
## 1 2013 1 1 517 515 2 830 819
## 2 2013 1 1 533 529 4 850 830
## 3 2013 1 1 542 540 2 923 850
## 4 2013 1 1 544 545 -1 1004 1022
## 5 2013 1 1 554 600 -6 812 837
## 6 2013 1 1 554 558 -4 740 728
## # ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## # tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## # hour <dbl>, minute <dbl>, time_hour <dttm>
head(airlines)
## # A tibble: 6 × 2
## carrier name
## <chr> <chr>
## 1 9E Endeavor Air Inc.
## 2 AA American Airlines Inc.
## 3 AS Alaska Airlines Inc.
## 4 B6 JetBlue Airways
## 5 DL Delta Air Lines Inc.
## 6 EV ExpressJet Airlines Inc.
head(airports)
## # A tibble: 6 × 8
## faa name lat lon alt tz dst tzone
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
## 1 04G Lansdowne Airport 41.1 -80.6 1044 -5 A America/Ne…
## 2 06A Moton Field Municipal Airport 32.5 -85.7 264 -6 A America/Ch…
## 3 06C Schaumburg Regional 42.0 -88.1 801 -6 A America/Ch…
## 4 06N Randall Airport 41.4 -74.4 523 -5 A America/Ne…
## 5 09J Jekyll Island Airport 31.1 -81.4 11 -5 A America/Ne…
## 6 0A9 Elizabethton Municipal Airport 36.4 -82.2 1593 -5 A America/Ne…
head(planes)
## # A tibble: 6 × 9
## tailnum year type manufacturer model engines seats speed engine
## <chr> <int> <chr> <chr> <chr> <int> <int> <int> <chr>
## 1 N10156 2004 Fixed wing multi … EMBRAER EMB-… 2 55 NA Turbo…
## 2 N102UW 1998 Fixed wing multi … AIRBUS INDU… A320… 2 182 NA Turbo…
## 3 N103US 1999 Fixed wing multi … AIRBUS INDU… A320… 2 182 NA Turbo…
## 4 N104UW 1999 Fixed wing multi … AIRBUS INDU… A320… 2 182 NA Turbo…
## 5 N10575 2002 Fixed wing multi … EMBRAER EMB-… 2 55 NA Turbo…
## 6 N105UW 1999 Fixed wing multi … AIRBUS INDU… A320… 2 182 NA Turbo…
head(weather)
## # A tibble: 6 × 15
## origin year month day hour temp dewp humid wind_dir wind_speed wind_gust
## <chr> <int> <int> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 EWR 2013 1 1 1 39.0 26.1 59.4 270 10.4 NA
## 2 EWR 2013 1 1 2 39.0 27.0 61.6 250 8.06 NA
## 3 EWR 2013 1 1 3 39.0 28.0 64.4 240 11.5 NA
## 4 EWR 2013 1 1 4 39.9 28.0 62.2 250 12.7 NA
## 5 EWR 2013 1 1 5 39.0 28.0 64.4 260 12.7 NA
## 6 EWR 2013 1 1 6 37.9 28.0 67.2 240 11.5 NA
## # ℹ 4 more variables: precip <dbl>, pressure <dbl>, visib <dbl>,
## # time_hour <dttm>
vuelos <- flights
summary(vuelos)
## year month day dep_time sched_dep_time
## Min. :2013 Min. : 1.000 Min. : 1.00 Min. : 1 Min. : 106
## 1st Qu.:2013 1st Qu.: 4.000 1st Qu.: 8.00 1st Qu.: 907 1st Qu.: 906
## Median :2013 Median : 7.000 Median :16.00 Median :1401 Median :1359
## Mean :2013 Mean : 6.549 Mean :15.71 Mean :1349 Mean :1344
## 3rd Qu.:2013 3rd Qu.:10.000 3rd Qu.:23.00 3rd Qu.:1744 3rd Qu.:1729
## Max. :2013 Max. :12.000 Max. :31.00 Max. :2400 Max. :2359
## NA's :8255
## dep_delay arr_time sched_arr_time arr_delay
## Min. : -43.00 Min. : 1 Min. : 1 Min. : -86.000
## 1st Qu.: -5.00 1st Qu.:1104 1st Qu.:1124 1st Qu.: -17.000
## Median : -2.00 Median :1535 Median :1556 Median : -5.000
## Mean : 12.64 Mean :1502 Mean :1536 Mean : 6.895
## 3rd Qu.: 11.00 3rd Qu.:1940 3rd Qu.:1945 3rd Qu.: 14.000
## Max. :1301.00 Max. :2400 Max. :2359 Max. :1272.000
## NA's :8255 NA's :8713 NA's :9430
## carrier flight tailnum origin
## Length:336776 Min. : 1 Length:336776 Length:336776
## Class :character 1st Qu.: 553 Class :character Class :character
## Mode :character Median :1496 Mode :character Mode :character
## Mean :1972
## 3rd Qu.:3465
## Max. :8500
##
## dest air_time distance hour
## Length:336776 Min. : 20.0 Min. : 17 Min. : 1.00
## Class :character 1st Qu.: 82.0 1st Qu.: 502 1st Qu.: 9.00
## Mode :character Median :129.0 Median : 872 Median :13.00
## Mean :150.7 Mean :1040 Mean :13.18
## 3rd Qu.:192.0 3rd Qu.:1389 3rd Qu.:17.00
## Max. :695.0 Max. :4983 Max. :23.00
## NA's :9430
## minute time_hour
## Min. : 0.00 Min. :2013-01-01 05:00:00
## 1st Qu.: 8.00 1st Qu.:2013-04-04 13:00:00
## Median :29.00 Median :2013-07-03 10:00:00
## Mean :26.23 Mean :2013-07-03 05:22:54
## 3rd Qu.:44.00 3rd Qu.:2013-10-01 07:00:00
## Max. :59.00 Max. :2013-12-31 23:00:00
##
aerolinea <- airlines
summary(aerolinea)
## carrier name
## Length:16 Length:16
## Class :character Class :character
## Mode :character Mode :character
aeropuerto <- airports
summary(aeropuerto)
## faa name lat lon
## Length:1458 Length:1458 Min. :19.72 Min. :-176.65
## Class :character Class :character 1st Qu.:34.26 1st Qu.:-119.19
## Mode :character Mode :character Median :40.09 Median : -94.66
## Mean :41.65 Mean :-103.39
## 3rd Qu.:45.07 3rd Qu.: -82.52
## Max. :72.27 Max. : 174.11
## alt tz dst tzone
## Min. : -54.00 Min. :-10.000 Length:1458 Length:1458
## 1st Qu.: 70.25 1st Qu.: -8.000 Class :character Class :character
## Median : 473.00 Median : -6.000 Mode :character Mode :character
## Mean :1001.42 Mean : -6.519
## 3rd Qu.:1062.50 3rd Qu.: -5.000
## Max. :9078.00 Max. : 8.000
aviones <- planes
summary(aviones)
## tailnum year type manufacturer
## Length:3322 Min. :1956 Length:3322 Length:3322
## Class :character 1st Qu.:1997 Class :character Class :character
## Mode :character Median :2001 Mode :character Mode :character
## Mean :2000
## 3rd Qu.:2005
## Max. :2013
## NA's :70
## model engines seats speed
## Length:3322 Min. :1.000 Min. : 2.0 Min. : 90.0
## Class :character 1st Qu.:2.000 1st Qu.:140.0 1st Qu.:107.5
## Mode :character Median :2.000 Median :149.0 Median :162.0
## Mean :1.995 Mean :154.3 Mean :236.8
## 3rd Qu.:2.000 3rd Qu.:182.0 3rd Qu.:432.0
## Max. :4.000 Max. :450.0 Max. :432.0
## NA's :3299
## engine
## Length:3322
## Class :character
## Mode :character
##
##
##
##
clima <- weather
summary(clima)
## origin year month day
## Length:26115 Min. :2013 Min. : 1.000 Min. : 1.00
## Class :character 1st Qu.:2013 1st Qu.: 4.000 1st Qu.: 8.00
## Mode :character Median :2013 Median : 7.000 Median :16.00
## Mean :2013 Mean : 6.504 Mean :15.68
## 3rd Qu.:2013 3rd Qu.: 9.000 3rd Qu.:23.00
## Max. :2013 Max. :12.000 Max. :31.00
##
## hour temp dewp humid
## Min. : 0.00 Min. : 10.94 Min. :-9.94 Min. : 12.74
## 1st Qu.: 6.00 1st Qu.: 39.92 1st Qu.:26.06 1st Qu.: 47.05
## Median :11.00 Median : 55.40 Median :42.08 Median : 61.79
## Mean :11.49 Mean : 55.26 Mean :41.44 Mean : 62.53
## 3rd Qu.:17.00 3rd Qu.: 69.98 3rd Qu.:57.92 3rd Qu.: 78.79
## Max. :23.00 Max. :100.04 Max. :78.08 Max. :100.00
## NA's :1 NA's :1 NA's :1
## wind_dir wind_speed wind_gust precip
## Min. : 0.0 Min. : 0.000 Min. :16.11 Min. :0.000000
## 1st Qu.:120.0 1st Qu.: 6.905 1st Qu.:20.71 1st Qu.:0.000000
## Median :220.0 Median : 10.357 Median :24.17 Median :0.000000
## Mean :199.8 Mean : 10.517 Mean :25.49 Mean :0.004469
## 3rd Qu.:290.0 3rd Qu.: 13.809 3rd Qu.:28.77 3rd Qu.:0.000000
## Max. :360.0 Max. :1048.361 Max. :66.75 Max. :1.210000
## NA's :460 NA's :4 NA's :20778
## pressure visib time_hour
## Min. : 983.8 Min. : 0.000 Min. :2013-01-01 01:00:00
## 1st Qu.:1012.9 1st Qu.:10.000 1st Qu.:2013-04-01 21:30:00
## Median :1017.6 Median :10.000 Median :2013-07-01 14:00:00
## Mean :1017.9 Mean : 9.255 Mean :2013-07-01 18:26:37
## 3rd Qu.:1023.0 3rd Qu.:10.000 3rd Qu.:2013-09-30 13:00:00
## Max. :1042.1 Max. :10.000 Max. :2013-12-30 18:00:00
## NA's :2729
3.1 Número de vuelos por aerolínea
vuelos_por_aerolinea <- vuelos %>%
group_by(carrier) %>%
summarise(total_vuelos = n()) %>%
left_join(airlines, by = "carrier") %>%
arrange(desc(total_vuelos))
vuelos_por_aerolinea
## # A tibble: 16 × 3
## carrier total_vuelos name
## <chr> <int> <chr>
## 1 UA 58665 United Air Lines Inc.
## 2 B6 54635 JetBlue Airways
## 3 EV 54173 ExpressJet Airlines Inc.
## 4 DL 48110 Delta Air Lines Inc.
## 5 AA 32729 American Airlines Inc.
## 6 MQ 26397 Envoy Air
## 7 US 20536 US Airways Inc.
## 8 9E 18460 Endeavor Air Inc.
## 9 WN 12275 Southwest Airlines Co.
## 10 VX 5162 Virgin America
## 11 FL 3260 AirTran Airways Corporation
## 12 AS 714 Alaska Airlines Inc.
## 13 F9 685 Frontier Airlines Inc.
## 14 YV 601 Mesa Airlines Inc.
## 15 HA 342 Hawaiian Airlines Inc.
## 16 OO 32 SkyWest Airlines Inc.
Podemos ver lops vuelos de las aerolíneas fueron:
3.2 ¿Cuáles aerolíneas operaron más vuelos durante el año 2013?
top_aerolineas <- vuelos_por_aerolinea %>%
top_n(5, total_vuelos)
top_aerolineas
## # A tibble: 5 × 3
## carrier total_vuelos name
## <chr> <int> <chr>
## 1 UA 58665 United Air Lines Inc.
## 2 B6 54635 JetBlue Airways
## 3 EV 54173 ExpressJet Airlines Inc.
## 4 DL 48110 Delta Air Lines Inc.
## 5 AA 32729 American Airlines Inc.
Ordenando de mayor a menor número de vuelos:
Estas 5 aerolíneas concentran la mayoría de los vuelos que salieron desde Nueva York en 2013.
3.3 ¿Cuál es el promedio, valor máximo y mínimo de lo retrasos de los vuelos?, ¿Cómo es el comportamiento por Aerolínea, realice un análisis comparativo.
resumen_retrasos <- vuelos %>%
summarise(
promedio_salida = mean(dep_delay, na.rm = TRUE),
max_salida = max(dep_delay, na.rm = TRUE),
min_salida = min(dep_delay, na.rm = TRUE),
promedio_llegada = mean(arr_delay, na.rm = TRUE),
max_llegada = max(arr_delay, na.rm = TRUE),
min_llegada = min(arr_delay, na.rm = TRUE)
)
resumen_retrasos
## # A tibble: 1 × 6
## promedio_salida max_salida min_salida promedio_llegada max_llegada min_llegada
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 12.6 1301 -43 6.90 1272 -86
Se calcularon los retrasos en salida (dep_delay) y llegada (arr_delay):
Retraso en salida:
- Promedio: 12.64 min
- Máximo: 1,301 min
- Mínimo: -43 min
Retraso en llegada:
- Promedio: 6.90 min
- Máximo: 1,272 min
- Mínimo: -86 min
Los valores negativos representan vuelos que salieron o llegaron antes de lo programado.
ggplot(vuelos %>% left_join(airlines, by = "carrier"),
aes(x = reorder(name, arr_delay, median, na.rm = TRUE), y = arr_delay)) +
geom_boxplot(outlier.alpha = 0.2, fill = "skyblue") +
coord_flip() +
labs(x = "Aerolínea", y = "Retraso en llegada (min)",
title = "Retrasos en vuelos por Aerolínea (2013)") +
theme_minimal()
## Warning: Removed 9430 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
Con los boxplots de retrasos por aerolínea se observa:
La mayoría de aerolíneas tienen medianas cercanas a 0, lo que indica puntualidad en promedio.
Hawaiian Airlines presenta los retrasos más bajos (incluso negativos), mostrando buena puntualidad.
Aerolíneas como ExpressJet y AirTran muestran más dispersión, con valores atípicos muy altos.
El comportamiento varía, pero en general todas las aerolíneas presentan algunos vuelos con retrasos extremos.
Conclusión: Aunque la puntualidad media es aceptable, existen diferencias entre aerolíneas; Hawaiian destaca como la más puntual, mientras que ExpressJet muestra más retrasos.
3.4 ¿Cuáles son las aerolíneas más puntuales?, lo anterior depende del aeropuerto de origen?
puntualidad <- flights %>%
group_by(origin, carrier) %>%
summarise(retraso_promedio = mean(arr_delay, na.rm = TRUE)) %>%
left_join(airlines, by = "carrier")
## `summarise()` has grouped output by 'origin'. You can override using the
## `.groups` argument.
ggplot(puntualidad, aes(x = reorder(name, retraso_promedio), y = retraso_promedio, fill = origin)) +
geom_col(position = "dodge") +
coord_flip() +
labs(title = "Retraso promedio por aerolínea y aeropuerto de origen",
x = "Aerolínea", y = "Retraso promedio llegada (min)", fill = "Aeropuerto")
Las aerolíneas más puntuales son Hawaiian, Alaska y Virgin America.
Sin embargo, la puntualidad también depende del aeropuerto de origen: en general, Newark tiene peores resultados que JFK y LGA.
3.5 Compare los retrasos entre los aeropuertos y aerolíneas, ¿influye la distancia del viaje?
comparacion <- flights %>%
left_join(airlines, by = "carrier")
ggplot(comparacion, aes(x = distance, y = arr_delay, color = name)) +
geom_point(alpha = 0.2) +
geom_smooth(method = "lm", se = FALSE) +
facet_wrap(~ origin) +
xlim(0, 2000) +
labs(title = "Relación entre retraso y distancia",
x = "Distancia (millas)", y = "Retraso llegada (min)", color = "Aerolínea")
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 60612 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 60612 rows containing missing values or values outside the scale range
## (`geom_point()`).
Sí hay diferencias entre aeropuertos y aerolíneas en los retrasos, pero la distancia del viaje no es un factor determinante: vuelos cortos y largos pueden sufrir retrasos dependiendo más de la gestión del aeropuerto y la aerolínea.
3.6 ¿Teniendo en cuenta la variable retrasos, se quiere conocer si existe una relación entre el año de fabricación del avión y los retrasos?
retraso_planes <- flights %>%
left_join(planes %>% select(tailnum, anio_fabricacion = year), by = "tailnum") %>%
filter(!is.na(anio_fabricacion), anio_fabricacion >= 1950)
ggplot(retraso_planes, aes(x = anio_fabricacion, y = arr_delay)) +
geom_point(alpha = 0.3, color = "darkblue") +
geom_smooth(method = "lm", se = TRUE, color = "red") +
labs(title = "Año de fabricación del avión vs retraso en llegada",
x = "Año de fabricación", y = "Retraso en llegada (min)")
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 5011 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 5011 rows containing missing values or values outside the scale range
## (`geom_point()`).
No se observa relación entre el año de fabricación del avión y los retrasos. Factores externos (clima, aeropuertos, gestión de aerolíneas) son mas influyentes que la edad del avión.
3.7 ¿Existe relación entre la distancia y el retraso en la llegada?, ¿Existen diferencias entre aerolíneas?
ggplot(comparacion, aes(x = distance, y = arr_delay)) +
geom_point(alpha = 0.2, color = "darkgreen") +
geom_smooth(method = "lm", se = FALSE, color = "black") +
facet_wrap(~ name) +
labs(title = "Distancia vs retraso en llegada por aerolínea",
x = "Distancia (millas)", y = "Retraso en llegada (min)")
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 9430 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 9430 rows containing missing values or values outside the scale range
## (`geom_point()`).
La distancia tiene un efecto moderado ya que los vuelos largos suelen tener menores retrasos promedio que vuelos cortos. Sin embargo, las diferencias más claras se dan entre aerolíneas, ya que algunas son más puntuales que otras.
3.8 ¿Existe relación entre las variables climáticas, por ejemplo, velocidad del viento y los retrasos en las salidas?
vuelos_clima <- left_join(vuelos, clima,
by = c("year", "month", "day", "hour", "origin"))
retraso_viento <- vuelos_clima %>%
filter(!is.na(dep_delay), !is.na(wind_speed)) %>%
group_by(wind_speed) %>%
summarise(promedio_retraso = mean(dep_delay, na.rm = TRUE))
barplot(setNames(retraso_viento$promedio_retraso, retraso_viento$wind_speed),
main = "Retraso promedio vs velocidad del viento",
xlab = "Velocidad del viento (mph)",
ylab = "Retraso promedio salida (min)")
Sí, hay relación: al unir vuelos y clima y agrupar por velocidad del viento, se ve que cuando el viento es más fuerte los retrasos en la salida aumentan.
3.9 ¿Cómo es el comportamiento de los retrasos por mes, se podría analizar teniendo en cuenta la estación del año?
retraso_mes <- vuelos %>%
filter(!is.na(dep_delay)) %>%
group_by(month) %>%
summarise(promedio_retraso = mean(dep_delay, na.rm = TRUE))
barplot(setNames(retraso_mes$promedio_retraso, retraso_mes$month),
main = "Retraso promedio en salida por mes",
xlab = "Mes",
ylab = "Retraso promedio (min)")
El gráfico muestra que Agrupando los vuelos por mes y su promedio se ve que en junio,julio y diciembre los retrasos son más altos y en septiembre y octubre más bajos, es decir que sí hay relación en el tiempo de retraso dependiendo de la estación del año
3.10 ¿Existe relación en la precipitación y los retrasos en el arribo?
vuelos_clima2 <- left_join(vuelos, clima,
by = c("year", "month", "day", "hour", "origin"))
retraso_precip <- vuelos_clima2 %>%
group_by(precip) %>%
summarise(promedio_retraso = mean(arr_delay, na.rm = TRUE))
barplot(setNames(retraso_precip$promedio_retraso, retraso_precip$precip),
main = "Retraso promedio en arribo vs precipitación",
xlab = "Precipitación (pulgadas)",
ylab = "Retraso promedio (min)")
Al agrupar por precipitación y calcular el retraso promedio en la llegada, se nota que cuando llueve más los retrasos aumentan. En la gráfica se ve que entre 0.35 y 0.5 pulgadas de lluvia los retrasos suben bastante, mientras que con poca precipitación los retrasos son menores.
Esto confirma que sí hay relación entre la precipitación y los retrasos en el arribo
3.11 ¿Existe relación entre las características de los aviones, por ejemplo, el número de asientos vs la distancia?
vuelos_aviones <- left_join(vuelos, aviones, by = "tailnum")
relacion_seats <- vuelos_aviones %>%
group_by(seats) %>%
summarise(promedio_distancia = mean(distance, na.rm = TRUE))
barplot(setNames(relacion_seats$promedio_distancia, relacion_seats$seats),
main = "Distancia promedio vs número de asientos",
xlab = "Número de asientos",
ylab = "Distancia promedio (millas)")
La gráfica muestra que los aviones más grandes, con mayor número de asientos, tienden a cubrir trayectos mucho más largos, mientras que los aviones pequeños suelen usarse en vuelos cortos. Es decir, sí existe una relación clara entre el número de asientos y la distancia recorrida.