
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 de datos útiles. Responder a la pregunta ¿Por qué los retrasos?
Este paquete incluye las siguientes tablas:
# install.packages("nycflights13")
library(nycflights13)
# install.packages("tidyverse")
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' 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.5.0 ✔ 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
library(dplyr)
library(scales)
##
## Attaching package: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
library(ggplot2)
library(corrplot)
## corrplot 0.92 loaded
library(lubridate)
flights <- flights
weather <- weather
planes <- planes
airports <- airports
airlines <- airlines

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) # Cambia el nombre a una columna
La función filter sirve para seleccionar renglones de una tabla (data frame). La función slice sirve para seleccionar filas en especifico (data frame).
df7 <- flights %>% filter(dep_delay >=500) # Extrae renglones que cumplan condición
# 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 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 sólo los renglones diferentes, borra todos los repetidos
La función merge sirve para juntar bases de datos.
bdgrande <- merge(flights, airlines, by = "carrier") # carrier es la columna llave
bdgrande0 <- left_join(flights, weather, by = c("origin", "time_hour"))
bdgrande1 <- left_join(bdgrande, planes, by = "tailnum") # toda tabla bdgrande y solo coincidencias de planes
bdgrande2 <- mutate(bdgrande1, dist_km = distance*1.609)
bdgrande3 <- left_join(bdgrande2, weather, by = c("origin", "time_hour"))
ejercicio1 <- bdgrande2 %>% filter(arr_delay>=120)
ejercicio2 <- bdgrande2 %>% filter(dest == "IAH" | dest == "HOU")
3.Encuentra todos los vuelos operados por United, American o Delta
ejercicio3 <- bdgrande2 %>% filter(carrier %in% c("UA" , "AA" , "DL"))
Ejercicio 4. Encuentra todos los vuelos que despegaron en Julio, Agosto o Septiembre.
ejercicio4a <- bdgrande2 %>% filter(month == 7 | month == 8 | month == 9)
ejercicio4b <- bdgrande2 %>% filter(month %in% c(7:9))
Ejercicio 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)
Ejercicio 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)
Ejercicio 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,)
para acomodar de mayor a menor.
df12 <- arrange(bdgrande2,year.x,desc(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 12.63907
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 11.5
## 2 2013 1 2 13.9
## 3 2013 1 3 11.0
## 4 2013 1 4 8.95
## 5 2013 1 5 5.73
## 6 2013 1 6 7.15
## 7 2013 1 7 5.42
## 8 2013 1 8 2.55
## 9 2013 1 9 2.28
## 10 2013 1 10 2.84
## # ℹ 355 more rows
flights <- flights
weather <- weather
planes <- planes
airports <- airports
airlines <- airlines
Observamos que la tabla flights nos dan las variables:
flights <- flights
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>
Observamos que en la estructura de flights las variables pueden dividirse en:
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" ...
Podemos identificar que flights (y, por consecuente, las otros 3 objetos en la librería nycflights13) es un tipo de objeto data frame
class(flights)
## [1] "tbl_df" "tbl" "data.frame"
Tiene un total de 336776 renglones con 19 variables.
dim(flights)
## [1] 336776 19
Summary nos arroja los promedios, máximos y mínimos por variables. Estas son nuestras observaciones:
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
##
En este avance se tocaran diversos temas y funciones para poder llegar al resultado que se quiere obtener, las funciones que se van a usar son los siguentes:
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>
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
##
#selecciona las variables carrier, distance, origin, dest de la tabla
df1_avance2 <- select(flights, carrier, distance, origin, dest)
#se filtra las aerolineas con millas recorridas superiores a la media - 1040
df2_avance2 <- filter(df1_avance2, distance >1040)
#ordena en forma descendente por distancia recorrida
df3_avance2 <- arrange(df2_avance2, desc(distance))
#Agrupar los datos por carrier,origin, dest y obtener la suma acumulada y la media de las distancias recorridas por carrier eliminando los NA's
df4_avance2 <- df3_avance2 %>% 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_avance2 <- arrange(df4_avance2,carrier,sumdistance)
JFK = df5_avance2 %>%
filter(origin == "JFK") %>%
arrange(carrier, desc(sumdistance))
LGA = df5_avance2 %>%
filter(origin == "LGA") %>%
arrange(carrier, desc(sumdistance))
EWR = df5_avance2 %>%
filter(origin == "EWR") %>%
arrange(carrier, desc(sumdistance))
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>
En la tabla “planes” podemos observar los distintos factores que conforman la composición de los aviones de la base de datos “nyflights13”, como por ejemplo : su número de asientos, el número de engines en cada avión, etc.
En la tabla “weather” se nos muestra información que nos indica por un lado las condiciones meteorológicas en las que operan los aviones y por otro lado se nos proporciona datos para poder comprender mejor cuándo y de donde salieron los aviones de la base de datos “nyflights13”.
Aquí estamos creando una variable llamada “aerolineas” que nos muestra tres variables : aerolíneas, puerto de salida y puerto de llegada de todos los aviones de la base de datos nyflights13.
aerolineas <- flights %>%
select(carrier,origin,dest)
aerolineas
## # A tibble: 336,776 × 3
## carrier origin dest
## <chr> <chr> <chr>
## 1 UA EWR IAH
## 2 UA LGA IAH
## 3 AA JFK MIA
## 4 B6 JFK BQN
## 5 DL LGA ATL
## 6 UA EWR ORD
## 7 B6 EWR FLL
## 8 EV LGA IAD
## 9 B6 JFK MCO
## 10 AA LGA ORD
## # ℹ 336,766 more rows
Aquí estamos creando una nueva variable llamada “aerolineas_nombre” que le añade una columna al dataframe “aerolíneas” llamada name que muestra el nombre de todas las aerolíneas de la base de datos “nyflights13”.
aerolineas_nombre <- aerolineas %>%
left_join(airlines, by = "carrier")
aerolineas_nombre
## # A tibble: 336,776 × 4
## carrier origin dest name
## <chr> <chr> <chr> <chr>
## 1 UA EWR IAH United Air Lines Inc.
## 2 UA LGA IAH United Air Lines Inc.
## 3 AA JFK MIA American Airlines Inc.
## 4 B6 JFK BQN JetBlue Airways
## 5 DL LGA ATL Delta Air Lines Inc.
## 6 UA EWR ORD United Air Lines Inc.
## 7 B6 EWR FLL JetBlue Airways
## 8 EV LGA IAD ExpressJet Airlines Inc.
## 9 B6 JFK MCO JetBlue Airways
## 10 AA LGA ORD American Airlines Inc.
## # ℹ 336,766 more rows
Aquí creamos una nueva variable llamada “cant_vuelos”, en la que utilizamos la función count para analizar la columna de datos carrier perteneciente al conjunto de datos flights.
cant_vuelos <- flights %>%
select(carrier, dest) %>%
count(carrier)
cant_vuelos
## # A tibble: 16 × 2
## carrier n
## <chr> <int>
## 1 9E 18460
## 2 AA 32729
## 3 AS 714
## 4 B6 54635
## 5 DL 48110
## 6 EV 54173
## 7 F9 685
## 8 FL 3260
## 9 HA 342
## 10 MQ 26397
## 11 OO 32
## 12 UA 58665
## 13 US 20536
## 14 VX 5162
## 15 WN 12275
## 16 YV 601
Aquí agarramos la tabla “cant_vuelos” (que contiene la cantidad de vuelos por cada aerolínea) y la juntamos con la tabla airlines por la columna común carrier utilizando la función de unión left_join, todo esto con el fin de crear una nueva tabla llamada “cant_vuelos_nombre” que contendrá todas las columnas de la tabla original “cant_vuelos” (aerolínea y cantidad de vuelos) y además contendrá una columna adicional de la tabla airlines, que muestra el nombre de la aerolíneas.
cant_vuelos_nombre <- cant_vuelos %>%
left_join(airlines, by = "carrier")
cant_vuelos_nombre
## # A tibble: 16 × 3
## carrier n name
## <chr> <int> <chr>
## 1 9E 18460 Endeavor Air Inc.
## 2 AA 32729 American Airlines Inc.
## 3 AS 714 Alaska Airlines Inc.
## 4 B6 54635 JetBlue Airways
## 5 DL 48110 Delta Air Lines Inc.
## 6 EV 54173 ExpressJet Airlines Inc.
## 7 F9 685 Frontier Airlines Inc.
## 8 FL 3260 AirTran Airways Corporation
## 9 HA 342 Hawaiian Airlines Inc.
## 10 MQ 26397 Envoy Air
## 11 OO 32 SkyWest Airlines Inc.
## 12 UA 58665 United Air Lines Inc.
## 13 US 20536 US Airways Inc.
## 14 VX 5162 Virgin America
## 15 WN 12275 Southwest Airlines Co.
## 16 YV 601 Mesa Airlines Inc.
Aquí lo primero que hicimos fue una nueva variable llamada “carrier_horario” en la que seleccionamos las columnas carrier, dest y sched_dep_time del conjunto de datos flights, y utilizamos la función (left_join()) para unir esto con la tabla airlines utilizando la columna común “carrier”. Esto agrega el nombre de la aerolínea a la tabla de vuelos. Después creamos una nueva variable llamada “clasxhora” que muestra la misma información que la variable “carrier_horario” pero con una nueva columna que se creó gracias a la función mutate y esta nueva columna nos muestra una etiqueta de horario (Mañana, Tarde, Noche o Madrugada) según la hora programada de salida (sched_dep_time) y siguiendo las especificaciones detalladas con la función ifelse para cada horario en específico.
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"))))
clasxhora
## # A tibble: 336,776 × 5
## carrier dest sched_dep_time name clas_horario
## <chr> <chr> <int> <chr> <chr>
## 1 UA IAH 515 United Air Lines Inc. Madrugada
## 2 UA IAH 529 United Air Lines Inc. Madrugada
## 3 AA MIA 540 American Airlines Inc. Madrugada
## 4 B6 BQN 545 JetBlue Airways Madrugada
## 5 DL ATL 600 Delta Air Lines Inc. Mañana
## 6 UA ORD 558 United Air Lines Inc. Madrugada
## 7 B6 FLL 600 JetBlue Airways Mañana
## 8 EV IAD 600 ExpressJet Airlines Inc. Mañana
## 9 B6 MCO 600 JetBlue Airways Mañana
## 10 AA ORD 600 American Airlines Inc. Mañana
## # ℹ 336,766 more rows
Aquí estamos creando una nueva variable llamada “cant_clasxhora” en la que estamos agrupando los datos de las columnas carrier, dest y clas_horario de la tabla “clasxhora” por medio de la función group_by. Después utilizamos la función count() para contar la cantidad de observaciones en cada grupo.
cant_clasxhora <- clasxhora %>%
group_by(carrier, dest,clas_horario) %>% count()
cant_clasxhora
## # A tibble: 741 × 4
## # Groups: carrier, dest, clas_horario [741]
## carrier dest clas_horario n
## <chr> <chr> <chr> <int>
## 1 9E ATL Mañana 59
## 2 9E AUS Tarde 2
## 3 9E AVL Mañana 10
## 4 9E BGR Noche 1
## 5 9E BNA Mañana 6
## 6 9E BNA Noche 1
## 7 9E BNA Tarde 467
## 8 9E BOS Mañana 271
## 9 9E BOS Noche 94
## 10 9E BOS Tarde 549
## # ℹ 731 more rows
Aquí estamos creando una variable llamada “destinos_aa” en la que estamos seleccionando con la funcion select las columnas carrier,name,dest y clas_horario de la variable “clasxhora”. Después usamos la función filter para obtener únicamente los resultados AA y Madrugada de la columnas carrier y clas_horario. Finalmente utilizamos la función group_by para que la nueva tabla nos agrupara los datos en este orden : (carrier,name, dest,clas_horario).
destinos_aa <- clasxhora %>%
select(carrier,name, dest,clas_horario) %>%
filter(carrier == "AA" & clas_horario == "Madrugada") %>%
group_by(carrier,name, dest,clas_horario)
destinos_aa
## # A tibble: 365 × 4
## # Groups: carrier, name, dest, clas_horario [1]
## carrier name dest clas_horario
## <chr> <chr> <chr> <chr>
## 1 AA American Airlines Inc. MIA Madrugada
## 2 AA American Airlines Inc. MIA Madrugada
## 3 AA American Airlines Inc. MIA Madrugada
## 4 AA American Airlines Inc. MIA Madrugada
## 5 AA American Airlines Inc. MIA Madrugada
## 6 AA American Airlines Inc. MIA Madrugada
## 7 AA American Airlines Inc. MIA Madrugada
## 8 AA American Airlines Inc. MIA Madrugada
## 9 AA American Airlines Inc. MIA Madrugada
## 10 AA American Airlines Inc. MIA Madrugada
## # ℹ 355 more rows
Aquí estamos creando una variable llamada “avion_aa” en la que estamos uniendo por medio de la función left_join el conjunto de datos flights y el conjunto de datos planes basados en la columna común tailnum. Después seleccionamos únicamente las columnas de carrier, type, engine, seats con la función select. Con la función filter hicimos que por un lado la tabla solo mostrará los resultados de la aerolínea “AA” y que por otro lado se eliminara todos los NA ’s en la columna type. Más adelante utilizamos la función group_by para agrupar y asignar el orden de las columnas de la siguiente manera (carrier,type,engine,seats). Finalmente se utilizó la función count para saber cuántos vuelos se han realizado con cada uno.
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()
avion_aa
## # A tibble: 22 × 5
## # Groups: carrier, type, engine, seats [22]
## carrier type engine seats n
## <chr> <chr> <chr> <int> <int>
## 1 AA Fixed wing multi engine Reciprocating 6 22
## 2 AA Fixed wing multi engine Reciprocating 8 92
## 3 AA Fixed wing multi engine Reciprocating 102 22
## 4 AA Fixed wing multi engine Turbo-fan 8 38
## 5 AA Fixed wing multi engine Turbo-fan 11 19
## 6 AA Fixed wing multi engine Turbo-fan 22 13
## 7 AA Fixed wing multi engine Turbo-fan 172 3857
## 8 AA Fixed wing multi engine Turbo-fan 178 501
## 9 AA Fixed wing multi engine Turbo-fan 255 4257
## 10 AA Fixed wing multi engine Turbo-fan 330 450
## # ℹ 12 more rows
Ya habiendo analizado de manera descriptiva las tablas de nycflights13, es tiempo de llegar a distintos hallazgos para arribar a una respuesta hacía la cuestión presentada. Para poder hacerlo, realizaremos nuevas databases, dataframes y regresiones lineales.
Haremos grupos de las variables categóricas más relevantes del dataframe flights, viendo las frecuencias y los promedios por categoría.
Según la tabla proporcionada, parece que el factor “carrier” sí tiene un efecto en la variable “dep_delay”. Aquí hay algunas observaciones:
summary_delay <- bdgrande3 %>%
group_by(carrier) %>%
summarise(avg_delay = mean(dep_delay, na.rm = TRUE),
total_flights = n(),
total_delayed_flights = sum(dep_delay > 0, na.rm = TRUE),
perc_delayed_flights = total_delayed_flights / total_flights * 100) %>%
arrange(desc(perc_delayed_flights))
summary_delay
## # A tibble: 16 × 5
## carrier avg_delay total_flights total_delayed_flights perc_delayed_flights
## <chr> <dbl> <int> <int> <dbl>
## 1 WN 17.7 12275 6558 53.4
## 2 FL 18.7 3260 1654 50.7
## 3 F9 20.2 685 341 49.8
## 4 UA 12.1 58665 27261 46.5
## 5 VX 12.9 5162 2225 43.1
## 6 EV 20.0 54173 23139 42.7
## 7 B6 13.0 54635 21445 39.3
## 8 YV 19.0 601 233 38.8
## 9 9E 16.7 18460 7063 38.3
## 10 DL 9.26 48110 15241 31.7
## 11 AS 5.80 714 226 31.7
## 12 AA 8.59 32729 10162 31.0
## 13 MQ 10.6 26397 8031 30.4
## 14 OO 12.6 32 9 28.1
## 15 US 3.78 20536 4775 23.3
## 16 HA 4.90 342 69 20.2
Según la tabla proporcionada, parece que el factor “origin” sí tiene un efecto en la variable “dep_delay”. Aquí hay algunas observaciones:
summary_delay <- bdgrande3 %>%
group_by(origin) %>%
summarise(avg_delay = mean(dep_delay, na.rm = TRUE),
total_flights = n(),
total_delayed_flights = sum(dep_delay > 0, na.rm = TRUE),
perc_delayed_flights = total_delayed_flights / total_flights * 100) %>%
arrange(desc(perc_delayed_flights))
summary_delay
## # A tibble: 3 × 5
## origin avg_delay total_flights total_delayed_flights perc_delayed_flights
## <chr> <dbl> <int> <int> <dbl>
## 1 EWR 15.1 120835 52711 43.6
## 2 JFK 12.1 111279 42031 37.8
## 3 LGA 10.3 104662 33690 32.2
Según la tabla en la imagen, como la hora. x (que representa diferentes horas del día) aumenta, tanto el avg_delay y perc_delayed_flights generalmente también aumentan. Esto sugiere que los vuelos tienden a retrasarse más tarde en el día, lo que podemos observar en los siguientes data points:
summary_delay <- bdgrande3 %>%
group_by(hour.x) %>%
summarise(avg_delay = mean(dep_delay, na.rm = TRUE),
total_flights = n(),
total_delayed_flights = sum(dep_delay > 0, na.rm = TRUE),
perc_delayed_flights = total_delayed_flights / total_flights * 100)
summary_delay
## # A tibble: 20 × 5
## hour.x avg_delay total_flights total_delayed_flights perc_delayed_flights
## <dbl> <dbl> <int> <int> <dbl>
## 1 1 NaN 1 0 0
## 2 5 0.688 1953 489 25.0
## 3 6 1.64 25951 5430 20.9
## 4 7 1.91 22821 4963 21.7
## 5 8 4.13 27242 6790 24.9
## 6 9 4.58 20312 5392 26.5
## 7 10 6.50 16708 4942 29.6
## 8 11 7.19 16033 5034 31.4
## 9 12 8.61 18181 6408 35.2
## 10 13 11.4 19956 8183 41.0
## 11 14 13.8 21706 9257 42.6
## 12 15 16.9 23888 11364 47.6
## 13 16 18.8 23002 10699 46.5
## 14 17 21.1 24426 12132 49.7
## 15 18 21.1 21783 10636 48.8
## 16 19 24.8 21441 10839 50.6
## 17 20 24.3 16739 8633 51.6
## 18 21 24.2 10933 5596 51.2
## 19 22 18.8 2639 1184 44.9
## 20 23 14.0 1061 461 43.4
Identificamos que hay variables númericas en la misma tabla de flights y en la tabla de weather que pueden tener una correlación estadísticamente significativa para predecir las salidas tardías de los vuelos.
Tomaremos como outliers todos aquellos valores antes del primer cuartil y después del tercer cuartil.
retraso <- bdgrande3 %>% select(dep_delay)
summary(retraso)
## dep_delay
## Min. : -43.00
## 1st Qu.: -5.00
## Median : -2.00
## Mean : 12.64
## 3rd Qu.: 11.00
## Max. :1301.00
## NA's :8255
Según ambos summaries, aquí están algunas diferencias significativas entre los outliers positivos y negativos en relación con las variables climáticas:
Temperatura (temp):.
Dirección del viento (wind_dir):
Velocidad del viento (wind_speed):
Estas diferencias en los rangos intercuartiles entre los outliers positivos y negativos podrían sugerir que las condiciones climáticas más extremas (temperaturas más altas, direcciones de viento más variadas y velocidades de viento más altas) están asociadas con mayores retrasos en los vuelos.
bd_outliers <- filter(bdgrande0, dep_delay > 11)
bd_outliers <- bd_outliers %>% select(-year.x:-hour.y)
bd_mejores <- filter(bdgrande0, dep_delay < -5)
bd_mejores <- bd_mejores %>% select(-year.x:-hour.y)
summary(bd_outliers)
## temp dewp humid wind_dir
## Min. : 10.94 Min. :-9.04 Min. : 12.74 Min. : 0.0
## 1st Qu.: 42.80 1st Qu.:28.04 1st Qu.: 45.60 1st Qu.:130.0
## Median : 60.08 Median :46.94 Median : 62.05 Median :210.0
## Mean : 58.59 Mean :44.28 Mean : 62.47 Mean :200.5
## 3rd Qu.: 75.02 3rd Qu.:62.06 3rd Qu.: 80.78 3rd Qu.:280.0
## Max. :100.04 Max. :78.08 Max. :100.00 Max. :360.0
## NA's :415 NA's :415 NA's :415 NA's :2358
## wind_speed wind_gust precip pressure
## Min. : 0.000 Min. :16.11 Min. :0.0000 Min. : 985
## 1st Qu.: 8.056 1st Qu.:20.71 1st Qu.:0.0000 1st Qu.:1011
## Median :11.508 Median :24.17 Median :0.0000 Median :1016
## Mean :11.633 Mean :25.56 Mean :0.0083 Mean :1016
## 3rd Qu.:14.960 3rd Qu.:28.77 3rd Qu.:0.0000 3rd Qu.:1021
## Max. :42.579 Max. :66.75 Max. :1.2100 Max. :1042
## NA's :415 NA's :59719 NA's :405 NA's :12962
## visib
## Min. : 0.000
## 1st Qu.:10.000
## Median :10.000
## Mean : 9.008
## 3rd Qu.:10.000
## Max. :10.000
## NA's :405
summary(bd_mejores)
## temp dewp humid wind_dir
## Min. :10.94 Min. :-9.94 Min. : 12.74 Min. : 0.0
## 1st Qu.:42.98 1st Qu.:26.06 1st Qu.: 42.82 1st Qu.:110.0
## Median :55.94 Median :41.00 Median : 54.97 Median :220.0
## Mean :56.32 Mean :39.96 Mean : 57.00 Mean :200.7
## 3rd Qu.:69.98 3rd Qu.:55.04 3rd Qu.: 70.42 3rd Qu.:300.0
## Max. :98.96 Max. :78.08 Max. :100.00 Max. :360.0
## NA's :283 NA's :283 NA's :283 NA's :1987
## wind_speed wind_gust precip pressure
## Min. : 0.000 Min. :16.11 Min. :0.00000 Min. : 983.8
## 1st Qu.: 6.905 1st Qu.:20.71 1st Qu.:0.00000 1st Qu.:1013.7
## Median :10.357 Median :24.17 Median :0.00000 Median :1018.5
## Mean :10.671 Mean :24.79 Mean :0.00196 Mean :1018.7
## 3rd Qu.:13.809 3rd Qu.:27.62 3rd Qu.:0.00000 3rd Qu.:1023.7
## Max. :42.579 Max. :58.69 Max. :0.82000 Max. :1042.1
## NA's :290 NA's :53685 NA's :281 NA's :5665
## visib
## Min. : 0.000
## 1st Qu.:10.000
## Median :10.000
## Mean : 9.462
## 3rd Qu.:10.000
## Max. :10.000
## NA's :281
Creamos un modelo de regresión lineal con todas las variables del clima de la tabla weather.
flights_weather <- flights %>% left_join(weather, by = c("year", "month", "day", "hour", "origin"))
regresion_weather <- lm(dep_delay ~ temp + dewp + humid + wind_dir + wind_gust + pressure + visib, data = flights_weather)
summary(regresion_weather)
##
## Call:
## lm(formula = dep_delay ~ temp + dewp + humid + wind_dir + wind_gust +
## pressure + visib, data = flights_weather)
##
## Residuals:
## Min 1Q Median 3Q Max
## -58.34 -17.08 -11.69 0.02 754.06
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 235.624884 24.153820 9.755 < 2e-16 ***
## temp 0.403213 0.084383 4.778 1.77e-06 ***
## dewp -0.323405 0.092573 -3.493 0.000477 ***
## humid 0.362956 0.052040 6.975 3.09e-12 ***
## wind_dir -0.010832 0.002002 -5.410 6.31e-08 ***
## wind_gust 0.232139 0.027706 8.379 < 2e-16 ***
## pressure -0.234661 0.022344 -10.502 < 2e-16 ***
## visib -1.637206 0.162541 -10.073 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 37.82 on 72999 degrees of freedom
## (263769 observations deleted due to missingness)
## Multiple R-squared: 0.0248, Adjusted R-squared: 0.02471
## F-statistic: 265.2 on 7 and 72999 DF, p-value: < 2.2e-16
flights_weather <- flights %>% left_join(weather, by = c("year", "month", "day", "hour","origin"))
df15 <- flights_weather %>% select(temp,dewp,humid,wind_dir,wind_gust,pressure,visib,dep_delay)
df15 <- replace(df15, is.na(df15), 0)
data(df15)
## Warning in data(df15): data set 'df15' not found
str(df15)
## tibble [336,776 × 8] (S3: tbl_df/tbl/data.frame)
## $ temp : num [1:336776] 39 39.9 39 39 39.9 ...
## $ dewp : num [1:336776] 28 25 27 27 25 ...
## $ humid : num [1:336776] 64.4 54.8 61.6 61.6 54.8 ...
## $ wind_dir : num [1:336776] 260 250 260 260 260 260 240 260 260 260 ...
## $ wind_gust: num [1:336776] 0 21.9 0 0 23 ...
## $ pressure : num [1:336776] 1012 1011 1012 1012 1012 ...
## $ visib : num [1:336776] 10 10 10 10 10 10 10 10 10 10 ...
## $ dep_delay: num [1:336776] 2 4 2 -1 -6 -4 -5 -3 -3 -2 ...
M = cor(df15)
corrplot(M)
El coeficiente r^2 ajustado es de
0.02 para el modelo regresion_weather,
lo que significa que las variables climáticas no son estadísticamente
significativas para predecir los retrasos en la salida de los vuelos.
Podemos probar esto con dos gráficos superpuestos: el
negro es el valor real, mientras que el
rojo es el predicho por el modelo. No son
convergentes en absoluto, ya que el modelo solo puede predecir en un
rango menor que el de los valores reales, lo que representa la falta de
relación.
A pesar de la inclusión de variables climáticas en un modelo de
regresión lineal, encontramos que estas no son estadísticamente
significativas para predecir los retrasos en las salidas de
vuelos. Esto sugiere que otros factores pueden estar influyendo en los
retrasos de los vuelos, como los problemas operativos internos de las
aerolíneas o los aeropuertos.
predicted_values <- predict(regresion_weather, newdata = flights_weather)
comparison <- data.frame(Actual = flights_weather$dep_delay, Predicted = predicted_values)
registro <- 1:nrow(comparison) # Crear un vector de números de registro
comparison$Registro <- registro # Agregar el vector de números de registro al dataframe comparison
# Crear un gráfico de líneas para los valores reales
p1 <- ggplot(comparison, aes(x = Registro, y = Actual)) +
geom_line(color = "black") +
labs(x = "Número de registro", y = "Retraso (minutos)", title = "Retraso real vs predicho") +
theme_minimal()
# Crear un gráfico de líneas para los valores predichos
p2 <- ggplot(comparison, aes(x = Registro, y = Predicted)) +
geom_line(color = "red") +
theme_minimal()
# Superponer los dos gráficos
final_plot <- p1 + geom_line(data = p2$data, aes(x = Registro, y = Predicted), color = "red")
final_plot
Descompusimos por mes una serie de tiempo entre date y el promedio de dep_delay, por lo que se sacó el efecto estacional mensual. Con este gráfico podemos observar un componente estacional en el que se producen mayores retrasos de salida en los meses de:
# Promedio de dep_delay por fecha
flights1 <- flights %>%
mutate(date = make_date(year, month, day)) %>%
group_by(date) %>%
summarise(dep_delay = mean(dep_delay, na.rm = TRUE))
flights1 <- na.omit(flights1)
# Objeto de serie de tiempo con frecuencia mensual
ts_flights <- ts(flights1$dep_delay, start = c(2013, 1), frequency = 12)
# Descomponer la serie de tiempo de manera periódica
decomposed <- stl(ts_flights, s.window="periodic")
# Crear un data frame con las temporadas y fechas
seasonal_component <- decomposed$time.series[, "seasonal"]
dates <- seq(as.Date("2013-01-01"), by = "month", length.out = length(seasonal_component))
df_seasonal <- data.frame(Date = dates, Seasonal = seasonal_component)
df_seasonal$Month <- format(df_seasonal$Date, "%B")
# Calcular el efecto estacional medio para cada mes
avg_seasonal <- aggregate(Seasonal ~ Month, df_seasonal, mean)
avg_seasonal$Month <- factor(avg_seasonal$Month, levels = month.name)
# Gráficar
ggplot(avg_seasonal, aes(x = Month, y = Seasonal)) +
geom_bar(stat = "identity") +
labs(x = "Mes", y = "Componente estacional medio",
title = "Efecto estacional promedio por mes")
Al ver ya visto que con las variables climáticas no hay una relación
significativa, y vemos que si hay un efecto estacional, podemos
potencialmente atribuir los cambios a un cambio de demanda de
vuelos.
Los meses con mayor demanda julio y
agosto coinciden con el efecto estacional en retrasos
que tienen. No obstante, octubre y
marzo son tercero y cuarto en demanda y esto no se ve
reflejado en el efecto estacional.
Esto nos lleva a concluir que hay otros factores, fuera de la demanda,
que ocasionan este efecto estacional de retrasos.
No obstante, los meses con mayor proporción de retrasos son los meses
vacacionales junio, julio,
diciembre.
summary_delay <- bdgrande3 %>%
group_by(month.x) %>%
summarise(avg_delay = mean(dep_delay, na.rm = TRUE),
total_flights = n(),
total_delayed_flights = sum(dep_delay > 0, na.rm = TRUE),
perc_delayed_flights = total_delayed_flights / total_flights * 100) %>%
arrange(desc(total_flights))
summary_delay
## # A tibble: 12 × 5
## month.x avg_delay total_flights total_delayed_flights perc_delayed_flights
## <int> <dbl> <int> <int> <dbl>
## 1 7 21.7 29425 13909 47.3
## 2 8 12.6 29327 11713 39.9
## 3 10 6.24 28889 8722 30.2
## 4 3 13.2 28834 11209 38.9
## 5 5 13.0 28796 11291 39.2
## 6 4 13.9 28330 10543 37.2
## 7 6 20.8 28243 12655 44.8
## 8 12 16.6 28135 13550 48.2
## 9 9 6.72 27574 7815 28.3
## 10 11 5.44 27268 8239 30.2
## 11 1 10.0 27004 9662 35.8
## 12 2 10.8 24951 9124 36.6
flights_filtered <- flights %>%
mutate(delayed = ifelse(dep_delay > 0, "Delayed", "Not Delayed")) %>%
group_by(month, delayed) %>%
summarise(count = n()) %>%
mutate(percent = count / sum(count) * 100)
## `summarise()` has grouped output by 'month'. You can override using the
## `.groups` argument.
ggplot(flights_filtered, aes(x = factor(month), y = count, fill = delayed)) +
geom_bar(stat = "identity", position = "stack") +
scale_fill_manual(values = c("red", "green")) +
labs(title = "Número de vuelos por mes con y sin retraso",
x = "Mes",
y = "Número de vuelos",
fill = "Retraso") +
theme_minimal()
A medida que aumenta la hora del día, tanto el retraso medio como el porcentaje de vuelos retrasados suelen aumentar. Esto podría explicarse por la acumulación de retrasos a lo largo del día, las condiciones climáticas cambiantes o la mayor congestión del tráfico aéreo en las horas pico. Un ejemplo es que a las 5 am, el retraso promedio es de 0.68 minutos y el porcentaje de 25.03%; a las 5 pm el retraso es de 21.1 minutos y el porcentaje es de 49.6%.
Los vuelos que salen en meses de alta demanda tienen más retrasos porque al subir más demanda podría haber complejidad en las operaciones y mayor tráfico. Al analizar los datos se encontró que en julio, el 47% de los vuelos tienen retraso y, a su vez, es el mes con más alta demanda; en febrero, solamente el 36% de los vuelos son retrasados.
Las aerolíneas tienen un impacto significativo en los retrasos en los vuelos ya que la disponibilidad de personal y la demanda de viajes varían por cada una. Esto se puede ver como en Southwest Airlines Co. se retrasó el 53.4% de los vuelos (teniendo 12 mil vuelos totales) mientras que Hawaiian Airlines Inc. solo se retrasó el 20.2% (con 342 vuelos).
En cuestión de aeropuertos, entre mayor cantidad de vuelos totales salgan del aeropuerto, habrá una proporción más alta de retrasos ya que la capacidad de gestión del tráfico aéreo es dependiente de la demanda. Se puede presenciar este fénomeno en como el Aeropuerto Internacional de Newark (EWR) , el de mayor vuelos totales, tiene una proporción de 43.6% de retrasos; Aeropuerto Internacional de La Guardia (LGA), el de menos vuelos toales, solo tiene 32.2% de retrasos.
En la noche se presenta la mayor proporción de retrasos en comparación con la mañana debido a que hay menos personal disponible (la demanda no esta relacionada a esto). Se observa en cómo la proporción de retrasos llega a un punto caliente entre las horas 7 a 9 pm con 50.5% y 51.2% de retrasos respectivamente.
Para mi la integridad es actuar de forma responsable, respetuosa y honesta en todo momento con cualquier persona o entidad con la que interactuemos. Al momento de hacer negocios con otras personas siempre debemos actuar de forma íntegra con los medios que la otra parte nos está brindando ya que el mal uso por nuestra parte de estos datos o información se puede prestar a futuras discusiones o demandas en caso de que estos datos sean muy importantes/confidenciales. Al momento de tener datos de otras empresas, debemos comprometernos a mantenerlos privados en caso de que se nos solicite hacer esto y sólo utilizarlos de forma íntegra para realizar nuestros análisis deseados.
En resumen, tener acceso a la información de una empresa
conlleva una gran responsabilidad que debe manejarse con
integridad y ética profesional. En el contexto del análisis de datos de
vuelos, esto implica utilizar la información de manera responsable,
garantizando la privacidad y confidencialidad de los datos, así como
asegurando que los análisis y conclusiones se basen en
metodologías sólidas y éticas.
Además, significa mantener un código ético en la manipulación y
presentación de los resultados, asegurando que la información se utilice
para mejorar la toma de decisiones y generar valor para la
empresa y sus grupos de interés, en lugar de para fines
cuestionables o perjudiciales.
El tener integridad y honestidad a la hora de manejar datos en una empresa es de suma importancia y responsabilidad, los datos son algo que actualmente y en el futuro son bien cotizados y que se le está dando reconocimiento debido a que las empresas logran satisfactoriamente sus objetivos, pero para tener mayor base y ser profesionales al trabajar siempre hay que conducirse con integridad, honestidad y ética