Contexto

El paquete nycflights13 contiene información sobre todos los vuelos que partieron desde Nueva York (EWR, JFK Y LGA) a destinos en los Estados Unidos en 2013. Fueron 336,776 vuelos en total. Para ayudar a comprender las causas de los retrasos, también incluye otros conjuntos de datos útiles.

Este paquete incluye las siguientes tablas:

  • flights = todos los vuelos que salieron de New York en 2013
  • weather = datos metereológicos por hora de cada aeropuerto
  • planes= información de construcción de cada avión
  • airports = nombres y ubicaciones de aeropuertos
  • airlines= relación entre nombres y códigos de las aerolíneas

Fuente:
Origen de los datos

Instalar paquetes y llamar librerías

# install.packages("nycflights13")
library(nycflights13)
# install.packages("tidyverse")
library(tidyverse)
# install.packages("dplyr")
library(dplyr)
# install.packages(ggplot2)
library(ggplot2)

Parte 1. Exploración de datos

Cargar bases de datos

airports <- airports
flights <- flights
weather <- weather
planes <- planes
airlines <- airlines

DataFrameairports

# Mostrar contenido
airports
## # A tibble: 1,458 × 8
##    faa   name                             lat    lon   alt    tz dst   tzone    
##    <chr> <chr>                          <dbl>  <dbl> <dbl> <dbl> <chr> <chr>    
##  1 04G   Lansdowne Airport               41.1  -80.6  1044    -5 A     America/…
##  2 06A   Moton Field Municipal Airport   32.5  -85.7   264    -6 A     America/…
##  3 06C   Schaumburg Regional             42.0  -88.1   801    -6 A     America/…
##  4 06N   Randall Airport                 41.4  -74.4   523    -5 A     America/…
##  5 09J   Jekyll Island Airport           31.1  -81.4    11    -5 A     America/…
##  6 0A9   Elizabethton Municipal Airport  36.4  -82.2  1593    -5 A     America/…
##  7 0G6   Williams County Airport         41.5  -84.5   730    -5 A     America/…
##  8 0G7   Finger Lakes Regional Airport   42.9  -76.8   492    -5 A     America/…
##  9 0P2   Shoestring Aviation Airfield    39.8  -76.6  1000    -5 U     America/…
## 10 0S9   Jefferson County Intl           48.1 -123.    108    -8 A     America/…
## # ℹ 1,448 more rows
# Ver la estructura 
str(airports)
## tibble [1,458 × 8] (S3: tbl_df/tbl/data.frame)
##  $ faa  : chr [1:1458] "04G" "06A" "06C" "06N" ...
##  $ name : chr [1:1458] "Lansdowne Airport" "Moton Field Municipal Airport" "Schaumburg Regional" "Randall Airport" ...
##  $ lat  : num [1:1458] 41.1 32.5 42 41.4 31.1 ...
##  $ lon  : num [1:1458] -80.6 -85.7 -88.1 -74.4 -81.4 ...
##  $ alt  : num [1:1458] 1044 264 801 523 11 ...
##  $ tz   : num [1:1458] -5 -6 -6 -5 -5 -5 -5 -5 -5 -8 ...
##  $ dst  : chr [1:1458] "A" "A" "A" "A" ...
##  $ tzone: chr [1:1458] "America/New_York" "America/Chicago" "America/Chicago" "America/New_York" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   id = col_double(),
##   ..   name = col_character(),
##   ..   city = col_character(),
##   ..   country = col_character(),
##   ..   faa = col_character(),
##   ..   icao = col_character(),
##   ..   lat = col_double(),
##   ..   lon = col_double(),
##   ..   alt = col_double(),
##   ..   tz = col_double(),
##   ..   dst = col_character(),
##   ..   tzone = col_character()
##   .. )
# Consultar clase de objeto
class(airports)
## [1] "tbl_df"     "tbl"        "data.frame"
# Observar el tamaño del data frame
ncol(airports)
## [1] 8
nrow(airports)
## [1] 1458
dim(airports)
## [1] 1458    8
# Mostrar primeros y últimos renglones
head(airports)
## # A tibble: 6 × 8
##   faa   name                             lat   lon   alt    tz dst   tzone      
##   <chr> <chr>                          <dbl> <dbl> <dbl> <dbl> <chr> <chr>      
## 1 04G   Lansdowne Airport               41.1 -80.6  1044    -5 A     America/Ne…
## 2 06A   Moton Field Municipal Airport   32.5 -85.7   264    -6 A     America/Ch…
## 3 06C   Schaumburg Regional             42.0 -88.1   801    -6 A     America/Ch…
## 4 06N   Randall Airport                 41.4 -74.4   523    -5 A     America/Ne…
## 5 09J   Jekyll Island Airport           31.1 -81.4    11    -5 A     America/Ne…
## 6 0A9   Elizabethton Municipal Airport  36.4 -82.2  1593    -5 A     America/Ne…
tail(airports)
## # A tibble: 6 × 8
##   faa   name                        lat    lon   alt    tz dst   tzone          
##   <chr> <chr>                     <dbl>  <dbl> <dbl> <dbl> <chr> <chr>          
## 1 ZTY   Boston Back Bay Station    42.3  -71.1    20    -5 A     America/New_Yo…
## 2 ZUN   Black Rock                 35.1 -109.   6454    -7 A     America/Denver 
## 3 ZVE   New Haven Rail Station     41.3  -72.9     7    -5 A     America/New_Yo…
## 4 ZWI   Wilmington Amtrak Station  39.7  -75.6     0    -5 A     America/New_Yo…
## 5 ZWU   Washington Union Station   38.9  -77.0    76    -5 A     America/New_Yo…
## 6 ZYP   Penn Station               40.8  -74.0    35    -5 A     America/New_Yo…
# Estadísticos descriptivos
summary(airports)
##      faa                name                lat             lon         
##  Length:1458        Length:1458        Min.   :19.72   Min.   :-176.65  
##  Class :character   Class :character   1st Qu.:34.26   1st Qu.:-119.19  
##  Mode  :character   Mode  :character   Median :40.09   Median : -94.66  
##                                        Mean   :41.65   Mean   :-103.39  
##                                        3rd Qu.:45.07   3rd Qu.: -82.52  
##                                        Max.   :72.27   Max.   : 174.11  
##       alt                tz              dst               tzone          
##  Min.   : -54.00   Min.   :-10.000   Length:1458        Length:1458       
##  1st Qu.:  70.25   1st Qu.: -8.000   Class :character   Class :character  
##  Median : 473.00   Median : -6.000   Mode  :character   Mode  :character  
##  Mean   :1001.42   Mean   : -6.519                                        
##  3rd Qu.:1062.50   3rd Qu.: -5.000                                        
##  Max.   :9078.00   Max.   :  8.000

airports:

  • faa(character) = Código del aeropuerto
  • name(character) = Nombre del aeropuerto
  • lat(numeric) = Latitud
  • lon(numeric) = Longitud
  • alt(numeric) = Altitud
  • tz(numeric) = Diferencia de zona horaria con GMT
  • dst(character) = Horario de verano
  • tzone(character) = Zona horaria

DataFrameflights

# Mostrar contenido
flights
## # A tibble: 336,776 × 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ℹ 336,766 more rows
## # ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>
# Ver la estructura 
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" ...
# Consultar clase de objeto
class(flights)
## [1] "tbl_df"     "tbl"        "data.frame"
# Observar el tamaño del data frame
ncol(flights)
## [1] 19
nrow(flights)
## [1] 336776
dim(flights)
## [1] 336776     19
# Mostrar primeros y últimos renglones
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>
# Estadísticos descriptivos
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  
## 

flights:

  • year(integer) = Año
  • month(integer) = Mes
  • day(integer) = Día
  • dep_time(integer) = Tiempo de partida
  • sched_dep_time(integer) = Tiempo de salida programado
  • dep_delay(numeric) = Retraso en salida (minutos)
  • arr_time(integer) = Tiempo de llegada
  • sched_arr_time(integer) = Tiempo de llegada programado
  • arr_delay(numeric) = Retraso en salida (minutos)
  • carrier(character) = Aerolínea
  • flight(integer) = Número del vuelo
  • tailnum(character) = Número de avión
  • origin(character) = Origen
  • dest(character) = Destino
  • air_time(numeric) = Tiempo total en el aire (minutos)
  • distance(numeric) = Distancia entre aeropuertos (millas)
  • hour(numeric) = Hora programada de salida
  • minute(numeric) = Minuto programado de salida
  • time_hour(POSIXct) = Fecha y hora del vuelo

DataFrameweather

