Este reporte se basa en la siguiente base de datos de los vuelos de NYC.

Las observaciones se encuentran en negritas y…

el resto es la explicación del código

## # A tibble: 336,776 x 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
## # … with 336,766 more rows, and 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>

Primero seleccionaremos diferentes campos del data frame con la función select(), para comenzar a explorar todas sus variables.

Ver nombres originales de las columnas

colnames(flights)
##  [1] "year"           "month"          "day"            "dep_time"      
##  [5] "sched_dep_time" "dep_delay"      "arr_time"       "sched_arr_time"
##  [9] "arr_delay"      "carrier"        "flight"         "tailnum"       
## [13] "origin"         "dest"           "air_time"       "distance"      
## [17] "hour"           "minute"         "time_hour"

1 Seleccionar del data frame flights los campos carrier, número de vuelo (flight), origen, destino, tiempo de vuelo y distancia recorrida

flights_1 <- flights%>%
select("flight","origin","dest","air_time", "distance")
flights_1
## # A tibble: 336,776 x 5
##    flight origin dest  air_time distance
##     <int> <chr>  <chr>    <dbl>    <dbl>
##  1   1545 EWR    IAH        227     1400
##  2   1714 LGA    IAH        227     1416
##  3   1141 JFK    MIA        160     1089
##  4    725 JFK    BQN        183     1576
##  5    461 LGA    ATL        116      762
##  6   1696 EWR    ORD        150      719
##  7    507 EWR    FLL        158     1065
##  8   5708 LGA    IAD         53      229
##  9     79 JFK    MCO        140      944
## 10    301 LGA    ORD        138      733
## # … with 336,766 more rows

2 Seleccionar del data frame flights todos los campos entre year y day (incluyéndolo)

A partir de este data frame, podemos identificar que nuestros datos comienzan el 1 de Enero de 2013 y terminan el 31 de enero del mismo año.

flights_dates <- flights%>%
select("year","month","day")
flights_dates
## # A tibble: 336,776 x 3
##     year month   day
##    <int> <int> <int>
##  1  2013     1     1
##  2  2013     1     1
##  3  2013     1     1
##  4  2013     1     1
##  5  2013     1     1
##  6  2013     1     1
##  7  2013     1     1
##  8  2013     1     1
##  9  2013     1     1
## 10  2013     1     1
## # … with 336,766 more rows

3 Seleccionar del data frame flights todos los campos con exepción de hour, minute y time_hour

flights_no_time <- flights%>%
select(-"hour",-"minute",-"time_hour")
flights_no_time
## # A tibble: 336,776 x 16
##     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
## # … with 336,766 more rows, and 8 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>

4 Seleccionar del data frame flights todos los campos que inicien con “dep”

flights_dep <- flights%>%
select(starts_with("dep"))
flights_dep
## # A tibble: 336,776 x 2
##    dep_time dep_delay
##       <int>     <dbl>
##  1      517         2
##  2      533         4
##  3      542         2
##  4      544        -1
##  5      554        -6
##  6      554        -4
##  7      555        -5
##  8      557        -3
##  9      557        -3
## 10      558        -2
## # … with 336,766 more rows

5 Seleccionar del data frame flights todos los campos que terminen con “delay”

A partir de este data frame, podemos ver que hay más retrasos en las llegadas

flights_delay <- flights%>%
select(ends_with("delay"))
flights_delay
## # A tibble: 336,776 x 2
##    dep_delay arr_delay
##        <dbl>     <dbl>
##  1         2        11
##  2         4        20
##  3         2        33
##  4        -1       -18
##  5        -6       -25
##  6        -4        12
##  7        -5        19
##  8        -3       -14
##  9        -3        -8
## 10        -2         8
## # … with 336,766 more rows

6 Seleccionar del data frame flights todos los campos que contengan “time”

Aquí podemos facilmente identificar los retrasos (tanto en los despegues como en las llegadas) y el cumplimiento de tiempos de todos los vuelos

flights_time <- flights%>%
select(contains("time"))
flights_time
## # A tibble: 336,776 x 6
##    dep_time sched_dep_time arr_time sched_arr_time air_time time_hour          
##       <int>          <int>    <int>          <int>    <dbl> <dttm>             
##  1      517            515      830            819      227 2013-01-01 05:00:00
##  2      533            529      850            830      227 2013-01-01 05:00:00
##  3      542            540      923            850      160 2013-01-01 05:00:00
##  4      544            545     1004           1022      183 2013-01-01 05:00:00
##  5      554            600      812            837      116 2013-01-01 06:00:00
##  6      554            558      740            728      150 2013-01-01 05:00:00
##  7      555            600      913            854      158 2013-01-01 06:00:00
##  8      557            600      709            723       53 2013-01-01 06:00:00
##  9      557            600      838            846      140 2013-01-01 06:00:00
## 10      558            600      753            745      138 2013-01-01 06:00:00
## # … with 336,766 more rows

