El paquete nycflights13 contiene información sore todos los vueles que partieron desde Nueva York(EWR, JFL, LGA) en destinos a 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
En esta evidencia se trabajó con el paquete nycflights, el cuál nos permitió analizar información acerca de los vuelos, destinos, aerolíneas, retrasos entre otros, registrados en los aeropuertos de Nueva York en el 2013. Se utilizaron las funciones más comunes del análisis exploratorio, el cual es el primer paso para cualquier trabajo de manipulación de datos.
La situación problema que se buscaba resolver es saber el por qué los vuelos se retrasan, ya sea en la partida o en la llegada, en los aeropuertos en Nueva York. Con la información brindada en las bases de datos, se pudo realizar un análisis tomando en cuenta diferentes variables, ya sea el clima, el tipo de avión que se utilizaba, la aerolínea, el día de la semana, las temporadas vacacionales e incluso hasta el horario del día. Al analizar esta información se obtuvieron datos, que nos permitirían evaluar cuál es el verdadero motivo por el cual los vuelos se retrasan.
Para este proyecto se utilizaron diferentes paquetes y librerías,
#install.packages("nycflight13")
library(nycflights13)
#install.packages("tidyverse")
library(tidyverse)
## ── 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
#install.packages("dplyr")
library(dplyr)
#install.packages("ggplot2")
library(ggplot2)
data("flights")
flights <- flights
weather <- weather
planes <- planes
airports <- airports
airlines <- airlines
df <- merge(flights,airlines, by="carrier")
df <- left_join(df,planes, by="tailnum")
df <- left_join(df,weather, by=c("origin","time_hour"))
La función select sirve para seleccionar columnos de un table (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: -flight) # 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 de una columna
La función Filter sirve para seleccionar renglones de un 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 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 caluladas a partir de variables existentes en la base de datos.
ejercicio1 <- bdgrande2 %>% filter(arr_delay>=120)
ejercicio2 <- bdgrande2 %>% filter(dest== "IAH" | dest == "HOU")
ejercicio3 <- bdgrande2 %>% filter(carrier %in% c("UA", "AA", "DL"))
ejercicio4 <- bdgrande2 %>% filter(month %in% c(7, 8, 9))
ejercicio4a <- bdgrande2 %>% filter(month == 7 | month == 8 | month == 9)
ejercicio5 <- bdgrande2 %>% filter(arr_delay>120 & dep_time == sched_dep_time)
ejercicio5a <- bdgrande2 %>% filter(arr_delay>120 & dep_delay<=0)
ejercicio6 <- bdgrande2 %>% filter(dep_delay>=60 & arr_delay<=-30)
ejercicio7 <- bdgrande2 %>% filter(dep_time %in% c("2400", "100", "200", "300", "400", "500", "600"))
ejercicio7a <- bdgrande2 %>% filter(dep_time==2400 | dep_time<=600) #CORRECTA
ejercicio7b <- bdgrande2 %>% filter(hour %in% c("0", "1", "2", "3", "4", "5", "6"))
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 salida 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
# La carga a memoria se hizo en el paso anterior, consulta de dataframe para recordar su contenido.
view(flights)
# Identifica la media de las distancias recorridas en millas.
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
##
#Crea un nuevo data frame que filtre solamente a las aeorlíneas que han recorrido una distancia superior a la media, se desean ver los campos carrier, distance, origin, dest en forma descendente por distance.
#Criterio 1: se selecciona las variables.
Criterio1 <- flights %>% select(carrier, distance, origin, dest)
#Criterio 2: se filtran a las aerolineas que tengan una media superior a 1040 en millas recorridas.
Criterio2 <- Criterio1 %>% filter(distance >1040)
#Criterio 3: se ordena en descendente por la distancia recorrida
Criterio3 <- Criterio2 %>% arrange(desc(distance))
# Se encuentra la suma y la media de las distancias recorridas por carrier, elimina los NA’S e interpreta que significa la suma y la media de las distancias recorridas.
Criterio4 <- Criterio3 %>% group_by(carrier,origin,dest) %>%
summarize(distancesuma=sum(distance, na.rm=TRUE), distancepromedio=mean(distance, na.rm=TRUE))
## `summarise()` has grouped output by 'carrier', 'origin'. You can override using
## the `.groups` argument.
# Posteriormente, se ordena de forma descendente en base a la distancia recorrida.
Descendente <- Criterio4 %>% arrange(carrier,distancesuma)
Aquí se escribe la interpretación…..
#En esta parte se identifica si las aerolíneas líderes son las mismas en los tres aeropuertos cuyo origen es Nueva York ya sea el John F. Kennedy (JFK), el de LaGuardia (LGA) o el de Newark Liberty (EWR). Se genera un dataframe para cada aeropuerto.
Aeropuerto_JFK = Descendente %>% filter(origin == "JFK") %>% arrange(carrier, desc(distancesuma))
Aeropuerto_LGA = Descendente %>% filter(origin == "LGA") %>% arrange(carrier, desc(distancesuma))
Aeropuerto_EWR = Descendente %>% filter(origin == "EWR") %>% arrange(carrier, desc(distancesuma))
Aquí se escribe la conclusión de la parte 1 de la evidencia
#Al consultar/llamar el DataFrame nos permite visualizar la base de datos *flights*.
view(flights)
#Se necesita saber de cada vuelo, la aerolínea, el aeropuerto de origen y el aeropuerto destino
vuelos <- flights %>% select(carrier, origin, dest)
#De la consulta anterior se requiere saber el nombre de la aerolínea
aerolínea <- vuelos %>% left_join (airlines, by = "carrier")
#De la consulta anterior se requiere saber el nombre de la aerolínea (FALTA)
#destnom <- mutate(vuelos_cantidad, airlines)
summary_delay <- df %>%
group_by(dest) %>%
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)
#Se necesita conocer las aerolíneas (clave y nombre) y destinos que vuelan por la Mañana: de 6 a 12, Tarde: de 12 a 19 , Noche: de 19 a 24 y Madrugada de 24 a 6.
turno_carrier <- flights %>% select (carrier, dest, sched_dep_time) %>% left_join (airlines, by = "carrier")
turno_MTNM<- mutate(turno_carrier, 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"))))
#Se presenta la cantidad de vuelos por aerolínea y destino que hay en cada turno, ya sea en la mañana, tarde, noche o madrugada.
cantidad_turno_MTNM <- turno_MTNM %>% group_by(carrier, dest, clas_horario) %>% count()
AA_destinos_mad <- turno_MTNM %>% select(carrier,name, dest,clas_horario) %>% filter(carrier == "AA" & clas_horario == "Madrugada") %>% group_by(carrier,name, dest,clas_horario)
#Se presenta la aerolínea, tipo, motor, número de asientos y la cantidad de vuelos que se han realizado con cada uno de los aviones.
AA_aviones <- flights %>% left_join(planes, by = "tailnum") %>% select(carrier, type, engine, seats) %>% filter(carrier == "AA", !is.na(type)) %>% group_by(carrier,type,engine,seats) %>% count()
Aquí se escribe la interpretación…..
Visualizaciones de la aerolínea American Airlines para los ejecutivos con las siguientes características. Dentro de las aerolíneas el retraso tanto en la hora de partida como en la hora de llegada a su destino van generando indicadores negativos.
#Vuelos de American Airlines que si tienen retraso en la partida también tienen retraso en la hora de llegada.
vuelos_aa <- flights %>% filter(carrier == "AA")
retrasopartida <- mutate(vuelos_aa, dep_delay = dep_time - sched_dep_time)
retrasollegada <- mutate(vuelos_aa, arr_delay = arr_time - sched_arr_time)
partidaAAretrasos <- filter(retrasollegada, dep_delay > 0)
llegadaAAretrasos <- filter(retrasollegada, arr_delay > 0)
AAretrasos_lp <- intersect(partidaAAretrasos, llegadaAAretrasos)
ggplot(AAretrasos_lp, aes(x = dep_delay, y = arr_delay)) +
geom_point() +
labs(x = "Retraso en la partida)", y = "Retraso en la llegada") +
theme_void()
#Tendencia de la temperatura durante los primeros 15 días del mes de Enero en los vuelos que parten del aeropuerto “Newark, EWR”, se utiliza una gráfica de línea.
EWRenero15 <- weather %>% filter(origin == "EWR", month == 1, day <= 15)
EWRenero15Temp <- select(EWRenero15, day, temp)
EWRenero15TempProm <- EWRenero15Temp %>% group_by(day) %>% summarise(promediotemp = mean(temp, na.rm=TRUE))
ggplot(EWRenero15TempProm, aes(x = day, y = promediotemp)) +
geom_line() +
labs(x = "Dia", y = "Temperatura (°C)") +
theme_void()
#Visualiza la temperatura más frecuente en los primeros 15 días del mes de Enero, utilizar un histrograma.
datos_enero <- df %>%
filter(month.x == 1, day.x <= 15)
#FALTA CONVERTIR A CELSIUS
datos_enero_celsius <- mutate(datos_enero, celsius=(temp-32)*(5/9))
# Crear el histograma de temperatura
ggplot(datos_enero, aes(x = temp)) +
geom_histogram(binwidth = 5, color = "white", fill = "skyblue") +
labs(title = "Histograma de Temperatura en los Primeros 15 Dias de Enero",
x = "Temperatura", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 52 rows containing non-finite outside the scale range
## (`stat_bin()`).
datos_enero <- df %>%
filter(month.x == 1, day.x <= 15)
#CONVERTIR A CELSIUS
datos_enero_celsius <- mutate(datos_enero, celsius=(temp-32)*(5/9))
# Crear el histograma de temperatura
ggplot(datos_enero_celsius, aes(x = celsius)) +
geom_histogram(binwidth = 5, color = "white", fill = "skyblue") +
labs(title = "Histograma de Temperatura en los Primeros 15 Dias de Enero",
x = "Temperatura (°C)", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 52 rows containing non-finite outside the scale range
## (`stat_bin()`).
#Utiliza Facets para observar cómo varía la temperatura en cada mes en él histograma del punto anterior
datos <- df %>%
select(month.x, temp)
#FALTA CONVERTIR A CELSIUS
ggplot(datos, aes(x = temp)) +
geom_histogram(binwidth = 3, color = "white", fill = "skyblue") +
facet_wrap(~month.x, nrow = 3) + # Facetar por mes, con 3 paneles por fila
labs(title = "Histograma de Temperatura por Mes",
x = "Temperatura", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 1573 rows containing non-finite outside the scale range
## (`stat_bin()`).
#Se presentan el número de vuelos que salieron de Nueva York en 2013 por aerolínea y con las 10 aerolínes con más vuelos se realiza una gráfica de barras.
vuelos_cantidad2 <- flights %>% select (carrier, dest) %>% count(carrier)
vuelos_orden <- arrange(vuelos_cantidad2, desc(n))
head(vuelos_orden, 10)
## # A tibble: 10 × 2
## carrier n
## <chr> <int>
## 1 UA 58665
## 2 B6 54635
## 3 EV 54173
## 4 DL 48110
## 5 AA 32729
## 6 MQ 26397
## 7 US 20536
## 8 9E 18460
## 9 WN 12275
## 10 VX 5162
grafico_barras <- ggplot(head(vuelos_orden, 10), aes(x = carrier, y = n)) +
geom_bar(stat = "identity") +
labs(x = "Aerolinea", y = "Cantidad de Vuelos")
grafico_barras
grafico_pastel <- grafico_barras +
coord_polar("y", start = 0)
grafico_pastel
#Relaciona el data frame flights con el data frame airports a través del campo destino ¿cómo lograr estas relaciones?
df <- merge(flights,airlines, by="carrier")
df <- left_join(df,planes, by="tailnum")
df <- left_join(df,weather, by=c("origin","time_hour"))
#Estas relaciones se logran a través del uso de funciones como merge y left_join,que permiten encontra las relaciones entre los diferentes data frames. Este paso se realizó al inico del programa para el desarrollo de los otros puntos de análisis.
#Visualizaciones de Flights
# Gráfico de Barras
ggplot(data = vuelos_cantidad2, aes(x = carrier, y = n)) +
geom_bar(stat = "identity") +
labs(title = "Cantidad de Vuelos por Aerolínea",
x = "Aerolínea",
y = "Cantidad de Vuelos") +
theme_minimal()
#Gráfico de Pastel
ggplot(data = vuelos_cantidad2, aes(x = "", y = n, fill = carrier)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y") +
labs(title = "Proporción de Vuelos por Aerolínea",
x = NULL,
y = NULL) +
theme_void()
#Gráfico de Tendencia
ggplot(data = EWRenero15TempProm, aes(x = day, y = promediotemp)) +
geom_line() +
labs(title = "Tendencia de Temperatura en Enero",
x = "Día",
y = "Temperatura (°C)") +
theme_minimal()
Aquí se pone la conclusión de la parte 2 de la evidencia…..
Interpretación: a continuación se presenta…..falta poner gráficas aquí
#Atrasos de origen, carrier y mes.
atraso_por_origen <- flights %>% group_by(origin) %>% summarise(tiempo_atraso_promedio = mean(dep_delay, na.rm = TRUE))
atraso_por_carrier <- flights %>% group_by(carrier) %>% summarise(tiempo_atraso_promedio = mean(dep_delay, na.rm = TRUE))
atraso_por_mes <- flights %>% group_by(month) %>% summarise(tiempo_atraso_promedio = mean(dep_delay, na.rm = TRUE))
# Resumen por origen
summary_by_origin <- flights %>% group_by(origin) %>% summarize(Media_Dep_Delay = mean(dep_delay, na.rm = TRUE),
Mediana_Dep_Delay = median(dep_delay, na.rm = TRUE), Min_Dep_Delay = min(dep_delay, na.rm = TRUE), Max_Dep_Delay = max(dep_delay, na.rm = TRUE))
# Resumen por aerolínea
summary_by_carrier <- flights %>% group_by(carrier) %>% summarize(Media_Dep_Delay = mean(dep_delay, na.rm = TRUE),
Mediana_Dep_Delay = median(dep_delay, na.rm = TRUE),
Min_Dep_Delay = min(dep_delay, na.rm = TRUE),
Max_Dep_Delay = max(dep_delay, na.rm = TRUE))
# Calcular resumen estadístico por destino
summary_by_dest <- flights %>%
group_by(dest) %>%
summarize(Media_Dep_Delay = mean(dep_delay, na.rm = TRUE),
Mediana_Dep_Delay = median(dep_delay, na.rm = TRUE),
Min_Dep_Delay = min(dep_delay, na.rm = TRUE),
Max_Dep_Delay = max(dep_delay, na.rm = TRUE))
## Warning: There were 2 warnings in `summarize()`.
## The first warning was:
## ℹ In argument: `Min_Dep_Delay = min(dep_delay, na.rm = TRUE)`.
## ℹ In group 52: `dest = "LGA"`.
## Caused by warning in `min()`:
## ! no non-missing arguments to min; returning Inf
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.
# Crear un conjunto de datos combinando las variables de interés
modelo_data <- flights %>%
select(dep_delay, carrier, origin, month)
# Ajustar el modelo de regresión lineal
modelo <- lm(dep_delay ~ carrier + origin + month, data = modelo_data)
# Resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = dep_delay ~ carrier + origin + month, data = modelo_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -54.81 -17.38 -12.48 -1.76 1294.85
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 18.80974 0.38810 48.466 < 2e-16 ***
## carrierAA -7.79414 0.38286 -20.358 < 2e-16 ***
## carrierAS -11.48010 1.54124 -7.449 9.46e-14 ***
## carrierB6 -3.77186 0.34822 -10.832 < 2e-16 ***
## carrierDL -7.07511 0.36085 -19.607 < 2e-16 ***
## carrierEV 2.97023 0.39186 7.580 3.47e-14 ***
## carrierF9 4.51664 1.56852 2.880 0.003983 **
## carrierFL 2.89628 0.78763 3.677 0.000236 ***
## carrierHA -12.03652 2.18212 -5.516 3.47e-08 ***
## carrierMQ -5.61979 0.40732 -13.797 < 2e-16 ***
## carrierOO -2.92665 7.42779 -0.394 0.693571
## carrierUA -4.90557 0.38340 -12.795 < 2e-16 ***
## carrierUS -12.43204 0.43216 -28.767 < 2e-16 ***
## carrierVX -4.02855 0.63644 -6.330 2.46e-10 ***
## carrierWN 1.25021 0.49683 2.516 0.011858 *
## carrierYV 3.37925 1.74606 1.935 0.052947 .
## originJFK -0.38387 0.23214 -1.654 0.098213 .
## originLGA -1.54708 0.21363 -7.242 4.44e-13 ***
## month -0.23726 0.02045 -11.604 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 39.96 on 328502 degrees of freedom
## (8255 observations deleted due to missingness)
## Multiple R-squared: 0.01256, Adjusted R-squared: 0.01251
## F-statistic: 232.2 on 18 and 328502 DF, p-value: < 2.2e-16
ggplot(modelo_data, aes(x = as.factor(month), y = dep_delay, group = 1)) +
geom_line(stat = "summary", fun = "mean", linetype = "solid", size = 1) +
labs(title = "Promedio del Retraso de Salida en función del Mes",
x = "Mes",
y = "Promedio de Retraso de Salida")
## 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.
## Warning: Removed 8255 rows containing non-finite outside the scale range
## (`stat_summary()`).
Aquí ponemos lo que nos falta de poner par lo de retrasos….
# Retraso por tipo de avión
retraso_por_avion <- flights %>%
left_join(planes, by = "tailnum") %>%
group_by(type) %>%
summarize(avg_delay = mean(dep_delay, na.rm = TRUE))
# Gráfico de barras para retraso por tipo de avión
ggplot(retraso_por_avion, aes(x = type, y = avg_delay)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(title = "Retraso Promedio por Tipo de Avión",
x = "Tipo de Avión",
y = "Retraso Promedio") +
theme_minimal()
# Retraso por día de la semana
retraso_por_dia_semana <- flights %>%
mutate(weekday = weekdays(as.Date(paste(year, month, day, sep = "-")))) %>%
group_by(weekday) %>%
summarize(avg_delay = mean(dep_delay, na.rm = TRUE))
# Ordenar días de la semana
retraso_por_dia_semana$weekday <- factor(retraso_por_dia_semana$weekday, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))
# Gráfico de barras para retraso por día de la semana
ggplot(retraso_por_dia_semana, aes(x = weekday, y = avg_delay)) +
geom_bar(stat = "identity", fill = "blue") +
labs(title = "Retraso Promedio por Dia de la Semana",
x = "Dia de la Semana",
y = "Retraso Promedio") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
flights$hour <- as.integer(flights$hour)
mean_delay_per_hour <- aggregate(dep_delay ~ hour, flights, mean)
ggplot(data = mean_delay_per_hour, aes(x = hour, y = dep_delay)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(x = "Hora del día", y = "Retraso promedio (minutos)",
title = "Retraso promedio por hora del día") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
# Gráfica atraso por origen
ggplot(atraso_por_origen, aes(x=origin, y=tiempo_atraso_promedio)) +
geom_bar(stat="identity", fill="lightblue1") +
theme_minimal() +
labs(title="Atraso promedio por origen", x="Origen", y="Tiempo de atraso promedio")
# Gráfica atraso por carrier
ggplot(atraso_por_carrier, aes(x=carrier, y=tiempo_atraso_promedio)) +
geom_bar(stat="identity", fill="cadetblue3") +
theme_minimal() +
labs(title="Atraso promedio por carrier", x="Carrier", y="Tiempo de atraso promedio")
# Gráfica de atraso por mes
ggplot(atraso_por_mes, aes(x=month, y=tiempo_atraso_promedio)) +
geom_line(group=1, colour="darkslategray3") +
theme_minimal() +
labs(title="Atraso promedio por mes", x="Mes", y="Tiempo de atraso promedio")
flights_filtered <- flights %>%
mutate(flights = ifelse(dep_delay > 0, "Delayed", "Not Delayed")) %>%
group_by(month, flights) %>%
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 = flights)) +
geom_bar(stat = "identity", position = "stack") +
scale_fill_manual(values = c("seashell2", "rosybrown2")) +
labs(title = "Número de vuelos por mes con y sin retraso",
x = "Mes",
y = "Número de vuelos",
fill = "Retraso") +
theme_minimal()
Retraso por clima
flights_weather<- merge(weather, flights)
flights_weather %>%
group_by(humid) %>%
summarise(delay = mean(dep_delay, na.rm = TRUE)) %>%
ggplot(aes(x = humid, y = delay)) +
labs(x = "Humedad relativa", y = "Retraso promedio (minutos)", fill = "Aeoropuerto") +
ggtitle("Retraso promedio por humedad relativa") +
geom_line() + geom_point()+ theme(plot.title= element_text(hjust=0.5))
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_line()`).
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
flights_weather %>%
group_by(temp) %>%
summarise(delay = mean(dep_delay, na.rm = TRUE)) %>%
ggplot(aes(x = temp, y = delay)) +
labs(x = "Temperatura", y = "Retraso promedio (minutos)", fill = "Aeoropuerto") +
ggtitle("Retraso promedio por Temperatura") +
geom_point() +
geom_smooth()+ theme(plot.title= element_text(hjust=0.5))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).
flights_weather %>%
group_by(wind_speed) %>%
summarise(delay = mean(dep_delay, na.rm = TRUE)) %>%
ggplot(aes(x = wind_speed, y = delay)) +
labs(x = "Velocidad del Viento", y = "Retraso promedio (minutos)") +
ggtitle("Retraso promedio por Velocidad del Viento") +
geom_smooth()+ theme(plot.title= element_text(hjust=0.5))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_smooth()`).
flights_weather %>%
group_by(wind_dir) %>%
summarise(delay = mean(dep_delay, na.rm = TRUE)) %>%
ggplot(aes(x = wind_dir, y = delay)) +
labs(x = "Dirección del Viento", y = "Retraso promedio (minutos)") +
ggtitle("Retraso promedio por Dirección del Viento") +
geom_bar(stat = "identity") +
theme(plot.title=element_text(hjust=0.5))
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_bar()`).
flights_weather %>%
group_by(visib) %>%
summarise(delay = mean(dep_delay, na.rm = TRUE)) %>%
ggplot(aes(x = visib, y = delay)) +
labs(x = "Visibilidad", y = "Retraso promedio (minutos)") +
ggtitle("Retraso promedio por Visibilidad en el aire") +
geom_line() +
theme(plot.title=element_text(hjust=0.5))
En esta actividad de manera grupal, determinamos el por qué se retrasan los vuelos en los aeropuertos de Nueva York. Se obtuvo información muy interesante a través de los diferentes análisis de la base de datos.
En primera instancia se obtuvo el atraso por origen, en donde nos mostró el tiempo de atraso promedio en cada uno de los tres aeropuertos disponibles, dando como resultado que el aeropuerto con mayor atraso en promedio es el EWR. El siguiente análisis fue el atraso por Carrier, en donde se obtuvo el atraso promedio por aerolínea; 9E (Endevoir Air) obtuvo el mayor resultado en atraso promedio.
Despúes nos enfocamos más en el mes en el que había mayores retrasos, dando como resultado temporadas altas para viajar, por ejemplo en primer lugar del mes con mayor retraso se encontraba Julio, aproximadamente solo por un minuto mayor a Junio, y a este le seguía diciembre en el tercer puesto. Si tomamos en cuenta que muchas personas viajan en dichas temporados por el verano y las fiestas decembrinas, lo que ocasiona que haya mayor cantidad de personas en movilidad en aeropuertos, podría ser un importante factor del por qué los vuelos se retrasan más en dichas temporadas.
Por último, realizamos un modelo del promedio del retraso de salida en función del mes, lo que nos muestra con mayor claridad, que las temporadas altas de viajes son un factor que influye en los retrasos generados en los aeropuertos de Nueva York.
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 : int [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)
# Date: fecha (en R va año-mes-día)
# POSIXct: formato fecha y hora
class(flights)
## [1] "tbl_df" "tbl" "data.frame"
# Las 5 clases de objetos son:
# 1. numeric: Número real o decimales.
# 2. integer: Númweos enteros
# 3. complex: Números complejos
# 4. character: carácteres
# 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 <int>, 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 <int>, minute <dbl>, time_hour <dttm>
# Si quisieramos 7 renglones: head(flights,7)
El valor de la integridad, según las Naciones Unidas, viene de la práctica de ser una persona honesta, que se adhiere a sus valores y que la toma de decisiones es sistemáticamente positiva. La integridad es la forma de actuar de acuerdo a los principios, a diferencia de la honestidad que es el acto de ser veraz. (Naciones Unidas)
(usar al menos 3 bibliografías aquí)
Aqui se pone la conclusión de todo….
Aqui se pone las bibliografías….