# Mostrar contenido
weather
## # A tibble: 26,115 × 15
##    origin  year month   day  hour  temp  dewp humid wind_dir wind_speed
##    <chr>  <int> <int> <int> <int> <dbl> <dbl> <dbl>    <dbl>      <dbl>
##  1 EWR     2013     1     1     1  39.0  26.1  59.4      270      10.4 
##  2 EWR     2013     1     1     2  39.0  27.0  61.6      250       8.06
##  3 EWR     2013     1     1     3  39.0  28.0  64.4      240      11.5 
##  4 EWR     2013     1     1     4  39.9  28.0  62.2      250      12.7 
##  5 EWR     2013     1     1     5  39.0  28.0  64.4      260      12.7 
##  6 EWR     2013     1     1     6  37.9  28.0  67.2      240      11.5 
##  7 EWR     2013     1     1     7  39.0  28.0  64.4      240      15.0 
##  8 EWR     2013     1     1     8  39.9  28.0  62.2      250      10.4 
##  9 EWR     2013     1     1     9  39.9  28.0  62.2      260      15.0 
## 10 EWR     2013     1     1    10  41    28.0  59.6      260      13.8 
## # ℹ 26,105 more rows
## # ℹ 5 more variables: wind_gust <dbl>, precip <dbl>, pressure <dbl>,
## #   visib <dbl>, time_hour <dttm>
# Ver la estructura 
str(weather)
## tibble [26,115 × 15] (S3: tbl_df/tbl/data.frame)
##  $ origin    : chr [1:26115] "EWR" "EWR" "EWR" "EWR" ...
##  $ year      : int [1:26115] 2013 2013 2013 2013 2013 2013 2013 2013 2013 2013 ...
##  $ month     : int [1:26115] 1 1 1 1 1 1 1 1 1 1 ...
##  $ day       : int [1:26115] 1 1 1 1 1 1 1 1 1 1 ...
##  $ hour      : int [1:26115] 1 2 3 4 5 6 7 8 9 10 ...
##  $ temp      : num [1:26115] 39 39 39 39.9 39 ...
##  $ dewp      : num [1:26115] 26.1 27 28 28 28 ...
##  $ humid     : num [1:26115] 59.4 61.6 64.4 62.2 64.4 ...
##  $ wind_dir  : num [1:26115] 270 250 240 250 260 240 240 250 260 260 ...
##  $ wind_speed: num [1:26115] 10.36 8.06 11.51 12.66 12.66 ...
##  $ wind_gust : num [1:26115] NA NA NA NA NA NA NA NA NA NA ...
##  $ precip    : num [1:26115] 0 0 0 0 0 0 0 0 0 0 ...
##  $ pressure  : num [1:26115] 1012 1012 1012 1012 1012 ...
##  $ visib     : num [1:26115] 10 10 10 10 10 10 10 10 10 10 ...
##  $ time_hour : POSIXct[1:26115], format: "2013-01-01 01:00:00" "2013-01-01 02:00:00" ...
# Consultar clase de objeto
class(weather)
## [1] "tbl_df"     "tbl"        "data.frame"
# Observar el tamaño del data frame
ncol(weather)
## [1] 15
nrow(weather)
## [1] 26115
dim(weather)
## [1] 26115    15
# Mostrar primeros y últimos renglones
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>
tail(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 LGA     2013    12    30    13  37.0  21.9  54.0      340       17.3      20.7
## 2 LGA     2013    12    30    14  36.0  19.9  51.8      340       13.8      21.9
## 3 LGA     2013    12    30    15  34.0  17.1  49.5      330       17.3      21.9
## 4 LGA     2013    12    30    16  32    15.1  49.2      340       15.0      23.0
## 5 LGA     2013    12    30    17  30.9  12.9  46.7      320       17.3      NA  
## 6 LGA     2013    12    30    18  28.9  10.9  46.4      330       18.4      NA  
## # ℹ 4 more variables: precip <dbl>, pressure <dbl>, visib <dbl>,
## #   time_hour <dttm>
# Estadísticos descriptivos
summary(weather)
##     origin               year          month             day       
##  Length:26115       Min.   :2013   Min.   : 1.000   Min.   : 1.00  
##  Class :character   1st Qu.:2013   1st Qu.: 4.000   1st Qu.: 8.00  
##  Mode  :character   Median :2013   Median : 7.000   Median :16.00  
##                     Mean   :2013   Mean   : 6.504   Mean   :15.68  
##                     3rd Qu.:2013   3rd Qu.: 9.000   3rd Qu.:23.00  
##                     Max.   :2013   Max.   :12.000   Max.   :31.00  
##                                                                    
##       hour            temp             dewp           humid       
##  Min.   : 0.00   Min.   : 10.94   Min.   :-9.94   Min.   : 12.74  
##  1st Qu.: 6.00   1st Qu.: 39.92   1st Qu.:26.06   1st Qu.: 47.05  
##  Median :11.00   Median : 55.40   Median :42.08   Median : 61.79  
##  Mean   :11.49   Mean   : 55.26   Mean   :41.44   Mean   : 62.53  
##  3rd Qu.:17.00   3rd Qu.: 69.98   3rd Qu.:57.92   3rd Qu.: 78.79  
##  Max.   :23.00   Max.   :100.04   Max.   :78.08   Max.   :100.00  
##                  NA's   :1        NA's   :1       NA's   :1       
##     wind_dir       wind_speed         wind_gust         precip        
##  Min.   :  0.0   Min.   :   0.000   Min.   :16.11   Min.   :0.000000  
##  1st Qu.:120.0   1st Qu.:   6.905   1st Qu.:20.71   1st Qu.:0.000000  
##  Median :220.0   Median :  10.357   Median :24.17   Median :0.000000  
##  Mean   :199.8   Mean   :  10.518   Mean   :25.49   Mean   :0.004469  
##  3rd Qu.:290.0   3rd Qu.:  13.809   3rd Qu.:28.77   3rd Qu.:0.000000  
##  Max.   :360.0   Max.   :1048.361   Max.   :66.75   Max.   :1.210000  
##  NA's   :460     NA's   :4          NA's   :20778                     
##     pressure          visib          time_hour                    
##  Min.   : 983.8   Min.   : 0.000   Min.   :2013-01-01 01:00:00.0  
##  1st Qu.:1012.9   1st Qu.:10.000   1st Qu.:2013-04-01 21:30:00.0  
##  Median :1017.6   Median :10.000   Median :2013-07-01 14:00:00.0  
##  Mean   :1017.9   Mean   : 9.255   Mean   :2013-07-01 18:26:37.7  
##  3rd Qu.:1023.0   3rd Qu.:10.000   3rd Qu.:2013-09-30 13:00:00.0  
##  Max.   :1042.1   Max.   :10.000   Max.   :2013-12-30 18:00:00.0  
##  NA's   :2729

weather:

  • origin(character) = Origen
  • year(integer) = Año
  • month(integer) = Mes
  • day(integer) = Día
  • hour(numeric) = Hora
  • temp(numeric) = Temperatura (°F)
  • dewp(numeric) = Punto de rocío (°F)
  • humid(numeric) = Humedad relativa
  • wind_dir(numeric) = Dirección del viento (°)
  • wind_speed(numeric) = Velocidad del viento (mph)
  • wind_gust(numeric) = Ráfaga de viento (mph)
  • precip(numeric) = Precipitación (pulgadas)
  • pressure(numeric) = Presión al nivel del mar (milibares)
  • visib(numeric) = Visibilidad (millas)
  • time_hour(POSIXct) = Fecha y Hora

DataFrameplanes

# Mostrar contenido
planes
## # A tibble: 3,322 × 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…
##  7 N107US   1999 Fixed wing multi… AIRBUS INDU… A320…       2   182    NA Turbo…
##  8 N108UW   1999 Fixed wing multi… AIRBUS INDU… A320…       2   182    NA Turbo…
##  9 N109UW   1999 Fixed wing multi… AIRBUS INDU… A320…       2   182    NA Turbo…
## 10 N110UW   1999 Fixed wing multi… AIRBUS INDU… A320…       2   182    NA Turbo…
## # ℹ 3,312 more rows
# Ver la estructura 
str(planes)
## tibble [3,322 × 9] (S3: tbl_df/tbl/data.frame)
##  $ tailnum     : chr [1:3322] "N10156" "N102UW" "N103US" "N104UW" ...
##  $ year        : int [1:3322] 2004 1998 1999 1999 2002 1999 1999 1999 1999 1999 ...
##  $ type        : chr [1:3322] "Fixed wing multi engine" "Fixed wing multi engine" "Fixed wing multi engine" "Fixed wing multi engine" ...
##  $ manufacturer: chr [1:3322] "EMBRAER" "AIRBUS INDUSTRIE" "AIRBUS INDUSTRIE" "AIRBUS INDUSTRIE" ...
##  $ model       : chr [1:3322] "EMB-145XR" "A320-214" "A320-214" "A320-214" ...
##  $ engines     : int [1:3322] 2 2 2 2 2 2 2 2 2 2 ...
##  $ seats       : int [1:3322] 55 182 182 182 55 182 182 182 182 182 ...
##  $ speed       : int [1:3322] NA NA NA NA NA NA NA NA NA NA ...
##  $ engine      : chr [1:3322] "Turbo-fan" "Turbo-fan" "Turbo-fan" "Turbo-fan" ...
# Consultar clase de objeto
class(planes)
## [1] "tbl_df"     "tbl"        "data.frame"
# Observar el tamaño del data frame
ncol(planes)
## [1] 9
nrow(planes)
## [1] 3322
dim(planes)
## [1] 3322    9
# Mostrar primeros y últimos renglones
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…
tail(planes)
## # A tibble: 6 × 9
##   tailnum  year type               manufacturer model engines seats speed engine
##   <chr>   <int> <chr>              <chr>        <chr>   <int> <int> <int> <chr> 
## 1 N996DL   1991 Fixed wing multi … MCDONNELL D… MD-88       2   142    NA Turbo…
## 2 N997AT   2002 Fixed wing multi … BOEING       717-…       2   100    NA Turbo…
## 3 N997DL   1992 Fixed wing multi … MCDONNELL D… MD-88       2   142    NA Turbo…
## 4 N998AT   2002 Fixed wing multi … BOEING       717-…       2   100    NA Turbo…
## 5 N998DL   1992 Fixed wing multi … MCDONNELL D… MD-88       2   142    NA Turbo…
## 6 N999DN   1992 Fixed wing multi … MCDONNELL D… MD-88       2   142    NA Turbo…
# Estadísticos descriptivos
summary(planes)
##    tailnum               year          type           manufacturer      
##  Length:3322        Min.   :1956   Length:3322        Length:3322       
##  Class :character   1st Qu.:1997   Class :character   Class :character  
##  Mode  :character   Median :2001   Mode  :character   Mode  :character  
##                     Mean   :2000                                        
##                     3rd Qu.:2005                                        
##                     Max.   :2013                                        
##                     NA's   :70                                          
##     model              engines          seats           speed      
##  Length:3322        Min.   :1.000   Min.   :  2.0   Min.   : 90.0  
##  Class :character   1st Qu.:2.000   1st Qu.:140.0   1st Qu.:107.5  
##  Mode  :character   Median :2.000   Median :149.0   Median :162.0  
##                     Mean   :1.995   Mean   :154.3   Mean   :236.8  
##                     3rd Qu.:2.000   3rd Qu.:182.0   3rd Qu.:432.0  
##                     Max.   :4.000   Max.   :450.0   Max.   :432.0  
##                                                     NA's   :3299   
##     engine         
##  Length:3322       
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 

planes:

  • tailnum(character) = Número de avión
  • year(integer) = Año de fabricación
  • type(character) = Tipo de avión
  • manufacturer(character) = Fabricante
  • model(character) = Modelo
  • engines(integer) = Número de motores
  • seats(integer) = Número de asientos
  • speed(integer) = Velocidad Promedio (mph)
  • engine(character) = Tipo de motor

DataFrameairlines

# Mostrar contenido
airlines
## # A tibble: 16 × 2
##    carrier name                       
##    <chr>   <chr>                      
##  1 9E      Endeavor Air Inc.          
##  2 AA      American Airlines Inc.     
##  3 AS      Alaska Airlines Inc.       
##  4 B6      JetBlue Airways            
##  5 DL      Delta Air Lines Inc.       
##  6 EV      ExpressJet Airlines Inc.   
##  7 F9      Frontier Airlines Inc.     
##  8 FL      AirTran Airways Corporation
##  9 HA      Hawaiian Airlines Inc.     
## 10 MQ      Envoy Air                  
## 11 OO      SkyWest Airlines Inc.      
## 12 UA      United Air Lines Inc.      
## 13 US      US Airways Inc.            
## 14 VX      Virgin America             
## 15 WN      Southwest Airlines Co.     
## 16 YV      Mesa Airlines Inc.
# Ver la estructura 
str(airlines)
## tibble [16 × 2] (S3: tbl_df/tbl/data.frame)
##  $ carrier: chr [1:16] "9E" "AA" "AS" "B6" ...
##  $ name   : chr [1:16] "Endeavor Air Inc." "American Airlines Inc." "Alaska Airlines Inc." "JetBlue Airways" ...
# Consultar clase de objeto
class(airlines)
## [1] "tbl_df"     "tbl"        "data.frame"
# Observar el tamaño del data frame
ncol(airlines)
## [1] 2
nrow(airlines)
## [1] 16
dim(airlines)
## [1] 16  2
# Mostrar primeros y últimos renglones
head(airlines)
## # A tibble: 6 × 2
##   carrier name                    
##   <chr>   <chr>                   
## 1 9E      Endeavor Air Inc.       
## 2 AA      American Airlines Inc.  
## 3 AS      Alaska Airlines Inc.    
## 4 B6      JetBlue Airways         
## 5 DL      Delta Air Lines Inc.    
## 6 EV      ExpressJet Airlines Inc.
tail(airlines)
## # A tibble: 6 × 2
##   carrier name                  
##   <chr>   <chr>                 
## 1 OO      SkyWest Airlines Inc. 
## 2 UA      United Air Lines Inc. 
## 3 US      US Airways Inc.       
## 4 VX      Virgin America        
## 5 WN      Southwest Airlines Co.
## 6 YV      Mesa Airlines Inc.
# Estadísticos descriptivos
summary(airlines)
##    carrier              name          
##  Length:16          Length:16         
##  Class :character   Class :character  
##  Mode  :character   Mode  :character

airlines:

  • carrier(character) = Aerolínea
  • name(character) = Nombre Completo de aerolínea

Parte 2. Manipulación de datos

Relación entre las bases de datos

Combinar bases de datos

bdgrande <- merge(flights,airlines, by="carrier")
bdgrande2 <- left_join(bdgrande,planes, by="tailnum")
bdgrande3 <- left_join(bdgrande2,weather, by=c("origin","time_hour"))

Estadísticos descriptivos del dataframe combinado

summary(bdgrande3)
##    carrier              year.x        month.x           day.x      
##  Length:336776      Min.   :2013   Min.   : 1.000   Min.   : 1.00  
##  Class :character   1st Qu.:2013   1st Qu.: 4.000   1st Qu.: 8.00  
##  Mode  :character   Median :2013   Median : 7.000   Median :16.00  
##                     Mean   :2013   Mean   : 6.549   Mean   :15.71  
##                     3rd Qu.:2013   3rd Qu.:10.000   3rd Qu.:23.00  
##                     Max.   :2013   Max.   :12.000   Max.   :31.00  
##                                                                    
##     dep_time    sched_dep_time   dep_delay          arr_time    sched_arr_time
##  Min.   :   1   Min.   : 106   Min.   : -43.00   Min.   :   1   Min.   :   1  
##  1st Qu.: 907   1st Qu.: 906   1st Qu.:  -5.00   1st Qu.:1104   1st Qu.:1124  
##  Median :1401   Median :1359   Median :  -2.00   Median :1535   Median :1556  
##  Mean   :1349   Mean   :1344   Mean   :  12.64   Mean   :1502   Mean   :1536  
##  3rd Qu.:1744   3rd Qu.:1729   3rd Qu.:  11.00   3rd Qu.:1940   3rd Qu.:1945  
##  Max.   :2400   Max.   :2359   Max.   :1301.00   Max.   :2400   Max.   :2359  
##  NA's   :8255                  NA's   :8255      NA's   :8713                 
##    arr_delay            flight       tailnum             origin         
##  Min.   : -86.000   Min.   :   1   Length:336776      Length:336776     
##  1st Qu.: -17.000   1st Qu.: 553   Class :character   Class :character  
##  Median :  -5.000   Median :1496   Mode  :character   Mode  :character  
##  Mean   :   6.895   Mean   :1972                                        
##  3rd Qu.:  14.000   3rd Qu.:3465                                        
##  Max.   :1272.000   Max.   :8500                                        
##  NA's   :9430                                                           
##      dest              air_time        distance        hour.x     
##  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                          name          
##  Min.   : 0.00   Min.   :2013-01-01 05:00:00.00   Length:336776     
##  1st Qu.: 8.00   1st Qu.:2013-04-04 13:00:00.00   Class :character  
##  Median :29.00   Median :2013-07-03 10:00:00.00   Mode  :character  
##  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                     
##                                                                     
##      year.y          type           manufacturer          model          
##  Min.   :1956    Length:336776      Length:336776      Length:336776     
##  1st Qu.:1999    Class :character   Class :character   Class :character  
##  Median :2002    Mode  :character   Mode  :character   Mode  :character  
##  Mean   :2001                                                            
##  3rd Qu.:2006                                                            
##  Max.   :2013                                                            
##  NA's   :57912                                                           
##     engines          seats           speed           engine         
##  Min.   :1.00    Min.   :  2.0   Min.   : 90.0    Length:336776     
##  1st Qu.:2.00    1st Qu.: 55.0   1st Qu.:105.0    Class :character  
##  Median :2.00    Median :149.0   Median :126.0    Mode  :character  
##  Mean   :1.99    Mean   :136.7   Mean   :150.8                      
##  3rd Qu.:2.00    3rd Qu.:189.0   3rd Qu.:127.0                      
##  Max.   :4.00    Max.   :450.0   Max.   :432.0                      
##  NA's   :52606   NA's   :52606   NA's   :335813                     
##       year         month.y           day.y           hour.y     
##  Min.   :2013   Min.   : 1.000   Min.   : 1.00   Min.   : 1.00  
##  1st Qu.:2013   1st Qu.: 4.000   1st Qu.: 8.00   1st Qu.: 9.00  
##  Median :2013   Median : 7.000   Median :16.00   Median :13.00  
##  Mean   :2013   Mean   : 6.531   Mean   :15.67   Mean   :13.17  
##  3rd Qu.:2013   3rd Qu.: 9.000   3rd Qu.:23.00   3rd Qu.:17.00  
##  Max.   :2013   Max.   :12.000   Max.   :31.00   Max.   :23.00  
##  NA's   :1556   NA's   :1556     NA's   :1556    NA's   :1556   
##       temp             dewp           humid           wind_dir    
##  Min.   : 10.94   Min.   :-9.94   Min.   : 12.74   Min.   :  0.0  
##  1st Qu.: 42.08   1st Qu.:26.06   1st Qu.: 43.99   1st Qu.:130.0  
##  Median : 57.20   Median :42.80   Median : 57.73   Median :220.0  
##  Mean   : 57.00   Mean   :41.63   Mean   : 59.56   Mean   :201.5  
##  3rd Qu.: 71.96   3rd Qu.:57.92   3rd Qu.: 75.33   3rd Qu.:290.0  
##  Max.   :100.04   Max.   :78.08   Max.   :100.00   Max.   :360.0  
##  NA's   :1573     NA's   :1573    NA's   :1573     NA's   :9796   
##    wind_speed       wind_gust          precip          pressure     
##  Min.   : 0.000   Min.   :16.11    Min.   :0.0000   Min.   : 983.8  
##  1st Qu.: 6.905   1st Qu.:20.71    1st Qu.:0.0000   1st Qu.:1012.7  
##  Median :10.357   Median :24.17    Median :0.0000   Median :1017.5  
##  Mean   :11.114   Mean   :25.25    Mean   :0.0046   Mean   :1017.8  
##  3rd Qu.:14.960   3rd Qu.:28.77    3rd Qu.:0.0000   3rd Qu.:1022.8  
##  Max.   :42.579   Max.   :66.75    Max.   :1.2100   Max.   :1042.1  
##  NA's   :1634     NA's   :256391   NA's   :1556     NA's   :38788   
##      visib       
##  Min.   : 0.000  
##  1st Qu.:10.000  
##  Median :10.000  
##  Mean   : 9.256  
##  3rd Qu.:10.000  
##  Max.   :10.000  
##  NA's   :1556
# Ver estadísticos descriptivos de la distancia en millas
summary(bdgrande3["distance"])
##     distance   
##  Min.   :  17  
##  1st Qu.: 502  
##  Median : 872  
##  Mean   :1040  
##  3rd Qu.:1389  
##  Max.   :4983

La media de la distancia recorrida en millas es 1040 mi

Aerolíneas han recorrido distancias superiores a la media

# Crear nuevo dataframe compuesto de aerolínea, distancia, origen y destino
distancias <- bdgrande3 %>% select(carrier,distance,origin,dest)
# Incluir unicamente aerolíneas que recorrieron una distancia superior a la media
distancias <- filter(distancias,distance > 1040)
# Ordenar por distancia en forma descendente
distancias <- arrange(distancias,desc(distance))

Encontrar la suma y media de las distancias recorridas por aerolínea eliminando valores vacios

# Distancia total y distancia media por aerolínea
distancias_t <- distancias %>% group_by(carrier,origin)
distancias_t <- distancias_t %>% summarize(suma_distancia = sum(distance,na.rm = TRUE),media_distancia = mean(distance,na.rm = TRUE))
## `summarise()` has grouped output by 'carrier'. You can override using the
## `.groups` argument.
arrange(distancias_t,desc(suma_distancia))
## # A tibble: 26 × 4
## # Groups:   carrier [13]
##    carrier origin suma_distancia media_distancia
##    <chr>   <chr>           <dbl>           <dbl>
##  1 UA      EWR          57947167           1920.
##  2 B6      JFK          34655295           1788.
##  3 DL      JFK          31056240           2037.
##  4 AA      JFK          21347674           1955.
##  5 UA      JFK          11496375           2536.
##  6 AA      LGA          11040924           1257.
##  7 VX      JFK           8972450           2495.
##  8 DL      LGA           7006616           1161.
##  9 UA      LGA           6812736           1488.
## 10 AA      EWR           4872578           1397.
## # ℹ 16 more rows

Interpretaciones

Las aerolíneas que cuentan con la mayor cantidad de distancia recorrida en vuelos son “UA”, “B6”, y “DL”. Mientras que “UA” proviene del aeropuerto “EWR” las otras dos aerolíneas provienen del aeropuerto “DL”. Pese a no ser las aerolíneas con los mayores promedios de distancia. La cantidad de vuelos que realizaron en 2013 puede ser la razón detrás de su alta cantidad de distancia.

Las aerolíneas con mayor promedio de distancia por vuelo son las “HA” y “VX”. “HA” únicamente realiza vuelos a un solo destino. Al analizar la media de distancia recorrida la aerolínea cuenta con una media sin decimales. Lo cuál al observar la base datos muestra que dicha aerolínea solo tiene una ruta con destino a “HNL”

Aerolíneas líder por aeropuerto

distancias_jfk <- distancias_t %>% filter(origin == "JFK")
distancias_jfk <- distancias_jfk %>% arrange(desc(suma_distancia))
distancias_lga <- distancias_t %>% filter(origin == "LGA")
distancias_lga <- distancias_lga %>% arrange(desc(suma_distancia))
distancias_ewr <- distancias_t %>% filter(origin == "EWR")
distancias_ewr <- distancias_ewr %>% arrange(desc(suma_distancia))
distancias_jfk
## # A tibble: 8 × 4
## # Groups:   carrier [8]
##   carrier origin suma_distancia media_distancia
##   <chr>   <chr>           <dbl>           <dbl>
## 1 B6      JFK          34655295           1788.
## 2 DL      JFK          31056240           2037.
## 3 AA      JFK          21347674           1955.
## 4 UA      JFK          11496375           2536.
## 5 VX      JFK           8972450           2495.
## 6 US      JFK           2366147           2153 
## 7 HA      JFK           1704186           4983 
## 8 9E      JFK           1417408           1252.
distancias_lga
## # A tibble: 9 × 4
## # Groups:   carrier [9]
##   carrier origin suma_distancia media_distancia
##   <chr>   <chr>           <dbl>           <dbl>
## 1 AA      LGA          11040924           1257.
## 2 DL      LGA           7006616           1161.
## 3 UA      LGA           6812736           1488.
## 4 B6      LGA           3130643           1073.
## 5 WN      LGA           1765200           1548.
## 6 F9      LGA           1109700           1620 
## 7 MQ      LGA            853368           1147 
## 8 EV      LGA            384263           1120.
## 9 9E      LGA            268750           1097.
distancias_ewr
## # A tibble: 9 × 4
## # Groups:   carrier [9]
##   carrier origin suma_distancia media_distancia
##   <chr>   <chr>           <dbl>           <dbl>
## 1 UA      EWR          57947167           1920.
## 2 AA      EWR           4872578           1397.
## 3 WN      EWR           4198262           1560.
## 4 EV      EWR           4190012           1149.
## 5 VX      EWR           3929877           2510.
## 6 US      EWR           2499876           2133 
## 7 B6      EWR           2475342           1162.
## 8 AS      EWR           1715028           2402 
## 9 DL      EWR            697026           1969

Conclusiones

Al analizar las distancias totales y promedio de las aerolíneas por aeropuerto en Nueva York destaca la aerolínea “AA”, la cual en los tres aeropuertos es una de las primeras tres en cuanto a la cantidad de distancia recorrida, es la única aerolínea que cuenta con una posición de liderazgo en todos los aeropuertos de Nueva York, otras aerolíneas como “DL” y “UA”, destacan en cuanto a distancia recorrida pero unicamente en dos de los tres aeropuertos.

Las aerolíneas que cuentan con promedios de distancias más altos, y por ende realizan vuelos de mayor duración como “HA” tienen la característica de solo operar en uno o dos aeropuertos como máximo.

Parte 3. Modelo Entidad Relación

Origen,destino y aerolínea por vuelo

# Conocer aerolínea, origen y destino por vuelo
aerolinea <- bdgrande3 %>% select(flight,carrier,origin,dest)
# Agregar nombre de aerolínea
aerolinea <- bdgrande3 %>% select(flight,carrier,name,origin,dest)

Destinos más buscados

# Conocer los destinos más buscados
destinos <- bdgrande3 %>% select(carrier,dest)
destinos_c <- destinos %>% count(dest)
destinos_c <- arrange(destinos_c,desc(n))
destinos_c
##     dest     n
## 1    ORD 17283
## 2    ATL 17215
## 3    LAX 16174
## 4    BOS 15508
## 5    MCO 14082
## 6    CLT 14064
## 7    SFO 13331
## 8    FLL 12055
## 9    MIA 11728
## 10   DCA  9705
## 11   DTW  9384
## 12   DFW  8738
## 13   RDU  8163
## 14   TPA  7466
## 15   DEN  7266
## 16   IAH  7198
## 17   MSP  7185
## 18   PBI  6554
## 19   BNA  6333
## 20   LAS  5997
## 21   SJU  5819
## 22   IAD  5700
## 23   BUF  4681
## 24   PHX  4656
## 25   CLE  4573
## 26   STL  4339
## 27   MDW  4113
## 28   CVG  3941
## 29   SEA  3923
## 30   MSY  3799
## 31   RSW  3537
## 32   CMH  3524
## 33   CHS  2884
## 34   PIT  2875
## 35   MKE  2802
## 36   SAN  2737
## 37   JAX  2720
## 38   BTV  2589
## 39   SLC  2467
## 40   RIC  2454
## 41   AUS  2439
## 42   ROC  2416
## 43   PWM  2352
## 44   HOU  2115
## 45   IND  2077
## 46   MCI  2008
## 47   MEM  1789
## 48   BWI  1781
## 49   SYR  1761
## 50   PHL  1632
## 51   GSO  1606
## 52   ORF  1536
## 53   DAY  1525
## 54   PDX  1354
## 55   SRQ  1211
## 56   SDF  1157
## 57   XNA  1036
## 58   MHT  1009
## 59   BQN   896
## 60   CAK   864
## 61   GSP   849
## 62   OMA   849
## 63   SNA   825
## 64   SAV   804
## 65   GRR   765
## 66   HNL   707
## 67   SAT   686
## 68   LGB   668
## 69   TYS   631
## 70   MSN   572
## 71   DSM   569
## 72   STT   522
## 73   BDL   443
## 74   ALB   439
## 75   PVD   376
## 76   BGR   375
## 77   BUR   371
## 78   PSE   365
## 79   OKC   346
## 80   SJC   329
## 81   TUL   315
## 82   OAK   312
## 83   BHM   297
## 84   SMF   284
## 85   AVL   275
## 86   ACK   265
## 87   ABQ   254
## 88   MVY   221
## 89   EGE   213
## 90   CRW   138
## 91   CAE   116
## 92   ILM   110
## 93   TVC   101
## 94   MYR    59
## 95   CHO    52
## 96   BZN    36
## 97   JAC    25
## 98   PSP    19
## 99   EYW    17
## 100  HDN    15
## 101  MTJ    15
## 102  SBN    10
## 103  ANC     8
## 104  LEX     1
## 105  LGA     1
# Conocer los destinos más buscados por aerolínea
destinos_a <- destinos %>% count(dest,carrier)
destinos_a <- arrange(destinos_a,desc(n))
destinos_a
##     dest carrier     n
## 1    ATL      DL 10571
## 2    CLT      US  8632
## 3    DFW      AA  7257
## 4    MIA      AA  7234
## 5    ORD      UA  6984
## 6    IAH      UA  6924
## 7    SFO      UA  6819
## 8    FLL      B6  6563
## 9    MCO      B6  6472
## 10   ORD      AA  6059
## 11   LAX      UA  5823
## 12   RDU      MQ  4794
## 13   DCA      US  4716
## 14   BOS      B6  4383
## 15   BOS      US  4283
## 16   MDW      WN  4113
## 17   IAD      EV  4048
## 18   DTW      DL  3875
## 19   DEN      UA  3796
## 20   MCO      DL  3663
## 21   LAX      AA  3582
## 22   BOS      UA  3342
## 23   MCO      UA  3217
## 24   PBI      B6  3161
## 25   MIA      DL  2929
## 26   FLL      DL  2903
## 27   MSP      DL  2864
## 28   BUF      B6  2803
## 29   TPA      B6  2800
## 30   SJU      B6  2731
## 31   CMH      MQ  2691
## 32   LAX      VX  2580
## 33   DTW      EV  2545
## 34   CLT      EV  2508
## 35   LAX      DL  2501
## 36   FLL      UA  2407
## 37   BNA      MQ  2404
## 38   ATL      FL  2337
## 39   ATL      MQ  2322
## 40   ORD      MQ  2276
## 41   PHX      US  2271
## 42   SFO      VX  2197
## 43   DCA      MQ  2194
## 44   BNA      EV  2170
## 45   TPA      DL  2129
## 46   RIC      EV  2114
## 47   SLC      DL  2102
## 48   CVG      EV  2013
## 49   LAS      UA  2010
## 50   RSW      B6  1972
## 51   TPA      UA  1968
## 52   DTW      MQ  1948
## 53   CHS      EV  1922
## 54   CLE      UA  1890
## 55   SFO      DL  1858
## 56   PBI      UA  1839
## 57   STL      EV  1826
## 58   MSP      EV  1773
## 59   ATL      EV  1764
## 60   CLE      MQ  1722
## 61   DCA      EV  1717
## 62   LAX      B6  1688
## 63   LAS      DL  1673
## 64   RDU      EV  1659
## 65   CLT      MQ  1620
## 66   GSO      EV  1605
## 67   MCI      EV  1565
## 68   MIA      UA  1565
## 69   CVG      9E  1559
## 70   STL      WN  1469
## 71   PBI      DL  1466
## 72   BOS      AA  1455
## 73   SFO      AA  1422
## 74   ROC      B6  1406
## 75   DEN      WN  1404
## 76   HOU      WN  1401
## 77   BTV      B6  1364
## 78   MEM      EV  1354
## 79   LAS      B6  1310
## 80   MKE      WN  1310
## 81   IND      EV  1306
## 82   PIT      EV  1304
## 83   PWM      B6  1304
## 84   SJU      DL  1301
## 85   JAX      EV  1293
## 86   MSP      MQ  1293
## 87   BNA      WN  1284
## 88   SYR      B6  1266
## 89   MSP      9E  1249
## 90   BTV      EV  1223
## 91   SEA      DL  1213
## 92   DAY      EV  1134
## 93   SAN      UA  1134
## 94   MSY      DL  1129
## 95   PHX      UA  1120
## 96   MKE      EV  1118
## 97   SEA      UA  1117
## 98   SJU      AA  1099
## 99   DFW      UA  1094
## 100  MSY      B6  1076
## 101  DCA      9E  1074
## 102  RSW      UA  1072
## 103  ORD      9E  1056
## 104  DEN      DL  1043
## 105  BUF      EV  1042
## 106  SFO      B6  1035
## 107  JAX      B6  1026
## 108  DTW      9E  1013
## 109  MHT      EV   998
## 110  BOS      DL   972
## 111  PHL      9E   940
## 112  BOS      9E   914
## 113  RDU      9E   912
## 114  ORD      B6   905
## 115  STL      AA   902
## 116  SDF      EV   891
## 117  CAK      FL   864
## 118  PIT      9E   864
## 119  BWI      9E   856
## 120  OMA      EV   846
## 121  SRQ      B6   839
## 122  BUF      9E   833
## 123  SNA      UA   825
## 124  CMH      EV   820
## 125  PWM      EV   813
## 126  SAV      EV   804
## 127  RDU      B6   797
## 128  ORF      EV   769
## 129  AUS      B6   747
## 130  GSP      EV   747
## 131  XNA      MQ   744
## 132  MCO      AA   730
## 133  CLT      B6   729
## 134  ROC      EV   729
## 135  GRR      EV   721
## 136  HOU      B6   714
## 137  SEA      AS   714
## 138  SJU      UA   688
## 139  DEN      F9   685
## 140  IAD      B6   675
## 141  AUS      UA   670
## 142  LGB      B6   668
## 143  IAD      9E   664
## 144  SAN      B6   663
## 145  LAS      AA   639
## 146  PHL      US   633
## 147  CHS      B6   613
## 148  BQN      B6   599
## 149  MSY      EV   590
## 150  CLE      EV   588
## 151  SAN      DL   575
## 152  MSN      EV   571
## 153  PDX      UA   571
## 154  SEA      B6   514
## 155  DSM      EV   478
## 156  BNA      9E   474
## 157  PHX      DL   469
## 158  PDX      DL   458
## 159  ALB      EV   439
## 160  MSY      9E   437
## 161  BDL      EV   435
## 162  MEM      DL   432
## 163  PHX      WN   431
## 164  RSW      DL   426
## 165  ORF      9E   402
## 166  IND      9E   401
## 167  JAX      9E   400
## 168  DAY      9E   391
## 169  DFW      9E   379
## 170  PVD      EV   376
## 171  BGR      EV   374
## 172  BUR      B6   371
## 173  AUS      AA   365
## 174  BWI      MQ   365
## 175  CVG      MQ   365
## 176  HNL      UA   365
## 177  IND      MQ   365
## 178  LAS      VX   365
## 179  ORF      MQ   365
## 180  PHX      B6   365
## 181  PIT      MQ   365
## 182  PSE      B6   365
## 183  SAN      AA   365
## 184  SEA      AA   365
## 185  SLC      B6   365
## 186  MCI      9E   361
## 187  AUS      DL   357
## 188  BWI      EV   352
## 189  CLE      9E   349
## 190  CHS      9E   348
## 191  OKC      EV   346
## 192  HNL      HA   342
## 193  RIC      9E   340
## 194  DEN      B6   338
## 195  SAT      UA   330
## 196  SJC      B6   328
## 197  PDX      B6   325
## 198  SYR      EV   325
## 199  TYS      EV   323
## 200  MKE      9E   315
## 201  TUL      EV   315
## 202  OAK      B6   312
## 203  IAD      YV   311
## 204  TPA      AA   311
## 205  TYS      9E   308
## 206  SAT      DL   303
## 207  STT      AA   303
## 208  AUS      WN   298
## 209  MSY      WN   298
## 210  BHM      EV   297
## 211  BQN      UA   297
## 212  XNA      EV   292
## 213  CLT      9E   291
## 214  SMF      B6   284
## 215  CLT      YV   282
## 216  ROC      9E   281
## 217  IAH      AA   274
## 218  MSY      UA   269
## 219  ACK      B6   265
## 220  AVL      EV   265
## 221  SRQ      DL   265
## 222  SDF      9E   263
## 223  ABQ      B6   254
## 224  TPA      MQ   254
## 225  PIT      DL   250
## 226  PWM      DL   235
## 227  BWI      WN   208
## 228  STT      UA   189
## 229  FLL      AA   182
## 230  SYR      9E   170
## 231  BOS      EV   159
## 232  MVY      B6   150
## 233  STL      MQ   139
## 234  CRW      MQ   138
## 235  CAE      EV   113
## 236  EGE      UA   110
## 237  ILM      EV   110
## 238  ATL      UA   103
## 239  EGE      AA   103
## 240  GSP      9E   102
## 241  DSM      9E    91
## 242  PIT      B6    90
## 243  MCI      DL    82
## 244  PBI      AA    82
## 245  SRQ      9E    78
## 246  MVY      9E    71
## 247  TVC      EV    68
## 248  RSW      9E    67
## 249  ATL      9E    59
## 250  ATL      WN    59
## 251  MKE      FL    59
## 252  MYR      EV    59
## 253  SAT      9E    53
## 254  CHO      EV    52
## 255  PHL      EV    49
## 256  GRR      9E    44
## 257  BZN      UA    36
## 258  TVC      MQ    33
## 259  STT      DL    30
## 260  SRQ      EV    29
## 261  CLE      OO    24
## 262  JAC      UA    23
## 263  PSP      VX    19
## 264  EYW      DL    17
## 265  HDN      UA    15
## 266  MTJ      UA    15
## 267  CMH      9E    13
## 268  MHT      9E    11
## 269  AVL      9E    10
## 270  SBN      EV    10
## 271  ANC      UA     8
## 272  BDL      UA     8
## 273  DFW      EV     8
## 274  PHL      YV     8
## 275  PBI      EV     6
## 276  CVG      DL     4
## 277  MSP      OO     4
## 278  BUF      DL     3
## 279  CAE      9E     3
## 280  IND      UA     3
## 281  MEM      9E     3
## 282  SDF      UA     3
## 283  TPA      9E     3
## 284  AUS      9E     2
## 285  BTV      9E     2
## 286  CLT      UA     2
## 287  DCA      DL     2
## 288  DCA      UA     2
## 289  DTW      OO     2
## 290  IND      DL     2
## 291  JAC      DL     2
## 292  MSP      UA     2
## 293  OMA      UA     2
## 294  ORD      EV     2
## 295  PHL      DL     2
## 296  PIT      UA     2
## 297  STL      UA     2
## 298  BGR      9E     1
## 299  BNA      DL     1
## 300  CHS      UA     1
## 301  DTW      UA     1
## 302  GSO      9E     1
## 303  IAD      OO     1
## 304  IAD      UA     1
## 305  JAX      DL     1
## 306  LEX      9E     1
## 307  LGA      US     1
## 308  MSN      9E     1
## 309  OMA      DL     1
## 310  ORD      OO     1
## 311  RDU      UA     1
## 312  SJC      VX     1
## 313  STL      DL     1
## 314  TPA      EV     1

Destinos más buscados con nombre de aerolínea

destinos_aerolinea <- destinos_a %>% left_join(airlines,by="carrier")
destinos_aerolinea
##     dest carrier     n                        name
## 1    ATL      DL 10571        Delta Air Lines Inc.
## 2    CLT      US  8632             US Airways Inc.
## 3    DFW      AA  7257      American Airlines Inc.
## 4    MIA      AA  7234      American Airlines Inc.
## 5    ORD      UA  6984       United Air Lines Inc.
## 6    IAH      UA  6924       United Air Lines Inc.
## 7    SFO      UA  6819       United Air Lines Inc.
## 8    FLL      B6  6563             JetBlue Airways
## 9    MCO      B6  6472             JetBlue Airways
## 10   ORD      AA  6059      American Airlines Inc.
## 11   LAX      UA  5823       United Air Lines Inc.
## 12   RDU      MQ  4794                   Envoy Air
## 13   DCA      US  4716             US Airways Inc.
## 14   BOS      B6  4383             JetBlue Airways
## 15   BOS      US  4283             US Airways Inc.
## 16   MDW      WN  4113      Southwest Airlines Co.
## 17   IAD      EV  4048    ExpressJet Airlines Inc.
## 18   DTW      DL  3875        Delta Air Lines Inc.
## 19   DEN      UA  3796       United Air Lines Inc.
## 20   MCO      DL  3663        Delta Air Lines Inc.
## 21   LAX      AA  3582      American Airlines Inc.
## 22   BOS      UA  3342       United Air Lines Inc.
## 23   MCO      UA  3217       United Air Lines Inc.
## 24   PBI      B6  3161             JetBlue Airways
## 25   MIA      DL  2929        Delta Air Lines Inc.
## 26   FLL      DL  2903        Delta Air Lines Inc.
## 27   MSP      DL  2864        Delta Air Lines Inc.
## 28   BUF      B6  2803             JetBlue Airways
## 29   TPA      B6  2800             JetBlue Airways
## 30   SJU      B6  2731             JetBlue Airways
## 31   CMH      MQ  2691                   Envoy Air
## 32   LAX      VX  2580              Virgin America
## 33   DTW      EV  2545    ExpressJet Airlines Inc.
## 34   CLT      EV  2508    ExpressJet Airlines Inc.
## 35   LAX      DL  2501        Delta Air Lines Inc.
## 36   FLL      UA  2407       United Air Lines Inc.
## 37   BNA      MQ  2404                   Envoy Air
## 38   ATL      FL  2337 AirTran Airways Corporation
## 39   ATL      MQ  2322                   Envoy Air
## 40   ORD      MQ  2276                   Envoy Air
## 41   PHX      US  2271             US Airways Inc.
## 42   SFO      VX  2197              Virgin America
## 43   DCA      MQ  2194                   Envoy Air
## 44   BNA      EV  2170    ExpressJet Airlines Inc.
## 45   TPA      DL  2129        Delta Air Lines Inc.
## 46   RIC      EV  2114    ExpressJet Airlines Inc.
## 47   SLC      DL  2102        Delta Air Lines Inc.
## 48   CVG      EV  2013    ExpressJet Airlines Inc.
## 49   LAS      UA  2010       United Air Lines Inc.
## 50   RSW      B6  1972             JetBlue Airways
## 51   TPA      UA  1968       United Air Lines Inc.
## 52   DTW      MQ  1948                   Envoy Air
## 53   CHS      EV  1922    ExpressJet Airlines Inc.
## 54   CLE      UA  1890       United Air Lines Inc.
## 55   SFO      DL  1858        Delta Air Lines Inc.
## 56   PBI      UA  1839       United Air Lines Inc.
## 57   STL      EV  1826    ExpressJet Airlines Inc.
## 58   MSP      EV  1773    ExpressJet Airlines Inc.
## 59   ATL      EV  1764    ExpressJet Airlines Inc.
## 60   CLE      MQ  1722                   Envoy Air
## 61   DCA      EV  1717    ExpressJet Airlines Inc.
## 62   LAX      B6  1688             JetBlue Airways
## 63   LAS      DL  1673        Delta Air Lines Inc.
## 64   RDU      EV  1659    ExpressJet Airlines Inc.
## 65   CLT      MQ  1620                   Envoy Air
## 66   GSO      EV  1605    ExpressJet Airlines Inc.
## 67   MCI      EV  1565    ExpressJet Airlines Inc.
## 68   MIA      UA  1565       United Air Lines Inc.
## 69   CVG      9E  1559           Endeavor Air Inc.
## 70   STL      WN  1469      Southwest Airlines Co.
## 71   PBI      DL  1466        Delta Air Lines Inc.
## 72   BOS      AA  1455      American Airlines Inc.
## 73   SFO      AA  1422      American Airlines Inc.
## 74   ROC      B6  1406             JetBlue Airways
## 75   DEN      WN  1404      Southwest Airlines Co.
## 76   HOU      WN  1401      Southwest Airlines Co.
## 77   BTV      B6  1364             JetBlue Airways
## 78   MEM      EV  1354    ExpressJet Airlines Inc.
## 79   LAS      B6  1310             JetBlue Airways
## 80   MKE      WN  1310      Southwest Airlines Co.
## 81   IND      EV  1306    ExpressJet Airlines Inc.
## 82   PIT      EV  1304    ExpressJet Airlines Inc.
## 83   PWM      B6  1304             JetBlue Airways
## 84   SJU      DL  1301        Delta Air Lines Inc.
## 85   JAX      EV  1293    ExpressJet Airlines Inc.
## 86   MSP      MQ  1293                   Envoy Air
## 87   BNA      WN  1284      Southwest Airlines Co.
## 88   SYR      B6  1266             JetBlue Airways
## 89   MSP      9E  1249           Endeavor Air Inc.
## 90   BTV      EV  1223    ExpressJet Airlines Inc.
## 91   SEA      DL  1213        Delta Air Lines Inc.
## 92   DAY      EV  1134    ExpressJet Airlines Inc.
## 93   SAN      UA  1134       United Air Lines Inc.
## 94   MSY      DL  1129        Delta Air Lines Inc.
## 95   PHX      UA  1120       United Air Lines Inc.
## 96   MKE      EV  1118    ExpressJet Airlines Inc.
## 97   SEA      UA  1117       United Air Lines Inc.
## 98   SJU      AA  1099      American Airlines Inc.
## 99   DFW      UA  1094       United Air Lines Inc.
## 100  MSY      B6  1076             JetBlue Airways
## 101  DCA      9E  1074           Endeavor Air Inc.
## 102  RSW      UA  1072       United Air Lines Inc.
## 103  ORD      9E  1056           Endeavor Air Inc.
## 104  DEN      DL  1043        Delta Air Lines Inc.
## 105  BUF      EV  1042    ExpressJet Airlines Inc.
## 106  SFO      B6  1035             JetBlue Airways
## 107  JAX      B6  1026             JetBlue Airways
## 108  DTW      9E  1013           Endeavor Air Inc.
## 109  MHT      EV   998    ExpressJet Airlines Inc.
## 110  BOS      DL   972        Delta Air Lines Inc.
## 111  PHL      9E   940           Endeavor Air Inc.
## 112  BOS      9E   914           Endeavor Air Inc.
## 113  RDU      9E   912           Endeavor Air Inc.
## 114  ORD      B6   905             JetBlue Airways
## 115  STL      AA   902      American Airlines Inc.
## 116  SDF      EV   891    ExpressJet Airlines Inc.
## 117  CAK      FL   864 AirTran Airways Corporation
## 118  PIT      9E   864           Endeavor Air Inc.
## 119  BWI      9E   856           Endeavor Air Inc.
## 120  OMA      EV   846    ExpressJet Airlines Inc.
## 121  SRQ      B6   839             JetBlue Airways
## 122  BUF      9E   833           Endeavor Air Inc.
## 123  SNA      UA   825       United Air Lines Inc.
## 124  CMH      EV   820    ExpressJet Airlines Inc.
## 125  PWM      EV   813    ExpressJet Airlines Inc.
## 126  SAV      EV   804    ExpressJet Airlines Inc.
## 127  RDU      B6   797             JetBlue Airways
## 128  ORF      EV   769    ExpressJet Airlines Inc.
## 129  AUS      B6   747             JetBlue Airways
## 130  GSP      EV   747    ExpressJet Airlines Inc.
## 131  XNA      MQ   744                   Envoy Air
## 132  MCO      AA   730      American Airlines Inc.
## 133  CLT      B6   729             JetBlue Airways
## 134  ROC      EV   729    ExpressJet Airlines Inc.
## 135  GRR      EV   721    ExpressJet Airlines Inc.
## 136  HOU      B6   714             JetBlue Airways
## 137  SEA      AS   714        Alaska Airlines Inc.
## 138  SJU      UA   688       United Air Lines Inc.
## 139  DEN      F9   685      Frontier Airlines Inc.
## 140  IAD      B6   675             JetBlue Airways
## 141  AUS      UA   670       United Air Lines Inc.
## 142  LGB      B6   668             JetBlue Airways
## 143  IAD      9E   664           Endeavor Air Inc.
## 144  SAN      B6   663             JetBlue Airways
## 145  LAS      AA   639      American Airlines Inc.
## 146  PHL      US   633             US Airways Inc.
## 147  CHS      B6   613             JetBlue Airways
## 148  BQN      B6   599             JetBlue Airways
## 149  MSY      EV   590    ExpressJet Airlines Inc.
## 150  CLE      EV   588    ExpressJet Airlines Inc.
## 151  SAN      DL   575        Delta Air Lines Inc.
## 152  MSN      EV   571    ExpressJet Airlines Inc.
## 153  PDX      UA   571       United Air Lines Inc.
## 154  SEA      B6   514             JetBlue Airways
## 155  DSM      EV   478    ExpressJet Airlines Inc.
## 156  BNA      9E   474           Endeavor Air Inc.
## 157  PHX      DL   469        Delta Air Lines Inc.
## 158  PDX      DL   458        Delta Air Lines Inc.
## 159  ALB      EV   439    ExpressJet Airlines Inc.
## 160  MSY      9E   437           Endeavor Air Inc.
## 161  BDL      EV   435    ExpressJet Airlines Inc.
## 162  MEM      DL   432        Delta Air Lines Inc.
## 163  PHX      WN   431      Southwest Airlines Co.
## 164  RSW      DL   426        Delta Air Lines Inc.
## 165  ORF      9E   402           Endeavor Air Inc.
## 166  IND      9E   401           Endeavor Air Inc.
## 167  JAX      9E   400           Endeavor Air Inc.
## 168  DAY      9E   391           Endeavor Air Inc.
## 169  DFW      9E   379           Endeavor Air Inc.
## 170  PVD      EV   376    ExpressJet Airlines Inc.
## 171  BGR      EV   374    ExpressJet Airlines Inc.
## 172  BUR      B6   371             JetBlue Airways
## 173  AUS      AA   365      American Airlines Inc.
## 174  BWI      MQ   365                   Envoy Air
## 175  CVG      MQ   365                   Envoy Air
## 176  HNL      UA   365       United Air Lines Inc.
## 177  IND      MQ   365                   Envoy Air
## 178  LAS      VX   365              Virgin America
## 179  ORF      MQ   365                   Envoy Air
## 180  PHX      B6   365             JetBlue Airways
## 181  PIT      MQ   365                   Envoy Air
## 182  PSE      B6   365             JetBlue Airways
## 183  SAN      AA   365      American Airlines Inc.
## 184  SEA      AA   365      American Airlines Inc.
## 185  SLC      B6   365             JetBlue Airways
## 186  MCI      9E   361           Endeavor Air Inc.
## 187  AUS      DL   357        Delta Air Lines Inc.
## 188  BWI      EV   352    ExpressJet Airlines Inc.
## 189  CLE      9E   349           Endeavor Air Inc.
## 190  CHS      9E   348           Endeavor Air Inc.
## 191  OKC      EV   346    ExpressJet Airlines Inc.
## 192  HNL      HA   342      Hawaiian Airlines Inc.
## 193  RIC      9E   340           Endeavor Air Inc.
## 194  DEN      B6   338             JetBlue Airways
## 195  SAT      UA   330       United Air Lines Inc.
## 196  SJC      B6   328             JetBlue Airways
## 197  PDX      B6   325             JetBlue Airways
## 198  SYR      EV   325    ExpressJet Airlines Inc.
## 199  TYS      EV   323    ExpressJet Airlines Inc.
## 200  MKE      9E   315           Endeavor Air Inc.
## 201  TUL      EV   315    ExpressJet Airlines Inc.
## 202  OAK      B6   312             JetBlue Airways
## 203  IAD      YV   311          Mesa Airlines Inc.
## 204  TPA      AA   311      American Airlines Inc.
## 205  TYS      9E   308           Endeavor Air Inc.
## 206  SAT      DL   303        Delta Air Lines Inc.
## 207  STT      AA   303      American Airlines Inc.
## 208  AUS      WN   298      Southwest Airlines Co.
## 209  MSY      WN   298      Southwest Airlines Co.
## 210  BHM      EV   297    ExpressJet Airlines Inc.
## 211  BQN      UA   297       United Air Lines Inc.
## 212  XNA      EV   292    ExpressJet Airlines Inc.
## 213  CLT      9E   291           Endeavor Air Inc.
## 214  SMF      B6   284             JetBlue Airways
## 215  CLT      YV   282          Mesa Airlines Inc.
## 216  ROC      9E   281           Endeavor Air Inc.
## 217  IAH      AA   274      American Airlines Inc.
## 218  MSY      UA   269       United Air Lines Inc.
## 219  ACK      B6   265             JetBlue Airways
## 220  AVL      EV   265    ExpressJet Airlines Inc.
## 221  SRQ      DL   265        Delta Air Lines Inc.
## 222  SDF      9E   263           Endeavor Air Inc.
## 223  ABQ      B6   254             JetBlue Airways
## 224  TPA      MQ   254                   Envoy Air
## 225  PIT      DL   250        Delta Air Lines Inc.
## 226  PWM      DL   235        Delta Air Lines Inc.
## 227  BWI      WN   208      Southwest Airlines Co.
## 228  STT      UA   189       United Air Lines Inc.
## 229  FLL      AA   182      American Airlines Inc.
## 230  SYR      9E   170           Endeavor Air Inc.
## 231  BOS      EV   159    ExpressJet Airlines Inc.
## 232  MVY      B6   150             JetBlue Airways
## 233  STL      MQ   139                   Envoy Air
## 234  CRW      MQ   138                   Envoy Air
## 235  CAE      EV   113    ExpressJet Airlines Inc.
## 236  EGE      UA   110       United Air Lines Inc.
## 237  ILM      EV   110    ExpressJet Airlines Inc.
## 238  ATL      UA   103       United Air Lines Inc.
## 239  EGE      AA   103      American Airlines Inc.
## 240  GSP      9E   102           Endeavor Air Inc.
## 241  DSM      9E    91           Endeavor Air Inc.
## 242  PIT      B6    90             JetBlue Airways
## 243  MCI      DL    82        Delta Air Lines Inc.
## 244  PBI      AA    82      American Airlines Inc.
## 245  SRQ      9E    78           Endeavor Air Inc.
## 246  MVY      9E    71           Endeavor Air Inc.
## 247  TVC      EV    68    ExpressJet Airlines Inc.
## 248  RSW      9E    67           Endeavor Air Inc.
## 249  ATL      9E    59           Endeavor Air Inc.
## 250  ATL      WN    59      Southwest Airlines Co.
## 251  MKE      FL    59 AirTran Airways Corporation
## 252  MYR      EV    59    ExpressJet Airlines Inc.
## 253  SAT      9E    53           Endeavor Air Inc.
## 254  CHO      EV    52    ExpressJet Airlines Inc.
## 255  PHL      EV    49    ExpressJet Airlines Inc.
## 256  GRR      9E    44           Endeavor Air Inc.
## 257  BZN      UA    36       United Air Lines Inc.
## 258  TVC      MQ    33                   Envoy Air
## 259  STT      DL    30        Delta Air Lines Inc.
## 260  SRQ      EV    29    ExpressJet Airlines Inc.
## 261  CLE      OO    24       SkyWest Airlines Inc.
## 262  JAC      UA    23       United Air Lines Inc.
## 263  PSP      VX    19              Virgin America
## 264  EYW      DL    17        Delta Air Lines Inc.
## 265  HDN      UA    15       United Air Lines Inc.
## 266  MTJ      UA    15       United Air Lines Inc.
## 267  CMH      9E    13           Endeavor Air Inc.
## 268  MHT      9E    11           Endeavor Air Inc.
## 269  AVL      9E    10           Endeavor Air Inc.
## 270  SBN      EV    10    ExpressJet Airlines Inc.
## 271  ANC      UA     8       United Air Lines Inc.
## 272  BDL      UA     8       United Air Lines Inc.
## 273  DFW      EV     8    ExpressJet Airlines Inc.
## 274  PHL      YV     8          Mesa Airlines Inc.
## 275  PBI      EV     6    ExpressJet Airlines Inc.
## 276  CVG      DL     4        Delta Air Lines Inc.
## 277  MSP      OO     4       SkyWest Airlines Inc.
## 278  BUF      DL     3        Delta Air Lines Inc.
## 279  CAE      9E     3           Endeavor Air Inc.
## 280  IND      UA     3       United Air Lines Inc.
## 281  MEM      9E     3           Endeavor Air Inc.
## 282  SDF      UA     3       United Air Lines Inc.
## 283  TPA      9E     3           Endeavor Air Inc.
## 284  AUS      9E     2           Endeavor Air Inc.
## 285  BTV      9E     2           Endeavor Air Inc.
## 286  CLT      UA     2       United Air Lines Inc.
## 287  DCA      DL     2        Delta Air Lines Inc.
## 288  DCA      UA     2       United Air Lines Inc.
## 289  DTW      OO     2       SkyWest Airlines Inc.
## 290  IND      DL     2        Delta Air Lines Inc.
## 291  JAC      DL     2        Delta Air Lines Inc.
## 292  MSP      UA     2       United Air Lines Inc.
## 293  OMA      UA     2       United Air Lines Inc.
## 294  ORD      EV     2    ExpressJet Airlines Inc.
## 295  PHL      DL     2        Delta Air Lines Inc.
## 296  PIT      UA     2       United Air Lines Inc.
## 297  STL      UA     2       United Air Lines Inc.
## 298  BGR      9E     1           Endeavor Air Inc.
## 299  BNA      DL     1        Delta Air Lines Inc.
## 300  CHS      UA     1       United Air Lines Inc.
## 301  DTW      UA     1       United Air Lines Inc.
## 302  GSO      9E     1           Endeavor Air Inc.
## 303  IAD      OO     1       SkyWest Airlines Inc.
## 304  IAD      UA     1       United Air Lines Inc.
## 305  JAX      DL     1        Delta Air Lines Inc.
## 306  LEX      9E     1           Endeavor Air Inc.
## 307  LGA      US     1             US Airways Inc.
## 308  MSN      9E     1           Endeavor Air Inc.
## 309  OMA      DL     1        Delta Air Lines Inc.
## 310  ORD      OO     1       SkyWest Airlines Inc.
## 311  RDU      UA     1       United Air Lines Inc.
## 312  SJC      VX     1              Virgin America
## 313  STL      DL     1        Delta Air Lines Inc.
## 314  TPA      EV     1    ExpressJet Airlines Inc.

Vuelos divididos en horarios de salida

# Dividir en horarios de salida
horarios <- bdgrande3 %>%
  select(carrier, name, dest, sched_dep_time) %>%
  mutate(clas_horario = ifelse(sched_dep_time %in% 0:559, "Madrugada",
                        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",NA)))))

Cantidad de vuelos por tiempo del día

# Conocer la cantidad de vuelo por tiempo del día
horarios_c <- horarios %>% count(carrier,dest,clas_horario)
arrange(horarios_c,desc(n))
##     carrier dest clas_horario    n
## 1        DL  ATL        Tarde 4967
## 2        DL  ATL       Mañana 4520
## 3        US  CLT       Mañana 4253
## 4        US  CLT        Tarde 4028
## 5        AA  DFW        Tarde 3850
## 6        UA  ORD        Tarde 3394
## 7        AA  MIA       Mañana 3378
## 8        UA  SFO        Tarde 3280
## 9        AA  MIA        Tarde 3153
## 10       UA  IAH        Tarde 3091
## 11       B6  FLL       Mañana 2970
## 12       UA  SFO       Mañana 2921
## 13       AA  DFW       Mañana 2845
## 14       UA  ORD       Mañana 2842
## 15       AA  ORD        Tarde 2710
## 16       AA  ORD       Mañana 2685
## 17       B6  MCO        Tarde 2638
## 18       UA  LAX       Mañana 2624
## 19       B6  MCO       Mañana 2514
## 20       UA  IAH       Mañana 2486
## 21       UA  LAX        Tarde 2454
## 22       MQ  RDU        Tarde 2450
## 23       DL  DTW        Tarde 2222
## 24       B6  FLL        Tarde 2159
## 25       US  DCA        Tarde 2136
## 26       UA  DEN       Mañana 2006
## 27       EV  IAD       Mañana 1971
## 28       US  BOS        Tarde 1970
## 29       AA  LAX        Tarde 1821
## 30       WN  MDW        Tarde 1782
## 31       B6  BOS        Tarde 1776
## 32       B6  PBI        Tarde 1776
## 33       UA  DEN        Tarde 1708
## 34       US  DCA       Mañana 1686
## 35       WN  MDW       Mañana 1658
## 36       DL  MSP       Mañana 1624
## 37       B6  BOS       Mañana 1578
## 38       DL  MCO        Tarde 1569
## 39       DL  DTW       Mañana 1557
## 40       DL  MCO       Mañana 1507
## 41       US  BOS       Mañana 1499
## 42       UA  MCO        Tarde 1450
## 43       B6  FLL        Noche 1433
## 44       DL  MIA        Tarde 1415
## 45       FL  ATL        Tarde 1402
## 46       MQ  CMH        Tarde 1398
## 47       UA  MCO       Mañana 1369
## 48       MQ  RDU       Mañana 1361
## 49       DL  FLL       Mañana 1352
## 50       DL  LAX        Tarde 1347
## 51       UA  CLE        Tarde 1338
## 52       B6  MCO        Noche 1320
## 53       MQ  BNA        Tarde 1278
## 54       UA  BOS        Tarde 1277
## 55       EV  IAD        Tarde 1275
## 56       B6  SJU       Mañana 1262
## 57       VX  LAX        Tarde 1259
## 58       DL  MIA       Mañana 1251
## 59       EV  DTW       Mañana 1248
## 60       DL  MSP        Tarde 1240
## 61       VX  SFO       Mañana 1238
## 62       B6  BUF        Tarde 1204
## 63       MQ  CLE        Tarde 1171
## 64       EV  DTW        Tarde 1165
## 65       US  PHX       Mañana 1151
## 66       B6  PBI       Mañana 1142
## 67       EV  CVG        Tarde 1139
## 68       B6  TPA        Tarde 1136
## 69       US  PHX        Tarde 1119
## 70       B6  TPA       Mañana 1100
## 71       EV  CLT        Tarde 1091
## 72       UA  BOS       Mañana 1086
## 73       DL  ATL        Noche 1084
## 74       DL  TPA       Mañana 1066
## 75       B6  RSW       Mañana 1053
## 76       EV  BNA        Tarde 1045
## 77       AA  LAX       Mañana 1043
## 78       DL  SLC        Tarde 1041
## 79       EV  RDU       Mañana 1040
## 80       B6  BOS        Noche 1027
## 81       MQ  ATL        Tarde 1024
## 82       MQ  ORD       Mañana  995
## 83       UA  FLL        Tarde  993
## 84       MQ  RDU        Noche  983
## 85       DL  FLL        Tarde  981
## 86       VX  LAX       Mañana  981
## 87       UA  BOS        Noche  975
## 88       MQ  ATL       Mañana  971
## 89       MQ  ORD        Tarde  971
## 90       VX  SFO        Tarde  959
## 91       MQ  DCA       Mañana  958
## 92       EV  ATL        Tarde  951
## 93       UA  TPA       Mañana  945
## 94       UA  LAS       Mañana  930
## 95       9E  CVG        Tarde  928
## 96       UA  FLL       Mañana  924
## 97       MQ  DTW       Mañana  914
## 98       WN  DEN        Tarde  905
## 99       UA  LAS        Tarde  894
## 100      US  DCA        Noche  894
## 101      B6  BUF       Mañana  883
## 102      WN  HOU        Tarde  878
## 103      MQ  DCA        Tarde  861
## 104      WN  STL        Tarde  854
## 105      EV  MSP        Tarde  851
## 106      EV  RIC        Tarde  843
## 107      EV  CHS       Mañana  838
## 108      EV  GSO        Tarde  834
## 109      EV  MSP       Mañana  822
## 110      MQ  BNA       Mañana  820
## 111      DL  SFO        Tarde  818
## 112      B6  RSW        Tarde  817
## 113      US  BOS        Noche  814
## 114      EV  STL        Tarde  813
## 115      FL  ATL       Mañana  802
## 116      EV  BNA       Mañana  793
## 117      B6  LAX       Mañana  788
## 118      EV  IAD        Noche  779
## 119      UA  PBI       Mañana  766
## 120      B6  SJU        Noche  757
## 121      EV  CHS        Tarde  757
## 122      EV  IND       Mañana  755
## 123      9E  MSP        Tarde  750
## 124      EV  MEM        Tarde  742
## 125      DL  SLC       Mañana  735
## 126      UA  ORD        Noche  732
## 127      UA  LAX        Noche  731
## 128      AA  BOS        Tarde  730
## 129      EV  RIC        Noche  730
## 130      AA  SFO       Mañana  726
## 131      EV  CLT       Mañana  726
## 132      EV  STL       Mañana  726
## 133      EV  PIT       Mañana  723
## 134      AA  LAX        Noche  718
## 135      B6  BUF        Noche  716
## 136      MQ  CLT        Tarde  716
## 137      DL  LAS       Mañana  714
## 138      MQ  DTW        Tarde  710
## 139      EV  DCA        Tarde  707
## 140      EV  MCI        Tarde  705
## 141      AA  SFO        Tarde  696
## 142      EV  CLT        Noche  691
## 143      UA  PHX        Tarde  691
## 144      B6  LAS       Mañana  690
## 145      UA  PBI        Tarde  687
## 146      DL  LAX       Mañana  686
## 147      DL  PBI       Mañana  683
## 148      DL  SFO       Mañana  680
## 149      MQ  CMH        Noche  674
## 150      UA  IAH        Noche  674
## 151      UA  IAH    Madrugada  673
## 152      WN  MDW        Noche  673
## 153      MQ  MSP        Tarde  672
## 154      EV  DAY        Tarde  667
## 155      B6  LGB        Tarde  665
## 156      AA  ORD        Noche  664
## 157      UA  MIA        Tarde  659
## 158      WN  BNA       Mañana  658
## 159      DL  PBI        Tarde  646
## 160      EV  BUF       Mañana  635
## 161      B6  SJU        Tarde  628
## 162      WN  BNA        Tarde  626
## 163      EV  MCI       Mañana  625
## 164      MQ  CMH       Mañana  619
## 165      UA  TPA        Tarde  617
## 166      WN  STL       Mañana  615
## 167      B6  ROC        Tarde  614
## 168      DL  TPA        Tarde  608
## 169      DL  SJU       Mañana  607
## 170      AA  STL        Tarde  606
## 171      AA  SJU       Mañana  603
## 172      EV  JAX       Mañana  603
## 173      DL  SEA        Tarde  595
## 174      MQ  CLT       Mañana  595
## 175      EV  MEM       Mañana  593
## 176      UA  SAN        Tarde  593
## 177      DL  MCO        Noche  587
## 178      EV  PIT        Tarde  580
## 179      EV  DCA        Noche  573
## 180      UA  DFW        Tarde  573
## 181      WN  MKE       Mañana  571
## 182      DL  FLL        Noche  570
## 183      EV  RDU        Tarde  565
## 184      B6  TPA        Noche  564
## 185      AA  DFW        Noche  562
## 186      UA  SFO        Noche  562
## 187      DL  LAS        Tarde  559
## 188      MQ  CLE       Mañana  551
## 189      9E  BOS        Tarde  549
## 190      EV  BTV       Mañana  547
## 191      MQ  MSP       Mañana  547
## 192      9E  BUF        Tarde  546
## 193      9E  DTW        Tarde  543
## 194      B6  BTV       Mañana  541
## 195      EV  CVG       Mañana  541
## 196      EV  RIC       Mañana  541
## 197      UA  SNA        Tarde  540
## 198      B6  SYR        Tarde  536
## 199      DL  MSY        Tarde  533
## 200      EV  ATL       Mañana  528
## 201      WN  HOU       Mañana  523
## 202      EV  MSN        Tarde  518
## 203      UA  MIA       Mañana  514
## 204      UA  RSW       Mañana  514
## 205      F9  DEN        Tarde  508
## 206      B6  PWM        Tarde  502
## 207      9E  MSP       Mañana  499
## 208      WN  DEN       Mañana  499
## 209      EV  IND        Tarde  491
## 210      UA  FLL        Noche  490
## 211      DL  SJU        Tarde  488
## 212      MQ  XNA        Tarde  486
## 213      DL  DEN        Tarde  480
## 214      EV  GSO       Mañana  479
## 215      DL  BOS        Tarde  478
## 216      B6  SRQ        Tarde  474
## 217      9E  DTW       Mañana  470
## 218      DL  LAX        Noche  468
## 219      EV  MKE       Mañana  468
## 220      9E  BNA        Tarde  467
## 221      B6  BTV        Tarde  459
## 222      B6  LAX        Tarde  459
## 223      AA  SJU        Tarde  455
## 224      DL  TPA        Noche  455
## 225      DL  SEA       Mañana  449
## 226      EV  OMA       Mañana  447
## 227      B6  LAX        Noche  441
## 228      B6  PWM       Mañana  441
## 229      UA  SEA        Tarde  441
## 230      B6  SFO       Mañana  437
## 231      EV  CMH        Tarde  437
## 232      EV  DCA       Mañana  437
## 233      9E  PIT       Mañana  432
## 234      B6  ROC        Noche  432
## 235      UA  SEA       Mañana  428
## 236      WN  MKE        Tarde  426
## 237      EV  SAV        Tarde  425
## 238      EV  MKE        Tarde  410
## 239      EV  GRR        Tarde  407
## 240      EV  BTV        Tarde  406
## 241      9E  RDU        Tarde  403
## 242      DL  LAS        Noche  400
## 243      UA  RSW        Tarde  399
## 244      UA  TPA        Noche  396
## 245      9E  PHL        Tarde  395
## 246      EV  ORF        Tarde  395
## 247      EV  JAX        Tarde  394
## 248      UA  MCO        Noche  394
## 249      B6  LAS        Tarde  392
## 250      EV  DSM        Noche  387
## 251      9E  ORD        Tarde  384
## 252      B6  MSY       Mañana  384
## 253      EV  CMH       Mañana  383
## 254      UA  PBI        Noche  383
## 255      EV  SAV       Mañana  379
## 256      MQ  DCA        Noche  375
## 257      EV  MHT        Tarde  374
## 258      UA  AUS        Tarde  374
## 259      9E  ORF        Tarde  373
## 260      UA  SJU       Mañana  372
## 261      B6  BUR        Tarde  371
## 262      EV  MHT        Noche  371
## 263      UA  SAN       Mañana  370
## 264      9E  DFW        Tarde  369
## 265      UA  MIA        Noche  369
## 266      B6  IAD        Tarde  366
## 267      9E  DCA        Noche  365
## 268      AA  AUS        Tarde  365
## 269      AA  BOS        Noche  365
## 270      AA  LAS        Tarde  365
## 271      AA  MCO       Mañana  365
## 272      AA  MCO        Tarde  365
## 273      AA  MIA    Madrugada  365
## 274      AA  SAN        Tarde  365
## 275      AS  SEA        Tarde  365
## 276      B6  CLT       Mañana  365
## 277      B6  JAX       Mañana  365
## 278      B6  JAX        Tarde  365
## 279      B6  PSE        Noche  365
## 280      B6  RDU       Mañana  365
## 281      B6  RDU        Tarde  365
## 282      B6  SRQ       Mañana  365
## 283      B6  SYR       Mañana  365
## 284      B6  SYR        Noche  365
## 285      DL  DEN       Mañana  365
## 286      MQ  BWI        Tarde  365
## 287      MQ  CVG        Tarde  365
## 288      MQ  IND        Tarde  365
## 289      MQ  ORF        Tarde  365
## 290      MQ  PIT        Tarde  365
## 291      VX  LAS       Mañana  365
## 292      WN  PHX        Tarde  365
## 293      B6  AUS       Mañana  364
## 294      B6  BTV        Noche  364
## 295      B6  CLT        Tarde  364
## 296      B6  MSY        Tarde  364
## 297      B6  ORD       Mañana  364
## 298      B6  PWM        Noche  361
## 299      DL  PDX        Tarde  361
## 300      AA  BOS       Mañana  360
## 301      B6  ROC       Mañana  360
## 302      DL  SFO        Noche  360
## 303      EV  GSP        Tarde  360
## 304      UA  PHX       Mañana  360
## 305      9E  ORD       Mañana  359
## 306      B6  AUS        Noche  359
## 307      DL  AUS        Tarde  357
## 308      9E  DCA        Tarde  355
## 309      9E  DCA       Mañana  354
## 310      DL  MSY       Mañana  354
## 311      B6  SEA        Tarde  353
## 312      9E  MCI        Tarde  352
## 313      UA  DFW       Mañana  352
## 314      9E  CVG        Noche  351
## 315      US  PHL       Mañana  351
## 316      AS  SEA       Mañana  349
## 317      B6  SFO        Noche  348
## 318      DL  BOS        Noche  348
## 319      FL  CAK        Noche  347
## 320      EV  ROC        Tarde  345
## 321      9E  BWI        Tarde  344
## 322      HA  HNL       Mañana  342
## 323      US  CLT    Madrugada  340
## 324      VX  LAX        Noche  340
## 325      B6  SAN       Mañana  339
## 326      AA  MIA        Noche  338
## 327      B6  DEN        Noche  338
## 328      B6  SLC        Noche  333
## 329      DL  SAN        Tarde  332
## 330      EV  BNA        Noche  332
## 331      EV  CVG        Noche  332
## 332      EV  SDF       Mañana  332
## 333      B6  MSY        Noche  328
## 334      B6  SJC        Tarde  328
## 335      EV  CHS        Noche  327
## 336      MQ  ATL        Noche  327
## 337      9E  IND        Tarde  326
## 338      DL  SLC        Noche  326
## 339      B6  PDX        Noche  325
## 340      B6  SAN        Tarde  324
## 341      MQ  DTW        Noche  324
## 342      9E  BWI        Noche  323
## 343      B6  ORD        Tarde  323
## 344      EV  MSY        Tarde  322
## 345      EV  OKC        Noche  321
## 346      EV  TYS        Noche  320
## 347      9E  IAD        Noche  316
## 348      B6  HOU       Mañana  316
## 349      EV  TUL        Noche  314
## 350      9E  ORD        Noche  313
## 351      WN  MKE        Noche  313
## 352      UA  CLE        Noche  311
## 353      B6  BQN        Noche  310
## 354      EV  SDF        Tarde  310
## 355      MQ  ORD        Noche  310
## 356      B6  IAD       Mañana  309
## 357      MQ  CLT        Noche  309
## 358      UA  HNL        Tarde  308
## 359      B6  CHS       Mañana  307
## 360      B6  CHS        Tarde  306
## 361      EV  BUF        Tarde  306
## 362      MQ  BNA        Noche  306
## 363      AA  STT       Mañana  303
## 364      EV  PWM        Noche  303
## 365      FL  CAK       Mañana  302
## 366      EV  CLE        Noche  299
## 367      9E  MKE        Tarde  297
## 368      9E  RDU        Noche  297
## 369      9E  TYS        Noche  297
## 370      UA  BQN        Noche  297
## 371      AA  STL       Mañana  296
## 372      B6  JAX        Noche  296
## 373      EV  JAX        Noche  296
## 374      EV  OMA        Noche  296
## 375      EV  GSO        Noche  292
## 376      EV  XNA       Mañana  292
## 377      B6  BQN    Madrugada  289
## 378      YV  IAD        Tarde  289
## 379      9E  PHL       Mañana  287
## 380      EV  STL        Noche  287
## 381      EV  ATL        Noche  285
## 382      UA  SNA       Mañana  282
## 383      US  PHL        Tarde  281
## 384      9E  CVG       Mañana  280
## 385      AA  SEA        Tarde  279
## 386      B6  HOU        Tarde  279
## 387      UA  PDX        Tarde  279
## 388      WN  MSY        Tarde  275
## 389      AA  IAH        Tarde  274
## 390      AA  LAS       Mañana  274
## 391      EV  ROC       Mañana  273
## 392      9E  BOS       Mañana  271
## 393      9E  JAX        Noche  271
## 394      EV  BTV        Noche  270
## 395      EV  ORF       Mañana  270
## 396      9E  IAD        Tarde  269
## 397      EV  PWM        Tarde  269
## 398      9E  PIT        Noche  268
## 399      EV  DAY       Mañana  266
## 400      DL  SRQ       Mañana  265
## 401      DL  MIA        Noche  263
## 402      9E  PHL        Noche  258
## 403      MQ  XNA       Mañana  258
## 404      WN  AUS       Mañana  258
## 405      EV  GRR       Mañana  257
## 406      B6  ABQ        Noche  253
## 407      DL  PHX        Noche  253
## 408      EV  MHT       Mañana  253
## 409      UA  SAT        Tarde  253
## 410      B6  SFO        Tarde  250
## 411      EV  SDF        Noche  249
## 412      9E  RIC        Tarde  248
## 413      UA  SEA        Noche  248
## 414      EV  BHM        Noche  247
## 415      B6  PBI        Noche  243
## 416      DL  MSY        Noche  242
## 417      EV  PWM       Mañana  241
## 418      UA  CLE       Mañana  241
## 419      B6  OAK        Tarde  240
## 420      9E  DAY       Mañana  236
## 421      EV  MKE        Noche  236
## 422      EV  MCI        Noche  235
## 423      B6  LAS        Noche  228
## 424      UA  AUS        Noche  223
## 425      B6  ORD        Noche  218
## 426      DL  SAN       Mañana  217
## 427      9E  SDF       Mañana  215
## 428      FL  CAK        Tarde  215
## 429      9E  RDU       Mañana  212
## 430      EV  GSP       Mañana  209
## 431      UA  PDX       Mañana  208
## 432      DL  MEM        Tarde  206
## 433      DL  SJU        Noche  206
## 434      9E  CHS        Tarde  204
## 435      9E  MSY        Noche  204
## 436      B6  SMF        Noche  203
## 437      DL  SAT        Noche  202
## 438      EV  DAY        Noche  201
## 439      DL  DEN        Noche  198
## 440      DL  RSW        Tarde  195
## 441      9E  CLE        Noche  191
## 442      9E  MSY       Mañana  190
## 443      9E  BWI       Mañana  189
## 444      UA  STT       Mañana  189
## 445      B6  PHX        Tarde  186
## 446      UA  LAS        Noche  186
## 447      EV  ALB        Noche  185
## 448      B6  ACK       Mañana  182
## 449      B6  PHX        Noche  179
## 450      YV  CLT        Tarde  178
## 451      EV  GSP        Noche  177
## 452      F9  DEN       Mañana  177
## 453      EV  CLE       Mañana  175
## 454      UA  SAN        Noche  171
## 455      9E  CLT        Noche  170
## 456      DL  SEA        Noche  169
## 457      UA  DFW        Noche  169
## 458      9E  BUF       Mañana  167
## 459      EV  BDL        Tarde  167
## 460      9E  PIT        Tarde  164
## 461      AA  TPA        Noche  162
## 462      9E  ROC        Tarde  161
## 463      B6  SEA       Mañana  160
## 464      UA  SJU        Noche  160
## 465      UA  RSW        Noche  158
## 466      DL  PIT        Noche  157
## 467      UA  SJU        Tarde  156
## 468      9E  DAY        Tarde  155
## 469      DL  PWM        Tarde  155
## 470      9E  CLE        Tarde  154
## 471      EV  ALB        Tarde  153
## 472      B6  MVY        Tarde  150
## 473      EV  BDL        Noche  150
## 474      EV  BGR        Tarde  150
## 475      DL  MEM       Mañana  149
## 476      DL  BOS       Mañana  146
## 477      EV  MSY       Mañana  146
## 478      EV  BWI        Tarde  145
## 479      EV  SYR        Tarde  145
## 480      EV  PVD       Mañana  138
## 481      MQ  CRW        Tarde  138
## 482      WN  BWI        Tarde  138
## 483      DL  PBI        Noche  137
## 484      EV  PVD        Noche  137
## 485      EV  AVL        Tarde  135
## 486      DL  RSW       Mañana  133
## 487      FL  ATL        Noche  133
## 488      EV  DTW        Noche  132
## 489      EV  SYR       Mañana  131
## 490      EV  AVL       Mañana  130
## 491      MQ  TPA       Mañana  127
## 492      MQ  TPA        Tarde  127
## 493      9E  SYR        Noche  126
## 494      EV  BWI        Noche  122
## 495      EV  MSY        Noche  122
## 496      9E  CHS       Mañana  121
## 497      EV  BGR       Mañana  121
## 498      9E  BUF        Noche  120
## 499      B6  HOU        Noche  119
## 500      9E  CLT        Tarde  118
## 501      EV  BDL       Mañana  117
## 502      EV  CLE        Tarde  114
## 503      DL  PHX        Tarde  112
## 504      EV  ROC        Noche  111
## 505      UA  EGE       Mañana  110
## 506      9E  ROC       Mañana  109
## 507      DL  PHX       Mañana  104
## 508      EV  ORF        Noche  104
## 509      AA  EGE        Tarde  103
## 510      EV  BGR        Noche  103
## 511      EV  OMA        Tarde  103
## 512      B6  RSW        Noche  102
## 513      DL  SAT        Tarde  101
## 514      EV  ALB       Mañana  101
## 515      EV  PVD        Tarde  101
## 516      EV  BUF        Noche  100
## 517      EV  MSP        Noche  100
## 518      DL  RSW        Noche   98
## 519      EV  BOS       Mañana   98
## 520      DL  PDX        Noche   97
## 521      UA  MSY        Tarde   97
## 522      DL  DTW        Noche   96
## 523      YV  CLT       Mañana   96
## 524      EV  CAE        Tarde   95
## 525      9E  BOS        Noche   94
## 526      EV  ILM        Noche   93
## 527      DL  PIT        Tarde   92
## 528      AA  FLL       Mañana   91
## 529      AA  FLL        Tarde   91
## 530      UA  MSY       Mañana   91
## 531      EV  DSM       Mañana   89
## 532      9E  GSP        Noche   88
## 533      AA  SEA        Noche   86
## 534      9E  DSM        Noche   85
## 535      EV  BWI       Mañana   85
## 536      UA  ATL        Tarde   85
## 537      B6  SJU    Madrugada   84
## 538      UA  PDX        Noche   84
## 539      B6  ACK        Tarde   83
## 540      B6  SMF        Tarde   81
## 541      DL  MCI        Tarde   81
## 542      DL  PWM        Noche   80
## 543      UA  MSY        Noche   80
## 544      9E  IAD       Mañana   79
## 545      9E  SRQ       Mañana   78
## 546      DL  MEM        Noche   77
## 547      AA  TPA        Tarde   76
## 548      9E  IND       Mañana   75
## 549      MQ  MSP        Noche   74
## 550      UA  SAT        Noche   74
## 551      AA  TPA       Mañana   73
## 552      MQ  STL        Tarde   73
## 553      UA  AUS       Mañana   73
## 554      B6  OAK        Noche   72
## 555      9E  MVY       Mañana   70
## 556      WN  BWI       Mañana   70
## 557      UA  PHX        Noche   68
## 558      9E  RSW       Mañana   67
## 559      B6  RDU        Noche   67
## 560      MQ  STL       Mañana   66
## 561      WN  PHX       Mañana   66
## 562      9E  JAX        Tarde   65
## 563      9E  JAX       Mañana   64
## 564      EV  BOS        Tarde   61
## 565      EV  IND        Noche   60
## 566      9E  ATL       Mañana   59
## 567      FL  MKE       Mañana   59
## 568      WN  ATL       Mañana   59
## 569      EV  GRR        Noche   57
## 570      UA  HNL       Mañana   57
## 571      EV  MYR       Mañana   56
## 572      UA  SFO    Madrugada   56
## 573      EV  RDU        Noche   54
## 574      9E  SAT        Tarde   52
## 575      EV  CHO        Noche   52
## 576      EV  BHM        Tarde   49
## 577      EV  SYR        Noche   49
## 578      9E  SDF        Tarde   48
## 579      EV  MSN        Noche   48
## 580      UA  DEN        Noche   48
## 581      9E  RIC       Mañana   47
## 582      B6  PIT        Tarde   46
## 583      9E  RIC        Noche   45
## 584      B6  PIT       Mañana   44
## 585      9E  GRR       Mañana   43
## 586      9E  MSY        Tarde   43
## 587      9E  SYR        Tarde   43
## 588      AA  PBI       Mañana   41
## 589      AA  PBI        Tarde   41
## 590      AA  SJU        Noche   41
## 591      EV  PHL        Noche   41
## 592      WN  AUS        Tarde   40
## 593      UA  BZN       Mañana   36
## 594      UA  DEN    Madrugada   34
## 595      MQ  TVC        Tarde   33
## 596      B6  SLC        Tarde   32
## 597      DL  STT       Mañana   30
## 598      EV  SRQ       Mañana   29
## 599      EV  TVC        Tarde   28
## 600      DL  SAN        Noche   26
## 601      EV  OKC        Tarde   25
## 602      B6  AUS        Tarde   24
## 603      OO  CLE        Tarde   24
## 604      9E  CHS        Noche   23
## 605      EV  IAD    Madrugada   23
## 606      UA  JAC       Mañana   23
## 607      UA  MIA    Madrugada   23
## 608      WN  MSY       Mañana   23
## 609      EV  TVC       Mañana   22
## 610      EV  MEM        Noche   19
## 611      VX  PSP       Mañana   19
## 612      YV  IAD        Noche   19
## 613      9E  MKE       Mañana   18
## 614      EV  CAE        Noche   18
## 615      EV  TVC        Noche   18
## 616      UA  ATL       Mañana   18
## 617      DL  EYW       Mañana   17
## 618      9E  ORF        Noche   16
## 619      UA  ORD    Madrugada   16
## 620      UA  HDN       Mañana   15
## 621      UA  MTJ       Mañana   15
## 622      UA  LAX    Madrugada   14
## 623      9E  ORF       Mañana   13
## 624      9E  CMH        Tarde   12
## 625      EV  ILM       Mañana   12
## 626      9E  ROC        Noche   11
## 627      US  CLT        Noche   11
## 628      9E  AVL       Mañana   10
## 629      UA  TPA    Madrugada   10
## 630      9E  GSP        Tarde    8
## 631      9E  MCI       Mañana    8
## 632      EV  PHL        Tarde    8
## 633      UA  ANC        Tarde    8
## 634      UA  BDL        Noche    8
## 635      YV  CLT        Noche    8
## 636      YV  PHL        Tarde    8
## 637      9E  TYS        Tarde    7
## 638      9E  BNA       Mañana    6
## 639      9E  DSM        Tarde    6
## 640      9E  GSP       Mañana    6
## 641      9E  MHT        Tarde    6
## 642      EV  DFW       Mañana    6
## 643      EV  PBI       Mañana    6
## 644      9E  DFW       Mañana    5
## 645      9E  DFW        Noche    5
## 646      EV  ILM        Tarde    5
## 647      EV  MSN       Mañana    5
## 648      EV  SBN        Noche    5
## 649      9E  CLE       Mañana    4
## 650      9E  MHT        Noche    4
## 651      9E  TYS       Mañana    4
## 652      EV  MKE    Madrugada    4
## 653      OO  MSP        Tarde    4
## 654      UA  BOS    Madrugada    4
## 655      UA  MCO    Madrugada    4
## 656      9E  CAE       Mañana    3
## 657      9E  CLT       Mañana    3
## 658      9E  TPA       Mañana    3
## 659      B6  LGB       Mañana    3
## 660      EV  MYR        Tarde    3
## 661      EV  SBN       Mañana    3
## 662      EV  TYS        Tarde    3
## 663      UA  PBI    Madrugada    3
## 664      UA  SAT       Mañana    3
## 665      UA  SNA        Noche    3
## 666      YV  IAD       Mañana    3
## 667      9E  AUS        Tarde    2
## 668      9E  MEM        Tarde    2
## 669      B6  BOS    Madrugada    2
## 670      DL  BUF        Tarde    2
## 671      DL  CVG       Mañana    2
## 672      DL  CVG        Tarde    2
## 673      DL  DCA        Tarde    2
## 674      DL  JAC       Mañana    2
## 675      DL  PHL        Tarde    2
## 676      EV  DFW        Tarde    2
## 677      EV  DSM        Tarde    2
## 678      EV  SBN        Tarde    2
## 679      OO  DTW        Tarde    2
## 680      UA  DCA       Mañana    2
## 681      UA  IND        Tarde    2
## 682      UA  MSP        Tarde    2
## 683      UA  PIT        Tarde    2
## 684      UA  SDF       Mañana    2
## 685      UA  STL        Tarde    2
## 686      9E  BGR        Noche    1
## 687      9E  BNA        Noche    1
## 688      9E  BTV       Mañana    1
## 689      9E  BTV        Tarde    1
## 690      9E  CMH       Mañana    1
## 691      9E  GRR        Tarde    1
## 692      9E  GSO       Mañana    1
## 693      9E  LEX        Noche    1
## 694      9E  MCI        Noche    1
## 695      9E  MEM       Mañana    1
## 696      9E  MHT       Mañana    1
## 697      9E  MSN        Tarde    1
## 698      9E  MVY        Tarde    1
## 699      9E  SAT        Noche    1
## 700      9E  SYR       Mañana    1
## 701      B6  ABQ        Tarde    1
## 702      B6  FLL    Madrugada    1
## 703      B6  SEA        Noche    1
## 704      DL  BNA        Tarde    1
## 705      DL  BUF        Noche    1
## 706      DL  IND       Mañana    1
## 707      DL  IND        Tarde    1
## 708      DL  JAX        Noche    1
## 709      DL  MCI       Mañana    1
## 710      DL  OMA        Tarde    1
## 711      DL  PIT       Mañana    1
## 712      DL  STL        Tarde    1
## 713      EV  BDL    Madrugada    1
## 714      EV  BHM       Mañana    1
## 715      EV  BUF    Madrugada    1
## 716      EV  CVG    Madrugada    1
## 717      EV  GSP    Madrugada    1
## 718      EV  ORD       Mañana    1
## 719      EV  ORD        Noche    1
## 720      EV  PIT        Noche    1
## 721      EV  TPA        Tarde    1
## 722      EV  TUL       Mañana    1
## 723      OO  IAD        Tarde    1
## 724      OO  ORD       Mañana    1
## 725      UA  CHS        Tarde    1
## 726      UA  CLT       Mañana    1
## 727      UA  CLT        Tarde    1
## 728      UA  DTW        Noche    1
## 729      UA  IAD       Mañana    1
## 730      UA  IND       Mañana    1
## 731      UA  MSY    Madrugada    1
## 732      UA  OMA       Mañana    1
## 733      UA  OMA        Tarde    1
## 734      UA  PHX    Madrugada    1
## 735      UA  RDU        Noche    1
## 736      UA  RSW    Madrugada    1
## 737      UA  SDF        Tarde    1
## 738      US  LGA    Madrugada    1
## 739      US  PHL        Noche    1
## 740      US  PHX    Madrugada    1
## 741      VX  SJC        Tarde    1

Destinos a los que vuela la aerolínea American Airlines Inc. durante la madrugada

madrugada_aa <- filter(horarios,clas_horario == "Madrugada" & carrier == "AA")
madrugada_aa <- madrugada_aa %>% group_by(dest)
madrugada_aa
## # A tibble: 365 × 5
## # Groups:   dest [1]
##    carrier name                   dest  sched_dep_time clas_horario
##    <chr>   <chr>                  <chr>          <int> <chr>       
##  1 AA      American Airlines Inc. MIA              545 Madrugada   
##  2 AA      American Airlines Inc. MIA              545 Madrugada   
##  3 AA      American Airlines Inc. MIA              540 Madrugada   
##  4 AA      American Airlines Inc. MIA              545 Madrugada   
##  5 AA      American Airlines Inc. MIA              545 Madrugada   
##  6 AA      American Airlines Inc. MIA              545 Madrugada   
##  7 AA      American Airlines Inc. MIA              540 Madrugada   
##  8 AA      American Airlines Inc. MIA              545 Madrugada   
##  9 AA      American Airlines Inc. MIA              545 Madrugada   
## 10 AA      American Airlines Inc. MIA              540 Madrugada   
## # ℹ 355 more rows

Aviones utilizados por American Airlines Inc.

aviones_aa <- filter(bdgrande3,carrier=="AA",!is.na(type))
aviones_aa <- select(aviones_aa,carrier,type,engine,seats)
aviones_aa <- group_by(aviones_aa,carrier,type,engine,seats)
count(aviones_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

Conclusiones

  • Los destinos más buscados en los aeropuertos de Nueva York son Chicago, Los Ángeles y Atlanta. Las aerolíneas que ofrecen vuelos hacia los destinos más populares coinciden con aquellas que tienen un puesto de liderazgo dentro de los aeropuertos de Nueva York. Al analizar las aerolíneas que frecuentan estos destinos, aerolíneas líderes como “AA” y “DL”. Son las aerolíneas que realizan la mayor cantidad de vuelos en los tres destinos más populares, lo cuál puede estar directamente relacionado con su éxito.

  • Los periodos de tiempo en los que se presenta mayor actividad en el aeropuerto son la mañana y la tarde. Por cuestiones de comodidad o de tiempo resulta más fácil para las personas tomar un vuelo durante el día que en la noche. Esto se puede observar al analizar la frecuencia de vuelo por periodo del día donde los vuelos que se realizaron con mayor frecuencia por las aerolíneas ocurren durante ese periodo de tiempo, mientras que la cantidad de vuelos realizados durante la noche o madrugada es menor.

  • En el caso de la aerolínea “American Airlines” al revisar sus aviones, predomina la presencia de aviones de tamaño grande, con una capacidad de 172 asientos y de 255 en su modelo de avión mas utilizado. Esto puede ser debido a su posición de liderazgo dentro de los aeropuertos de Nueva York.

Parte 4. Visualización de datos

Análisis del retraso de partida y llegada en vuelos de “American Airlines Inc.”

aa_vuelos_retrasos <- flights %>%
  filter(carrier == "AA") %>%
  select(dep_delay, arr_delay) 

ggplot(aa_vuelos_retrasos, aes(x = dep_delay, y = arr_delay, color=arr_delay)) +
  geom_point(alpha = 0.3) +
  labs(x = "Retraso en la Salida (minutos)", y = "Retraso en la Llegada (minutos)",
       title = "Relación entre los Retrasos de Salida y Llegada de American Airlines") 
## Warning: Removed 782 rows containing missing values or values outside the scale range
## (`geom_point()`).

Tendencia de la temperatura

temp_enero <- filter(bdgrande3,origin=="EWR")
temp_enero <- select(temp_enero,time_hour,temp)
temp_enero <- na.omit(temp_enero)

temp_enero <- subset(temp_enero, time_hour >= as.POSIXct("2013-01-01 00:00") & time_hour < as.POSIXct("2013-01-14 23:59"))

temp_enero$date <- as.Date(temp_enero$time_hour)
temp_enero <- temp_enero %>% group_by(date) %>% summarize(temp = mean(temp))

ggplot(temp_enero,aes(x=date,y=temp)) + geom_line() + geom_point() + labs(x="Fecha",y="Temperatura",title="Temperatura (°F) en los primeros 15 días de Enero en aeropuerto EWR") 

Frecuencia de Temperatura

temp_enero15 <- filter(bdgrande3,month.x==1,day.x<=15)
ggplot(temp_enero15,aes(x=temp)) + geom_histogram(color=1,bins=15) + labs(x="Temperatura (°F)",y="Frecuencia",title="Temperatura por mes") 
## Warning: Removed 52 rows containing non-finite outside the scale range
## (`stat_bin()`).

Variación mensual de temperatura

ggplot(bdgrande3,aes(x=temp)) + geom_histogram(color=1,bins=10) + facet_wrap(.~month.x) + labs(x="Temperatura",y="Frecuencia",title="Frecuencia de temperaturas por mes") 
## Warning: Removed 1573 rows containing non-finite outside the scale range
## (`stat_bin()`).

Número de vuelos por aerolínea (Gráfica de barras)

vuelos_a <- bdgrande3 %>% group_by(carrier) %>% count(carrier)
vuelos_a <- arrange(vuelos_a,desc(n)) %>% head(10)

ggplot(vuelos_a,aes(x=reorder(carrier,-n),y=n,fill=carrier)) + geom_bar(stat="identity") + labs(x="Aerolínea",y="Vuelos",title="Top 10 aerolíneas con más vuelos") 

Número de vuelos por aerolínea (Pie)

ggplot(vuelos_a,aes(x="",y=n,fill=carrier)) + geom_col(color="black") + coord_polar(theta="y") + theme_void()

Relacionar data frame “flights” con data frame airports

airports <- rename(airports,"origin"="faa")
bdgrande4 <- left_join(bdgrande3,airports,by="origin")

Cantidad de vuelos por aerolínea

vuelosaeropuerto <- group_by(bdgrande4,name.y)
ggplot(vuelosaeropuerto,aes(x=carrier,fill=name.y)) + geom_bar()

ggplot(vuelosaeropuerto,aes(x=carrier,fill=name.y)) + geom_bar(position = position_dodge())

ggplot(vuelosaeropuerto,aes(x=carrier,fill=name.y)) + geom_bar() + facet_grid(name.y ~.)

Conclusiones

  • Los retrasos en la salida de los vuelos implican que estos también presentaran retraso en su llegada. Los aeropuertos cuentan con protocolos de seguridad y estándares estrictos, además de limites que varían por modelo de avión en cuanto a la velocidad máxima que pueden alcanzar, por ende, es poco probable que un avión no llegue con retraso y salió tarde. Al realizar un gráfico de dispersión se puede observar que hay una correlación fuerte entre el tiempo de retraso y el tiempo de salida, sugiriendo que el tiempo de retraso no se puede recuperar con facilidad en el vuelo.

  • La temperatura suele incrementar a partir de enero, conforme se acerca la primavera se espera que temperatura sea más alta con mayor frecuencia. Al colocar los 12 meses del año en un histograma, es posible observar que diciembre suele ser el mes más frio en los aeropuertos de Nueva York y que a partir de enero la temperatura promedio suele incrementar.

  • En cuanto a la distribución de los vuelos en los diferentes aeropuertos de Nueva York, las aerolíneas tienden a concentrar la mayor parte de sus recursos a un solo aeropuerto, aún cuando esta opere en más de uno. Enfocarse en un aeropuerto puede facilitar la organización y eficiencia de la operación de una aerolínea, además que la demanda por los vuelos puede ser distinta dependiendo del aeropuerto. Mediante el histograma se puede observar como aerolíneas como “American Airlines” y “United Airlines” y “ExpressJet Airlines” realizan más de la mitad de su total de vuelos en un solo aeropuerto.

Parte 5. ¿Por qué los vuelos se retrasan?

Contexto

En el entorno del transporte aéreo, los retrasos en los vuelos representan un problema significativo tanto para las aerolíneas como para los pasajeros, llevando a inconvenientes operacionales y costos económicos elevados. Comprender las causas de estos retrasos es fundamental para mejorar la eficiencia de las operaciones aéreas y la satisfacción del cliente. Mediante un modelo de regresión lineal se determinaran las variables con mayor relación al aumento en el tiempo de retraso , para de esta forma determinar las principales causas por las cuales los vuelos se retrasan.

Modelo de regresión

regresion <- lm(dep_delay ~ carrier+month.x+day.x+dep_time+origin+dest+ air_time+distance+hour.x+year.y+type+engine+temp+dewp+humid+wind_dir+precip+pressure+visib,data=bdgrande4)
summary(regresion)
## 
## Call:
## lm(formula = dep_delay ~ carrier + month.x + day.x + dep_time + 
##     origin + dest + air_time + distance + hour.x + year.y + type + 
##     engine + temp + dewp + humid + wind_dir + precip + pressure + 
##     visib, data = bdgrande4)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
##  -86.48  -15.73   -7.56    2.18 1309.12 
## 
## Coefficients: (1 not defined because of singularities)
##                                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                   5.858e+02  4.965e+01  11.799  < 2e-16 ***
## carrierAA                    -5.374e+00  6.650e-01  -8.081 6.45e-16 ***
## carrierAS                    -8.205e+00  1.689e+00  -4.858 1.19e-06 ***
## carrierB6                    -9.065e-01  3.997e-01  -2.268  0.02332 *  
## carrierDL                    -6.493e+00  4.520e-01 -14.366  < 2e-16 ***
## carrierEV                     4.884e+00  4.305e-01  11.347  < 2e-16 ***
## carrierF9                     3.407e+00  1.653e+00   2.061  0.03932 *  
## carrierFL                    -1.102e+00  9.956e-01  -1.107  0.26835    
## carrierHA                    -2.834e-01  3.026e+00  -0.094  0.92540    
## carrierMQ                    -7.425e+00  1.494e+00  -4.969 6.74e-07 ***
## carrierOO                    -4.294e+00  6.851e+00  -0.627  0.53079    
## carrierUA                    -2.838e+00  5.042e-01  -5.629 1.82e-08 ***
## carrierUS                    -6.333e+00  5.531e-01 -11.451  < 2e-16 ***
## carrierVX                     7.015e-01  7.207e-01   0.973  0.33041    
## carrierWN                     3.695e+00  6.580e-01   5.615 1.96e-08 ***
## carrierYV                     4.880e-01  1.697e+00   0.288  0.77371    
## month.x                      -3.388e-01  2.275e-02 -14.895  < 2e-16 ***
## day.x                         6.087e-02  8.316e-03   7.319 2.50e-13 ***
## dep_time                      5.830e-02  5.091e-04 114.529  < 2e-16 ***
## originJFK                    -7.200e-01  3.448e-01  -2.088  0.03680 *  
## originLGA                     1.839e-01  3.347e-01   0.550  0.58265    
## destACK                      -1.197e+01  2.838e+01  -0.422  0.67315    
## destALB                      -1.275e+01  2.909e+01  -0.438  0.66116    
## destANC                       3.081e+01  3.067e+01   1.005  0.31508    
## destATL                      -6.202e-01  1.864e+01  -0.033  0.97346    
## destAUS                       4.675e+00  5.923e+00   0.789  0.42994    
## destAVL                      -1.266e+01  2.158e+01  -0.587  0.55746    
## destBDL                      -1.644e+01  2.955e+01  -0.556  0.57802    
## destBGR                      -1.534e+01  2.528e+01  -0.607  0.54386    
## destBHM                      -4.745e+00  1.698e+01  -0.279  0.77996    
## destBNA                      -3.071e+00  1.860e+01  -0.165  0.86883    
## destBOS                      -1.230e+01  2.833e+01  -0.434  0.66404    
## destBQN                       1.627e+01  5.038e+00   3.230  0.00124 ** 
## destBTV                      -1.174e+01  2.707e+01  -0.433  0.66468    
## destBUF                      -1.147e+01  2.656e+01  -0.432  0.66579    
## destBUR                       1.195e+01  1.150e+01   1.039  0.29873    
## destBWI                      -1.317e+01  2.859e+01  -0.461  0.64496    
## destBZN                       2.217e+01  7.122e+00   3.113  0.00185 ** 
## destCAE                      -2.697e+00  2.144e+01  -0.126  0.89991    
## destCAK                      -6.142e+00  2.497e+01  -0.246  0.80567    
## destCHO                      -2.443e+01  2.709e+01  -0.902  0.36720    
## destCHS                      -7.412e+00  2.071e+01  -0.358  0.72047    
## destCLE                      -9.638e+00  2.453e+01  -0.393  0.69442    
## destCLT                      -5.115e+00  2.232e+01  -0.229  0.81872    
## destCMH                      -1.080e+01  2.354e+01  -0.459  0.64640    
## destCRW                      -1.725e+01  2.620e+01  -0.658  0.51025    
## destCVG                      -6.681e+00  2.169e+01  -0.308  0.75800    
## destDAY                      -9.234e+00  2.233e+01  -0.414  0.67917    
## destDCA                      -1.115e+01  2.800e+01  -0.398  0.69050    
## destDEN                       1.006e+01  4.381e+00   2.297  0.02160 *  
## destDFW                       4.598e+00  8.071e+00   0.570  0.56888    
## destDSM                      -1.026e+00  1.411e+01  -0.073  0.94200    
## destDTW                      -4.856e+00  2.307e+01  -0.210  0.83328    
## destEGE                       1.395e+01  4.445e+00   3.139  0.00169 ** 
## destEYW                       8.170e+00  1.504e+01   0.543  0.58702    
## destFLL                       2.585e+00  1.327e+01   0.195  0.84557    
## destGRR                      -4.703e+00  2.112e+01  -0.223  0.82377    
## destGSO                      -9.172e+00  2.383e+01  -0.385  0.70025    
## destGSP                      -6.436e+00  2.130e+01  -0.302  0.76251    
## destHDN                       2.104e+01  1.063e+01   1.979  0.04777 *  
## destHNL                       5.384e+01  5.462e+01   0.986  0.32430    
## destHOU                       5.087e+00  7.399e+00   0.687  0.49178    
## destIAD                      -1.092e+01  2.779e+01  -0.393  0.69429    
## destIAH                       5.759e+00  7.589e+00   0.759  0.44792    
## destILM                      -1.585e+01  2.340e+01  -0.677  0.49826    
## destIND                      -5.609e+00  2.038e+01  -0.275  0.78317    
## destJAC                       3.385e+01  8.362e+00   4.048 5.16e-05 ***
## destJAX                      -4.226e+00  1.743e+01  -0.242  0.80845    
## destLAS                       1.443e+01  7.669e+00   1.882  0.05984 .  
## destLAX                       1.698e+01  1.146e+01   1.482  0.13837    
## destLEX                      -2.819e+01  4.136e+01  -0.682  0.49554    
## destLGB                       1.297e+01  1.143e+01   1.134  0.25669    
## destMCI                       3.682e-01  1.274e+01   0.029  0.97694    
## destMCO                      -5.269e-01  1.543e+01  -0.034  0.97275    
## destMDW                      -3.634e+00  1.925e+01  -0.189  0.85024    
## destMEM                      -7.257e-01  1.522e+01  -0.048  0.96197    
## destMHT                      -1.279e+01  2.797e+01  -0.457  0.64745    
## destMIA                       3.634e+00  1.295e+01   0.281  0.77895    
## destMKE                      -4.228e+00  1.901e+01  -0.222  0.82403    
## destMSN                      -1.028e+00  1.781e+01  -0.058  0.95396    
## destMSP                       2.612e+00  1.417e+01   0.184  0.85371    
## destMSY                       1.440e+00  1.145e+01   0.126  0.89998    
## destMTJ                       2.791e+01  1.097e+01   2.544  0.01096 *  
## destMVY                      -1.788e+01  2.886e+01  -0.619  0.53562    
## destMYR                      -4.116e+00  2.261e+01  -0.182  0.85559    
## destOAK                       1.398e+01  1.339e+01   1.044  0.29662    
## destOKC                       9.190e-02  9.058e+00   0.010  0.99190    
## destOMA                       5.351e-01  1.209e+01   0.044  0.96470    
## destORD                       1.096e-01  1.911e+01   0.006  0.99542    
## destORF                      -1.332e+01  2.667e+01  -0.499  0.61753    
## destPBI                       1.710e+00  1.397e+01   0.122  0.90259    
## destPDX                       1.803e+01  1.114e+01   1.619  0.10540    
## destPHL                      -1.101e+01  3.009e+01  -0.366  0.71452    
## destPHX                       1.502e+01  6.170e+00   2.435  0.01490 *  
## destPIT                      -9.784e+00  2.594e+01  -0.377  0.70607    
## destPSE                       3.661e+01  4.814e+00   7.605 2.86e-14 ***
## destPSP                       9.635e+00  1.393e+01   0.692  0.48910    
## destPVD                      -1.200e+01  2.881e+01  -0.417  0.67699    
## destPWM                      -1.103e+01  2.690e+01  -0.410  0.68169    
## destRDU                      -7.835e+00  2.435e+01  -0.322  0.74760    
## destRIC                      -9.719e+00  2.673e+01  -0.364  0.71613    
## destROC                      -9.107e+00  2.721e+01  -0.335  0.73784    
## destRSW                       3.012e-01  1.322e+01   0.023  0.98182    
## destSAN                       1.687e+01  1.097e+01   1.538  0.12397    
## destSAT                       9.133e+00  5.089e+00   1.795  0.07268 .  
## destSAV                      -5.212e+00  1.935e+01  -0.269  0.78761    
## destSBN                      -8.168e+00  2.403e+01  -0.340  0.73388    
## destSDF                      -7.577e+00  2.045e+01  -0.370  0.71106    
## destSEA                       1.811e+01  1.058e+01   1.712  0.08692 .  
## destSFO                       2.262e+01  1.333e+01   1.697  0.08965 .  
## destSJC                       7.562e+00  1.327e+01   0.570  0.56868    
## destSJU                       1.009e+01  4.615e+00   2.186  0.02885 *  
## destSLC                       1.175e+01  3.814e+00   3.080  0.00207 ** 
## destSMF                       1.188e+01  1.249e+01   0.951  0.34161    
## destSNA                       1.448e+01  1.109e+01   1.305  0.19175    
## destSRQ                      -9.003e-01  1.382e+01  -0.065  0.94804    
## destSTL                      -2.453e+00  1.648e+01  -0.149  0.88169    
## destSTT                       1.171e+01  4.780e+00   2.450  0.01428 *  
## destSYR                      -1.068e+01  2.816e+01  -0.379  0.70460    
## destTPA                       6.044e-01  1.440e+01   0.042  0.96652    
## destTUL                       3.918e+00  1.087e+01   0.361  0.71844    
## destTVC                       1.468e+00  2.096e+01   0.070  0.94413    
## destTYS                      -7.760e+00  2.068e+01  -0.375  0.70747    
## destXNA                      -7.986e-01  1.225e+01  -0.065  0.94801    
## air_time                     -3.243e-02  6.736e-03  -4.814 1.48e-06 ***
## distance                     -8.555e-03  1.735e-02  -0.493  0.62198    
## hour.x                       -4.171e+00  5.352e-02 -77.927  < 2e-16 ***
## year.y                       -1.202e-01  1.786e-02  -6.733 1.67e-11 ***
## typeFixed wing single engine  6.256e+00  3.475e+00   1.800  0.07181 .  
## typeRotorcraft                3.365e+00  6.904e+00   0.487  0.62594    
## engineReciprocating          -7.564e+00  5.752e+00  -1.315  0.18855    
## engineTurbo-fan               9.439e-01  6.641e+00   0.142  0.88697    
## engineTurbo-jet               2.943e-01  6.643e+00   0.044  0.96467    
## engineTurbo-prop             -8.218e-01  8.523e+00  -0.096  0.92319    
## engineTurbo-shaft                    NA         NA      NA       NA    
## temp                          5.303e-02  4.486e-02   1.182  0.23721    
## dewp                         -1.032e-03  4.835e-02  -0.021  0.98297    
## humid                         2.143e-01  2.466e-02   8.691  < 2e-16 ***
## wind_dir                      1.886e-03  7.901e-04   2.388  0.01696 *  
## precip                        5.918e+01  6.057e+00   9.769  < 2e-16 ***
## pressure                     -3.481e-01  1.113e-02 -31.267  < 2e-16 ***
## visib                        -3.651e-01  6.512e-02  -5.607 2.06e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 35.42 on 237633 degrees of freedom
##   (99002 observations deleted due to missingness)
## Multiple R-squared:  0.1227, Adjusted R-squared:  0.1222 
## F-statistic: 237.4 on 140 and 237633 DF,  p-value: < 2.2e-16

Modelo de regresión ajustado

regresion_ajustada <- lm(dep_delay ~ month.x+day.x+dep_time+hour.x+year.y+humid+precip+pressure+visib,data=bdgrande4)
summary(regresion_ajustada)
## 
## Call:
## lm(formula = dep_delay ~ month.x + day.x + dep_time + hour.x + 
##     year.y + humid + precip + pressure + visib, data = bdgrande4)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
##  -74.16  -15.67   -7.88    1.23 1312.63 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.017e+02  2.466e+01  12.232  < 2e-16 ***
## month.x     -2.595e-01  2.161e-02 -12.008  < 2e-16 ***
## day.x        6.095e-02  8.261e-03   7.378 1.61e-13 ***
## dep_time     5.933e-02  4.892e-04 121.279  < 2e-16 ***
## hour.x      -4.270e+00  5.112e-02 -83.528  < 2e-16 ***
## year.y       3.620e-02  1.131e-02   3.200  0.00137 ** 
## humid        2.089e-01  4.679e-03  44.636  < 2e-16 ***
## precip       5.753e+01  6.064e+00   9.487  < 2e-16 ***
## pressure    -3.876e-01  9.989e-03 -38.803  < 2e-16 ***
## visib       -3.117e-01  5.914e-02  -5.271 1.36e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 35.72 on 244263 degrees of freedom
##   (92503 observations deleted due to missingness)
## Multiple R-squared:  0.1121, Adjusted R-squared:  0.1121 
## F-statistic:  3427 on 9 and 244263 DF,  p-value: < 2.2e-16

Porcentaje de retrasos totales

df_retrasos <- bdgrande4 %>% summarize(total_vuelos = n(),total_retrasos = sum(dep_delay > 0,na.rm = TRUE),porcentaje_retrasos = (total_retrasos/ total_vuelos)*100, porcentaje_puntuales = 100-porcentaje_retrasos,media_retrasos = mean(dep_delay, na.rm = TRUE))
df_retrasos
##   total_vuelos total_retrasos porcentaje_retrasos porcentaje_puntuales
## 1       336776         128432            38.13573             61.86427
##   media_retrasos
## 1       12.63907

Aeropuertos

Retrasos por aeropuerto

df_retrasos_aeropuerto <- bdgrande4 %>% group_by(origin) %>% summarize(total_vuelos = n(),total_retrasos = sum(dep_delay > 0,na.rm = TRUE),porcentaje_retrasos = (total_retrasos/ total_vuelos)*100, porcentaje_puntuales = 100-porcentaje_retrasos,media_retrasos = mean(dep_delay, na.rm = TRUE))
df_retrasos_aeropuerto
## # A tibble: 3 × 6
##   origin total_vuelos total_retrasos porcentaje_retrasos porcentaje_puntuales
##   <chr>         <int>          <int>               <dbl>                <dbl>
## 1 EWR          120835          52711                43.6                 56.4
## 2 JFK          111279          42031                37.8                 62.2
## 3 LGA          104662          33690                32.2                 67.8
## # ℹ 1 more variable: media_retrasos <dbl>
ggplot(df_retrasos_aeropuerto,aes(x=reorder(origin,-porcentaje_retrasos),y=porcentaje_retrasos,fill=origin)) + geom_bar(stat="identity") + labs(x="Aeropuerto",y="Retrasos (%)",title="Porcentaje de retrasos por aeropuerto") + geom_text(aes(label = paste(round(porcentaje_retrasos, 1), "%"), y = porcentaje_retrasos + 1), vjust = 0.5, color = "black", size = 3.5)

ggplot(df_retrasos_aeropuerto,aes(x=reorder(origin,-total_vuelos),y=total_vuelos,fill=origin)) + geom_bar(stat="identity") + labs(x="Aeropuerto",y="Vuelos",title="Total de vuelos por aeropuerto") 

Retrasos por mes

df_retrasos_mes <- bdgrande4 %>% group_by(month.x) %>% summarize(total_vuelos = n(),total_retrasos = sum(dep_delay > 0,na.rm = TRUE),porcentaje_retrasos = (total_retrasos/ total_vuelos)*100, porcentaje_puntuales = 100-porcentaje_retrasos,media_retrasos = mean(dep_delay, na.rm = TRUE))
df_retrasos_mes
## # A tibble: 12 × 6
##    month.x total_vuelos total_retrasos porcentaje_retrasos porcentaje_puntuales
##      <int>        <int>          <int>               <dbl>                <dbl>
##  1       1        27004           9662                35.8                 64.2
##  2       2        24951           9124                36.6                 63.4
##  3       3        28834          11209                38.9                 61.1
##  4       4        28330          10543                37.2                 62.8
##  5       5        28796          11291                39.2                 60.8
##  6       6        28243          12655                44.8                 55.2
##  7       7        29425          13909                47.3                 52.7
##  8       8        29327          11713                39.9                 60.1
##  9       9        27574           7815                28.3                 71.7
## 10      10        28889           8722                30.2                 69.8
## 11      11        27268           8239                30.2                 69.8
## 12      12        28135          13550                48.2                 51.8
## # ℹ 1 more variable: media_retrasos <dbl>
ggplot(df_retrasos_mes,aes(x=factor(month.x),y=porcentaje_retrasos))+geom_bar(color=1,stat="identity") +  labs(title = "Retrasos por mes",
       x = "Mes",
       y = "Vuelos retrasados (%)")

retrasos <- filter(bdgrande4,dep_delay > 0)
ggplot(retrasos,aes(x=factor(month.x)))+geom_bar(color=1) +  labs(title = "Cantidad de retrasos por mes",
       x = "Mes",
       y = "Cantidad de vuelos retrasados")

Días

Retrasos por día

df_retrasos_dia <- bdgrande4 %>% group_by(month.x,day.x) %>% summarize(total_vuelos = n(),total_retrasos = sum(dep_delay > 0,na.rm = TRUE),porcentaje_retrasos = (total_retrasos/ total_vuelos)*100, porcentaje_puntuales = 100-porcentaje_retrasos,media_retrasos = mean(dep_delay, na.rm = TRUE))
df_retrasos_dia <- df_retrasos_dia %>% arrange(desc(porcentaje_retrasos)) %>% head(10)
df_retrasos_dia
## # A tibble: 10 × 7
## # Groups:   month.x [6]
##    month.x day.x total_vuelos total_retrasos porcentaje_retrasos
##      <int> <int>        <int>          <int>               <dbl>
##  1      12    23          985            674                68.4
##  2       7     1          966            652                67.5
##  3       3     8          979            653                66.7
##  4       6    25          993            649                65.4
##  5      12    22          895            583                65.1
##  6       7    23          997            645                64.7
##  7      12    17          949            608                64.1
##  8       5    24          978            621                63.5
##  9      12     9          962            606                63.0
## 10       2    27          945            584                61.8
## # ℹ 2 more variables: porcentaje_puntuales <dbl>, media_retrasos <dbl>
ggplot(df_retrasos_dia, aes(x = reorder(paste(month.x,"/",day.x), -porcentaje_retrasos), y = porcentaje_retrasos, fill = factor(day.x))) +
  geom_bar(stat = "identity") + labs(x="Mes/Día",y="Retrasos (%)",title="Top 10 días con mayor porcentaje de retrasos") 

retrasosdia <- retrasos %>% group_by(day.x,month.x) %>% summarise(retrasosd = n()) %>% arrange(desc(retrasosd), desc(day.x)) %>% head(10)

ggplot(retrasosdia, aes(x = reorder(paste(month.x,"/",day.x), -retrasosd), y = retrasosd, fill = factor(day.x))) +
  geom_bar(stat = "identity") + labs(x="Mes/Día",y="Cantidad de Retrasos",title="Top 10 días con más retrasos") 

Retrasos por día de la semana

flights$wday <- wday(flights$time_hour, label = TRUE)
df_retrasos_diasemana <- flights %>% group_by(wday) %>% summarize(total_vuelos = n(),total_retrasos = sum(dep_delay > 0,na.rm = TRUE),porcentaje_retrasos = (total_retrasos/ total_vuelos)*100, porcentaje_puntuales = 100-porcentaje_retrasos,media_retrasos = mean(dep_delay, na.rm = TRUE))
df_retrasos_diasemana
## # A tibble: 7 × 6
##   wday  total_vuelos total_retrasos porcentaje_retrasos porcentaje_puntuales
##   <ord>        <int>          <int>               <dbl>                <dbl>
## 1 Sun          46357          17487                37.7                 62.3
## 2 Mon          50690          19845                39.1                 60.9
## 3 Tue          50422          17951                35.6                 64.4
## 4 Wed          50060          18208                36.4                 63.6
## 5 Thu          50219          21007                41.8                 58.2
## 6 Fri          50308          20719                41.2                 58.8
## 7 Sat          38720          13215                34.1                 65.9
## # ℹ 1 more variable: media_retrasos <dbl>
ggplot(df_retrasos_diasemana, aes(x = wday, y = porcentaje_retrasos,fill=wday)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = round(porcentaje_retrasos, 1)), vjust = -0.5, color = "black") +
  labs(x = "Día de la Semana", y = "Retrasos (%)", title = "Porcentaje de Retraso Promedio de Salida por Día de la Semana")

ggplot(df_retrasos_diasemana, aes(x = wday, y = total_retrasos,fill=wday)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = round(total_retrasos, 1)), vjust = -0.5, color = "black") +
  labs(x = "Día de la Semana", y = "Cantidad de Retrasos", title = "Cantidad de Retrasos de Salida por Día de la Semana")

Hora

Retrasos por hora

df_retrasos_hora <- bdgrande4 %>% group_by(hour.x) %>% summarize(total_vuelos = n(),total_retrasos = sum(dep_delay > 0,na.rm = TRUE),porcentaje_retrasos = (total_retrasos/ total_vuelos)*100, porcentaje_puntuales = 100-porcentaje_retrasos,media_retrasos = mean(dep_delay, na.rm = TRUE))
df_retrasos_hora
## # A tibble: 20 × 6
##    hour.x total_vuelos total_retrasos porcentaje_retrasos porcentaje_puntuales
##     <dbl>        <int>          <int>               <dbl>                <dbl>
##  1      1            1              0                 0                  100  
##  2      5         1953            489                25.0                 75.0
##  3      6        25951           5430                20.9                 79.1
##  4      7        22821           4963                21.7                 78.3
##  5      8        27242           6790                24.9                 75.1
##  6      9        20312           5392                26.5                 73.5
##  7     10        16708           4942                29.6                 70.4
##  8     11        16033           5034                31.4                 68.6
##  9     12        18181           6408                35.2                 64.8
## 10     13        19956           8183                41.0                 59.0
## 11     14        21706           9257                42.6                 57.4
## 12     15        23888          11364                47.6                 52.4
## 13     16        23002          10699                46.5                 53.5
## 14     17        24426          12132                49.7                 50.3
## 15     18        21783          10636                48.8                 51.2
## 16     19        21441          10839                50.6                 49.4
## 17     20        16739           8633                51.6                 48.4
## 18     21        10933           5596                51.2                 48.8
## 19     22         2639           1184                44.9                 55.1
## 20     23         1061            461                43.4                 56.6
## # ℹ 1 more variable: media_retrasos <dbl>
ggplot(df_retrasos_hora,aes(x=factor(hour.x),y=porcentaje_retrasos,fill=hour.x)) + geom_bar(stat="identity") + labs(x="Hora",y="Retrasos(%)",title="Porcentaje de retrasos por hora") 

retrasosh <- retrasos %>% group_by(hour.x)
ggplot(retrasosh,aes(x=factor(hour.x),fill=hour.x)) + geom_histogram(stat="count") + labs(x="Hora",y="Cantidad de Retrasos",title="Cantidad de vuelos retrasados por hora") 
## Warning in geom_histogram(stat = "count"): Ignoring unknown parameters:
## `binwidth`, `bins`, and `pad`

Relación entre el tiempo de retraso y la hora de salida programada

ggplot(bdgrande4, aes(x = factor(hour.x), y = dep_delay)) +
  geom_point() +
  labs(x = "Hora de salida programada", y = "Retraso en la salida", title = "Retraso en la salida por hora del día")
## Warning: Removed 8255 rows containing missing values or values outside the scale range
## (`geom_point()`).

Visibilidad

Relación entre retrasos y visibilidad

ggplot(bdgrande4, aes(x = visib, y = dep_delay)) +
geom_point(aes(color = origin), alpha = 0.5) +
geom_smooth(method = "lm", aes(color = origin), se = FALSE) +
facet_wrap(~ origin) + 
labs(title = "Relación entre Visibilidad y Retrasos en la Salida por Aeropuerto",
       x = "Visibilidad (millas)",
       y = "Retraso en la Salida (minutos)") +
  scale_color_brewer(type = 'qual', palette = 'Set1')
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 9783 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 9783 rows containing missing values or values outside the scale range
## (`geom_point()`).

df_retrasos_visib <- bdgrande4 %>% group_by(visib) %>% summarize(total_vuelos = n(),total_retrasos = sum(dep_delay > 0,na.rm = TRUE),porcentaje_retrasos = (total_retrasos/ total_vuelos)*100, porcentaje_puntuales = 100-porcentaje_retrasos,media_retrasos = mean(dep_delay, na.rm = TRUE))
df_retrasos_visib
## # A tibble: 21 × 6
##    visib total_vuelos total_retrasos porcentaje_retrasos porcentaje_puntuales
##    <dbl>        <int>          <int>               <dbl>                <dbl>
##  1  0             110             28                25.5                 74.5
##  2  0.06           93             34                36.6                 63.4
##  3  0.12          440            229                52.0                 48.0
##  4  0.25         1358            523                38.5                 61.5
##  5  0.5          1478            704                47.6                 52.4
##  6  0.75          496            215                43.3                 56.7
##  7  1            1474            780                52.9                 47.1
##  8  1.25          208            127                61.1                 38.9
##  9  1.5          1692            834                49.3                 50.7
## 10  1.75          156             86                55.1                 44.9
## # ℹ 11 more rows
## # ℹ 1 more variable: media_retrasos <dbl>

Precipitación

Relación entre retrasos y precipitación

ggplot(bdgrande4, aes(x = precip, y = dep_delay)) +
  geom_point(aes(color = origin), alpha = 0.5) +
  geom_smooth(method = "lm", aes(color = origin), se = FALSE) +
  facet_wrap(~ origin) + 
  labs(title = "Relación entre Precipitacion y Retrasos en la Salida por Aeropuerto",
       x = "Precipitacion",
       y = "Retraso en la Salida (minutos)") +
  scale_color_brewer(type = 'qual', palette = 'Set1')
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 9783 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 9783 rows containing missing values or values outside the scale range
## (`geom_point()`).

df_retrasos_precip <- bdgrande4 %>% group_by(precip) %>% summarize(total_vuelos = n(),total_retrasos = sum(dep_delay > 0,na.rm = TRUE),porcentaje_retrasos = (total_retrasos/ total_vuelos)*100, porcentaje_puntuales = 100-porcentaje_retrasos,media_retrasos = mean(dep_delay, na.rm = TRUE))
df_retrasos_precip
## # A tibble: 56 × 6
##    precip total_vuelos total_retrasos porcentaje_retrasos porcentaje_puntuales
##     <dbl>        <int>          <int>               <dbl>                <dbl>
##  1   0          312218         115567                37.0                 63.0
##  2   0.01         5467           2861                52.3                 47.7
##  3   0.02         4317           2120                49.1                 50.9
##  4   0.03         2835           1558                55.0                 45.0
##  5   0.04         1643            898                54.7                 45.3
##  6   0.05         1303            663                50.9                 49.1
##  7   0.06         1182            561                47.5                 52.5
##  8   0.07          801            396                49.4                 50.6
##  9   0.08          602            305                50.7                 49.3
## 10   0.09          405            224                55.3                 44.7
## # ℹ 46 more rows
## # ℹ 1 more variable: media_retrasos <dbl>

Conclusiones

  • El porcentaje de vuelos con retraso en los aeropuertos de Nueva York es alto y podría estar representando problemas para cada aeropuerto. En los aeropuertos existen procedimientos y estándares de seguridad elevados, que incluyen revisiones a las personas que abordarán el vuelo y revisiones sobre las condiciones del avión, así mismos factores externos al aeropuerto como las condiciones climáticas pueden comprometer la seguridad de los pasajeros y pilotos. Por ende, un aeropuerto es altamente susceptible a los retrasos. Al analizar el porcentaje de vuelos que presentaron tiempo de retraso, se detectó que el 38.13% de los vuelos presentaron un retraso, esto equivale a 128,432 vuelos, los cuáles en promedio salieron con 12.6 minutos de demora.

  • Entre más vuelos se realicen dentro de un aeropuerto, mayor será la cantidad de retrasos presentada. La infraestructura de los aeropuertos es limitada, cada aeropuerto cuenta con un cierto de número de terminales y autopistas, entre mayor sea la demanda por los vuelos, se vuelve más complicado poder atender y administrar de manera eficiente los aeropuertos, generando como consecuencia el aumento en los retrasos. Para demostrar este punto se agruparon los retrasos por aeropuerto y se descubrió que el aeropuerto que más vuelos realizo en el año (JKF) fue el que mayor cantidad, porcentaje y media de retrasos presento, con un porcentaje del 43.6% de vuelos con retrasos y una media de 15 minutos por retraso, en comparación con un 32.2% y una media de 10 minutos en el aeropuerto menos concurrido (LGA).

  • Los periodos vacacionales tienen un efecto considerable en la cantidad de retrasos en los aeropuertos. Durante el periodo vacacional se cuenta con mayor facilidad para vacacionar y/o visitar a familiares, por ende, el aumento de la demanda por vuelos puede causar problemas en la organización de los aeropuertos que como consecuencia lleve a un mayor nivel de retrasos. Al observar todos los vuelos provenientes de los aeropuertos de Nueva York con un retraso mayor a un minuto se descubrió que durante los meses de junio, julio y diciembre se presentaron la mayor cantidad de retrasos, estos meses se caracterizaron por ser los únicos en todo el año donde el porcentaje de retrasos fue mayor al 40% con porcentajes de 44.8%, 47.3% y 48.2% respectivamente.

  • Los días festivos o días cercanos a un evento importante tienen un impacto en la cantidad de retrasos en los aeropuertos. Tomando en cuenta el mismo razonamiento aplicado en el punto anterior. Se descubrió al analizar estos días que los tres días con más retrasos están vinculados o cercanos a un día importante. El 23 de diciembre coincide con ser el día anterior a Nochebuena, el 8 de marzo es el día internacional de la mujer, mientras que el 1 de septiembre está a un día antes del día del trabajo en Estados Unidos, el cuál siempre sucede el lunes, es posible que las familias aprovechen para salir de vacaciones durante el fin de semana previo al día del trabajo. Observando los 10 días más concurridos del año se encontró un porcentaje mayor al 60% en todos los días con medias superiores a los 30 días, demostrando que el aumento repentino de la demanda representa un reto importante dentro de los aeropuertos.

  • Los días de la semana no tienen un impacto significativo en el aumento de los retrasos. Los usuarios de un aeropuerto cuentan con necesidades distintas, como trabajo, visitas familiares, viajes, entre otros, por ende, la demanda por los vuelos se determina en mayor medida en función con el mes, o bien algún día festivo o evento. Al analizar los retrasos por día de la semana se observó que el porcentaje de retrasos se encuentra en un rango de 34.1% los sábados a 41.8% los jueves, con una variación de 7.7% entre el valor más bajo y alto, si bien podría decirse que los retrasos aumentan dependiendo del día, el aumento no es tan grande en comparación a otras variables.

  • La cantidad de retrasos en la salida de vuelos ocurre durante la tarde. Los aeropuertos presentan su periodo de mayor actividad durante la tarde por lo cual se esperaría que los retrasos de los vuelos aumentaran conforme avanzara la tarde. Utilizando un gráfico de barras se detectó que la cantidad de vuelos retrasados si aumenta durante el transcurso del día y alcanza su punto máximo a las 5 de la tarde. Sin embargo, al revisar la cantidad de minutos que los vuelos se retrasan por hora se descubrió que el tiempo de retraso es similar independientemente de la hora.

  • Los vuelos tienden a retrasarse con mayor frecuencia conforme avanza el día. Como se describe en el punto anterior el aumento en la actividad del aeropuerto a partir de la tarde es responsable de generar retrasos, sin embargo, al observar el porcentaje de vuelos retrasados, se descubrió que los problemas con los retrasos empiezan desde la mañana, puesto que a las 6AM el porcentaje de retrasos es mayor al 20%, lo cual incrementa a 30% a partir de las 12PM y supera el 40% 1 hora después, esto representa un aumento de 20% en solo 6 horas.

  • A través de un modelo de regresión lineal, encontramos que la visibilidad y la precipitación tienen un impacto considerable en los tiempos de retraso. Esto puede deberse a que la aparición de condiciones climáticas desfavorables puede suponer un riesgo en la seguridad de los pasajeros. Específicamente, la precipitación está fuertemente asociada con aumentos significativos en los retrasos e inclusive cancelaciones de los vuelos demostrado por la cantidad de vuelos registrados una vez que la precipitación es mayor a 1 milibar, mientras que una mayor visibilidad tiende a reducir los tiempos de retraso.

Mediante el análisis de la información de los vuelos de Nueva York se podrían realizar acciones enfocadas a la prevención de los retrasos, por ejemplo, conociendo los días y meses más concurridos se podría realizar un plan para controlar el incremento repentino en la cantidad de personas en los aeropuertos. Por otro lado, mediante el uso de los datos del clima se puede realizar pronósticos o detectar la tendencia de la aparición de condiciones climáticas como precipitación como forma de anticiparse al riesgo de retrasos o cancelación de vuelos.

Compromiso ético y ciudadano

Reflexión (Camila Cevallos) La integridad es un valor fundamental en cualquier ámbito de la vida, y es especialmente crucial en el mundo de los negocios y el análisis de datos. La integridad implica ser honesto, justo, y mantener un conjunto coherente de principios éticos en todas nuestras acciones.

Reflexión (Antonio Díaz) Para mi, la integridad se trata de ser honesto y actuar de acuerdo a nuestros principios. Inclusive si nadie nos está viendo. Es muy importante ya que está ligada a nuestra autoestima y a nuestra confianza, ya que en lo personal nos enseña a asumir responsabilidad por nuestras acciones y al tomar decisiones. Además, esta promueve la armonía social y ayuda a construir relaciones de buenos valores. Cabe recalcar que fomentar la integridad es clave para criar a individuos que tomen decisiones positivas y sepan enfrentar las presiones sociales.

Reflexión (Luis Dávila) Desde mi punto de vista la integridad representa hacer las cosas de la forma correcta, siempre siendo honesto y procurando no actuar de una manera que afecte negativamente a otros. Tener datos de una empresa implica actuar con responsabilidad y precaución, dejando a un lado las consecuencias legales y problemas en los que podría incurrir como profesional al hacer mal uso de los datos. Mi integridad como persona y como profesional va a depender de las acciones que tome dentro de un ambiente laboral.

Referencias

La Ciencia de la Integridad. (2021). Naciones Unidas : Oficina de Las Naciones Unidas Contra La Droga Y El Delito. https://www.unodc.org/unodc/es/listen-first/super-skills/integrity.html

Package “nycflights13” Title Flights that Departed NYC in 2013. (2019). https://cran.r-project.org/web/packages/nycflights13/nycflights13.pdf

Integridad - Ethics Unwrapped. (2022). Ethics Unwrapped. https://ethicsunwrapped.utexas.edu/glossary/integridad?lang=es

LS0tCnRpdGxlOiAiRXZpZGVuY2lhIgphdXRob3I6ICJBbnRvbmlvIETDrWF6IEEwMDgzNzI1OSIKZGF0ZTogIjIwMjQtMDMtMTAiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCiAgICB0aGVtZTogcmVhZGFibGUKLS0tCgohW10oL1VzZXJzL2FudG9uaW9kaWF6L0Rlc2t0b3AvTWFuaXB1bGFjaW/MgW4gRGF0b3MvcG5ndHJlZS1haXJwbGFuZS1mbGlnaHQtYWlyLXRyYW5zcG9ydC1wbmctaW1hZ2VfOTEzNTQ4Ni5wbmcpCgojIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5Db250ZXh0bzwvc3Bhbj4KRWwgcGFxdWV0ZSAqKm55Y2ZsaWdodHMxMyoqIGNvbnRpZW5lIGluZm9ybWFjacOzbiBzb2JyZSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBwYXJ0aWVyb24gZGVzZGUgTnVldmEgWW9yayAoRVdSLCBKRksgWSBMR0EpIGEgZGVzdGlub3MgZW4gbG9zIEVzdGFkb3MgVW5pZG9zIGVuIDIwMTMuIEZ1ZXJvbiAzMzYsNzc2IHZ1ZWxvcyBlbiB0b3RhbC4gUGFyYSBheXVkYXIgYSBjb21wcmVuZGVyIGxhcyBjYXVzYXMgZGUgbG9zIHJldHJhc29zLCB0YW1iacOpbiBpbmNsdXllIG90cm9zIGNvbmp1bnRvcyBkZSBkYXRvcyDDunRpbGVzLiAgCgpFc3RlIHBhcXVldGUgaW5jbHV5ZSBsYXMgc2lndWllbnRlcyB0YWJsYXM6IAoKKiBmbGlnaHRzID0gdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgc2FsaWVyb24gZGUgTmV3IFlvcmsgZW4gMjAxMyAgICAKKiB3ZWF0aGVyID0gZGF0b3MgbWV0ZXJlb2zDs2dpY29zIHBvciBob3JhIGRlIGNhZGEgYWVyb3B1ZXJ0byAgCiogcGxhbmVzPSBpbmZvcm1hY2nDs24gZGUgY29uc3RydWNjacOzbiBkZSBjYWRhIGF2acOzbiAgCiogYWlycG9ydHMgPSBub21icmVzIHkgdWJpY2FjaW9uZXMgZGUgYWVyb3B1ZXJ0b3MgIAoqIGFpcmxpbmVzPSByZWxhY2nDs24gZW50cmUgbm9tYnJlcyB5IGPDs2RpZ29zIGRlIGxhcyBhZXJvbMOtbmVhcyAgCgogRnVlbnRlOiAgCiBbT3JpZ2VuIGRlIGxvcyBkYXRvc10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL255Y2ZsaWdodHMxMy9ueWNmbGlnaHRzMTMucGRmKQoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBpbnN0YWxsLnBhY2thZ2VzKCJueWNmbGlnaHRzMTMiKQpsaWJyYXJ5KG55Y2ZsaWdodHMxMykKIyBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKIyBpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpCmxpYnJhcnkoZHBseXIpCiMgaW5zdGFsbC5wYWNrYWdlcyhnZ3Bsb3QyKQpsaWJyYXJ5KGdncGxvdDIpCmBgYAoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+UGFydGUgMS4gRXhwbG9yYWNpw7NuIGRlIGRhdG9zPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkNhcmdhciBiYXNlcyBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CmFpcnBvcnRzIDwtIGFpcnBvcnRzCmZsaWdodHMgPC0gZmxpZ2h0cwp3ZWF0aGVyIDwtIHdlYXRoZXIKcGxhbmVzIDwtIHBsYW5lcwphaXJsaW5lcyA8LSBhaXJsaW5lcwpgYGAKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij4qRGF0YUZyYW1lKiAiKmFpcnBvcnRzKiI8L3NwYW4+CgpgYGB7cn0KIyBNb3N0cmFyIGNvbnRlbmlkbwphaXJwb3J0cwpgYGAKCmBgYHtyfQojIFZlciBsYSBlc3RydWN0dXJhIApzdHIoYWlycG9ydHMpCmBgYAoKYGBge3J9CiMgQ29uc3VsdGFyIGNsYXNlIGRlIG9iamV0bwpjbGFzcyhhaXJwb3J0cykKYGBgCgpgYGB7cn0KIyBPYnNlcnZhciBlbCB0YW1hw7FvIGRlbCBkYXRhIGZyYW1lCm5jb2woYWlycG9ydHMpCm5yb3coYWlycG9ydHMpCmRpbShhaXJwb3J0cykKYGBgCgpgYGB7cn0KIyBNb3N0cmFyIHByaW1lcm9zIHkgw7psdGltb3MgcmVuZ2xvbmVzCmhlYWQoYWlycG9ydHMpCnRhaWwoYWlycG9ydHMpCmBgYAoKYGBge3J9CiMgRXN0YWTDrXN0aWNvcyBkZXNjcmlwdGl2b3MKc3VtbWFyeShhaXJwb3J0cykKYGBgCgoqYWlycG9ydHMqOiAKCiogZmFhKGNoYXJhY3RlcikgPSBDw7NkaWdvIGRlbCBhZXJvcHVlcnRvCiogbmFtZShjaGFyYWN0ZXIpID0gTm9tYnJlIGRlbCBhZXJvcHVlcnRvCiogbGF0KG51bWVyaWMpID0gTGF0aXR1ZAoqIGxvbihudW1lcmljKSA9IExvbmdpdHVkCiogYWx0KG51bWVyaWMpID0gQWx0aXR1ZAoqIHR6KG51bWVyaWMpID0gRGlmZXJlbmNpYSBkZSB6b25hIGhvcmFyaWEgY29uIEdNVAoqIGRzdChjaGFyYWN0ZXIpID0gSG9yYXJpbyBkZSB2ZXJhbm8KKiB0em9uZShjaGFyYWN0ZXIpID0gWm9uYSBob3JhcmlhCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+KkRhdGFGcmFtZSogIipmbGlnaHRzKiI8L3NwYW4+CgpgYGB7cn0KIyBNb3N0cmFyIGNvbnRlbmlkbwpmbGlnaHRzCmBgYAoKYGBge3J9CiMgVmVyIGxhIGVzdHJ1Y3R1cmEgCnN0cihmbGlnaHRzKQpgYGAKCmBgYHtyfQojIENvbnN1bHRhciBjbGFzZSBkZSBvYmpldG8KY2xhc3MoZmxpZ2h0cykKYGBgCgpgYGB7cn0KIyBPYnNlcnZhciBlbCB0YW1hw7FvIGRlbCBkYXRhIGZyYW1lCm5jb2woZmxpZ2h0cykKbnJvdyhmbGlnaHRzKQpkaW0oZmxpZ2h0cykKYGBgCgpgYGB7cn0KIyBNb3N0cmFyIHByaW1lcm9zIHkgw7psdGltb3MgcmVuZ2xvbmVzCmhlYWQoZmxpZ2h0cykKdGFpbChmbGlnaHRzKQpgYGAKCmBgYHtyfQojIEVzdGFkw61zdGljb3MgZGVzY3JpcHRpdm9zCnN1bW1hcnkoZmxpZ2h0cykKYGBgCgoqZmxpZ2h0cyo6IAoKKiB5ZWFyKGludGVnZXIpID0gQcOxbwoqIG1vbnRoKGludGVnZXIpID0gTWVzCiogZGF5KGludGVnZXIpID0gRMOtYQoqIGRlcF90aW1lKGludGVnZXIpID0gVGllbXBvIGRlIHBhcnRpZGEKKiBzY2hlZF9kZXBfdGltZShpbnRlZ2VyKSA9IFRpZW1wbyBkZSBzYWxpZGEgcHJvZ3JhbWFkbwoqIGRlcF9kZWxheShudW1lcmljKSA9IFJldHJhc28gZW4gc2FsaWRhIChtaW51dG9zKQoqIGFycl90aW1lKGludGVnZXIpID0gVGllbXBvIGRlIGxsZWdhZGEKKiBzY2hlZF9hcnJfdGltZShpbnRlZ2VyKSA9IFRpZW1wbyBkZSBsbGVnYWRhIHByb2dyYW1hZG8KKiBhcnJfZGVsYXkobnVtZXJpYykgPSBSZXRyYXNvIGVuIHNhbGlkYSAobWludXRvcykKKiBjYXJyaWVyKGNoYXJhY3RlcikgPSBBZXJvbMOtbmVhCiogZmxpZ2h0KGludGVnZXIpID0gTsO6bWVybyBkZWwgdnVlbG8KKiB0YWlsbnVtKGNoYXJhY3RlcikgPSBOw7ptZXJvIGRlIGF2acOzbgoqIG9yaWdpbihjaGFyYWN0ZXIpID0gT3JpZ2VuIAoqIGRlc3QoY2hhcmFjdGVyKSA9IERlc3Rpbm8KKiBhaXJfdGltZShudW1lcmljKSA9IFRpZW1wbyB0b3RhbCBlbiBlbCBhaXJlIChtaW51dG9zKQoqIGRpc3RhbmNlKG51bWVyaWMpID0gRGlzdGFuY2lhIGVudHJlIGFlcm9wdWVydG9zIChtaWxsYXMpCiogaG91cihudW1lcmljKSA9IEhvcmEgcHJvZ3JhbWFkYSBkZSBzYWxpZGEKKiBtaW51dGUobnVtZXJpYykgPSBNaW51dG8gcHJvZ3JhbWFkbyBkZSBzYWxpZGEKKiB0aW1lX2hvdXIoUE9TSVhjdCkgPSBGZWNoYSB5IGhvcmEgZGVsIHZ1ZWxvCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+KkRhdGFGcmFtZSogIip3ZWF0aGVyKiI8L3NwYW4+CgpgYGB7cn0KIyBNb3N0cmFyIGNvbnRlbmlkbwp3ZWF0aGVyCmBgYAoKYGBge3J9CiMgVmVyIGxhIGVzdHJ1Y3R1cmEgCnN0cih3ZWF0aGVyKQpgYGAKCmBgYHtyfQojIENvbnN1bHRhciBjbGFzZSBkZSBvYmpldG8KY2xhc3Mod2VhdGhlcikKYGBgCgpgYGB7cn0KIyBPYnNlcnZhciBlbCB0YW1hw7FvIGRlbCBkYXRhIGZyYW1lCm5jb2wod2VhdGhlcikKbnJvdyh3ZWF0aGVyKQpkaW0od2VhdGhlcikKYGBgCgpgYGB7cn0KIyBNb3N0cmFyIHByaW1lcm9zIHkgw7psdGltb3MgcmVuZ2xvbmVzCmhlYWQod2VhdGhlcikKdGFpbCh3ZWF0aGVyKQpgYGAKCmBgYHtyfQojIEVzdGFkw61zdGljb3MgZGVzY3JpcHRpdm9zCnN1bW1hcnkod2VhdGhlcikKYGBgCgoqd2VhdGhlcio6IAoKKiBvcmlnaW4oY2hhcmFjdGVyKSA9IE9yaWdlbiAKKiB5ZWFyKGludGVnZXIpID0gQcOxbwoqIG1vbnRoKGludGVnZXIpID0gTWVzCiogZGF5KGludGVnZXIpID0gRMOtYQoqIGhvdXIobnVtZXJpYykgPSBIb3JhCiogdGVtcChudW1lcmljKSA9IFRlbXBlcmF0dXJhICjCsEYpCiogZGV3cChudW1lcmljKSA9IFB1bnRvIGRlIHJvY8OtbyAowrBGKQoqIGh1bWlkKG51bWVyaWMpID0gSHVtZWRhZCByZWxhdGl2YQoqIHdpbmRfZGlyKG51bWVyaWMpID0gRGlyZWNjacOzbiBkZWwgdmllbnRvICjCsCkKKiB3aW5kX3NwZWVkKG51bWVyaWMpID0gVmVsb2NpZGFkIGRlbCB2aWVudG8gKG1waCkKKiB3aW5kX2d1c3QobnVtZXJpYykgPSBSw6FmYWdhIGRlIHZpZW50byAobXBoKQoqIHByZWNpcChudW1lcmljKSA9IFByZWNpcGl0YWNpw7NuIChwdWxnYWRhcykKKiBwcmVzc3VyZShudW1lcmljKSA9IFByZXNpw7NuIGFsIG5pdmVsIGRlbCBtYXIgKG1pbGliYXJlcykKKiB2aXNpYihudW1lcmljKSA9IFZpc2liaWxpZGFkIChtaWxsYXMpCiogdGltZV9ob3VyKFBPU0lYY3QpID0gRmVjaGEgeSBIb3JhCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+KkRhdGFGcmFtZSogIipwbGFuZXMqIjwvc3Bhbj4KCmBgYHtyfQojIE1vc3RyYXIgY29udGVuaWRvCnBsYW5lcwpgYGAKCmBgYHtyfQojIFZlciBsYSBlc3RydWN0dXJhIApzdHIocGxhbmVzKQpgYGAKCmBgYHtyfQojIENvbnN1bHRhciBjbGFzZSBkZSBvYmpldG8KY2xhc3MocGxhbmVzKQpgYGAKCmBgYHtyfQojIE9ic2VydmFyIGVsIHRhbWHDsW8gZGVsIGRhdGEgZnJhbWUKbmNvbChwbGFuZXMpCm5yb3cocGxhbmVzKQpkaW0ocGxhbmVzKQpgYGAKCmBgYHtyfQojIE1vc3RyYXIgcHJpbWVyb3MgeSDDumx0aW1vcyByZW5nbG9uZXMKaGVhZChwbGFuZXMpCnRhaWwocGxhbmVzKQpgYGAKCmBgYHtyfQojIEVzdGFkw61zdGljb3MgZGVzY3JpcHRpdm9zCnN1bW1hcnkocGxhbmVzKQpgYGAKCipwbGFuZXMqOiAKCiogdGFpbG51bShjaGFyYWN0ZXIpID0gTsO6bWVybyBkZSBhdmnDs24KKiB5ZWFyKGludGVnZXIpID0gQcOxbyBkZSBmYWJyaWNhY2nDs24KKiB0eXBlKGNoYXJhY3RlcikgPSBUaXBvIGRlIGF2acOzbgoqIG1hbnVmYWN0dXJlcihjaGFyYWN0ZXIpID0gRmFicmljYW50ZQoqIG1vZGVsKGNoYXJhY3RlcikgPSBNb2RlbG8KKiBlbmdpbmVzKGludGVnZXIpID0gTsO6bWVybyBkZSBtb3RvcmVzCiogc2VhdHMoaW50ZWdlcikgPSBOw7ptZXJvIGRlIGFzaWVudG9zCiogc3BlZWQoaW50ZWdlcikgPSBWZWxvY2lkYWQgUHJvbWVkaW8gKG1waCkKKiBlbmdpbmUoY2hhcmFjdGVyKSA9IFRpcG8gZGUgbW90b3IgCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+KkRhdGFGcmFtZSogIiphaXJsaW5lcyoiPC9zcGFuPgoKYGBge3J9CiMgTW9zdHJhciBjb250ZW5pZG8KYWlybGluZXMKYGBgCgpgYGB7cn0KIyBWZXIgbGEgZXN0cnVjdHVyYSAKc3RyKGFpcmxpbmVzKQpgYGAKCmBgYHtyfQojIENvbnN1bHRhciBjbGFzZSBkZSBvYmpldG8KY2xhc3MoYWlybGluZXMpCmBgYAoKYGBge3J9CiMgT2JzZXJ2YXIgZWwgdGFtYcOxbyBkZWwgZGF0YSBmcmFtZQpuY29sKGFpcmxpbmVzKQpucm93KGFpcmxpbmVzKQpkaW0oYWlybGluZXMpCmBgYAoKYGBge3J9CiMgTW9zdHJhciBwcmltZXJvcyB5IMO6bHRpbW9zIHJlbmdsb25lcwpoZWFkKGFpcmxpbmVzKQp0YWlsKGFpcmxpbmVzKQpgYGAKCmBgYHtyfQojIEVzdGFkw61zdGljb3MgZGVzY3JpcHRpdm9zCnN1bW1hcnkoYWlybGluZXMpCmBgYAoKKmFpcmxpbmVzKjogCgoqIGNhcnJpZXIoY2hhcmFjdGVyKSA9IEFlcm9sw61uZWEKKiBuYW1lKGNoYXJhY3RlcikgPSBOb21icmUgQ29tcGxldG8gZGUgYWVyb2zDrW5lYQoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+UGFydGUgMi4gTWFuaXB1bGFjacOzbiBkZSBkYXRvczwvc3Bhbj4KCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5SZWxhY2nDs24gZW50cmUgbGFzIGJhc2VzIGRlIGRhdG9zPC9zcGFuPgohW10oQzpcXFVzZXJzXFxBZHJpw6FuXFxEb3dubG9hZHNcXHJlbGF0aW9uYWwtbnljZmxpZ2h0cy5wbmcpCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+Q29tYmluYXIgYmFzZXMgZGUgZGF0b3M8L3NwYW4+CmBgYHtyfQpiZGdyYW5kZSA8LSBtZXJnZShmbGlnaHRzLGFpcmxpbmVzLCBieT0iY2FycmllciIpCmJkZ3JhbmRlMiA8LSBsZWZ0X2pvaW4oYmRncmFuZGUscGxhbmVzLCBieT0idGFpbG51bSIpCmJkZ3JhbmRlMyA8LSBsZWZ0X2pvaW4oYmRncmFuZGUyLHdlYXRoZXIsIGJ5PWMoIm9yaWdpbiIsInRpbWVfaG91ciIpKQpgYGAKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5Fc3RhZMOtc3RpY29zIGRlc2NyaXB0aXZvcyBkZWwgZGF0YWZyYW1lIGNvbWJpbmFkbzwvc3Bhbj4KYGBge3J9CnN1bW1hcnkoYmRncmFuZGUzKQpgYGAKCgpgYGB7cn0KIyBWZXIgZXN0YWTDrXN0aWNvcyBkZXNjcmlwdGl2b3MgZGUgbGEgZGlzdGFuY2lhIGVuIG1pbGxhcwpzdW1tYXJ5KGJkZ3JhbmRlM1siZGlzdGFuY2UiXSkKYGBgCkxhIG1lZGlhIGRlIGxhIGRpc3RhbmNpYSByZWNvcnJpZGEgZW4gbWlsbGFzIGVzIDEwNDAgbWkKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5BZXJvbMOtbmVhcyBoYW4gcmVjb3JyaWRvIGRpc3RhbmNpYXMgc3VwZXJpb3JlcyBhIGxhIG1lZGlhCmBgYHtyfQojIENyZWFyIG51ZXZvIGRhdGFmcmFtZSBjb21wdWVzdG8gZGUgYWVyb2zDrW5lYSwgZGlzdGFuY2lhLCBvcmlnZW4geSBkZXN0aW5vCmRpc3RhbmNpYXMgPC0gYmRncmFuZGUzICU+JSBzZWxlY3QoY2FycmllcixkaXN0YW5jZSxvcmlnaW4sZGVzdCkKIyBJbmNsdWlyIHVuaWNhbWVudGUgYWVyb2zDrW5lYXMgcXVlIHJlY29ycmllcm9uIHVuYSBkaXN0YW5jaWEgc3VwZXJpb3IgYSBsYSBtZWRpYQpkaXN0YW5jaWFzIDwtIGZpbHRlcihkaXN0YW5jaWFzLGRpc3RhbmNlID4gMTA0MCkKIyBPcmRlbmFyIHBvciBkaXN0YW5jaWEgZW4gZm9ybWEgZGVzY2VuZGVudGUKZGlzdGFuY2lhcyA8LSBhcnJhbmdlKGRpc3RhbmNpYXMsZGVzYyhkaXN0YW5jZSkpCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkVuY29udHJhciBsYSBzdW1hIHkgbWVkaWEgZGUgbGFzIGRpc3RhbmNpYXMgcmVjb3JyaWRhcyBwb3IgYWVyb2zDrW5lYSBlbGltaW5hbmRvIHZhbG9yZXMgdmFjaW9zPC9zcGFuPgpgYGB7cn0KIyBEaXN0YW5jaWEgdG90YWwgeSBkaXN0YW5jaWEgbWVkaWEgcG9yIGFlcm9sw61uZWEKZGlzdGFuY2lhc190IDwtIGRpc3RhbmNpYXMgJT4lIGdyb3VwX2J5KGNhcnJpZXIsb3JpZ2luKQpkaXN0YW5jaWFzX3QgPC0gZGlzdGFuY2lhc190ICU+JSBzdW1tYXJpemUoc3VtYV9kaXN0YW5jaWEgPSBzdW0oZGlzdGFuY2UsbmEucm0gPSBUUlVFKSxtZWRpYV9kaXN0YW5jaWEgPSBtZWFuKGRpc3RhbmNlLG5hLnJtID0gVFJVRSkpCmFycmFuZ2UoZGlzdGFuY2lhc190LGRlc2Moc3VtYV9kaXN0YW5jaWEpKQpgYGAKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkludGVycHJldGFjaW9uZXM8L3NwYW4+CkxhcyBhZXJvbMOtbmVhcyBxdWUgY3VlbnRhbiBjb24gbGEgbWF5b3IgY2FudGlkYWQgZGUgZGlzdGFuY2lhIHJlY29ycmlkYSBlbiB2dWVsb3Mgc29uIOKAnFVB4oCdLCDigJxCNuKAnSwgeSDigJxETOKAnS4gTWllbnRyYXMgcXVlIOKAnFVB4oCdIHByb3ZpZW5lIGRlbCBhZXJvcHVlcnRvIOKAnEVXUuKAnSBsYXMgb3RyYXMgZG9zIGFlcm9sw61uZWFzIHByb3ZpZW5lbiBkZWwgYWVyb3B1ZXJ0byDigJxETOKAnS4gUGVzZSBhIG5vIHNlciBsYXMgYWVyb2zDrW5lYXMgY29uIGxvcyBtYXlvcmVzIHByb21lZGlvcyBkZSBkaXN0YW5jaWEuIExhIGNhbnRpZGFkIGRlIHZ1ZWxvcyBxdWUgcmVhbGl6YXJvbiBlbiAyMDEzIHB1ZWRlIHNlciBsYSByYXrDs24gZGV0csOhcyBkZSBzdSBhbHRhIGNhbnRpZGFkIGRlIGRpc3RhbmNpYS4KCkxhcyBhZXJvbMOtbmVhcyBjb24gbWF5b3IgcHJvbWVkaW8gZGUgZGlzdGFuY2lhIHBvciB2dWVsbyBzb24gbGFzIOKAnEhB4oCdIHkg4oCcVljigJ0uIOKAnEhB4oCdIMO6bmljYW1lbnRlIHJlYWxpemEgdnVlbG9zIGEgdW4gc29sbyBkZXN0aW5vLiBBbCBhbmFsaXphciBsYSBtZWRpYSBkZSBkaXN0YW5jaWEgcmVjb3JyaWRhIGxhIGFlcm9sw61uZWEgY3VlbnRhIGNvbiB1bmEgbWVkaWEgc2luIGRlY2ltYWxlcy4gTG8gY3XDoWwgYWwgb2JzZXJ2YXIgbGEgYmFzZSBkYXRvcyBtdWVzdHJhIHF1ZSBkaWNoYSBhZXJvbMOtbmVhIHNvbG8gdGllbmUgdW5hIHJ1dGEgY29uIGRlc3Rpbm8gYSDigJxITkzigJ0KCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5BZXJvbMOtbmVhcyBsw61kZXIgcG9yIGFlcm9wdWVydG88L3NwYW4+CmBgYHtyfQpkaXN0YW5jaWFzX2pmayA8LSBkaXN0YW5jaWFzX3QgJT4lIGZpbHRlcihvcmlnaW4gPT0gIkpGSyIpCmRpc3RhbmNpYXNfamZrIDwtIGRpc3RhbmNpYXNfamZrICU+JSBhcnJhbmdlKGRlc2Moc3VtYV9kaXN0YW5jaWEpKQpkaXN0YW5jaWFzX2xnYSA8LSBkaXN0YW5jaWFzX3QgJT4lIGZpbHRlcihvcmlnaW4gPT0gIkxHQSIpCmRpc3RhbmNpYXNfbGdhIDwtIGRpc3RhbmNpYXNfbGdhICU+JSBhcnJhbmdlKGRlc2Moc3VtYV9kaXN0YW5jaWEpKQpkaXN0YW5jaWFzX2V3ciA8LSBkaXN0YW5jaWFzX3QgJT4lIGZpbHRlcihvcmlnaW4gPT0gIkVXUiIpCmRpc3RhbmNpYXNfZXdyIDwtIGRpc3RhbmNpYXNfZXdyICU+JSBhcnJhbmdlKGRlc2Moc3VtYV9kaXN0YW5jaWEpKQpkaXN0YW5jaWFzX2pmawpkaXN0YW5jaWFzX2xnYQpkaXN0YW5jaWFzX2V3cgpgYGAKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5Db25jbHVzaW9uZXM8L3NwYW4+CkFsIGFuYWxpemFyIGxhcyBkaXN0YW5jaWFzIHRvdGFsZXMgeSBwcm9tZWRpbyBkZSBsYXMgYWVyb2zDrW5lYXMgcG9yIGFlcm9wdWVydG8gZW4gTnVldmEgWW9yayBkZXN0YWNhIGxhIGFlcm9sw61uZWEgIkFBIiwgbGEgY3VhbCBlbiBsb3MgdHJlcyBhZXJvcHVlcnRvcyBlcyB1bmEgZGUgbGFzIHByaW1lcmFzIHRyZXMgZW4gY3VhbnRvIGEgbGEgY2FudGlkYWQgZGUgZGlzdGFuY2lhIHJlY29ycmlkYSwgZXMgbGEgw7puaWNhIGFlcm9sw61uZWEgcXVlIGN1ZW50YSBjb24gdW5hIHBvc2ljacOzbiBkZSBsaWRlcmF6Z28gZW4gdG9kb3MgbG9zIGFlcm9wdWVydG9zIGRlIE51ZXZhIFlvcmssIG90cmFzIGFlcm9sw61uZWFzIGNvbW8gIkRMIiB5ICJVQSIsIGRlc3RhY2FuIGVuIGN1YW50byBhIGRpc3RhbmNpYSByZWNvcnJpZGEgcGVybyB1bmljYW1lbnRlIGVuIGRvcyBkZSBsb3MgdHJlcyBhZXJvcHVlcnRvcy4KCkxhcyBhZXJvbMOtbmVhcyBxdWUgY3VlbnRhbiBjb24gcHJvbWVkaW9zIGRlIGRpc3RhbmNpYXMgbcOhcyBhbHRvcywgeSBwb3IgZW5kZSByZWFsaXphbiB2dWVsb3MgZGUgbWF5b3IgZHVyYWNpw7NuIGNvbW8gIkhBIiB0aWVuZW4gbGEgY2FyYWN0ZXLDrXN0aWNhIGRlIHNvbG8gb3BlcmFyIGVuIHVubyBvIGRvcyBhZXJvcHVlcnRvcyBjb21vIG3DoXhpbW8uCgojIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5QYXJ0ZSAzLiBNb2RlbG8gRW50aWRhZCBSZWxhY2nDs248L3NwYW4+CgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+T3JpZ2VuLGRlc3Rpbm8geSBhZXJvbMOtbmVhIHBvciB2dWVsbzwvc3Bhbj4KYGBge3J9CiMgQ29ub2NlciBhZXJvbMOtbmVhLCBvcmlnZW4geSBkZXN0aW5vIHBvciB2dWVsbwphZXJvbGluZWEgPC0gYmRncmFuZGUzICU+JSBzZWxlY3QoZmxpZ2h0LGNhcnJpZXIsb3JpZ2luLGRlc3QpCiMgQWdyZWdhciBub21icmUgZGUgYWVyb2zDrW5lYQphZXJvbGluZWEgPC0gYmRncmFuZGUzICU+JSBzZWxlY3QoZmxpZ2h0LGNhcnJpZXIsbmFtZSxvcmlnaW4sZGVzdCkKYGBgCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+RGVzdGlub3MgbcOhcyBidXNjYWRvczwvc3Bhbj4KYGBge3J9CiMgQ29ub2NlciBsb3MgZGVzdGlub3MgbcOhcyBidXNjYWRvcwpkZXN0aW5vcyA8LSBiZGdyYW5kZTMgJT4lIHNlbGVjdChjYXJyaWVyLGRlc3QpCmRlc3Rpbm9zX2MgPC0gZGVzdGlub3MgJT4lIGNvdW50KGRlc3QpCmRlc3Rpbm9zX2MgPC0gYXJyYW5nZShkZXN0aW5vc19jLGRlc2MobikpCmRlc3Rpbm9zX2MKCiMgQ29ub2NlciBsb3MgZGVzdGlub3MgbcOhcyBidXNjYWRvcyBwb3IgYWVyb2zDrW5lYQpkZXN0aW5vc19hIDwtIGRlc3Rpbm9zICU+JSBjb3VudChkZXN0LGNhcnJpZXIpCmRlc3Rpbm9zX2EgPC0gYXJyYW5nZShkZXN0aW5vc19hLGRlc2MobikpCmRlc3Rpbm9zX2EKYGBgCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+RGVzdGlub3MgbcOhcyBidXNjYWRvcyBjb24gbm9tYnJlIGRlIGFlcm9sw61uZWE8L3NwYW4+CmBgYHtyfQpkZXN0aW5vc19hZXJvbGluZWEgPC0gZGVzdGlub3NfYSAlPiUgbGVmdF9qb2luKGFpcmxpbmVzLGJ5PSJjYXJyaWVyIikKZGVzdGlub3NfYWVyb2xpbmVhCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPlZ1ZWxvcyBkaXZpZGlkb3MgZW4gaG9yYXJpb3MgZGUgc2FsaWRhPC9zcGFuPgpgYGB7cn0KIyBEaXZpZGlyIGVuIGhvcmFyaW9zIGRlIHNhbGlkYQpob3JhcmlvcyA8LSBiZGdyYW5kZTMgJT4lCiAgc2VsZWN0KGNhcnJpZXIsIG5hbWUsIGRlc3QsIHNjaGVkX2RlcF90aW1lKSAlPiUKICBtdXRhdGUoY2xhc19ob3JhcmlvID0gaWZlbHNlKHNjaGVkX2RlcF90aW1lICVpbiUgMDo1NTksICJNYWRydWdhZGEiLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2Uoc2NoZWRfZGVwX3RpbWUgJWluJSA2MDA6MTE1OSwgIk1hw7FhbmEiLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2Uoc2NoZWRfZGVwX3RpbWUgJWluJSAxMjAwOjE4NTksICJUYXJkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzY2hlZF9kZXBfdGltZSAlaW4lIDE5MDA6MjQwMCwgIk5vY2hlIixOQSkpKSkpCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkNhbnRpZGFkIGRlIHZ1ZWxvcyBwb3IgdGllbXBvIGRlbCBkw61hPC9zcGFuPgpgYGB7cn0KIyBDb25vY2VyIGxhIGNhbnRpZGFkIGRlIHZ1ZWxvIHBvciB0aWVtcG8gZGVsIGTDrWEKaG9yYXJpb3NfYyA8LSBob3JhcmlvcyAlPiUgY291bnQoY2FycmllcixkZXN0LGNsYXNfaG9yYXJpbykKYXJyYW5nZShob3Jhcmlvc19jLGRlc2MobikpCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkRlc3Rpbm9zIGEgbG9zIHF1ZSB2dWVsYSBsYSBhZXJvbMOtbmVhIEFtZXJpY2FuIEFpcmxpbmVzIEluYy4gZHVyYW50ZSBsYSBtYWRydWdhZGE8L3NwYW4+CmBgYHtyfQptYWRydWdhZGFfYWEgPC0gZmlsdGVyKGhvcmFyaW9zLGNsYXNfaG9yYXJpbyA9PSAiTWFkcnVnYWRhIiAmIGNhcnJpZXIgPT0gIkFBIikKbWFkcnVnYWRhX2FhIDwtIG1hZHJ1Z2FkYV9hYSAlPiUgZ3JvdXBfYnkoZGVzdCkKbWFkcnVnYWRhX2FhCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkF2aW9uZXMgdXRpbGl6YWRvcyBwb3IgQW1lcmljYW4gQWlybGluZXMgSW5jLjwvc3Bhbj4KYGBge3J9CmF2aW9uZXNfYWEgPC0gZmlsdGVyKGJkZ3JhbmRlMyxjYXJyaWVyPT0iQUEiLCFpcy5uYSh0eXBlKSkKYXZpb25lc19hYSA8LSBzZWxlY3QoYXZpb25lc19hYSxjYXJyaWVyLHR5cGUsZW5naW5lLHNlYXRzKQphdmlvbmVzX2FhIDwtIGdyb3VwX2J5KGF2aW9uZXNfYWEsY2Fycmllcix0eXBlLGVuZ2luZSxzZWF0cykKY291bnQoYXZpb25lc19hYSkKYGBgCgoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkNvbmNsdXNpb25lczwvc3Bhbj4KKiBMb3MgZGVzdGlub3MgbcOhcyBidXNjYWRvcyBlbiBsb3MgYWVyb3B1ZXJ0b3MgZGUgTnVldmEgWW9yayBzb24gQ2hpY2FnbywgTG9zIMOBbmdlbGVzIHkgQXRsYW50YS4gTGFzIGFlcm9sw61uZWFzIHF1ZSBvZnJlY2VuIHZ1ZWxvcyBoYWNpYSBsb3MgZGVzdGlub3MgbcOhcyBwb3B1bGFyZXMgY29pbmNpZGVuIGNvbiBhcXVlbGxhcyBxdWUgdGllbmVuIHVuIHB1ZXN0byBkZSBsaWRlcmF6Z28gZGVudHJvIGRlIGxvcyBhZXJvcHVlcnRvcyBkZSBOdWV2YSBZb3JrLiBBbCBhbmFsaXphciBsYXMgYWVyb2zDrW5lYXMgcXVlIGZyZWN1ZW50YW4gZXN0b3MgZGVzdGlub3MsIGFlcm9sw61uZWFzIGzDrWRlcmVzIGNvbW8g4oCcQUHigJ0geSDigJxETOKAnS4gU29uIGxhcyBhZXJvbMOtbmVhcyBxdWUgcmVhbGl6YW4gbGEgbWF5b3IgY2FudGlkYWQgZGUgdnVlbG9zIGVuIGxvcyB0cmVzIGRlc3Rpbm9zIG3DoXMgcG9wdWxhcmVzLCBsbyBjdcOhbCBwdWVkZSBlc3RhciBkaXJlY3RhbWVudGUgcmVsYWNpb25hZG8gY29uIHN1IMOpeGl0by4KCiogTG9zIHBlcmlvZG9zIGRlIHRpZW1wbyBlbiBsb3MgcXVlIHNlIHByZXNlbnRhIG1heW9yIGFjdGl2aWRhZCBlbiBlbCBhZXJvcHVlcnRvIHNvbiBsYSBtYcOxYW5hIHkgbGEgdGFyZGUuIFBvciBjdWVzdGlvbmVzIGRlIGNvbW9kaWRhZCBvIGRlIHRpZW1wbyByZXN1bHRhIG3DoXMgZsOhY2lsIHBhcmEgbGFzIHBlcnNvbmFzIHRvbWFyIHVuIHZ1ZWxvIGR1cmFudGUgZWwgZMOtYSBxdWUgZW4gbGEgbm9jaGUuIEVzdG8gc2UgcHVlZGUgb2JzZXJ2YXIgYWwgYW5hbGl6YXIgbGEgZnJlY3VlbmNpYSBkZSB2dWVsbyBwb3IgcGVyaW9kbyBkZWwgZMOtYSBkb25kZSBsb3MgdnVlbG9zIHF1ZSBzZSByZWFsaXphcm9uIGNvbiBtYXlvciBmcmVjdWVuY2lhIHBvciBsYXMgYWVyb2zDrW5lYXMgb2N1cnJlbiBkdXJhbnRlIGVzZSBwZXJpb2RvIGRlIHRpZW1wbywgbWllbnRyYXMgcXVlIGxhIGNhbnRpZGFkIGRlIHZ1ZWxvcyByZWFsaXphZG9zIGR1cmFudGUgbGEgbm9jaGUgbyBtYWRydWdhZGEgZXMgbWVub3IuCgoqIEVuIGVsIGNhc28gZGUgbGEgYWVyb2zDrW5lYSDigJxBbWVyaWNhbiBBaXJsaW5lc+KAnSBhbCByZXZpc2FyIHN1cyBhdmlvbmVzLCBwcmVkb21pbmEgbGEgcHJlc2VuY2lhIGRlIGF2aW9uZXMgZGUgdGFtYcOxbyBncmFuZGUsIGNvbiB1bmEgY2FwYWNpZGFkIGRlIDE3MiBhc2llbnRvcyB5IGRlIDI1NSBlbiBzdSBtb2RlbG8gZGUgYXZpw7NuIG1hcyB1dGlsaXphZG8uIEVzdG8gcHVlZGUgc2VyIGRlYmlkbyBhIHN1IHBvc2ljacOzbiBkZSBsaWRlcmF6Z28gZGVudHJvIGRlIGxvcyBhZXJvcHVlcnRvcyBkZSBOdWV2YSBZb3JrLgoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+UGFydGUgNC4gVmlzdWFsaXphY2nDs24gZGUgZGF0b3M8L3NwYW4+CgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+QW7DoWxpc2lzIGRlbCByZXRyYXNvIGRlIHBhcnRpZGEgeSBsbGVnYWRhIGVuIHZ1ZWxvcyBkZSAiQW1lcmljYW4gQWlybGluZXMgSW5jLiI8L3NwYW4+CmBgYHtyfQphYV92dWVsb3NfcmV0cmFzb3MgPC0gZmxpZ2h0cyAlPiUKICBmaWx0ZXIoY2FycmllciA9PSAiQUEiKSAlPiUKICBzZWxlY3QoZGVwX2RlbGF5LCBhcnJfZGVsYXkpIAoKZ2dwbG90KGFhX3Z1ZWxvc19yZXRyYXNvcywgYWVzKHggPSBkZXBfZGVsYXksIHkgPSBhcnJfZGVsYXksIGNvbG9yPWFycl9kZWxheSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4zKSArCiAgbGFicyh4ID0gIlJldHJhc28gZW4gbGEgU2FsaWRhIChtaW51dG9zKSIsIHkgPSAiUmV0cmFzbyBlbiBsYSBMbGVnYWRhIChtaW51dG9zKSIsCiAgICAgICB0aXRsZSA9ICJSZWxhY2nDs24gZW50cmUgbG9zIFJldHJhc29zIGRlIFNhbGlkYSB5IExsZWdhZGEgZGUgQW1lcmljYW4gQWlybGluZXMiKSAKYGBgCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+VGVuZGVuY2lhIGRlIGxhIHRlbXBlcmF0dXJhPC9zcGFuPgpgYGB7cn0KdGVtcF9lbmVybyA8LSBmaWx0ZXIoYmRncmFuZGUzLG9yaWdpbj09IkVXUiIpCnRlbXBfZW5lcm8gPC0gc2VsZWN0KHRlbXBfZW5lcm8sdGltZV9ob3VyLHRlbXApCnRlbXBfZW5lcm8gPC0gbmEub21pdCh0ZW1wX2VuZXJvKQoKdGVtcF9lbmVybyA8LSBzdWJzZXQodGVtcF9lbmVybywgdGltZV9ob3VyID49IGFzLlBPU0lYY3QoIjIwMTMtMDEtMDEgMDA6MDAiKSAmIHRpbWVfaG91ciA8IGFzLlBPU0lYY3QoIjIwMTMtMDEtMTQgMjM6NTkiKSkKCnRlbXBfZW5lcm8kZGF0ZSA8LSBhcy5EYXRlKHRlbXBfZW5lcm8kdGltZV9ob3VyKQp0ZW1wX2VuZXJvIDwtIHRlbXBfZW5lcm8gJT4lIGdyb3VwX2J5KGRhdGUpICU+JSBzdW1tYXJpemUodGVtcCA9IG1lYW4odGVtcCkpCgpnZ3Bsb3QodGVtcF9lbmVybyxhZXMoeD1kYXRlLHk9dGVtcCkpICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KCkgKyBsYWJzKHg9IkZlY2hhIix5PSJUZW1wZXJhdHVyYSIsdGl0bGU9IlRlbXBlcmF0dXJhICjCsEYpIGVuIGxvcyBwcmltZXJvcyAxNSBkw61hcyBkZSBFbmVybyBlbiBhZXJvcHVlcnRvIEVXUiIpIApgYGAKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5GcmVjdWVuY2lhIGRlIFRlbXBlcmF0dXJhPC9zcGFuPgpgYGB7cn0KdGVtcF9lbmVybzE1IDwtIGZpbHRlcihiZGdyYW5kZTMsbW9udGgueD09MSxkYXkueDw9MTUpCmdncGxvdCh0ZW1wX2VuZXJvMTUsYWVzKHg9dGVtcCkpICsgZ2VvbV9oaXN0b2dyYW0oY29sb3I9MSxiaW5zPTE1KSArIGxhYnMoeD0iVGVtcGVyYXR1cmEgKMKwRikiLHk9IkZyZWN1ZW5jaWEiLHRpdGxlPSJUZW1wZXJhdHVyYSBwb3IgbWVzIikgCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPlZhcmlhY2nDs24gbWVuc3VhbCBkZSB0ZW1wZXJhdHVyYTwvc3Bhbj4KYGBge3J9CmdncGxvdChiZGdyYW5kZTMsYWVzKHg9dGVtcCkpICsgZ2VvbV9oaXN0b2dyYW0oY29sb3I9MSxiaW5zPTEwKSArIGZhY2V0X3dyYXAoLn5tb250aC54KSArIGxhYnMoeD0iVGVtcGVyYXR1cmEiLHk9IkZyZWN1ZW5jaWEiLHRpdGxlPSJGcmVjdWVuY2lhIGRlIHRlbXBlcmF0dXJhcyBwb3IgbWVzIikgCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPk7Dum1lcm8gZGUgdnVlbG9zIHBvciBhZXJvbMOtbmVhIChHcsOhZmljYSBkZSBiYXJyYXMpPC9zcGFuPgpgYGB7cn0KdnVlbG9zX2EgPC0gYmRncmFuZGUzICU+JSBncm91cF9ieShjYXJyaWVyKSAlPiUgY291bnQoY2FycmllcikKdnVlbG9zX2EgPC0gYXJyYW5nZSh2dWVsb3NfYSxkZXNjKG4pKSAlPiUgaGVhZCgxMCkKCmdncGxvdCh2dWVsb3NfYSxhZXMoeD1yZW9yZGVyKGNhcnJpZXIsLW4pLHk9bixmaWxsPWNhcnJpZXIpKSArIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IikgKyBsYWJzKHg9IkFlcm9sw61uZWEiLHk9IlZ1ZWxvcyIsdGl0bGU9IlRvcCAxMCBhZXJvbMOtbmVhcyBjb24gbcOhcyB2dWVsb3MiKSAKYGBgCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+TsO6bWVybyBkZSB2dWVsb3MgcG9yIGFlcm9sw61uZWEgKFBpZSk8L3NwYW4+CmBgYHtyfQpnZ3Bsb3QodnVlbG9zX2EsYWVzKHg9IiIseT1uLGZpbGw9Y2FycmllcikpICsgZ2VvbV9jb2woY29sb3I9ImJsYWNrIikgKyBjb29yZF9wb2xhcih0aGV0YT0ieSIpICsgdGhlbWVfdm9pZCgpCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPlJlbGFjaW9uYXIgZGF0YSBmcmFtZSAiZmxpZ2h0cyIgY29uIGRhdGEgZnJhbWUgYWlycG9ydHM8L3NwYW4+CmBgYHtyfQphaXJwb3J0cyA8LSByZW5hbWUoYWlycG9ydHMsIm9yaWdpbiI9ImZhYSIpCmJkZ3JhbmRlNCA8LSBsZWZ0X2pvaW4oYmRncmFuZGUzLGFpcnBvcnRzLGJ5PSJvcmlnaW4iKQpgYGAKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5DYW50aWRhZCBkZSB2dWVsb3MgcG9yIGFlcm9sw61uZWE8L3NwYW4+CmBgYHtyfQp2dWVsb3NhZXJvcHVlcnRvIDwtIGdyb3VwX2J5KGJkZ3JhbmRlNCxuYW1lLnkpCmdncGxvdCh2dWVsb3NhZXJvcHVlcnRvLGFlcyh4PWNhcnJpZXIsZmlsbD1uYW1lLnkpKSArIGdlb21fYmFyKCkKYGBgCgpgYGB7cn0KZ2dwbG90KHZ1ZWxvc2Flcm9wdWVydG8sYWVzKHg9Y2FycmllcixmaWxsPW5hbWUueSkpICsgZ2VvbV9iYXIocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QodnVlbG9zYWVyb3B1ZXJ0byxhZXMoeD1jYXJyaWVyLGZpbGw9bmFtZS55KSkgKyBnZW9tX2JhcigpICsgZmFjZXRfZ3JpZChuYW1lLnkgfi4pCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkNvbmNsdXNpb25lczwvc3Bhbj4KCiogTG9zIHJldHJhc29zIGVuIGxhIHNhbGlkYSBkZSBsb3MgdnVlbG9zIGltcGxpY2FuIHF1ZSBlc3RvcyB0YW1iacOpbiBwcmVzZW50YXJhbiByZXRyYXNvIGVuIHN1IGxsZWdhZGEuIExvcyBhZXJvcHVlcnRvcyBjdWVudGFuIGNvbiBwcm90b2NvbG9zIGRlIHNlZ3VyaWRhZCB5IGVzdMOhbmRhcmVzIGVzdHJpY3RvcywgYWRlbcOhcyBkZSBsaW1pdGVzIHF1ZSB2YXLDrWFuIHBvciBtb2RlbG8gZGUgYXZpw7NuIGVuIGN1YW50byBhIGxhIHZlbG9jaWRhZCBtw6F4aW1hIHF1ZSBwdWVkZW4gYWxjYW56YXIsIHBvciBlbmRlLCBlcyBwb2NvIHByb2JhYmxlIHF1ZSB1biBhdmnDs24gbm8gbGxlZ3VlIGNvbiByZXRyYXNvIHkgc2FsacOzIHRhcmRlLiBBbCByZWFsaXphciB1biBncsOhZmljbyBkZSBkaXNwZXJzacOzbiBzZSBwdWVkZSBvYnNlcnZhciBxdWUgaGF5IHVuYSBjb3JyZWxhY2nDs24gZnVlcnRlIGVudHJlIGVsIHRpZW1wbyBkZSByZXRyYXNvIHkgZWwgdGllbXBvIGRlIHNhbGlkYSwgc3VnaXJpZW5kbyBxdWUgZWwgdGllbXBvIGRlIHJldHJhc28gbm8gc2UgcHVlZGUgcmVjdXBlcmFyIGNvbiBmYWNpbGlkYWQgZW4gZWwgdnVlbG8uCgoqIExhIHRlbXBlcmF0dXJhIHN1ZWxlIGluY3JlbWVudGFyIGEgcGFydGlyIGRlIGVuZXJvLCBjb25mb3JtZSBzZSBhY2VyY2EgbGEgcHJpbWF2ZXJhIHNlIGVzcGVyYSBxdWUgdGVtcGVyYXR1cmEgc2VhIG3DoXMgYWx0YSBjb24gbWF5b3IgZnJlY3VlbmNpYS4gQWwgY29sb2NhciBsb3MgMTIgbWVzZXMgZGVsIGHDsW8gZW4gdW4gaGlzdG9ncmFtYSwgZXMgcG9zaWJsZSBvYnNlcnZhciBxdWUgZGljaWVtYnJlIHN1ZWxlIHNlciBlbCBtZXMgbcOhcyBmcmlvIGVuIGxvcyBhZXJvcHVlcnRvcyBkZSBOdWV2YSBZb3JrIHkgcXVlIGEgcGFydGlyIGRlIGVuZXJvIGxhIHRlbXBlcmF0dXJhIHByb21lZGlvIHN1ZWxlIGluY3JlbWVudGFyLgogCiogRW4gY3VhbnRvIGEgbGEgZGlzdHJpYnVjacOzbiBkZSBsb3MgdnVlbG9zIGVuIGxvcyBkaWZlcmVudGVzIGFlcm9wdWVydG9zIGRlIE51ZXZhIFlvcmssIGxhcyBhZXJvbMOtbmVhcyB0aWVuZGVuIGEgY29uY2VudHJhciBsYSBtYXlvciBwYXJ0ZSBkZSBzdXMgcmVjdXJzb3MgYSB1biBzb2xvIGFlcm9wdWVydG8sIGHDum4gY3VhbmRvIGVzdGEgb3BlcmUgZW4gbcOhcyBkZSB1bm8uIEVuZm9jYXJzZSBlbiB1biBhZXJvcHVlcnRvIHB1ZWRlIGZhY2lsaXRhciBsYSBvcmdhbml6YWNpw7NuIHkgZWZpY2llbmNpYSBkZSBsYSBvcGVyYWNpw7NuIGRlIHVuYSBhZXJvbMOtbmVhLCBhZGVtw6FzIHF1ZSBsYSBkZW1hbmRhIHBvciBsb3MgdnVlbG9zIHB1ZWRlIHNlciBkaXN0aW50YSBkZXBlbmRpZW5kbyBkZWwgYWVyb3B1ZXJ0by4gTWVkaWFudGUgZWwgaGlzdG9ncmFtYSBzZSBwdWVkZSBvYnNlcnZhciBjb21vIGFlcm9sw61uZWFzIGNvbW8g4oCcQW1lcmljYW4gQWlybGluZXPigJ0gIHkg4oCcVW5pdGVkIEFpcmxpbmVz4oCdIHkg4oCcRXhwcmVzc0pldCBBaXJsaW5lc+KAnSByZWFsaXphbiBtw6FzIGRlIGxhIG1pdGFkIGRlIHN1IHRvdGFsIGRlIHZ1ZWxvcyBlbiB1biBzb2xvIGFlcm9wdWVydG8uCgoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+UGFydGUgNS4gwr9Qb3IgcXXDqSBsb3MgdnVlbG9zIHNlIHJldHJhc2FuPzwvc3Bhbj4KCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5Db250ZXh0bzwvc3Bhbj4KRW4gZWwgZW50b3JubyBkZWwgdHJhbnNwb3J0ZSBhw6lyZW8sIGxvcyByZXRyYXNvcyBlbiBsb3MgdnVlbG9zIHJlcHJlc2VudGFuIHVuIHByb2JsZW1hIHNpZ25pZmljYXRpdm8gdGFudG8gcGFyYSBsYXMgYWVyb2zDrW5lYXMgY29tbyBwYXJhIGxvcyBwYXNhamVyb3MsIGxsZXZhbmRvIGEgaW5jb252ZW5pZW50ZXMgb3BlcmFjaW9uYWxlcyB5IGNvc3RvcyBlY29uw7NtaWNvcyBlbGV2YWRvcy4gQ29tcHJlbmRlciBsYXMgY2F1c2FzIGRlIGVzdG9zIHJldHJhc29zIGVzIGZ1bmRhbWVudGFsIHBhcmEgbWVqb3JhciBsYSBlZmljaWVuY2lhIGRlIGxhcyBvcGVyYWNpb25lcyBhw6lyZWFzIHkgbGEgc2F0aXNmYWNjacOzbiBkZWwgY2xpZW50ZS4gTWVkaWFudGUgdW4gbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNlIGRldGVybWluYXJhbiBsYXMgdmFyaWFibGVzIGNvbiBtYXlvciByZWxhY2nDs24gYWwgYXVtZW50byBlbiBlbCB0aWVtcG8gZGUgcmV0cmFzbyAsIHBhcmEgZGUgZXN0YSBmb3JtYSBkZXRlcm1pbmFyIGxhcyBwcmluY2lwYWxlcyBjYXVzYXMgcG9yIGxhcyBjdWFsZXMgbG9zIHZ1ZWxvcyBzZSByZXRyYXNhbi4KCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5Nb2RlbG8gZGUgcmVncmVzacOzbjwvc3Bhbj4KCmBgYHtyfQpyZWdyZXNpb24gPC0gbG0oZGVwX2RlbGF5IH4gY2Fycmllcittb250aC54K2RheS54K2RlcF90aW1lK29yaWdpbitkZXN0KyBhaXJfdGltZStkaXN0YW5jZStob3VyLngreWVhci55K3R5cGUrZW5naW5lK3RlbXArZGV3cCtodW1pZCt3aW5kX2RpcitwcmVjaXArcHJlc3N1cmUrdmlzaWIsZGF0YT1iZGdyYW5kZTQpCnN1bW1hcnkocmVncmVzaW9uKQpgYGAKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5Nb2RlbG8gZGUgcmVncmVzacOzbiBhanVzdGFkbzwvc3Bhbj4KYGBge3J9CnJlZ3Jlc2lvbl9hanVzdGFkYSA8LSBsbShkZXBfZGVsYXkgfiBtb250aC54K2RheS54K2RlcF90aW1lK2hvdXIueCt5ZWFyLnkraHVtaWQrcHJlY2lwK3ByZXNzdXJlK3Zpc2liLGRhdGE9YmRncmFuZGU0KQpzdW1tYXJ5KHJlZ3Jlc2lvbl9hanVzdGFkYSkKYGBgCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+UG9yY2VudGFqZSBkZSByZXRyYXNvcyB0b3RhbGVzPC9zcGFuPgpgYGB7cn0KZGZfcmV0cmFzb3MgPC0gYmRncmFuZGU0ICU+JSBzdW1tYXJpemUodG90YWxfdnVlbG9zID0gbigpLHRvdGFsX3JldHJhc29zID0gc3VtKGRlcF9kZWxheSA+IDAsbmEucm0gPSBUUlVFKSxwb3JjZW50YWplX3JldHJhc29zID0gKHRvdGFsX3JldHJhc29zLyB0b3RhbF92dWVsb3MpKjEwMCwgcG9yY2VudGFqZV9wdW50dWFsZXMgPSAxMDAtcG9yY2VudGFqZV9yZXRyYXNvcyxtZWRpYV9yZXRyYXNvcyA9IG1lYW4oZGVwX2RlbGF5LCBuYS5ybSA9IFRSVUUpKQpkZl9yZXRyYXNvcwpgYGAKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkFlcm9wdWVydG9zPC9zcGFuPiAgIAoKIyMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5SZXRyYXNvcyBwb3IgYWVyb3B1ZXJ0bzwvc3Bhbj4KYGBge3J9CmRmX3JldHJhc29zX2Flcm9wdWVydG8gPC0gYmRncmFuZGU0ICU+JSBncm91cF9ieShvcmlnaW4pICU+JSBzdW1tYXJpemUodG90YWxfdnVlbG9zID0gbigpLHRvdGFsX3JldHJhc29zID0gc3VtKGRlcF9kZWxheSA+IDAsbmEucm0gPSBUUlVFKSxwb3JjZW50YWplX3JldHJhc29zID0gKHRvdGFsX3JldHJhc29zLyB0b3RhbF92dWVsb3MpKjEwMCwgcG9yY2VudGFqZV9wdW50dWFsZXMgPSAxMDAtcG9yY2VudGFqZV9yZXRyYXNvcyxtZWRpYV9yZXRyYXNvcyA9IG1lYW4oZGVwX2RlbGF5LCBuYS5ybSA9IFRSVUUpKQpkZl9yZXRyYXNvc19hZXJvcHVlcnRvCmBgYApgYGB7cn0KZ2dwbG90KGRmX3JldHJhc29zX2Flcm9wdWVydG8sYWVzKHg9cmVvcmRlcihvcmlnaW4sLXBvcmNlbnRhamVfcmV0cmFzb3MpLHk9cG9yY2VudGFqZV9yZXRyYXNvcyxmaWxsPW9yaWdpbikpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArIGxhYnMoeD0iQWVyb3B1ZXJ0byIseT0iUmV0cmFzb3MgKCUpIix0aXRsZT0iUG9yY2VudGFqZSBkZSByZXRyYXNvcyBwb3IgYWVyb3B1ZXJ0byIpICsgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlKHJvdW5kKHBvcmNlbnRhamVfcmV0cmFzb3MsIDEpLCAiJSIpLCB5ID0gcG9yY2VudGFqZV9yZXRyYXNvcyArIDEpLCB2anVzdCA9IDAuNSwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMy41KQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGZfcmV0cmFzb3NfYWVyb3B1ZXJ0byxhZXMoeD1yZW9yZGVyKG9yaWdpbiwtdG90YWxfdnVlbG9zKSx5PXRvdGFsX3Z1ZWxvcyxmaWxsPW9yaWdpbikpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArIGxhYnMoeD0iQWVyb3B1ZXJ0byIseT0iVnVlbG9zIix0aXRsZT0iVG90YWwgZGUgdnVlbG9zIHBvciBhZXJvcHVlcnRvIikgCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPlJldHJhc29zIHBvciBtZXM8L3NwYW4+CmBgYHtyfQpkZl9yZXRyYXNvc19tZXMgPC0gYmRncmFuZGU0ICU+JSBncm91cF9ieShtb250aC54KSAlPiUgc3VtbWFyaXplKHRvdGFsX3Z1ZWxvcyA9IG4oKSx0b3RhbF9yZXRyYXNvcyA9IHN1bShkZXBfZGVsYXkgPiAwLG5hLnJtID0gVFJVRSkscG9yY2VudGFqZV9yZXRyYXNvcyA9ICh0b3RhbF9yZXRyYXNvcy8gdG90YWxfdnVlbG9zKSoxMDAsIHBvcmNlbnRhamVfcHVudHVhbGVzID0gMTAwLXBvcmNlbnRhamVfcmV0cmFzb3MsbWVkaWFfcmV0cmFzb3MgPSBtZWFuKGRlcF9kZWxheSwgbmEucm0gPSBUUlVFKSkKZGZfcmV0cmFzb3NfbWVzCmBgYApgYGB7cn0KZ2dwbG90KGRmX3JldHJhc29zX21lcyxhZXMoeD1mYWN0b3IobW9udGgueCkseT1wb3JjZW50YWplX3JldHJhc29zKSkrZ2VvbV9iYXIoY29sb3I9MSxzdGF0PSJpZGVudGl0eSIpICsgIGxhYnModGl0bGUgPSAiUmV0cmFzb3MgcG9yIG1lcyIsCiAgICAgICB4ID0gIk1lcyIsCiAgICAgICB5ID0gIlZ1ZWxvcyByZXRyYXNhZG9zICglKSIpCmBgYAoKCmBgYHtyfQpyZXRyYXNvcyA8LSBmaWx0ZXIoYmRncmFuZGU0LGRlcF9kZWxheSA+IDApCmdncGxvdChyZXRyYXNvcyxhZXMoeD1mYWN0b3IobW9udGgueCkpKStnZW9tX2Jhcihjb2xvcj0xKSArICBsYWJzKHRpdGxlID0gIkNhbnRpZGFkIGRlIHJldHJhc29zIHBvciBtZXMiLAogICAgICAgeCA9ICJNZXMiLAogICAgICAgeSA9ICJDYW50aWRhZCBkZSB2dWVsb3MgcmV0cmFzYWRvcyIpCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkTDrWFzPC9zcGFuPgogIAojIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPlJldHJhc29zIHBvciBkw61hPC9zcGFuPgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpkZl9yZXRyYXNvc19kaWEgPC0gYmRncmFuZGU0ICU+JSBncm91cF9ieShtb250aC54LGRheS54KSAlPiUgc3VtbWFyaXplKHRvdGFsX3Z1ZWxvcyA9IG4oKSx0b3RhbF9yZXRyYXNvcyA9IHN1bShkZXBfZGVsYXkgPiAwLG5hLnJtID0gVFJVRSkscG9yY2VudGFqZV9yZXRyYXNvcyA9ICh0b3RhbF9yZXRyYXNvcy8gdG90YWxfdnVlbG9zKSoxMDAsIHBvcmNlbnRhamVfcHVudHVhbGVzID0gMTAwLXBvcmNlbnRhamVfcmV0cmFzb3MsbWVkaWFfcmV0cmFzb3MgPSBtZWFuKGRlcF9kZWxheSwgbmEucm0gPSBUUlVFKSkKZGZfcmV0cmFzb3NfZGlhIDwtIGRmX3JldHJhc29zX2RpYSAlPiUgYXJyYW5nZShkZXNjKHBvcmNlbnRhamVfcmV0cmFzb3MpKSAlPiUgaGVhZCgxMCkKZGZfcmV0cmFzb3NfZGlhCgpnZ3Bsb3QoZGZfcmV0cmFzb3NfZGlhLCBhZXMoeCA9IHJlb3JkZXIocGFzdGUobW9udGgueCwiLyIsZGF5LngpLCAtcG9yY2VudGFqZV9yZXRyYXNvcyksIHkgPSBwb3JjZW50YWplX3JldHJhc29zLCBmaWxsID0gZmFjdG9yKGRheS54KSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKyBsYWJzKHg9Ik1lcy9Ew61hIix5PSJSZXRyYXNvcyAoJSkiLHRpdGxlPSJUb3AgMTAgZMOtYXMgY29uIG1heW9yIHBvcmNlbnRhamUgZGUgcmV0cmFzb3MiKSAKCnJldHJhc29zZGlhIDwtIHJldHJhc29zICU+JSBncm91cF9ieShkYXkueCxtb250aC54KSAlPiUgc3VtbWFyaXNlKHJldHJhc29zZCA9IG4oKSkgJT4lIGFycmFuZ2UoZGVzYyhyZXRyYXNvc2QpLCBkZXNjKGRheS54KSkgJT4lIGhlYWQoMTApCgpnZ3Bsb3QocmV0cmFzb3NkaWEsIGFlcyh4ID0gcmVvcmRlcihwYXN0ZShtb250aC54LCIvIixkYXkueCksIC1yZXRyYXNvc2QpLCB5ID0gcmV0cmFzb3NkLCBmaWxsID0gZmFjdG9yKGRheS54KSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKyBsYWJzKHg9Ik1lcy9Ew61hIix5PSJDYW50aWRhZCBkZSBSZXRyYXNvcyIsdGl0bGU9IlRvcCAxMCBkw61hcyBjb24gbcOhcyByZXRyYXNvcyIpIApgYGAKICAKIyMjIDxzcGFuIHN0eWxlID0iY29sb3I6Ymx1ZTsiPlJldHJhc29zIHBvciBkw61hIGRlIGxhIHNlbWFuYTwvc3Bhbj4KYGBge3J9CmZsaWdodHMkd2RheSA8LSB3ZGF5KGZsaWdodHMkdGltZV9ob3VyLCBsYWJlbCA9IFRSVUUpCmRmX3JldHJhc29zX2RpYXNlbWFuYSA8LSBmbGlnaHRzICU+JSBncm91cF9ieSh3ZGF5KSAlPiUgc3VtbWFyaXplKHRvdGFsX3Z1ZWxvcyA9IG4oKSx0b3RhbF9yZXRyYXNvcyA9IHN1bShkZXBfZGVsYXkgPiAwLG5hLnJtID0gVFJVRSkscG9yY2VudGFqZV9yZXRyYXNvcyA9ICh0b3RhbF9yZXRyYXNvcy8gdG90YWxfdnVlbG9zKSoxMDAsIHBvcmNlbnRhamVfcHVudHVhbGVzID0gMTAwLXBvcmNlbnRhamVfcmV0cmFzb3MsbWVkaWFfcmV0cmFzb3MgPSBtZWFuKGRlcF9kZWxheSwgbmEucm0gPSBUUlVFKSkKZGZfcmV0cmFzb3NfZGlhc2VtYW5hCgpnZ3Bsb3QoZGZfcmV0cmFzb3NfZGlhc2VtYW5hLCBhZXMoeCA9IHdkYXksIHkgPSBwb3JjZW50YWplX3JldHJhc29zLGZpbGw9d2RheSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSByb3VuZChwb3JjZW50YWplX3JldHJhc29zLCAxKSksIHZqdXN0ID0gLTAuNSwgY29sb3IgPSAiYmxhY2siKSArCiAgbGFicyh4ID0gIkTDrWEgZGUgbGEgU2VtYW5hIiwgeSA9ICJSZXRyYXNvcyAoJSkiLCB0aXRsZSA9ICJQb3JjZW50YWplIGRlIFJldHJhc28gUHJvbWVkaW8gZGUgU2FsaWRhIHBvciBEw61hIGRlIGxhIFNlbWFuYSIpCmBgYApgYGB7cn0KZ2dwbG90KGRmX3JldHJhc29zX2RpYXNlbWFuYSwgYWVzKHggPSB3ZGF5LCB5ID0gdG90YWxfcmV0cmFzb3MsZmlsbD13ZGF5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHJvdW5kKHRvdGFsX3JldHJhc29zLCAxKSksIHZqdXN0ID0gLTAuNSwgY29sb3IgPSAiYmxhY2siKSArCiAgbGFicyh4ID0gIkTDrWEgZGUgbGEgU2VtYW5hIiwgeSA9ICJDYW50aWRhZCBkZSBSZXRyYXNvcyIsIHRpdGxlID0gIkNhbnRpZGFkIGRlIFJldHJhc29zIGRlIFNhbGlkYSBwb3IgRMOtYSBkZSBsYSBTZW1hbmEiKQpgYGAKICAKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkhvcmE8L3NwYW4+CiAgCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+UmV0cmFzb3MgcG9yIGhvcmE8L3NwYW4+CmBgYHtyfQpkZl9yZXRyYXNvc19ob3JhIDwtIGJkZ3JhbmRlNCAlPiUgZ3JvdXBfYnkoaG91ci54KSAlPiUgc3VtbWFyaXplKHRvdGFsX3Z1ZWxvcyA9IG4oKSx0b3RhbF9yZXRyYXNvcyA9IHN1bShkZXBfZGVsYXkgPiAwLG5hLnJtID0gVFJVRSkscG9yY2VudGFqZV9yZXRyYXNvcyA9ICh0b3RhbF9yZXRyYXNvcy8gdG90YWxfdnVlbG9zKSoxMDAsIHBvcmNlbnRhamVfcHVudHVhbGVzID0gMTAwLXBvcmNlbnRhamVfcmV0cmFzb3MsbWVkaWFfcmV0cmFzb3MgPSBtZWFuKGRlcF9kZWxheSwgbmEucm0gPSBUUlVFKSkKZGZfcmV0cmFzb3NfaG9yYQpgYGAKYGBge3J9CmdncGxvdChkZl9yZXRyYXNvc19ob3JhLGFlcyh4PWZhY3Rvcihob3VyLngpLHk9cG9yY2VudGFqZV9yZXRyYXNvcyxmaWxsPWhvdXIueCkpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArIGxhYnMoeD0iSG9yYSIseT0iUmV0cmFzb3MoJSkiLHRpdGxlPSJQb3JjZW50YWplIGRlIHJldHJhc29zIHBvciBob3JhIikgCmBgYAoKCmBgYHtyfQpyZXRyYXNvc2ggPC0gcmV0cmFzb3MgJT4lIGdyb3VwX2J5KGhvdXIueCkKZ2dwbG90KHJldHJhc29zaCxhZXMoeD1mYWN0b3IoaG91ci54KSxmaWxsPWhvdXIueCkpICsgZ2VvbV9oaXN0b2dyYW0oc3RhdD0iY291bnQiKSArIGxhYnMoeD0iSG9yYSIseT0iQ2FudGlkYWQgZGUgUmV0cmFzb3MiLHRpdGxlPSJDYW50aWRhZCBkZSB2dWVsb3MgcmV0cmFzYWRvcyBwb3IgaG9yYSIpIApgYGAKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5SZWxhY2nDs24gZW50cmUgZWwgdGllbXBvIGRlIHJldHJhc28geSBsYSBob3JhIGRlIHNhbGlkYSBwcm9ncmFtYWRhIDwvc3Bhbj4KYGBge3J9CmdncGxvdChiZGdyYW5kZTQsIGFlcyh4ID0gZmFjdG9yKGhvdXIueCksIHkgPSBkZXBfZGVsYXkpKSArCiAgZ2VvbV9wb2ludCgpICsKICBsYWJzKHggPSAiSG9yYSBkZSBzYWxpZGEgcHJvZ3JhbWFkYSIsIHkgPSAiUmV0cmFzbyBlbiBsYSBzYWxpZGEiLCB0aXRsZSA9ICJSZXRyYXNvIGVuIGxhIHNhbGlkYSBwb3IgaG9yYSBkZWwgZMOtYSIpCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPlZpc2liaWxpZGFkPC9zcGFuPgogIAojIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPlJlbGFjacOzbiBlbnRyZSByZXRyYXNvcyB5IHZpc2liaWxpZGFkIDwvc3Bhbj4KYGBge3J9CmdncGxvdChiZGdyYW5kZTQsIGFlcyh4ID0gdmlzaWIsIHkgPSBkZXBfZGVsYXkpKSArCmdlb21fcG9pbnQoYWVzKGNvbG9yID0gb3JpZ2luKSwgYWxwaGEgPSAwLjUpICsKZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgYWVzKGNvbG9yID0gb3JpZ2luKSwgc2UgPSBGQUxTRSkgKwpmYWNldF93cmFwKH4gb3JpZ2luKSArIApsYWJzKHRpdGxlID0gIlJlbGFjacOzbiBlbnRyZSBWaXNpYmlsaWRhZCB5IFJldHJhc29zIGVuIGxhIFNhbGlkYSBwb3IgQWVyb3B1ZXJ0byIsCiAgICAgICB4ID0gIlZpc2liaWxpZGFkIChtaWxsYXMpIiwKICAgICAgIHkgPSAiUmV0cmFzbyBlbiBsYSBTYWxpZGEgKG1pbnV0b3MpIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcih0eXBlID0gJ3F1YWwnLCBwYWxldHRlID0gJ1NldDEnKQpgYGAKYGBge3J9CmRmX3JldHJhc29zX3Zpc2liIDwtIGJkZ3JhbmRlNCAlPiUgZ3JvdXBfYnkodmlzaWIpICU+JSBzdW1tYXJpemUodG90YWxfdnVlbG9zID0gbigpLHRvdGFsX3JldHJhc29zID0gc3VtKGRlcF9kZWxheSA+IDAsbmEucm0gPSBUUlVFKSxwb3JjZW50YWplX3JldHJhc29zID0gKHRvdGFsX3JldHJhc29zLyB0b3RhbF92dWVsb3MpKjEwMCwgcG9yY2VudGFqZV9wdW50dWFsZXMgPSAxMDAtcG9yY2VudGFqZV9yZXRyYXNvcyxtZWRpYV9yZXRyYXNvcyA9IG1lYW4oZGVwX2RlbGF5LCBuYS5ybSA9IFRSVUUpKQpkZl9yZXRyYXNvc192aXNpYgpgYGAKCiMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5QcmVjaXBpdGFjacOzbjwvc3Bhbj4KICAKIyMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGJsdWU7Ij5SZWxhY2nDs24gZW50cmUgcmV0cmFzb3MgeSBwcmVjaXBpdGFjacOzbjwvc3Bhbj4KYGBge3J9CmdncGxvdChiZGdyYW5kZTQsIGFlcyh4ID0gcHJlY2lwLCB5ID0gZGVwX2RlbGF5KSkgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gb3JpZ2luKSwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhZXMoY29sb3IgPSBvcmlnaW4pLCBzZSA9IEZBTFNFKSArCiAgZmFjZXRfd3JhcCh+IG9yaWdpbikgKyAKICBsYWJzKHRpdGxlID0gIlJlbGFjacOzbiBlbnRyZSBQcmVjaXBpdGFjaW9uIHkgUmV0cmFzb3MgZW4gbGEgU2FsaWRhIHBvciBBZXJvcHVlcnRvIiwKICAgICAgIHggPSAiUHJlY2lwaXRhY2lvbiIsCiAgICAgICB5ID0gIlJldHJhc28gZW4gbGEgU2FsaWRhIChtaW51dG9zKSIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIodHlwZSA9ICdxdWFsJywgcGFsZXR0ZSA9ICdTZXQxJykKYGBgCgpgYGB7cn0KZGZfcmV0cmFzb3NfcHJlY2lwIDwtIGJkZ3JhbmRlNCAlPiUgZ3JvdXBfYnkocHJlY2lwKSAlPiUgc3VtbWFyaXplKHRvdGFsX3Z1ZWxvcyA9IG4oKSx0b3RhbF9yZXRyYXNvcyA9IHN1bShkZXBfZGVsYXkgPiAwLG5hLnJtID0gVFJVRSkscG9yY2VudGFqZV9yZXRyYXNvcyA9ICh0b3RhbF9yZXRyYXNvcy8gdG90YWxfdnVlbG9zKSoxMDAsIHBvcmNlbnRhamVfcHVudHVhbGVzID0gMTAwLXBvcmNlbnRhamVfcmV0cmFzb3MsbWVkaWFfcmV0cmFzb3MgPSBtZWFuKGRlcF9kZWxheSwgbmEucm0gPSBUUlVFKSkKZGZfcmV0cmFzb3NfcHJlY2lwCmBgYAoKIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkNvbmNsdXNpb25lczwvc3Bhbj4KKiBFbCBwb3JjZW50YWplIGRlIHZ1ZWxvcyBjb24gcmV0cmFzbyBlbiBsb3MgYWVyb3B1ZXJ0b3MgZGUgTnVldmEgWW9yayBlcyBhbHRvIHkgcG9kcsOtYSBlc3RhciByZXByZXNlbnRhbmRvIHByb2JsZW1hcyBwYXJhIGNhZGEgYWVyb3B1ZXJ0by4gRW4gbG9zIGFlcm9wdWVydG9zIGV4aXN0ZW4gcHJvY2VkaW1pZW50b3MgeSBlc3TDoW5kYXJlcyBkZSBzZWd1cmlkYWQgZWxldmFkb3MsIHF1ZSBpbmNsdXllbiByZXZpc2lvbmVzIGEgbGFzIHBlcnNvbmFzIHF1ZSBhYm9yZGFyw6FuIGVsIHZ1ZWxvIHkgcmV2aXNpb25lcyBzb2JyZSBsYXMgY29uZGljaW9uZXMgZGVsIGF2acOzbiwgYXPDrSBtaXNtb3MgZmFjdG9yZXMgZXh0ZXJub3MgYWwgYWVyb3B1ZXJ0byBjb21vIGxhcyBjb25kaWNpb25lcyBjbGltw6F0aWNhcyBwdWVkZW4gY29tcHJvbWV0ZXIgbGEgc2VndXJpZGFkIGRlIGxvcyBwYXNhamVyb3MgeSBwaWxvdG9zLiBQb3IgZW5kZSwgdW4gYWVyb3B1ZXJ0byBlcyBhbHRhbWVudGUgc3VzY2VwdGlibGUgYSBsb3MgcmV0cmFzb3MuIEFsIGFuYWxpemFyIGVsIHBvcmNlbnRhamUgZGUgdnVlbG9zIHF1ZSBwcmVzZW50YXJvbiB0aWVtcG8gZGUgcmV0cmFzbywgc2UgZGV0ZWN0w7MgcXVlIGVsIDM4LjEzJSBkZSBsb3MgdnVlbG9zIHByZXNlbnRhcm9uIHVuIHJldHJhc28sIGVzdG8gZXF1aXZhbGUgYSAxMjgsNDMyIHZ1ZWxvcywgbG9zIGN1w6FsZXMgZW4gcHJvbWVkaW8gc2FsaWVyb24gY29uIDEyLjYgbWludXRvcyBkZSBkZW1vcmEuCgoqIEVudHJlIG3DoXMgdnVlbG9zIHNlIHJlYWxpY2VuIGRlbnRybyBkZSB1biBhZXJvcHVlcnRvLCBtYXlvciBzZXLDoSBsYSBjYW50aWRhZCBkZSByZXRyYXNvcyBwcmVzZW50YWRhLiBMYSBpbmZyYWVzdHJ1Y3R1cmEgZGUgbG9zIGFlcm9wdWVydG9zIGVzIGxpbWl0YWRhLCBjYWRhIGFlcm9wdWVydG8gY3VlbnRhIGNvbiB1biBjaWVydG8gZGUgbsO6bWVybyBkZSB0ZXJtaW5hbGVzIHkgYXV0b3Bpc3RhcywgZW50cmUgbWF5b3Igc2VhIGxhIGRlbWFuZGEgcG9yIGxvcyB2dWVsb3MsIHNlIHZ1ZWx2ZSBtw6FzIGNvbXBsaWNhZG8gcG9kZXIgYXRlbmRlciB5IGFkbWluaXN0cmFyIGRlIG1hbmVyYSBlZmljaWVudGUgbG9zIGFlcm9wdWVydG9zLCBnZW5lcmFuZG8gY29tbyBjb25zZWN1ZW5jaWEgZWwgYXVtZW50byBlbiBsb3MgcmV0cmFzb3MuIFBhcmEgZGVtb3N0cmFyIGVzdGUgcHVudG8gc2UgYWdydXBhcm9uIGxvcyByZXRyYXNvcyBwb3IgYWVyb3B1ZXJ0byB5IHNlIGRlc2N1YnJpw7MgcXVlIGVsIGFlcm9wdWVydG8gcXVlIG3DoXMgdnVlbG9zIHJlYWxpem8gZW4gZWwgYcOxbyAoSktGKSBmdWUgZWwgcXVlIG1heW9yIGNhbnRpZGFkLCBwb3JjZW50YWplIHkgbWVkaWEgZGUgcmV0cmFzb3MgcHJlc2VudG8sIGNvbiB1biBwb3JjZW50YWplIGRlbCA0My42JSBkZSB2dWVsb3MgY29uIHJldHJhc29zIHkgdW5hIG1lZGlhIGRlIDE1IG1pbnV0b3MgcG9yIHJldHJhc28sIGVuIGNvbXBhcmFjacOzbiBjb24gdW4gMzIuMiUgeSB1bmEgbWVkaWEgZGUgMTAgbWludXRvcyBlbiBlbCBhZXJvcHVlcnRvIG1lbm9zIGNvbmN1cnJpZG8gKExHQSkuCgoqIExvcyBwZXJpb2RvcyB2YWNhY2lvbmFsZXMgdGllbmVuIHVuIGVmZWN0byBjb25zaWRlcmFibGUgZW4gbGEgY2FudGlkYWQgZGUgcmV0cmFzb3MgZW4gbG9zIGFlcm9wdWVydG9zLiBEdXJhbnRlIGVsIHBlcmlvZG8gdmFjYWNpb25hbCBzZSBjdWVudGEgY29uIG1heW9yIGZhY2lsaWRhZCBwYXJhIHZhY2FjaW9uYXIgeS9vIHZpc2l0YXIgYSBmYW1pbGlhcmVzLCBwb3IgZW5kZSwgZWwgYXVtZW50byBkZSBsYSBkZW1hbmRhIHBvciB2dWVsb3MgcHVlZGUgY2F1c2FyIHByb2JsZW1hcyBlbiBsYSBvcmdhbml6YWNpw7NuIGRlIGxvcyBhZXJvcHVlcnRvcyBxdWUgY29tbyBjb25zZWN1ZW5jaWEgbGxldmUgYSB1biBtYXlvciBuaXZlbCBkZSByZXRyYXNvcy4gQWwgb2JzZXJ2YXIgdG9kb3MgbG9zIHZ1ZWxvcyBwcm92ZW5pZW50ZXMgZGUgbG9zIGFlcm9wdWVydG9zIGRlIE51ZXZhIFlvcmsgY29uIHVuIHJldHJhc28gbWF5b3IgYSB1biBtaW51dG8gc2UgZGVzY3VicmnDsyBxdWUgZHVyYW50ZSBsb3MgbWVzZXMgZGUganVuaW8sIGp1bGlvIHkgZGljaWVtYnJlIHNlIHByZXNlbnRhcm9uIGxhIG1heW9yIGNhbnRpZGFkIGRlIHJldHJhc29zLCBlc3RvcyBtZXNlcyBzZSBjYXJhY3Rlcml6YXJvbiBwb3Igc2VyIGxvcyDDum5pY29zIGVuIHRvZG8gZWwgYcOxbyBkb25kZSBlbCBwb3JjZW50YWplIGRlIHJldHJhc29zIGZ1ZSBtYXlvciBhbCA0MCUgY29uIHBvcmNlbnRhamVzIGRlIDQ0LjglLCA0Ny4zJSB5IDQ4LjIlIHJlc3BlY3RpdmFtZW50ZS4KCiogTG9zIGTDrWFzIGZlc3Rpdm9zIG8gZMOtYXMgY2VyY2Fub3MgYSB1biBldmVudG8gaW1wb3J0YW50ZSB0aWVuZW4gdW4gaW1wYWN0byBlbiBsYSBjYW50aWRhZCBkZSByZXRyYXNvcyBlbiBsb3MgYWVyb3B1ZXJ0b3MuIFRvbWFuZG8gZW4gY3VlbnRhIGVsIG1pc21vIHJhem9uYW1pZW50byBhcGxpY2FkbyBlbiBlbCBwdW50byBhbnRlcmlvci4gU2UgZGVzY3VicmnDsyBhbCBhbmFsaXphciBlc3RvcyBkw61hcyBxdWUgbG9zIHRyZXMgZMOtYXMgY29uIG3DoXMgcmV0cmFzb3MgZXN0w6FuIHZpbmN1bGFkb3MgbyBjZXJjYW5vcyBhIHVuIGTDrWEgaW1wb3J0YW50ZS4gRWwgMjMgZGUgZGljaWVtYnJlIGNvaW5jaWRlIGNvbiBzZXIgZWwgZMOtYSBhbnRlcmlvciBhIE5vY2hlYnVlbmEsIGVsIDggZGUgbWFyem8gZXMgZWwgZMOtYSBpbnRlcm5hY2lvbmFsIGRlIGxhIG11amVyLCBtaWVudHJhcyBxdWUgZWwgMSBkZSBzZXB0aWVtYnJlIGVzdMOhIGEgdW4gZMOtYSBhbnRlcyBkZWwgZMOtYSBkZWwgdHJhYmFqbyBlbiBFc3RhZG9zIFVuaWRvcywgZWwgY3XDoWwgc2llbXByZSBzdWNlZGUgZWwgbHVuZXMsIGVzIHBvc2libGUgcXVlIGxhcyBmYW1pbGlhcyBhcHJvdmVjaGVuIHBhcmEgc2FsaXIgZGUgdmFjYWNpb25lcyBkdXJhbnRlIGVsIGZpbiBkZSBzZW1hbmEgcHJldmlvIGFsIGTDrWEgZGVsIHRyYWJham8uIE9ic2VydmFuZG8gbG9zIDEwIGTDrWFzIG3DoXMgY29uY3Vycmlkb3MgZGVsIGHDsW8gc2UgZW5jb250csOzIHVuIHBvcmNlbnRhamUgbWF5b3IgYWwgNjAlIGVuIHRvZG9zIGxvcyBkw61hcyBjb24gbWVkaWFzIHN1cGVyaW9yZXMgYSBsb3MgMzAgZMOtYXMsIGRlbW9zdHJhbmRvIHF1ZSBlbCBhdW1lbnRvIHJlcGVudGlubyBkZSBsYSBkZW1hbmRhIHJlcHJlc2VudGEgdW4gcmV0byBpbXBvcnRhbnRlIGRlbnRybyBkZSBsb3MgYWVyb3B1ZXJ0b3MuCgoqIExvcyBkw61hcyBkZSBsYSBzZW1hbmEgbm8gdGllbmVuIHVuIGltcGFjdG8gc2lnbmlmaWNhdGl2byBlbiBlbCBhdW1lbnRvIGRlIGxvcyByZXRyYXNvcy4gTG9zIHVzdWFyaW9zIGRlIHVuIGFlcm9wdWVydG8gY3VlbnRhbiBjb24gbmVjZXNpZGFkZXMgZGlzdGludGFzLCBjb21vIHRyYWJham8sIHZpc2l0YXMgZmFtaWxpYXJlcywgdmlhamVzLCBlbnRyZSBvdHJvcywgcG9yIGVuZGUsIGxhIGRlbWFuZGEgcG9yIGxvcyB2dWVsb3Mgc2UgZGV0ZXJtaW5hIGVuIG1heW9yIG1lZGlkYSBlbiBmdW5jacOzbiBjb24gZWwgbWVzLCBvIGJpZW4gYWxnw7puIGTDrWEgZmVzdGl2byBvIGV2ZW50by4gQWwgYW5hbGl6YXIgbG9zIHJldHJhc29zIHBvciBkw61hIGRlIGxhIHNlbWFuYSBzZSBvYnNlcnbDsyBxdWUgZWwgcG9yY2VudGFqZSBkZSByZXRyYXNvcyBzZSBlbmN1ZW50cmEgZW4gdW4gcmFuZ28gZGUgMzQuMSUgbG9zIHPDoWJhZG9zIGEgNDEuOCUgbG9zIGp1ZXZlcywgY29uIHVuYSB2YXJpYWNpw7NuIGRlIDcuNyUgZW50cmUgZWwgdmFsb3IgbcOhcyBiYWpvIHkgYWx0bywgc2kgYmllbiBwb2Ryw61hIGRlY2lyc2UgcXVlIGxvcyByZXRyYXNvcyBhdW1lbnRhbiBkZXBlbmRpZW5kbyBkZWwgZMOtYSwgZWwgYXVtZW50byBubyBlcyB0YW4gZ3JhbmRlIGVuIGNvbXBhcmFjacOzbiBhIG90cmFzIHZhcmlhYmxlcy4KIAoqIExhIGNhbnRpZGFkIGRlIHJldHJhc29zIGVuIGxhIHNhbGlkYSBkZSB2dWVsb3Mgb2N1cnJlIGR1cmFudGUgbGEgdGFyZGUuIExvcyBhZXJvcHVlcnRvcyBwcmVzZW50YW4gc3UgcGVyaW9kbyBkZSBtYXlvciBhY3RpdmlkYWQgZHVyYW50ZSBsYSB0YXJkZSBwb3IgbG8gY3VhbCBzZSBlc3BlcmFyw61hIHF1ZSBsb3MgcmV0cmFzb3MgZGUgbG9zIHZ1ZWxvcyBhdW1lbnRhcmFuIGNvbmZvcm1lIGF2YW56YXJhIGxhIHRhcmRlLiBVdGlsaXphbmRvIHVuIGdyw6FmaWNvIGRlIGJhcnJhcyBzZSBkZXRlY3TDsyBxdWUgbGEgY2FudGlkYWQgZGUgdnVlbG9zIHJldHJhc2Fkb3Mgc2kgYXVtZW50YSBkdXJhbnRlIGVsIHRyYW5zY3Vyc28gZGVsIGTDrWEgeSBhbGNhbnphIHN1IHB1bnRvIG3DoXhpbW8gYSBsYXMgNSBkZSBsYSB0YXJkZS4gU2luIGVtYmFyZ28sIGFsIHJldmlzYXIgbGEgY2FudGlkYWQgZGUgbWludXRvcyBxdWUgbG9zIHZ1ZWxvcyBzZSByZXRyYXNhbiBwb3IgaG9yYSBzZSBkZXNjdWJyacOzIHF1ZSBlbCB0aWVtcG8gZGUgcmV0cmFzbyBlcyBzaW1pbGFyIGluZGVwZW5kaWVudGVtZW50ZSBkZSBsYSBob3JhLgoKKiBMb3MgdnVlbG9zIHRpZW5kZW4gYSByZXRyYXNhcnNlIGNvbiBtYXlvciBmcmVjdWVuY2lhIGNvbmZvcm1lIGF2YW56YSBlbCBkw61hLiBDb21vIHNlIGRlc2NyaWJlIGVuIGVsIHB1bnRvIGFudGVyaW9yIGVsIGF1bWVudG8gZW4gbGEgYWN0aXZpZGFkIGRlbCBhZXJvcHVlcnRvIGEgcGFydGlyIGRlIGxhIHRhcmRlIGVzIHJlc3BvbnNhYmxlIGRlIGdlbmVyYXIgcmV0cmFzb3MsIHNpbiBlbWJhcmdvLCBhbCBvYnNlcnZhciBlbCBwb3JjZW50YWplIGRlIHZ1ZWxvcyByZXRyYXNhZG9zLCBzZSBkZXNjdWJyacOzIHF1ZSBsb3MgcHJvYmxlbWFzIGNvbiBsb3MgcmV0cmFzb3MgZW1waWV6YW4gZGVzZGUgbGEgbWHDsWFuYSwgcHVlc3RvIHF1ZSBhIGxhcyA2QU0gZWwgcG9yY2VudGFqZSBkZSByZXRyYXNvcyBlcyBtYXlvciBhbCAyMCUsIGxvIGN1YWwgaW5jcmVtZW50YSBhIDMwJSBhIHBhcnRpciBkZSBsYXMgMTJQTSB5IHN1cGVyYSBlbCA0MCUgMSBob3JhIGRlc3B1w6lzLCBlc3RvIHJlcHJlc2VudGEgdW4gYXVtZW50byBkZSAyMCUgZW4gc29sbyA2IGhvcmFzLgoKKiBBIHRyYXbDqXMgZGUgdW4gbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsLCBlbmNvbnRyYW1vcyBxdWUgbGEgdmlzaWJpbGlkYWQgeSBsYSBwcmVjaXBpdGFjacOzbiB0aWVuZW4gdW4gaW1wYWN0byBjb25zaWRlcmFibGUgZW4gbG9zIHRpZW1wb3MgZGUgcmV0cmFzby4gRXN0byBwdWVkZSBkZWJlcnNlIGEgcXVlIGxhIGFwYXJpY2nDs24gZGUgY29uZGljaW9uZXMgY2xpbcOhdGljYXMgZGVzZmF2b3JhYmxlcyBwdWVkZSBzdXBvbmVyIHVuIHJpZXNnbyBlbiBsYSBzZWd1cmlkYWQgZGUgbG9zIHBhc2FqZXJvcy4gRXNwZWPDrWZpY2FtZW50ZSwgbGEgcHJlY2lwaXRhY2nDs24gZXN0w6EgZnVlcnRlbWVudGUgYXNvY2lhZGEgY29uIGF1bWVudG9zIHNpZ25pZmljYXRpdm9zIGVuIGxvcyByZXRyYXNvcyBlIGluY2x1c2l2ZSBjYW5jZWxhY2lvbmVzIGRlIGxvcyB2dWVsb3MgZGVtb3N0cmFkbyBwb3IgbGEgY2FudGlkYWQgZGUgdnVlbG9zIHJlZ2lzdHJhZG9zIHVuYSB2ZXogcXVlIGxhIHByZWNpcGl0YWNpw7NuIGVzIG1heW9yIGEgMSBtaWxpYmFyLCBtaWVudHJhcyBxdWUgdW5hIG1heW9yIHZpc2liaWxpZGFkIHRpZW5kZSBhIHJlZHVjaXIgbG9zIHRpZW1wb3MgZGUgcmV0cmFzby4KCk1lZGlhbnRlIGVsIGFuw6FsaXNpcyBkZSBsYSBpbmZvcm1hY2nDs24gZGUgbG9zIHZ1ZWxvcyBkZSBOdWV2YSBZb3JrIHNlIHBvZHLDrWFuIHJlYWxpemFyIGFjY2lvbmVzIGVuZm9jYWRhcyBhIGxhIHByZXZlbmNpw7NuIGRlIGxvcyByZXRyYXNvcywgcG9yIGVqZW1wbG8sIGNvbm9jaWVuZG8gbG9zIGTDrWFzIHkgbWVzZXMgbcOhcyBjb25jdXJyaWRvcyBzZSBwb2Ryw61hIHJlYWxpemFyIHVuIHBsYW4gcGFyYSBjb250cm9sYXIgZWwgaW5jcmVtZW50byByZXBlbnRpbm8gZW4gbGEgY2FudGlkYWQgZGUgcGVyc29uYXMgZW4gbG9zIGFlcm9wdWVydG9zLiBQb3Igb3RybyBsYWRvLCBtZWRpYW50ZSBlbCB1c28gZGUgbG9zIGRhdG9zIGRlbCBjbGltYSBzZSBwdWVkZSByZWFsaXphciBwcm9uw7NzdGljb3MgbyBkZXRlY3RhciBsYSB0ZW5kZW5jaWEgZGUgbGEgYXBhcmljacOzbiBkZSBjb25kaWNpb25lcyBjbGltw6F0aWNhcyBjb21vIHByZWNpcGl0YWNpw7NuIGNvbW8gZm9ybWEgZGUgYW50aWNpcGFyc2UgYWwgcmllc2dvIGRlIHJldHJhc29zIG8gY2FuY2VsYWNpw7NuIGRlIHZ1ZWxvcy4gCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+Q29tcHJvbWlzbyDDqXRpY28geSBjaXVkYWRhbm88L3NwYW4+ClJlZmxleGnDs24gKENhbWlsYSBDZXZhbGxvcykKTGEgaW50ZWdyaWRhZCBlcyB1biB2YWxvciBmdW5kYW1lbnRhbCBlbiBjdWFscXVpZXIgw6FtYml0byBkZSBsYSB2aWRhLCB5IGVzIGVzcGVjaWFsbWVudGUgY3J1Y2lhbCBlbiBlbCBtdW5kbyBkZSBsb3MgbmVnb2Npb3MgeSBlbCBhbsOhbGlzaXMgZGUgZGF0b3MuIExhIGludGVncmlkYWQgaW1wbGljYSBzZXIgaG9uZXN0bywganVzdG8sIHkgbWFudGVuZXIgdW4gY29uanVudG8gY29oZXJlbnRlIGRlIHByaW5jaXBpb3Mgw6l0aWNvcyBlbiB0b2RhcyBudWVzdHJhcyBhY2Npb25lcy4KClJlZmxleGnDs24gKEFudG9uaW8gRMOtYXopClBhcmEgbWksIGxhIGludGVncmlkYWQgc2UgdHJhdGEgZGUgc2VyIGhvbmVzdG8geSBhY3R1YXIgZGUgYWN1ZXJkbyBhIG51ZXN0cm9zIHByaW5jaXBpb3MuIEluY2x1c2l2ZSBzaSBuYWRpZSBub3MgZXN0w6EgdmllbmRvLiBFcyBtdXkgaW1wb3J0YW50ZSB5YSBxdWUgZXN0w6EgbGlnYWRhIGEgbnVlc3RyYSBhdXRvZXN0aW1hIHkgYSBudWVzdHJhIGNvbmZpYW56YSwgeWEgcXVlIGVuIGxvIHBlcnNvbmFsIG5vcyBlbnNlw7FhIGEgYXN1bWlyIHJlc3BvbnNhYmlsaWRhZCBwb3IgbnVlc3RyYXMgYWNjaW9uZXMgeSBhbCB0b21hciBkZWNpc2lvbmVzLiBBZGVtw6FzLCBlc3RhIHByb211ZXZlIGxhIGFybW9uw61hIHNvY2lhbCB5IGF5dWRhIGEgY29uc3RydWlyIHJlbGFjaW9uZXMgZGUgYnVlbm9zIHZhbG9yZXMuIENhYmUgcmVjYWxjYXIgcXVlIGZvbWVudGFyIGxhIGludGVncmlkYWQgZXMgY2xhdmUgcGFyYSBjcmlhciBhIGluZGl2aWR1b3MgcXVlIHRvbWVuIGRlY2lzaW9uZXMgcG9zaXRpdmFzIHkgc2VwYW4gZW5mcmVudGFyIGxhcyBwcmVzaW9uZXMgc29jaWFsZXMuCgpSZWZsZXhpw7NuIChMdWlzIETDoXZpbGEpCkRlc2RlIG1pIHB1bnRvIGRlIHZpc3RhIGxhIGludGVncmlkYWQgcmVwcmVzZW50YSBoYWNlciBsYXMgY29zYXMgZGUgbGEgZm9ybWEgY29ycmVjdGEsIHNpZW1wcmUgc2llbmRvIGhvbmVzdG8geSBwcm9jdXJhbmRvIG5vIGFjdHVhciBkZSB1bmEgbWFuZXJhIHF1ZSBhZmVjdGUgbmVnYXRpdmFtZW50ZSBhIG90cm9zLiBUZW5lciBkYXRvcyBkZSB1bmEgZW1wcmVzYSBpbXBsaWNhIGFjdHVhciBjb24gcmVzcG9uc2FiaWxpZGFkIHkgcHJlY2F1Y2nDs24sIGRlamFuZG8gYSB1biBsYWRvIGxhcyBjb25zZWN1ZW5jaWFzIGxlZ2FsZXMgeSBwcm9ibGVtYXMgZW4gbG9zIHF1ZSBwb2Ryw61hIGluY3VycmlyIGNvbW8gcHJvZmVzaW9uYWwgYWwgaGFjZXIgbWFsIHVzbyBkZSBsb3MgZGF0b3MuIE1pIGludGVncmlkYWQgY29tbyBwZXJzb25hIHkgY29tbyBwcm9mZXNpb25hbCB2YSBhIGRlcGVuZGVyIGRlIGxhcyBhY2Npb25lcyBxdWUgdG9tZSBkZW50cm8gZGUgdW4gYW1iaWVudGUgbGFib3JhbC4KCgojIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+UmVmZXJlbmNpYXM8L3NwYW4+CkxhIENpZW5jaWEgZGUgbGEgSW50ZWdyaWRhZC4gKDIwMjEpLiBOYWNpb25lcyBVbmlkYXMgOiBPZmljaW5hIGRlIExhcyBOYWNpb25lcyBVbmlkYXMgQ29udHJhIExhIERyb2dhIFkgRWwgRGVsaXRvLiBodHRwczovL3d3dy51bm9kYy5vcmcvdW5vZGMvZXMvbGlzdGVuLWZpcnN0L3N1cGVyLXNraWxscy9pbnRlZ3JpdHkuaHRtbAoKUGFja2FnZSDigJxueWNmbGlnaHRzMTPigJ0gVGl0bGUgRmxpZ2h0cyB0aGF0IERlcGFydGVkIE5ZQyBpbiAyMDEzLiAoMjAxOSkuIGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9ueWNmbGlnaHRzMTMvbnljZmxpZ2h0czEzLnBkZgoKSW50ZWdyaWRhZCAtIEV0aGljcyBVbndyYXBwZWQuICgyMDIyKS4gRXRoaWNzIFVud3JhcHBlZC4gaHR0cHM6Ly9ldGhpY3N1bndyYXBwZWQudXRleGFzLmVkdS9nbG9zc2FyeS9pbnRlZ3JpZGFkP2xhbmc9ZXMKCgoKCgoKCgoK