Después agregaremos nuevos campos al data frame con la función mutate()

7 Seleccionar del data frame flights los campos de year a day, los que terminen con delay y los campos distance y air_time. 7.1 Agregar: - Tiempo_ganado = Restar la hora de llegada a la hora de partida

8 Nuevos campos calculados con transmute()

A partir de este data frame, podemos observar que a mayor velocidad, mayor tiempo ganado.. por lo tanto si las aerolíneas quieren cumplir con tiempos y no causar retrasos, deberán de intentar llevar una velocidad alta a lo largo del trayecto

flights_2 <- flights %>%
  select("year", "month", "day",starts_with("dep")|ends_with("delay") |contains("time"), "distance" )%>%
   transmute(tiempo_ganado= arr_time - dep_time, velocidad_vuelo= distance/air_time*60)
flights_2
## # A tibble: 336,776 x 2
##    tiempo_ganado velocidad_vuelo
##            <int>           <dbl>
##  1           313            370.
##  2           317            374.
##  3           381            408.
##  4           460            517.
##  5           258            394.
##  6           186            288.
##  7           358            404.
##  8           152            259.
##  9           281            405.
## 10           195            319.
## # … with 336,766 more rows

Filtrar datos en un data frame con filter()

9 Muestra los vuelos que presentan un retraso superior a 2 horas a la hora de llegada

Aquí podemos ver que durante 201310,034 vuelos llegaron a su destino 2 horas más tarde de lo previsto

flights_delay_over2<- flights%>%
filter(arr_delay>120)
flights_delay_over2
## # A tibble: 10,034 x 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      811            630       101     1047            830
##  2  2013     1     1      848           1835       853     1001           1950
##  3  2013     1     1      957            733       144     1056            853
##  4  2013     1     1     1114            900       134     1447           1222
##  5  2013     1     1     1505           1310       115     1638           1431
##  6  2013     1     1     1525           1340       105     1831           1626
##  7  2013     1     1     1549           1445        64     1912           1656
##  8  2013     1     1     1558           1359       119     1718           1515
##  9  2013     1     1     1732           1630        62     2028           1825
## 10  2013     1     1     1803           1620       103     2008           1750
## # … with 10,024 more rows, and 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>

10 Muestra los vuelos que presentan un retraso superior a 2 horas en la hora de llegada o en la hora de partida

La anterior data frame nos mostraba 10,034 filas y esta solo incrementó a 11,422. Por lo tanto, podemos observar que los retrasos son mucho más frecuentes al tratarse de las llegadas

flights_delay_2<- flights%>%
filter(arr_delay>120|dep_delay>120)
flights_delay_2
## # A tibble: 11,422 x 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      811            630       101     1047            830
##  2  2013     1     1      848           1835       853     1001           1950
##  3  2013     1     1      957            733       144     1056            853
##  4  2013     1     1     1114            900       134     1447           1222
##  5  2013     1     1     1505           1310       115     1638           1431
##  6  2013     1     1     1525           1340       105     1831           1626
##  7  2013     1     1     1540           1338       122     2020           1825
##  8  2013     1     1     1549           1445        64     1912           1656
##  9  2013     1     1     1558           1359       119     1718           1515
## 10  2013     1     1     1732           1630        62     2028           1825
## # … with 11,412 more rows, and 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>

11 Ahora, muestra los vuelos que NO presentan un retraso superior a 2 horas en la hora de llegada o en la hora de partida

Aquí podemos ver que a pesar de la frecuencia de los retrasos, tanto en llegada como despegue, la mayoría de los vuelos (319,911 de 336,776) no llega a apresentar un retraso que exceda las 2hrs

flights_on_time<- flights%>%
filter(arr_delay<120 | dep_delay<120)
flights_on_time
## # A tibble: 319,911 x 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
## # … with 319,901 more rows, and 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>

12 Muestra los vuelos realizados en los meses de Noviembre y Diciembre

Podemos observar que durante los dos últimos meses del año se realizaron muchos vuelos (+ del 15% del total del año), por lo que podemos asumir que esta es una buena temporada para las aerolíneas… seguramente por la temporada de fiestas y el aumento de viajes que esta genera

flights_end_of_year<- flights%>%
filter(month=="12" | month=="11")
flights_end_of_year
## # A tibble: 55,403 x 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    11     1        5           2359         6      352            345
##  2  2013    11     1       35           2250       105      123           2356
##  3  2013    11     1      455            500        -5      641            651
##  4  2013    11     1      539            545        -6      856            827
##  5  2013    11     1      542            545        -3      831            855
##  6  2013    11     1      549            600       -11      912            923
##  7  2013    11     1      550            600       -10      705            659
##  8  2013    11     1      554            600        -6      659            701
##  9  2013    11     1      554            600        -6      826            827
## 10  2013    11     1      554            600        -6      749            751
## # … with 55,393 more rows, and 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>

