El paquete nycflights13 contiene información sobre todos los vuelos que partieron desde Nueva York (EWR, JFK y LGA) a destinos en los Estados Unidos en 2013.
Fueron 336,776 vuelos en total. Para ayudar a comprender las causas de los retrasos, también incluye otros conjuntos de datos útiles.
Este paquete incluye las siguientes tablas:
Fuente:
Origen
de los datos
# install.packages("nycflights13")
library(nycflights13)
## Warning: package 'nycflights13' was built under R version 4.3.3
# install.packages("tidyverse")
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── 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
flights <- flights
weather <- weather
planes <- planes
airports <- airports
airlines <- airlines

# La carga a memoria se hizo en el paso anterior
flights
## # A tibble: 336,776 × 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
## 7 2013 1 1 555 600 -5 913 854
## 8 2013 1 1 557 600 -3 709 723
## 9 2013 1 1 557 600 -3 838 846
## 10 2013 1 1 558 600 -2 753 745
## # ℹ 336,766 more rows
## # ℹ 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>
str(flights)
## tibble [336,776 × 19] (S3: tbl_df/tbl/data.frame)
## $ year : int [1:336776] 2013 2013 2013 2013 2013 2013 2013 2013 2013 2013 ...
## $ month : int [1:336776] 1 1 1 1 1 1 1 1 1 1 ...
## $ day : int [1:336776] 1 1 1 1 1 1 1 1 1 1 ...
## $ dep_time : int [1:336776] 517 533 542 544 554 554 555 557 557 558 ...
## $ sched_dep_time: int [1:336776] 515 529 540 545 600 558 600 600 600 600 ...
## $ dep_delay : num [1:336776] 2 4 2 -1 -6 -4 -5 -3 -3 -2 ...
## $ arr_time : int [1:336776] 830 850 923 1004 812 740 913 709 838 753 ...
## $ sched_arr_time: int [1:336776] 819 830 850 1022 837 728 854 723 846 745 ...
## $ arr_delay : num [1:336776] 11 20 33 -18 -25 12 19 -14 -8 8 ...
## $ carrier : chr [1:336776] "UA" "UA" "AA" "B6" ...
## $ flight : int [1:336776] 1545 1714 1141 725 461 1696 507 5708 79 301 ...
## $ tailnum : chr [1:336776] "N14228" "N24211" "N619AA" "N804JB" ...
## $ origin : chr [1:336776] "EWR" "LGA" "JFK" "JFK" ...
## $ dest : chr [1:336776] "IAH" "IAH" "MIA" "BQN" ...
## $ air_time : num [1:336776] 227 227 160 183 116 150 158 53 140 138 ...
## $ distance : num [1:336776] 1400 1416 1089 1576 762 ...
## $ hour : num [1:336776] 5 5 5 5 6 5 6 6 6 6 ...
## $ minute : num [1:336776] 15 29 40 45 0 58 0 0 0 0 ...
## $ time_hour : POSIXct[1:336776], format: "2013-01-01 05:00:00" "2013-01-01 05:00:00" ...
# int: entero (sin decimales)
# num: numérico (con decimales)
# chr: caractér (letras o palabras)
# Date: Fecha (en R va año-mes-dia)
# POSIXct: formato fecha (fecha y hora)
class(flights)
## [1] "tbl_df" "tbl" "data.frame"
# class(a)
# Las 5 clases de objetos son:
# 1. numeric: número real o decimales
# 2. Integer: números enteros
# 3. Complex: números complejos
# 4. Character: caractéres
# 5. Logical: TRUE o FALSE
# Las 4 clases de objetos compuestos son:
# 1. list: lista
# 2. matrix: matriz
# 3. array: colección de objetos
# 4. data.frame: base de datos
# Número de columnas
ncol(flights)
## [1] 19
# Número de renglones
nrow(flights)
## [1] 336776
# Dimensión
dim(flights)
## [1] 336776 19
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>
tail(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 9 30 NA 1842 NA NA 2019
## 2 2013 9 30 NA 1455 NA NA 1634
## 3 2013 9 30 NA 2200 NA NA 2312
## 4 2013 9 30 NA 1210 NA NA 1330
## 5 2013 9 30 NA 1159 NA NA 1344
## 6 2013 9 30 NA 840 NA NA 1020
## # ℹ 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>
# Si quisieramos 7 renglones: head(flights,7)
summary(flights)
## 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.00
## 1st Qu.: 8.00 1st Qu.:2013-04-04 13:00:00.00
## Median :29.00 Median :2013-07-03 10:00:00.00
## Mean :26.23 Mean :2013-07-03 05:22:54.64
## 3rd Qu.:44.00 3rd Qu.:2013-10-01 07:00:00.00
## Max. :59.00 Max. :2013-12-31 23:00:00.00
##
La función select sirve para seleccionar columnas de una tabla (data frame).
df1 <- flights %>% select(carrier, flight) # Selección de columnas específicas
df2 <- flights %>% select(carrier:distance) # Selección de rango de columnas
df3 <- flights %>% select(-carrier, -flight) # Eliminar columnas específicas
df4 <- flights %>% select(-carrier:-distance) # Eliminar rango de columnas
df5 <- flights %>% select(aerolinea = carrier) # Selecciona una columna y le cambia el nombre
df6 <- flights %>% rename(aerolinea = carrier) # Cambiar nombre
La función filter sirve para seleccionar renglones de una tabla (data frame).
df7 <- flights %>% filter(dep_delay>=500) # Extrae renglones que cumplan condición
# Condicionales: Igual ==, Desigual =!=, Mayor que >, Mayor o igual que >=, Menor que <, Menor o igual que <=
# Operadores lógicos: AND &, OR |, NOT !
df8 <- flights %>% filter(dep_delay>=500, dep_delay<600) # Extrae renglones que cumplan con dos condiciones
df9 <- flights %>% slice(1000:1099) # Extrae los números de los renglones indicados, sin importar sus valores
La función distinct sirve para eliminar renglones duplicados.
df10 <- distinct(flights) # Dejar solo los renglones diferentes, borra todos los repetidos.
La función merge sirve para juntar bases de datos.
bdgrande <- merge(flights,airlines, by="carrier")
bdgrande2 <- merge(bdgrande,planes, by="tailnum")
bdgrande3 <- mutate(bdgrande2, dist_mts = distance*1.609)
# Agrega variables nuevas calculadas a partir de variables existentes en la base de datos
# 1. Encuentra todos los vuelos que tuvieron un atraso en llegada de dos horas o más
ejercicio1 <- bdgrande2 %>% filter(arr_delay>=120)
# 2. Encuentra todos los vuelos que llegaron a Houston (IAH O HOU)
ejercicio2 <- bdgrande2 %>% filter(dest == "IAH" | dest == "HOU")
# 3. Encuentra todos los vuelos operados por United, American o Delta
ejercicio3 <- bdgrande2 %>% filter(carrier == "UA" | carrier == "AA" | carrier == "DL")
# 4. Encuentra todos los vuelos que despegaron en Julio, Agosto o Septiembre.
ejercicio4 <- bdgrande2 %>% filter(month %in% c (7:9))
# 5. Encuentra todos los vuelos que arrivaron más de 2 horas tarde, pero no despegaron tarde.
ejercicio5 <- bdgrande2 %>% filter(arr_delay>120 & dep_delay <= 0)
# 6. Encuentra todos los vuelos que se retrasaron al menos 1 hora, pero que llegaron antes 30 minutos o más.
ejercicio6 <- bdgrande2 %>% filter(dep_delay>=60 & arr_delay<= -30)
# 7. Encuentra todos los vuelos que salieron entre la medianoche y las 6 a.m.
ejercicio7 <- bdgrande2 %>% filter(dep_time==2400 | dep_time<=600)
Similar a filter() pero en lugar de seleccionar renglones, los ordena de menor a mayor.
df11 <- arrange(bdgrande2,year.x,month,day)
Colapsa una tabla a un sólo renglón.
# Obtén el retraso promedio de despegue de todos los vuelos
summarize(bdgrande2, mean(dep_delay, na.rm=TRUE))
## mean(dep_delay, na.rm = TRUE)
## 1 13.17979
Agrupa tabla basado en algunas columnas.
# Obtener el retraso promedio de despegue por día
por_dia <- group_by(bdgrande2, year.x, month, day)
summarize(por_dia, mean(dep_delay, na.rm=TRUE))
## `summarise()` has grouped output by 'year.x', 'month'. You can override using
## the `.groups` argument.
## # A tibble: 365 × 4
## # Groups: year.x, month [12]
## year.x month day `mean(dep_delay, na.rm = TRUE)`
## <int> <int> <int> <dbl>
## 1 2013 1 1 10.7
## 2 2013 1 2 14.4
## 3 2013 1 3 11.1
## 4 2013 1 4 10.0
## 5 2013 1 5 5.70
## 6 2013 1 6 7.98
## 7 2013 1 7 6.49
## 8 2013 1 8 3.10
## 9 2013 1 9 3.17
## 10 2013 1 10 1.89
## # ℹ 355 more rows
Se nos ha solicitado consultar cuáles son las aerolíneas de mayor tráfico aéreo en origen y destino.
# Hacemos summary de flights para ver todas las columnas con las que cuenta la base de datos
summary(flights)
## 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.00
## 1st Qu.: 8.00 1st Qu.:2013-04-04 13:00:00.00
## Median :29.00 Median :2013-07-03 10:00:00.00
## Mean :26.23 Mean :2013-07-03 05:22:54.64
## 3rd Qu.:44.00 3rd Qu.:2013-10-01 07:00:00.00
## Max. :59.00 Max. :2013-12-31 23:00:00.00
##
# Instrucciones: define un criterio para encontrar las aerolíneas que han recorrido más distancia (en millas) y crea un nuevo data frame que filtre solamente a las aeorlíneas que han recorridao una distancia superior a la media, se desea ver los campos carrier, distance, origin, dest en forma descendente por distance. Ejemplo: aerolíneas con millas recorridas superiores a la media, ordenadas en forma descendente.
df2 <- flights %>% select(carrier, distance, origin, dest)
df3 <- df2 %>% filter(distance > 1040)
df3
## # A tibble: 127,665 × 4
## carrier distance origin dest
## <chr> <dbl> <chr> <chr>
## 1 UA 1400 EWR IAH
## 2 UA 1416 LGA IAH
## 3 AA 1089 JFK MIA
## 4 B6 1576 JFK BQN
## 5 B6 1065 EWR FLL
## 6 UA 2475 JFK LAX
## 7 UA 2565 EWR SFO
## 8 AA 1389 LGA DFW
## 9 UA 2227 EWR LAS
## 10 B6 1076 LGA FLL
## # ℹ 127,655 more rows
df4 <- df3 %>% arrange(desc(distance))
df4
## # A tibble: 127,665 × 4
## carrier distance origin dest
## <chr> <dbl> <chr> <chr>
## 1 HA 4983 JFK HNL
## 2 HA 4983 JFK HNL
## 3 HA 4983 JFK HNL
## 4 HA 4983 JFK HNL
## 5 HA 4983 JFK HNL
## 6 HA 4983 JFK HNL
## 7 HA 4983 JFK HNL
## 8 HA 4983 JFK HNL
## 9 HA 4983 JFK HNL
## 10 HA 4983 JFK HNL
## # ℹ 127,655 more rows
df5 <- df4 %>% group_by(carrier,origin,dest) %>% summarize(sumdistance=sum(distance, na.rm=TRUE), meandistance=mean(distance, na.rm=TRUE))
## `summarise()` has grouped output by 'carrier', 'origin'. You can override using
## the `.groups` argument.
df5
## # A tibble: 150 × 5
## # Groups: carrier, origin [26]
## carrier origin dest sumdistance meandistance
## <chr> <chr> <chr> <dbl> <dbl>
## 1 9E JFK AUS 3042 1521
## 2 9E JFK DFW 507715 1391
## 3 9E JFK MCI 307188 1113
## 4 9E JFK MSY 515352 1182
## 5 9E JFK SAT 84111 1587
## 6 9E LGA DFW 19446 1389
## 7 9E LGA MCI 94095 1107
## 8 9E LGA MSY 1183 1183
## 9 9E LGA RSW 72360 1080
## 10 9E LGA SRQ 81666 1047
## # ℹ 140 more rows
df5 <- df4 %>% group_by(carrier,origin,dest) %>% summarize(sumdistance=sum(distance, na.rm=TRUE), meandistance=mean(distance, na.rm=TRUE))
## `summarise()` has grouped output by 'carrier', 'origin'. You can override using
## the `.groups` argument.
df5
## # A tibble: 150 × 5
## # Groups: carrier, origin [26]
## carrier origin dest sumdistance meandistance
## <chr> <chr> <chr> <dbl> <dbl>
## 1 9E JFK AUS 3042 1521
## 2 9E JFK DFW 507715 1391
## 3 9E JFK MCI 307188 1113
## 4 9E JFK MSY 515352 1182
## 5 9E JFK SAT 84111 1587
## 6 9E LGA DFW 19446 1389
## 7 9E LGA MCI 94095 1107
## 8 9E LGA MSY 1183 1183
## 9 9E LGA RSW 72360 1080
## 10 9E LGA SRQ 81666 1047
## # ℹ 140 more rows
df6 <- arrange(df5,carrier,sumdistance)
JFK = df6 %>% filter(origin == "JFK") %>% arrange(carrier, desc(sumdistance))
LGA = df6 %>% filter(origin == "LGA") %>% arrange(carrier, desc(sumdistance))
EWR = df6 %>% filter(origin == "EWR") %>% arrange(carrier, desc(sumdistance))
view(planes)
view(weather)
aerolineas <- flights %>%
select(carrier,origin,dest)
aerolineas_nombre <- aerolineas %>%
left_join(airlines, by = "carrier")
cant_vuelos <- flights %>%
select(carrier, dest) %>%
count(carrier)
cant_vuelos_nombre <- cant_vuelos %>%
left_join(airlines, by = "carrier")
carrier_horario <- flights %>%
select(carrier, dest, sched_dep_time) %>%
left_join(airlines, by = "carrier")
clasxhora<- mutate(carrier_horario, clas_horario = ifelse(sched_dep_time %in% 600:1159,"Mañana",
ifelse(sched_dep_time %in% 1200:1859,"Tarde",
ifelse(sched_dep_time %in% 1900:2400,"Noche", "Madrugada"))))
cant_clasxhora <- clasxhora %>%
group_by(carrier, dest,clas_horario) %>% count()
destinos_aa <- clasxhora %>%
select(carrier,name, dest,clas_horario) %>%
filter(carrier == "AA" & clas_horario == "Madrugada") %>%
group_by(carrier,name, dest,clas_horario)
avion_aa <- flights %>%
left_join(planes, by = "tailnum") %>%
select(carrier, type, engine, seats) %>%
filter(carrier == "AA", !is.na(type)) %>%
group_by(carrier,type,engine,seats) %>%
count()
En la evidencia se presentó la necesidad de mejorar la posición competitiva de una de las aerolíneas líderes en los aeropuertos de Nueva York, American Airlines, por lo que a continuación se presentarán datos y la explicación de porqué la aerolínea los debe de tomar en cuenta para posicionarse como líder. Anteriormente se nombró que Newark Liberty International Airport es la sede de United Air Lines, por lo que suena lógico que sea la aerolínea con mayor cantidad de vuelos en New York con 58,665, mientras que American Airlines sólo cuenta con 32,729, es decir un 44% menos, teniendo una menor oportunidad de ofrecer más variedad de vuelos y consecuentemente perdiendo cuota de mercado. Además, durante la noche American Airlines ofrece menos de la ⅕ de los vuelos que ofrece en la madrugada o tarde, por lo que se puede perder un segmento de mercado, como las empresas, las cuáles muchas veces mandan ejecutivos a viajes de un día, regresando en la noche a su casa.
Adicionalmente, la mayoría de los vuelos de la madrugada de American Airlines son a Miami, por lo que tienen una oferta muy limitada y sus aviones tienen máximo 330 asientos, a comparación de otras aerolíneas, como Delta Air Lines, la cuál cuenta con aviones de hasta 450 asientos, pudiendo transportar a un 36% más de pasajeros. Finalmente,los aviones de tipo “Fixed wind multi engine” y motor “Turbo-fan” son por mucho los aviones de American Airlines que más vuelos y asientos tienen, pudiendo decir que son más eficientes. La suma de todos estos factores, son los causantes de que la aerolínea no sea la líder, pero si opta por hacer cambios como implementar más vuelos en la noche, comprar aviones con más cantidad de asientos, aumentar los destinos y mantener su atraso promedio, el cuál es uno de lo menores con 8,59 minutos, la empresa puede mejorar en gran medida su posicionamiento en la industria.
Para responder a la pregunta anterior, se hicieron una serie de modelos de regresión y bases de datos, para poder llegar a una o más respuestas concisas.
Nos permite identificar qué aerolínea tiene más retrasos de salida, lo que se puede asociar con poca comunicación dentro de las operaciones.
vuelos_por_aerolinea <- flights %>% group_by(carrier) %>% summarize(avg_delay = mean(dep_delay, na.rm = TRUE))
vuelos_por_aerolinea
## # A tibble: 16 × 2
## carrier avg_delay
## <chr> <dbl>
## 1 9E 16.7
## 2 AA 8.59
## 3 AS 5.80
## 4 B6 13.0
## 5 DL 9.26
## 6 EV 20.0
## 7 F9 20.2
## 8 FL 18.7
## 9 HA 4.90
## 10 MQ 10.6
## 11 OO 12.6
## 12 UA 12.1
## 13 US 3.78
## 14 VX 12.9
## 15 WN 17.7
## 16 YV 19.0
aerolineasdelay <- vuelos_por_aerolinea[vuelos_por_aerolinea$avg_delay > 15, ]
aerolineasdelay
## # A tibble: 6 × 2
## carrier avg_delay
## <chr> <dbl>
## 1 9E 16.7
## 2 EV 20.0
## 3 F9 20.2
## 4 FL 18.7
## 5 WN 17.7
## 6 YV 19.0
Como se puede apreciar, las aerolíneas que traen los vuelos con retrasos más pesados son Endeavor Air Inc, ExpressJet Airlines Inc, Frontier Airlines Inc, AirTran Airways Corporation, Southwest Airlines Co y Mesa Airlines Inc.
Nos permite identificar en qué aeropuerto los vuelos suelen salir más tarde, lo que nos puede decir qué aeropuerto es el que tiene más tráfico.
vuelos_por_aeropuerto <- flights %>% group_by(origin) %>% summarize(avg_delay = mean(dep_delay, na.rm = TRUE))
vuelos_por_aeropuerto
## # A tibble: 3 × 2
## origin avg_delay
## <chr> <dbl>
## 1 EWR 15.1
## 2 JFK 12.1
## 3 LGA 10.3
ggplot(vuelos_por_aeropuerto, aes(x = origin, y = avg_delay)) + geom_bar(stat = "identity", fill = "skyblue") + labs(title = "Retraso Promedio por Aeropuerto de Origen", x = "Aeropuerto de Origen", y = "Retraso Promedio (minutos)") + theme_minimal()
Nos permite identificar a qué hora se suelen dar los retrasos más pesados.
vuelos_por_hora <- flights %>% mutate(hour = hour(time_hour)) %>% group_by(hour) %>% summarize(avg_delay = mean(dep_delay, na.rm = TRUE))
vuelos_por_hora
## # A tibble: 20 × 2
## hour avg_delay
## <int> <dbl>
## 1 1 NaN
## 2 5 0.688
## 3 6 1.64
## 4 7 1.91
## 5 8 4.13
## 6 9 4.58
## 7 10 6.50
## 8 11 7.19
## 9 12 8.61
## 10 13 11.4
## 11 14 13.8
## 12 15 16.9
## 13 16 18.8
## 14 17 21.1
## 15 18 21.1
## 16 19 24.8
## 17 20 24.3
## 18 21 24.2
## 19 22 18.8
## 20 23 14.0
horasmastrafic <- vuelos_por_hora[13:19, ]
horasmastrafic
## # A tibble: 7 × 2
## hour avg_delay
## <int> <dbl>
## 1 16 18.8
## 2 17 21.1
## 3 18 21.1
## 4 19 24.8
## 5 20 24.3
## 6 21 24.2
## 7 22 18.8
ggplot(vuelos_por_hora, aes(x = hour, y = avg_delay)) + geom_bar(stat = "identity", fill = "skyblue") + labs(title = "Retraso Promedio por Hora del Día", x = "Hora del Día", y = "Retraso Promedio (minutos)") + theme_minimal()
## Warning: Removed 1 rows containing missing values (`position_stack()`).
Como se puede apreciar, las horas en las que los vuelos presentan retrasos para despegar más pesados son de 4 a 10, con un retraso promedio de 22 minutos.
Este código nos permite crear una dataframe nueva usando flights y weather, usando como columnas clave el año, el mes, el día, la hora y el origen. Es una manera de crear una dataframe la cual nos permite utilizar los datos dentro de weather, los cuales creemos que podría tener un impacto en el retraso de los vuelos.
vuelos_clima <- flights %>% left_join(weather, by = c("year", "month", "day", "hour", "origin"))
regresionclima <- lm(dep_delay ~ temp + wind_speed + wind_gust + precip + visib + pressure + dewp + humid, data = vuelos_clima)
summary(regresionclima)
##
## Call:
## lm(formula = dep_delay ~ temp + wind_speed + wind_gust + precip +
## visib + pressure + dewp + humid, data = vuelos_clima)
##
## Residuals:
## Min 1Q Median 3Q Max
## -57.42 -17.08 -11.71 -0.02 754.95
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 198.47760 23.13779 8.578 < 2e-16 ***
## temp 0.47232 0.08368 5.644 1.66e-08 ***
## wind_speed -0.11051 0.05870 -1.883 0.0598 .
## wind_gust 0.31959 0.05118 6.244 4.28e-10 ***
## precip -8.57069 11.70037 -0.733 0.4639
## visib -1.52831 0.17091 -8.942 < 2e-16 ***
## pressure -0.20658 0.02165 -9.543 < 2e-16 ***
## dewp -0.38823 0.09213 -4.214 2.51e-05 ***
## humid 0.42391 0.05118 8.283 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 37.82 on 73224 degrees of freedom
## (263543 observations deleted due to missingness)
## Multiple R-squared: 0.02406, Adjusted R-squared: 0.02395
## F-statistic: 225.6 on 8 and 73224 DF, p-value: < 2.2e-16
ggplot(vuelos_clima, aes(x = temp, y = dep_delay)) + geom_point(color = "blue", alpha = 0.5) + labs(title = "Relación entre Retraso de Vuelo y Temperatura", x = "Temperatura (°C)", y = "Retraso de Vuelo (minutos)") + theme_minimal()
## Warning: Removed 9800 rows containing missing values (`geom_point()`).
Para nuestro hallazgo, cuestiones climatológicas no tienen un impacto significativo en el retraso con el que despegan los vuelos, ya que basándonos en el modelo de regresión lineal anteriormente mostrado, la R cuadrada es de 0.02
Calcular el retraso por día de la semana nos dará una perspectiva en cuáles son los días más ocupados en cuestión de vuelos de la semana.
# Filtrar los vuelos con datos completos (sin valores faltantes)
flights_clean <- flights %>% filter(!is.na(dep_delay))
# Calcular el retraso promedio por día de la semana
retraso_promedio_por_dia <- flights_clean %>% group_by(day_of_week = weekdays(time_hour)) %>% summarize(avg_delay = mean(dep_delay, na.rm = TRUE))
retraso_promedio_por_dia
## # A tibble: 7 × 2
## day_of_week avg_delay
## <chr> <dbl>
## 1 Friday 14.7
## 2 Monday 14.8
## 3 Saturday 7.65
## 4 Sunday 11.6
## 5 Thursday 16.1
## 6 Tuesday 10.6
## 7 Wednesday 11.8
ggplot(retraso_promedio_por_dia, aes(x = day_of_week, y = avg_delay)) + geom_line(color = "blue", size = 1) + geom_point(color = "red", size = 3) + labs(title = "Retraso Promedio por Día de la Semana", x = "Día de la Semana", y = "Retraso Promedio (minutos)") + theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
Como se puede apreciar, los días más ocupados serían lunes, jueves y viernes, el día menos ocupado sería el sabado.
En conclusión, al observar los data frames de vuelos y clima pudimos identificar distintos factores que influyen en que los vuelos lleguen tarde. Estos factores son la hora a la que estos salen, la distancia que tienen que recorrer, y las aerolíneas.
Antes de empezar el código, nosotros creíamos que el principal factor era el clima, pero al hacer un modelo de regresión que probara que el clima tiene un impacto en el retraso de los vuelos nos dimos cuenta que no era acertado, ya que la R cuadrada fue de 0,02, por lo que fue prácticamente nula.
El realizar un análisis estadístico descriptivo nos sirvió para observar y analizar diferentes factores de los dataframes, como flights. Por ejemplo, pudimos identificar cosas como que en promedio el dep_delay es de 13 a 18 minutos, lo que nos permite inferir que son más los vuelos que salen atrasados que los que salen a tiempo o adelantados.
Enfocándonos un poco más, pudimos ver que los vuelos que salen entre las 16:00 y 22:00 son los que suelen tener en promedio un mayor retraso, saliendo entre 18 y 24 minutos después de lo establecido. Mientras que, los demás sólo salían entre 0 y 16 minutos atrasados, lo que se puede deber a que mientras más tarde es, más vuelos retrasados se van acumulando.
Por otro lado, también pudimos observar que el atraso depende mucho de la aerolínea, ya que en el caso de US Airways Inc en promedio sólo salía 3,78 minutos después, mientras que Frontier Airlines Inc. salía 20,22 minutos después, es decir más de 5 veces más tarde que US Airways Inc. Así mismo, en el caso de American Airlines, de 32,093 vuelos que tuvo desde New York en el 2013, 10,161 salieron con retraso, lo que representa aproximadamente un 32% de sus vuelos y su retraso promedio fue de 8,6 minutos.
Adicionalmente, pudimos identificar que en promedio el vuelo con la mayor distancia recorrida es el de Hawaiian Airlines Inc que va desde New York(JFK) a Honolulu(HNL), lo que nos podría indicar que hay atrasos, debido a la distancia recorrida o eventos, como tsunamis o tormentas que son muy comunes en Hawaii. De igual manera, de los 100 vuelos que tuvieron un atraso de más de 1000 minutos, 6 corresponden a Los Angeles International Airport, lo que se puede deber de igual manera a la distancia que tiene con Nueva York.
Finalmente, se contempló que los vuelos que tuvieron como origen el aeropuerto de Newark presentaron en promedio un retraso de 15 minutos, contra los 10 de La Guardia. Esto se debe a que Newark es el aeropuerto con mayor cantidad de vuelos. Los Jueves fueron el día con mayor retraso con 19 minutos, seguido por los Lunes y Viernes, es decir los días que se viajan normalmente para el fin de semana.
La suma de todos estos factores nombrados anteriormente son los responsables de que los vuelos lleguen tarde.
La integridad es un valor fundamental en cualquier disciplina profesional. Representa la honestidad, la coherencia y la congruencia entre lo que decimos, pensamos y hacemos. En el contexto de la ética profesional, la integridad implica actuar de manera íntegra, respetando los principios y valores que rigen nuestra profesión. Con esta actividad me comprometo a aplicar mis conocimientos, a esforzarme en su desarrollo y a no servirme de medios no autorizados o ilícitos para realizarla. Tener acceso a la información de una empresa conlleva responsabilidades éticas. Debemos utilizarla de manera íntegra, respetando la confidencialidad y evitando beneficios personales o daños a la organización. La integridad y el cumplimiento del código ético son esenciales para tomar decisiones informadas y proteger la privacidad de la información empresarial.
La integridad es un valor de suma importancia para la convivencia sana en una comunidad, ya que esta nos permite actuar con honestidad y coherencia en cada una de nuestras actividades(Naciones Unidad, 2024). Esta es un pilar fundamental para el desarrollo profesional y social, ya que primero te deja progresar en tu carrera al demostrar tus capacidades, sin necesidad de hacer trampa o hacer cosas indebidas. Y segundo, para el desarrollo social, ya que se crean relaciones interpersonales sólidas, donde predomina la confianza. (DPC, 2024). Uno de los mayores problemas a nivel mundial es la corrupción tanto en los gobiernos, como en las empresas, y esta es causado justamente por la falta de integridad, la cuál empieza desde acciones pequeñas del día a día, hasta grandes que llegan a afectar a millones de personas.
Enfocándonos en mi caso, mi código ético de disciplina se basa en pensar 2 veces antes de actuar. Muchas veces, las personas nos dejamos llevar por el mal camino, ya que buscamos la perfección o no creemos en las consecuencias que puede traer, pero esto va más allá de si nos descubren y tenemos una repercusión, pues se trata en que realmente el trabajo no refleja lo que sabemos o hacemos, pues fue hecho con el esfuerzo de otro(Preparatoria Panamericana, 2021). Una mis filosofías de trabajo, la cuál fue inculcada por mi mamá es: “Mejor una mala nota, pero propia, que una buena, pero ajena”, y la verdad es que años después sólo puedo decir lo mucho que estoy de acuerdo, prefiero aprender y demostrar lo que soy capaz o exigirme más para alcanzar mi mejor versión, que fingir ser alguien que no soy.
Hoy en día, es muy común tener acceso a ciertos datos de las empresas, debido al Internet. Por eso, uno debe de tener mucho cuidado, ya que en ciertos casos, como los retos que hacemos en el Tecnológico de Monterrey, la información es confidencial, siendo totalmente nuestra responsabilidad lo que pasa con esos datos. En caso de usarla incorrectamente, se puede tener hasta problemas legales, como demandas. Por otro lado, el que cierta información esté disponible en internet, permite tener cierta transparencia, al poder observar documentos como los estados financieros o proyectos que se están llevando a cabo, los cuáles son especialmente útiles, cuando somos inversiones o accionistas de una empresa.
Desconocido. (2024). Naciones Unidad. La ciencia de la Integridad. Recuperado el 12 de Febrero del 2024. https://www.unodc.org/unodc/es/listen-first/super-skills/integrity.html
Desconocido. (2024). Dirección de participación ciudadana. Integridad. Recuperado el 12 de Febrero del 2024. https://www.ieem.org.mx/DPC/consejos_promotores/integridad.html
Mejia L. (2021). Preparatoria Panamericana. La importanciade la integridad moral en la adolescencia. Recuperadoel 12 de Marzo del 2024. https://blog.up.edu.mx/prepaup/femenil/la-importancia-de-la-integridad-moral-en-la-preparatoria
La integridad, entendida como un valor esencial en cualquier ámbito profesional, adquiere un significado trascendente cuando se tienen en cuenta sus diversas facetas. Este principio es una piedra angular que engloba la honestidad, la coherencia y la congruencia en todas nuestras acciones, pensamientos y expresiones. En el contexto de la ética profesional, la integridad se manifiesta como un compromiso inquebrantable de actuar con integridad y defender los principios y valores que guían nuestro trabajo. Teniendo esto en cuenta, al abordar una tarea o proyecto, me comprometo a aplicar cuidadosamente mis conocimientos, dedicándome a su desarrollo y rechazando el uso de medios ilícitos o ilegales para realizar mis tareas.
El acceso a la información dentro de una empresa no es sólo un privilegio, sino también una gran responsabilidad ética. Este acceso conlleva una serie de tareas y responsabilidades que deben llevarse a cabo con la máxima integridad. Es importante hacer pleno uso de esta información, proteger cuidadosamente su confidencialidad y evitar cualquier intento de obtener ventaja personal o dañar a la organización. La integridad, por tanto, se manifiesta como un escudo protector que nos insta a adherir fielmente a un código ético que sirve como guía infalible para tomar decisiones informadas y mantener la confidencialidad de la información empresarial. En última instancia, es esta integridad y estricto cumplimiento de los principios éticos lo que nos permite navegar por el complejo panorama de la ética empresarial con confianza y respeto por nuestro trabajo y nuestro entorno social.
Mercadology, N. (2021, 7 diciembre). ¿Por qué es tan importante la integridad de una empresa? ROHE. https://gruporohe.mx/integridad-de-una-empresa/
Rubio, A. N. (2023, 6 marzo). Integridad corporativa, beneficios de las buenas prácticas. Rpjmconsultoria. https://www.rpjmconsultoria.com/post/integridad-corporativa
Chávez, E. A. G. (2021, 15 julio). Acciones para reforzar la integridad corporativa entre los colaboradores de tu empresa. Stratego Firma. https://strategofirma.com/acciones-para-reforzar-la-integridad-corporativa-entre-los-colaboradores-de-tu-empresa/