13 Muestra los vuelos operados por United, American o Delta

UA= United Airlines AA= American Airlines DL= Delta

En este data frame, podemos observar que las airolíneas UA, AA y DL representan un número importante de los vuelos contendios en la base de datos, por lo tanto están bastante bien posicionadas en el mercado

flights_airlines<- flights%>%
filter(carrier== "UA" | carrier== "AA" |carrier== "DL" )
flights_airlines
## # A tibble: 139,504 x 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      554            600        -6      812            837
##  5  2013     1     1      554            558        -4      740            728
##  6  2013     1     1      558            600        -2      753            745
##  7  2013     1     1      558            600        -2      924            917
##  8  2013     1     1      558            600        -2      923            937
##  9  2013     1     1      559            600        -1      941            910
## 10  2013     1     1      559            600        -1      854            902
## # … with 139,494 more rows, and 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>

14 Ordena flights para encontrar los vuelos más retrasados, el campo arr_delay indica el retraso a la llegada, ordena en forma descendente.

Aquí podemos observar que el peor retraso fue de 1272 minutos y por parte de la aereolínea Hawaiian Airlines (HA). Sin embargo, la que presenta más retrasos en el ranking, es American Eagle Airlines (MQ), pues ese carrier se repite 4 veces en los primeros 10

flights_most_delay<- flights%>%
arrange(desc(arr_delay))
flights_most_delay 
## # A tibble: 336,776 x 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     9      641            900      1301     1242           1530
##  2  2013     6    15     1432           1935      1137     1607           2120
##  3  2013     1    10     1121           1635      1126     1239           1810
##  4  2013     9    20     1139           1845      1014     1457           2210
##  5  2013     7    22      845           1600      1005     1044           1815
##  6  2013     4    10     1100           1900       960     1342           2211
##  7  2013     3    17     2321            810       911      135           1020
##  8  2013     7    22     2257            759       898      121           1026
##  9  2013    12     5      756           1700       896     1058           2020
## 10  2013     5     3     1133           2055       878     1250           2215
## # … with 336,766 more rows, and 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>

15 Ordena flights para encontrar los vuelos más rápidos (velocidad más alta).

Por otro lado, las aerolineas más rápidas se muestran en este dataset. La máxima velocidad de vuelo fue de Delta airlines, con una velocidad de 703.3846 y basándonos en la repetición dentro del ranking, tambíen fue la más veloz en general, pues aparece 4 veces en los primeros 10.

flights_fastest<- flights%>%
select("distance", "air_time", "carrier")%>%
mutate(velocidad_vuelo = (distance / air_time) * 60)%>%
  arrange(desc(velocidad_vuelo))
flights_fastest
## # A tibble: 336,776 x 4
##    distance air_time carrier velocidad_vuelo
##       <dbl>    <dbl> <chr>             <dbl>
##  1      762       65 DL                 703.
##  2     1008       93 EV                 650.
##  3      594       55 EV                 648 
##  4      748       70 EV                 641.
##  5     1035      105 DL                 591.
##  6     1598      170 DL                 564 
##  7     1598      172 B6                 557.
##  8     1623      175 AA                 556.
##  9     1598      173 DL                 554.
## 10     1598      173 B6                 554.
## # … with 336,766 more rows

Aplicar las funciones como min, max, mean, sum, count, etc con group_by() y summarize()

16 Cuál es la media del retraso en los vuelos, agrupa por year, month, day Identifica el día, mes, año que tuvo menos retraso.

En esta tabla podemos ver que el retraso más significativo ocurrió el 8 de marzo de 2013, pero que el mes con más retrasos fue Julio

flights_mean <- flights%>%
  group_by(day, year, month) %>% 
  summarise( mean_retraso = mean(arr_delay, na.rm = TRUE))%>%
               arrange(desc(mean_retraso))
## `summarise()` has grouped output by 'day', 'year'. You can override using the `.groups` argument.
flights_mean
## # A tibble: 365 x 4
## # Groups:   day, year [31]
##      day  year month mean_retraso
##    <int> <int> <int>        <dbl>
##  1     8  2013     3         85.9
##  2    13  2013     6         63.8
##  3    22  2013     7         62.8
##  4    23  2013     5         62.0
##  5    10  2013     7         59.6
##  6    12  2013     9         58.9
##  7     1  2013     7         58.3
##  8    17  2013    12         55.9
##  9     8  2013     8         55.5
## 10     5  2013    12         51.7
## # … with 355 more rows

17 Obtén el número de vuelos por aerlorínea y destin. Identifica aerolínea y destino con mayor número de vuelos ordenando el resultado anterior de forma descendente

En este data set podemos observar que Delta con destino Atlanta fue el vuelo más realizado, pues cuenta con 10571 vuelos.

flights %>% 
        group_by(carrier,dest) %>% 
        summarize(count = n()) %>% 
        arrange(desc(count))
## `summarise()` has grouped output by 'carrier'. You can override using the `.groups` argument.
## # A tibble: 314 x 3
## # Groups:   carrier [16]
##    carrier dest  count
##    <chr>   <chr> <int>
##  1 DL      ATL   10571
##  2 US      CLT    8632
##  3 AA      DFW    7257
##  4 AA      MIA    7234
##  5 UA      ORD    6984
##  6 UA      IAH    6924
##  7 UA      SFO    6819
##  8 B6      FLL    6563
##  9 B6      MCO    6472
## 10 AA      ORD    6059
## # … with 304 more rows

18 Obtén la máxima distancia recorrida por aerolínea y destino, ordena en forma descendente por máxima distancia recorrida

Aquí podemos observar que los destinos más alejados fueron Honolulu, San Francisco y Anchorage. El vuelo más largo (en términos de distancia), fue relizado a Honolulu por Hawaian airlines y el segundo coincide en destino, pero fue realizado por United Airlines.

distancias_maximas <- flights %>%
  group_by(carrier,dest) %>%
  summarise(maxima_dist= max (distance)) %>%
  arrange (desc(maxima_dist)) 
## `summarise()` has grouped output by 'carrier'. You can override using the `.groups` argument.
head(distancias_maximas)
## # A tibble: 6 x 3
## # Groups:   carrier [5]
##   carrier dest  maxima_dist
##   <chr>   <chr>       <dbl>
## 1 HA      HNL          4983
## 2 UA      HNL          4963
## 3 UA      ANC          3370
## 4 AA      SFO          2586
## 5 B6      SFO          2586
## 6 DL      SFO          2586

19 Obtén el tiempo de vuelo por aerolínea y destino, ordena en forma descendente por la suma_tiempo_vuelo e identifica las 3 aerolíneas con sus destinos que han volado más tiempo

Aquí podemos ver que las aereolíneas que han volado más tiempo son Hawaiian Airlines, JetBlue y ENDEAVOR en ese orden.

sum_vuelos <- flights %>%
  group_by(carrier,dest) %>%
  summarise(suma_tiempo_vuelo = sum(air_time)) %>%
  arrange(desc(suma_tiempo_vuelo))
## `summarise()` has grouped output by 'carrier'. You can override using the `.groups` argument.
sum_vuelos[1:3,]
## # A tibble: 3 x 3
## # Groups:   carrier [3]
##   carrier dest  suma_tiempo_vuelo
##   <chr>   <chr>             <dbl>
## 1 HA      HNL              213096
## 2 B6      ABQ               63289
## 3 9E      RSW               10764

Renombrar campos en un data frame con rename()

20 En la consulta 18 renombra el campo max_distancia por distancia_máxima_recorrida

distancias_maximas%>%
rename( maxima_distancia_recorrida = maxima_dist)
## # A tibble: 314 x 3
## # Groups:   carrier [16]
##    carrier dest  maxima_distancia_recorrida
##    <chr>   <chr>                      <dbl>
##  1 HA      HNL                         4983
##  2 UA      HNL                         4963
##  3 UA      ANC                         3370
##  4 AA      SFO                         2586
##  5 B6      SFO                         2586
##  6 DL      SFO                         2586
##  7 UA      SFO                         2586
##  8 VX      SFO                         2586
##  9 B6      OAK                         2576
## 10 B6      SJC                         2569
## # … with 304 more rows

CONCULSIONES

En general podemos concluir que…

  • Es más común que las llegadas no sucedan cuando están previstas y el timepo de su retraso, dependerá exponencialmente del tiempo en el aire y por consiguiente de la velocidad que se mantenga en el aire.

  • El vuelo más largo y con mayor distancia es a Honolulu, pero muchas aerolíneas no cuentan con este destino

  • Precisamente por esta gran distancia es que Hawaian Airlines es la aerolínea que pasa más tiempo en el aire

  • UA, AA y DLT, son 3 aerolíneas muy conocidas,sin embargo, ninguna de ellas aparece en el ranking de más vuelos a un destino. Esto es bueno porque nos indica que no se limitan solo a un lugar, pero tambíen es mal… porque no hay una especialización ni asociación a la marca, como pasa con Hawaian airlines e ir a Honolulu o Air France y Paris (en vuelos internacionales)

  • Julio es el mes con más retrasos y esto posiblemente se debe a que es verano y temporada alta, pues los meses que aprecen en ese ranking (día, mes, año con más retrasos) también suelen caracterizarse por vacaciones y viajes