Situación Problema

¿Cómo mejorar la posición competitiva de una de las aerolíneas líderes en los aeropuertos de Nueva York?

Exploración

Te estás iniciando en la industria de la aviación, es importante y necesario que conozcas la base de datos del sistema administrativo del aeropuerto y para ello tendrás que explorarla e identificar las variables que la forman y sus tipos. El análisis exploratorio deberá incluir algunos resultados descriptivos.

La base de datos se encuentra en el paquete. library(nycflights13) y está formada por 5 data frames.

library(nycflights13)

Necesitas consultar para cada data frame de la base de datos.

¿Cuáles son los campos y sus tipos de datos?

Base de Datos 1 - Airlines

summary(airlines)
##    carrier              name          
##  Length:16          Length:16         
##  Class :character   Class :character  
##  Mode  :character   Mode  :character
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" ...
data(airlines)
ncol(airlines)
## [1] 2
nrow(airlines)
## [1] 16
dim(airlines)
## [1] 16  2
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.

Base de Datos 2 - Airports

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
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")=List of 3
##   ..$ cols   :List of 12
##   .. ..$ id     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ name   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ city   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ country: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ faa    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ icao   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ lat    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ lon    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ alt    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tz     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ dst    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ tzone  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ skip   : num 0
##   ..- attr(*, "class")= chr "col_spec"
data(airports)
ncol(airports)
## [1] 8
nrow(airports)
## [1] 1458
dim(airports)
## [1] 1458    8
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…

Base de Datos 3 - Flights

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  
## 
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" ...
data(flights)
ncol(flights)
## [1] 19
nrow(flights)
## [1] 336776
dim(flights)
## [1] 336776     19
head(flights)
## # A tibble: 6 × 19
##    year month   day dep_time sched_dep…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##   <int> <int> <int>    <int>       <int>   <dbl>   <int>   <int>   <dbl> <chr>  
## 1  2013     1     1      517         515       2     830     819      11 UA     
## 2  2013     1     1      533         529       4     850     830      20 UA     
## 3  2013     1     1      542         540       2     923     850      33 AA     
## 4  2013     1     1      544         545      -1    1004    1022     -18 B6     
## 5  2013     1     1      554         600      -6     812     837     -25 DL     
## 6  2013     1     1      554         558      -4     740     728      12 UA     
## # … with 9 more variables: flight <int>, tailnum <chr>, origin <chr>,
## #   dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
## #   time_hour <dttm>, and abbreviated variable names ¹​sched_dep_time,
## #   ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay
tail(flights) 
## # A tibble: 6 × 19
##    year month   day dep_time sched_dep…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##   <int> <int> <int>    <int>       <int>   <dbl>   <int>   <int>   <dbl> <chr>  
## 1  2013     9    30       NA        1842      NA      NA    2019      NA EV     
## 2  2013     9    30       NA        1455      NA      NA    1634      NA 9E     
## 3  2013     9    30       NA        2200      NA      NA    2312      NA 9E     
## 4  2013     9    30       NA        1210      NA      NA    1330      NA MQ     
## 5  2013     9    30       NA        1159      NA      NA    1344      NA MQ     
## 6  2013     9    30       NA         840      NA      NA    1020      NA MQ     
## # … with 9 more variables: flight <int>, tailnum <chr>, origin <chr>,
## #   dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
## #   time_hour <dttm>, and abbreviated variable names ¹​sched_dep_time,
## #   ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay

Base de Datos 4 - Planes

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  
##                    
##                    
##                    
## 
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" ...
data(planes)
ncol(planes)
## [1] 9
nrow(planes)
## [1] 3322
dim(planes)
## [1] 3322    9
head(planes)
## # A tibble: 6 × 9
##   tailnum  year type                    manuf…¹ model engines seats speed engine
##   <chr>   <int> <chr>                   <chr>   <chr>   <int> <int> <int> <chr> 
## 1 N10156   2004 Fixed wing multi engine EMBRAER EMB-…       2    55    NA Turbo…
## 2 N102UW   1998 Fixed wing multi engine AIRBUS… A320…       2   182    NA Turbo…
## 3 N103US   1999 Fixed wing multi engine AIRBUS… A320…       2   182    NA Turbo…
## 4 N104UW   1999 Fixed wing multi engine AIRBUS… A320…       2   182    NA Turbo…
## 5 N10575   2002 Fixed wing multi engine EMBRAER EMB-…       2    55    NA Turbo…
## 6 N105UW   1999 Fixed wing multi engine AIRBUS… A320…       2   182    NA Turbo…
## # … with abbreviated variable name ¹​manufacturer
tail(planes) 
## # A tibble: 6 × 9
##   tailnum  year type                    manuf…¹ model engines seats speed engine
##   <chr>   <int> <chr>                   <chr>   <chr>   <int> <int> <int> <chr> 
## 1 N996DL   1991 Fixed wing multi engine MCDONN… MD-88       2   142    NA Turbo…
## 2 N997AT   2002 Fixed wing multi engine BOEING  717-…       2   100    NA Turbo…
## 3 N997DL   1992 Fixed wing multi engine MCDONN… MD-88       2   142    NA Turbo…
## 4 N998AT   2002 Fixed wing multi engine BOEING  717-…       2   100    NA Turbo…
## 5 N998DL   1992 Fixed wing multi engine MCDONN… MD-88       2   142    NA Turbo…
## 6 N999DN   1992 Fixed wing multi engine MCDONN… MD-88       2   142    NA Turbo…
## # … with abbreviated variable name ¹​manufacturer

Base de Datos 5 - Weather

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
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" ...
data(weather)
ncol(weather)
## [1] 15
nrow(weather)
## [1] 26115
dim(weather)
## [1] 26115    15
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
## # … with 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  
## # … with 4 more variables: precip <dbl>, pressure <dbl>, visib <dbl>,
## #   time_hour <dttm>

Identifica los diferentes tipos de datos y explica en qué consiste cada uno de ellos y cuál es la diferencia entre uno y otro, incluyendo los siguientes tipos de datos: int, dbl, chr, dttm.

  • integer contiene enteros, por ejemplo: year.
  • double contiene números reales, por ejemplo: lat .
  • data time contiene fecha y tiempo, por ejemplo: time_hour
  • character contiene texto, por ejemplo: carrier.

Hallazgos.

Mediante la exploración de datos podemos identificar las principales variables de los Dataframes y sus tipos. Podemos observar si hay algunas variables con NA o si tenemos preguntas para aclarar antes de la manipulación.

Manipulación de datos

Se te ha solicitado consultar cuáles son las aerolíneas de mayor tráfico aéreo en origen y destino. Cuentas con un data frame llamado flights que contiene toda la información de los vuelos de todos los aeropuertos de New York.

Para lograrlo considera las funciones sugeridas en los siguientes pasos:

Consulta el data frame flights para recordar su contenido.

# View(flights)

Encuentra los datos descriptivos del data frame flights. Identifica la media de las distancias recorridas en millas.

summary(flights)
##       year          month             day           dep_time    sched_dep_time
##  Min.   :2013   Min.   : 1.000   Min.   : 1.00   Min.   :   1   Min.   : 106  
##  1st Qu.:2013   1st Qu.: 4.000   1st Qu.: 8.00   1st Qu.: 907   1st Qu.: 906  
##  Median :2013   Median : 7.000   Median :16.00   Median :1401   Median :1359  
##  Mean   :2013   Mean   : 6.549   Mean   :15.71   Mean   :1349   Mean   :1344  
##  3rd Qu.:2013   3rd Qu.:10.000   3rd Qu.:23.00   3rd Qu.:1744   3rd Qu.:1729  
##  Max.   :2013   Max.   :12.000   Max.   :31.00   Max.   :2400   Max.   :2359  
##                                                  NA's   :8255                 
##    dep_delay          arr_time    sched_arr_time   arr_delay       
##  Min.   : -43.00   Min.   :   1   Min.   :   1   Min.   : -86.000  
##  1st Qu.:  -5.00   1st Qu.:1104   1st Qu.:1124   1st Qu.: -17.000  
##  Median :  -2.00   Median :1535   Median :1556   Median :  -5.000  
##  Mean   :  12.64   Mean   :1502   Mean   :1536   Mean   :   6.895  
##  3rd Qu.:  11.00   3rd Qu.:1940   3rd Qu.:1945   3rd Qu.:  14.000  
##  Max.   :1301.00   Max.   :2400   Max.   :2359   Max.   :1272.000  
##  NA's   :8255      NA's   :8713                  NA's   :9430      
##    carrier              flight       tailnum             origin         
##  Length:336776      Min.   :   1   Length:336776      Length:336776     
##  Class :character   1st Qu.: 553   Class :character   Class :character  
##  Mode  :character   Median :1496   Mode  :character   Mode  :character  
##                     Mean   :1972                                        
##                     3rd Qu.:3465                                        
##                     Max.   :8500                                        
##                                                                         
##      dest              air_time        distance         hour      
##  Length:336776      Min.   : 20.0   Min.   :  17   Min.   : 1.00  
##  Class :character   1st Qu.: 82.0   1st Qu.: 502   1st Qu.: 9.00  
##  Mode  :character   Median :129.0   Median : 872   Median :13.00  
##                     Mean   :150.7   Mean   :1040   Mean   :13.18  
##                     3rd Qu.:192.0   3rd Qu.:1389   3rd Qu.:17.00  
##                     Max.   :695.0   Max.   :4983   Max.   :23.00  
##                     NA's   :9430                                  
##      minute        time_hour                     
##  Min.   : 0.00   Min.   :2013-01-01 05:00:00.00  
##  1st Qu.: 8.00   1st Qu.:2013-04-04 13:00:00.00  
##  Median :29.00   Median :2013-07-03 10:00:00.00  
##  Mean   :26.23   Mean   :2013-07-03 05:22:54.64  
##  3rd Qu.:44.00   3rd Qu.:2013-10-01 07:00:00.00  
##  Max.   :59.00   Max.   :2013-12-31 23:00:00.00  
## 

Define un criterio para encontrar las aerolíneas que han recorrido más distancia (en millas) y crea un nuevo data frame que filtre solamente a las aeorlíneas que han recorrido una distancia superior a la media, se desean ver los campos carrier, distance, origin, dest en forma descendente por distance.

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
mas_distancia <- select(flights,carrier, distance, origin, dest)
head(mas_distancia)
## # A tibble: 6 × 4
##   carrier distance origin dest 
##   <chr>      <dbl> <chr>  <chr>
## 1 UA          1400 EWR    IAH  
## 2 UA          1416 LGA    IAH  
## 3 AA          1089 JFK    MIA  
## 4 B6          1576 JFK    BQN  
## 5 DL           762 LGA    ATL  
## 6 UA           719 EWR    ORD
mayor_media <- filter(mas_distancia, distance > 1040)
head(mayor_media)
## # A tibble: 6 × 4
##   carrier distance origin dest 
##   <chr>      <dbl> <chr>  <chr>
## 1 UA          1400 EWR    IAH  
## 2 UA          1416 LGA    IAH  
## 3 AA          1089 JFK    MIA  
## 4 B6          1576 JFK    BQN  
## 5 B6          1065 EWR    FLL  
## 6 UA          2475 JFK    LAX
orden <- arrange(mayor_media,desc(distance))
head(orden)
## # A tibble: 6 × 4
##   carrier distance origin dest 
##   <chr>      <dbl> <chr>  <chr>
## 1 HA          4983 JFK    HNL  
## 2 HA          4983 JFK    HNL  
## 3 HA          4983 JFK    HNL  
## 4 HA          4983 JFK    HNL  
## 5 HA          4983 JFK    HNL  
## 6 HA          4983 JFK    HNL
count(orden, carrier, sort=TRUE)
## # A tibble: 13 × 2
##    carrier     n
##    <chr>   <int>
##  1 UA      39294
##  2 B6      24426
##  3 AA      23190
##  4 DL      21637
##  5 VX       5162
##  6 EV       3991
##  7 WN       3832
##  8 US       2271
##  9 9E       1377
## 10 MQ        744
## 11 AS        714
## 12 F9        685
## 13 HA        342

Encuentra la suma y la media de las distancias recorridas por carrier, elimina los NA’S e interpreta que significa la suma y la media de las distancias recorridas

distancias <- orden %>% group_by(carrier, origin, distance)  %>%
  summarize(suma_distancias=sum(distance, na.rm=TRUE), promedio_distancia= mean(distance, na.rm=TRUE))
## `summarise()` has grouped output by 'carrier', 'origin'. You can override using
## the `.groups` argument.
distancias
## # A tibble: 150 × 5
## # Groups:   carrier, origin [26]
##    carrier origin distance suma_distancias promedio_distancia
##    <chr>   <chr>     <dbl>           <dbl>              <dbl>
##  1 9E      JFK        1113          307188               1113
##  2 9E      JFK        1182          515352               1182
##  3 9E      JFK        1391          507715               1391
##  4 9E      JFK        1521            3042               1521
##  5 9E      JFK        1587           84111               1587
##  6 9E      LGA        1047           81666               1047
##  7 9E      LGA        1080           72360               1080
##  8 9E      LGA        1107           94095               1107
##  9 9E      LGA        1183            1183               1183
## 10 9E      LGA        1389           19446               1389
## # … with 140 more rows

Ordena en forma descendente por distancia recorrida

distancias_orden <- arrange(distancias, desc(suma_distancias))
head(distancias_orden)
## # A tibble: 6 × 5
## # Groups:   carrier, origin [5]
##   carrier origin distance suma_distancias promedio_distancia
##   <chr>   <chr>     <dbl>           <dbl>              <dbl>
## 1 UA      EWR        2565        11142360               2565
## 2 UA      EWR        2454         9236856               2454
## 3 AA      JFK        2475         7962075               2475
## 4 AA      LGA        1389         6717204               1389
## 5 UA      JFK        2586         6400350               2586
## 6 DL      JFK        2475         6189975               2475

Observa tus resultados de la última tabla y agrega tus interpretaciones.

En la tabla anterior se puede observar las distancias recorridas de forma descendiente de las diferentes aerolíneas a cada destino.

La aerolínea con mayor distancia recorrida es “UA, United Airlines” del aeropuerto EWR con un promedio recorrido de 2,565 millas y con un total de distancia de 11,142,360 millas en el tiempo establecido.

Identifica si las aerolíneas líderes son las mismas en los tres aeropuertos cuyo origen es Nueva York ( John F. Kennedy (JFK), LaGuardia (LGA) and Newark Liberty (EWR) ).Genera un data frame para cada aeropuerto

John F. Kennedy (JFK)

JFK <- distancias_orden %>% 
  filter(origin== "JFK") 

JFK
## # A tibble: 69 × 5
## # Groups:   carrier, origin [8]
##    carrier origin distance suma_distancias promedio_distancia
##    <chr>   <chr>     <dbl>           <dbl>              <dbl>
##  1 AA      JFK        2475         7962075               2475
##  2 UA      JFK        2586         6400350               2586
##  3 DL      JFK        2475         6189975               2475
##  4 UA      JFK        2475         5096025               2475
##  5 DL      JFK        2586         4804788               2586
##  6 VX      JFK        2475         4447575               2475
##  7 B6      JFK        2475         4177800               2475
##  8 DL      JFK        2248         3760904               2248
##  9 B6      JFK        1598         3758496               1598
## 10 AA      JFK        2586         3677292               2586
## # … with 59 more rows
LGA <- distancias_orden %>% 
  filter(origin== "LGA") 
LGA
## # A tibble: 31 × 5
## # Groups:   carrier, origin [9]
##    carrier origin distance suma_distancias promedio_distancia
##    <chr>   <chr>     <dbl>           <dbl>              <dbl>
##  1 AA      LGA        1389         6717204               1389
##  2 AA      LGA        1096         4323720               1096
##  3 UA      LGA        1416         4178616               1416
##  4 UA      LGA        1620         2634120               1620
##  5 B6      LGA        1076         2354288               1076
##  6 DL      LGA        1096         2012256               1096
##  7 DL      LGA        1076         1958320               1076
##  8 DL      LGA        1183         1192464               1183
##  9 WN      LGA        1620         1158300               1620
## 10 F9      LGA        1620         1109700               1620
## # … with 21 more rows
EWR <- distancias_orden %>% 
  filter(origin== "EWR") 
EWR
## # A tibble: 50 × 5
## # Groups:   carrier, origin [9]
##    carrier origin distance suma_distancias promedio_distancia
##    <chr>   <chr>     <dbl>           <dbl>              <dbl>
##  1 UA      EWR        2565        11142360               2565
##  2 UA      EWR        2454         9236856               2454
##  3 UA      EWR        1400         5562200               1400
##  4 UA      EWR        2227         4476270               2227
##  5 UA      EWR        1605         3482850               1605
##  6 UA      EWR        2434         3397864               2434
##  7 AA      EWR        1372         2818088               1372
##  8 UA      EWR        2425         2749950               2425
##  9 UA      EWR        2402         2683034               2402
## 10 UA      EWR        1065         2563455               1065
## # … with 40 more rows

Las aerolíneas líderes no son las mismas en cada aeropuerto, dependiendo de las necesidades de los pasajeros,así como las conexiones, esto se debe a diferentes factores por ejemplo:

En JFK (el aeropuerto más grande de Estados Unidos) los trámites migratorios actualmente son más rápidos gracias a la automatización (hay kioskos donde uno mismo escanea su pasaporte y huellas), pero también pueden ser terriblemente lentos si su llegada coincide con muchos vuelos. El ingreso por JFK podría demorar entre media y dos horas. Lo bueno, es que tiene tiene muchos transportes disponibles, incluyendo el Airtrain + metro a solo 10.75 dólares.

Por otra parte, el Aeropuerto Newark en New Jersey está más lejos y el transporte a Manhattan sale más caro, pero muchas veces hay ofertas en vuelos y podría salir más barato para los clientes.

El Aeropuerto LaGuardia es el terminal de vuelos domésticos o nacionales de Nueva York (con algunas excepciones). Como algunos pasajeros llegan a NYC haciendo conexiones, es común aterrizar en LGA. Y si vuelan a Nueva York desde otra ciudad de Estados Unidos lo más probable es que LaGuardia sea su aeropuerto.

Hablando en temas de los datos obtenidos, se puede ver que efectivamente las aerolíneas líderes no son las mismas en cada aeropuerto. En el aeropuerto JFK la aerolínea líder es: American Airlines con 7,962,075 millas recorridas, en el aeropuerto LGA la aerolínea líder es: American Airlines con 6,717,204 millas recorridas y finalmente en el aeropuerto EWR la aerolínea líder es: United Airlines con 11,142,360 millas recorridas.

(NEWYORKANDO 2023)

Conclusiones

Con la información presentada anteriormente y con las funciones utilizadas en RStudio, se pudo obtener datos estadísticos sobre los 3 diferentes aeropuertos de Nueva York, para poder ver en qué aspectos son diferentes o qué variables afectan las llegadas a los distintos aeropuertos. Se pudo observar las aerolíneas, datos precisos sobre cada una de ellas, información sobre vuelos, tiempos de llegada, salida, etc. Como vimos también las aerolíneas líderes cambian dependiendo del aeropuerto al que llegan, debido a las diferentes necesidades de los pasajeros así como cercanía y facilidades para trámites importantes, como los de migración.

Bibliografía

Wickham, H. and Grolemund, G. (2017) R for Data Science: Import, Tidy, Transform, Visualize, and Model Data O’Reilly Media: Sebastopol, California.

Nycflights13 v1.0.0 https://www.rdocumentation.org/packages/nycflights13/versions/1.0.0

Aeropuerto LaGuardia [Traslados económicos, Bus, Metro]. (2023, February 27). Retrieved March 14, 2023, from Nueva York website: https://www.newyorkando.com/como-llegar-del-aeropuerto-la-guardia-a-nueva-york/

Aeropuertos de Nueva York [JFK, LaGuardia y Newark]. (2023, February 27). Retrieved March 14, 2023, from Nueva York website: https://www.newyorkando.com/del-aeropuerto-a-la-ciudad/

LS0tCnRpdGxlOiAiU2l0dWFjacOzbiBQcm9ibGVtYSAxIgphdXRob3I6ICJNYXJpYW5hIExlYWwgTMOzcGV6IEEwMTU3MDk3NyIKZGF0ZTogIjIwMjMtMDItMTQiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCi0tLQohW10oL1VzZXJzL01hcmlhbmEvRGVza3RvcC9jYWJlY2VyYV9hdmlvblBFLnBuZykKCgoKIyMgU2l0dWFjacOzbiBQcm9ibGVtYQrCv0PDs21vIG1lam9yYXIgbGEgcG9zaWNpw7NuIGNvbXBldGl0aXZhIGRlIHVuYSBkZSBsYXMgYWVyb2zDrW5lYXMgbMOtZGVyZXMgZW4gbG9zIGFlcm9wdWVydG9zIGRlIE51ZXZhIFlvcms/CgojIyMgRXhwbG9yYWNpw7NuIApUZSBlc3TDoXMgaW5pY2lhbmRvIGVuIGxhIGluZHVzdHJpYSBkZSBsYSBhdmlhY2nDs24sIGVzIGltcG9ydGFudGUgeSBuZWNlc2FyaW8gcXVlIGNvbm96Y2FzIGxhIGJhc2UgZGUgZGF0b3MgZGVsIHNpc3RlbWEgYWRtaW5pc3RyYXRpdm8gZGVsIGFlcm9wdWVydG8geSBwYXJhIGVsbG8gdGVuZHLDoXMgcXVlIGV4cGxvcmFybGEgZSBpZGVudGlmaWNhciBsYXMgdmFyaWFibGVzIHF1ZSBsYSBmb3JtYW4geSBzdXMgdGlwb3MuIEVsIGFuw6FsaXNpcyBleHBsb3JhdG9yaW8gZGViZXLDoSBpbmNsdWlyIGFsZ3Vub3MgcmVzdWx0YWRvcyBkZXNjcmlwdGl2b3MuICAKCkxhIGJhc2UgZGUgZGF0b3Mgc2UgZW5jdWVudHJhIGVuIGVsIHBhcXVldGUuICBsaWJyYXJ5KG55Y2ZsaWdodHMxMykgeSBlc3TDoSBmb3JtYWRhIHBvciA1IGRhdGEgZnJhbWVzLiAgCgpgYGB7cn0KbGlicmFyeShueWNmbGlnaHRzMTMpCmBgYAoKTmVjZXNpdGFzIGNvbnN1bHRhciBwYXJhIGNhZGEgZGF0YSBmcmFtZSBkZSBsYSBiYXNlIGRlIGRhdG9zLiAKCgoqKsK/Q3XDoWxlcyBzb24gbG9zIGNhbXBvcyB5IHN1cyB0aXBvcyBkZSBkYXRvcz8qKgoKQmFzZSBkZSBEYXRvcyAxIC0gQWlybGluZXMKYGBge3J9CnN1bW1hcnkoYWlybGluZXMpCnN0cihhaXJsaW5lcykKZGF0YShhaXJsaW5lcykKbmNvbChhaXJsaW5lcykKbnJvdyhhaXJsaW5lcykKZGltKGFpcmxpbmVzKQpoZWFkKGFpcmxpbmVzKQp0YWlsKGFpcmxpbmVzKSAKYGBgCgpCYXNlIGRlIERhdG9zIDIgLSBBaXJwb3J0cwpgYGB7cn0Kc3VtbWFyeShhaXJwb3J0cykKc3RyKGFpcnBvcnRzKQpkYXRhKGFpcnBvcnRzKQpuY29sKGFpcnBvcnRzKQpucm93KGFpcnBvcnRzKQpkaW0oYWlycG9ydHMpCmhlYWQoYWlycG9ydHMpCnRhaWwoYWlycG9ydHMpIApgYGAKCkJhc2UgZGUgRGF0b3MgMyAtIEZsaWdodHMKYGBge3J9CnN1bW1hcnkoZmxpZ2h0cykKc3RyKGZsaWdodHMpCmRhdGEoZmxpZ2h0cykKbmNvbChmbGlnaHRzKQpucm93KGZsaWdodHMpCmRpbShmbGlnaHRzKQpoZWFkKGZsaWdodHMpCnRhaWwoZmxpZ2h0cykgCmBgYAoKQmFzZSBkZSBEYXRvcyA0IC0gUGxhbmVzCmBgYHtyfQpzdW1tYXJ5KHBsYW5lcykKc3RyKHBsYW5lcykKZGF0YShwbGFuZXMpCm5jb2wocGxhbmVzKQpucm93KHBsYW5lcykKZGltKHBsYW5lcykKaGVhZChwbGFuZXMpCnRhaWwocGxhbmVzKSAKYGBgCgpCYXNlIGRlIERhdG9zIDUgLSBXZWF0aGVyCmBgYHtyfQpzdW1tYXJ5KHdlYXRoZXIpCnN0cih3ZWF0aGVyKQpkYXRhKHdlYXRoZXIpCm5jb2wod2VhdGhlcikKbnJvdyh3ZWF0aGVyKQpkaW0od2VhdGhlcikKaGVhZCh3ZWF0aGVyKQp0YWlsKHdlYXRoZXIpIAoKYGBgCgoqKklkZW50aWZpY2EgbG9zIGRpZmVyZW50ZXMgdGlwb3MgZGUgZGF0b3MgeSBleHBsaWNhIGVuIHF1w6kgY29uc2lzdGUgY2FkYSB1bm8gZGUgZWxsb3MgeSBjdcOhbCBlcyBsYSBkaWZlcmVuY2lhIGVudHJlIHVubyB5IG90cm8sIGluY2x1eWVuZG8gbG9zIHNpZ3VpZW50ZXMgdGlwb3MgZGUgZGF0b3M6IGludCwgZGJsLCBjaHIsIGR0dG0uKioKCiogaW50ZWdlciAgPGludD4gY29udGllbmUgZW50ZXJvcywgcG9yIGVqZW1wbG86IHllYXIuIAoqIGRvdWJsZSAgPGRibD4gY29udGllbmUgbsO6bWVyb3MgcmVhbGVzLCBwb3IgZWplbXBsbzogbGF0IC4KKiBkYXRhIHRpbWUgPGR0dG0+IGNvbnRpZW5lIGZlY2hhIHkgdGllbXBvLCBwb3IgZWplbXBsbzogdGltZV9ob3VyIAoqIGNoYXJhY3RlciA8Y2hyPiBjb250aWVuZSB0ZXh0bywgcG9yIGVqZW1wbG86ICBjYXJyaWVyLgoKKipIYWxsYXpnb3MqKi4gCgpNZWRpYW50ZSBsYSBleHBsb3JhY2nDs24gZGUgZGF0b3MgcG9kZW1vcyBpZGVudGlmaWNhciBsYXMgcHJpbmNpcGFsZXMgdmFyaWFibGVzIGRlIGxvcyAqRGF0YWZyYW1lcyogeSBzdXMgdGlwb3MuIFBvZGVtb3Mgb2JzZXJ2YXIgc2kgaGF5IGFsZ3VuYXMgdmFyaWFibGVzIGNvbiBOQSBvIHNpIHRlbmVtb3MgcHJlZ3VudGFzIHBhcmEgYWNsYXJhciBhbnRlcyBkZSBsYSBtYW5pcHVsYWNpw7NuLiAKCgojIyMgTWFuaXB1bGFjacOzbiBkZSBkYXRvcwpTZSB0ZSBoYSBzb2xpY2l0YWRvIGNvbnN1bHRhciBjdcOhbGVzIHNvbiBsYXMgYWVyb2zDrW5lYXMgZGUgbWF5b3IgdHLDoWZpY28gYcOpcmVvIGVuIG9yaWdlbiB5IGRlc3Rpbm8uIEN1ZW50YXMgY29uIHVuIGRhdGEgZnJhbWUgbGxhbWFkbyBmbGlnaHRzIHF1ZSBjb250aWVuZSB0b2RhIGxhIGluZm9ybWFjacOzbiBkZSBsb3MgdnVlbG9zIGRlIHRvZG9zIGxvcyBhZXJvcHVlcnRvcyBkZSBOZXcgWW9yay4gCgpQYXJhIGxvZ3JhcmxvIGNvbnNpZGVyYSBsYXMgZnVuY2lvbmVzIHN1Z2VyaWRhcyBlbiBsb3Mgc2lndWllbnRlcyBwYXNvczoKCioqQ29uc3VsdGEgZWwgZGF0YSBmcmFtZSBmbGlnaHRzIHBhcmEgcmVjb3JkYXIgc3UgY29udGVuaWRvLioqCgpgYGB7cn0KIyBWaWV3KGZsaWdodHMpCmBgYAoKKipFbmN1ZW50cmEgbG9zIGRhdG9zIGRlc2NyaXB0aXZvcyBkZWwgZGF0YSBmcmFtZSBmbGlnaHRzLiBJZGVudGlmaWNhIGxhIG1lZGlhIGRlIGxhcyBkaXN0YW5jaWFzIHJlY29ycmlkYXMgZW4gbWlsbGFzLioqCgpgYGB7cn0Kc3VtbWFyeShmbGlnaHRzKQpgYGAKCioqRGVmaW5lIHVuIGNyaXRlcmlvIHBhcmEgZW5jb250cmFyIGxhcyBhZXJvbMOtbmVhcyBxdWUgaGFuIHJlY29ycmlkbyBtw6FzIGRpc3RhbmNpYSAoZW4gbWlsbGFzKSB5IGNyZWEgdW4gbnVldm8gZGF0YSBmcmFtZSBxdWUgZmlsdHJlIHNvbGFtZW50ZSBhIGxhcyBhZW9ybMOtbmVhcyBxdWUgaGFuIHJlY29ycmlkbyB1bmEgZGlzdGFuY2lhIHN1cGVyaW9yIGEgbGEgbWVkaWEsIHNlIGRlc2VhbiB2ZXIgbG9zIGNhbXBvcyBjYXJyaWVyLCBkaXN0YW5jZSwgb3JpZ2luLCBkZXN0IGVuIGZvcm1hIGRlc2NlbmRlbnRlIHBvciBkaXN0YW5jZS4qKgoKYGBge3J9CmxpYnJhcnkoZHBseXIpCm1hc19kaXN0YW5jaWEgPC0gc2VsZWN0KGZsaWdodHMsY2FycmllciwgZGlzdGFuY2UsIG9yaWdpbiwgZGVzdCkKaGVhZChtYXNfZGlzdGFuY2lhKQptYXlvcl9tZWRpYSA8LSBmaWx0ZXIobWFzX2Rpc3RhbmNpYSwgZGlzdGFuY2UgPiAxMDQwKQpoZWFkKG1heW9yX21lZGlhKQpvcmRlbiA8LSBhcnJhbmdlKG1heW9yX21lZGlhLGRlc2MoZGlzdGFuY2UpKQpoZWFkKG9yZGVuKQpjb3VudChvcmRlbiwgY2Fycmllciwgc29ydD1UUlVFKQpgYGAKCioqRW5jdWVudHJhIGxhIHN1bWEgeSBsYSBtZWRpYSBkZSBsYXMgZGlzdGFuY2lhcyByZWNvcnJpZGFzIHBvciBjYXJyaWVyLCBlbGltaW5hIGxvcyBOQeKAmVMgIGUgaW50ZXJwcmV0YSBxdWUgc2lnbmlmaWNhIGxhIHN1bWEgeSBsYSBtZWRpYSBkZSBsYXMgZGlzdGFuY2lhcyByZWNvcnJpZGFzKioKYGBge3J9CmRpc3RhbmNpYXMgPC0gb3JkZW4gJT4lIGdyb3VwX2J5KGNhcnJpZXIsIG9yaWdpbiwgZGlzdGFuY2UpICAlPiUKICBzdW1tYXJpemUoc3VtYV9kaXN0YW5jaWFzPXN1bShkaXN0YW5jZSwgbmEucm09VFJVRSksIHByb21lZGlvX2Rpc3RhbmNpYT0gbWVhbihkaXN0YW5jZSwgbmEucm09VFJVRSkpCmRpc3RhbmNpYXMKYGBgCioqT3JkZW5hIGVuIGZvcm1hIGRlc2NlbmRlbnRlIHBvciBkaXN0YW5jaWEgcmVjb3JyaWRhKioKYGBge3J9CmRpc3RhbmNpYXNfb3JkZW4gPC0gYXJyYW5nZShkaXN0YW5jaWFzLCBkZXNjKHN1bWFfZGlzdGFuY2lhcykpCmhlYWQoZGlzdGFuY2lhc19vcmRlbikKYGBgCgoqKk9ic2VydmEgdHVzIHJlc3VsdGFkb3MgZGUgbGEgw7psdGltYSB0YWJsYSB5IGFncmVnYSB0dXMgaW50ZXJwcmV0YWNpb25lcy4qKgoKRW4gbGEgdGFibGEgYW50ZXJpb3Igc2UgcHVlZGUgb2JzZXJ2YXIgbGFzIGRpc3RhbmNpYXMgcmVjb3JyaWRhcyBkZSBmb3JtYSBkZXNjZW5kaWVudGUgZGUgbGFzIGRpZmVyZW50ZXMgYWVyb2zDrW5lYXMgYSBjYWRhIGRlc3Rpbm8uCgpMYSBhZXJvbMOtbmVhIGNvbiBtYXlvciBkaXN0YW5jaWEgcmVjb3JyaWRhIGVzICJVQSwgVW5pdGVkIEFpcmxpbmVzIiBkZWwgYWVyb3B1ZXJ0byBFV1IgY29uIHVuIHByb21lZGlvIHJlY29ycmlkbyBkZSAyLDU2NSBtaWxsYXMgeSBjb24gdW4gdG90YWwgZGUgZGlzdGFuY2lhIGRlIDExLDE0MiwzNjAgbWlsbGFzIGVuIGVsIHRpZW1wbyBlc3RhYmxlY2lkby4gCgoqKklkZW50aWZpY2Egc2kgbGFzIGFlcm9sw61uZWFzIGzDrWRlcmVzIHNvbiBsYXMgbWlzbWFzIGVuIGxvcyB0cmVzIGFlcm9wdWVydG9zIGN1eW8gb3JpZ2VuIGVzIE51ZXZhIFlvcmsgKCBKb2huIEYuIEtlbm5lZHkgKEpGSyksIExhR3VhcmRpYSAoTEdBKSBhbmQgTmV3YXJrIExpYmVydHkgIChFV1IpICkuR2VuZXJhIHVuIGRhdGEgZnJhbWUgIHBhcmEgY2FkYSBhZXJvcHVlcnRvKioKCkpvaG4gRi4gS2VubmVkeSAoSkZLKQpgYGB7cn0KSkZLIDwtIGRpc3RhbmNpYXNfb3JkZW4gJT4lIAogIGZpbHRlcihvcmlnaW49PSAiSkZLIikgCgpKRksKCkxHQSA8LSBkaXN0YW5jaWFzX29yZGVuICU+JSAKICBmaWx0ZXIob3JpZ2luPT0gIkxHQSIpIApMR0EKCkVXUiA8LSBkaXN0YW5jaWFzX29yZGVuICU+JSAKICBmaWx0ZXIob3JpZ2luPT0gIkVXUiIpIApFV1IKICAgICAgICAKYGBgCgpMYXMgYWVyb2zDrW5lYXMgbMOtZGVyZXMgbm8gc29uIGxhcyBtaXNtYXMgZW4gY2FkYSBhZXJvcHVlcnRvLCBkZXBlbmRpZW5kbyBkZSBsYXMgbmVjZXNpZGFkZXMgZGUgbG9zIHBhc2FqZXJvcyxhc8OtIGNvbW8gbGFzIGNvbmV4aW9uZXMsICBlc3RvIHNlIGRlYmUgYSBkaWZlcmVudGVzIGZhY3RvcmVzIHBvciBlamVtcGxvOgoKRW4gSkZLIChlbCBhZXJvcHVlcnRvIG3DoXMgZ3JhbmRlIGRlIEVzdGFkb3MgVW5pZG9zKSBsb3MgdHLDoW1pdGVzIG1pZ3JhdG9yaW9zIGFjdHVhbG1lbnRlIHNvbiBtw6FzIHLDoXBpZG9zIGdyYWNpYXMgYSBsYSBhdXRvbWF0aXphY2nDs24gKGhheSBraW9za29zIGRvbmRlIHVubyBtaXNtbyBlc2NhbmVhIHN1IHBhc2Fwb3J0ZSB5IGh1ZWxsYXMpLCBwZXJvIHRhbWJpw6luIHB1ZWRlbiBzZXIgdGVycmlibGVtZW50ZSBsZW50b3Mgc2kgc3UgbGxlZ2FkYSBjb2luY2lkZSBjb24gbXVjaG9zIHZ1ZWxvcy4gRWwgaW5ncmVzbyBwb3IgSkZLIHBvZHLDrWEgZGVtb3JhciBlbnRyZSBtZWRpYSB5IGRvcyBob3Jhcy4gTG8gYnVlbm8sIGVzIHF1ZSB0aWVuZSB0aWVuZSBtdWNob3MgdHJhbnNwb3J0ZXMgZGlzcG9uaWJsZXMsIGluY2x1eWVuZG8gZWwgQWlydHJhaW4gKyBtZXRybyBhIHNvbG8gMTAuNzUgZMOzbGFyZXMuCgoKUG9yIG90cmEgcGFydGUsIGVsIEFlcm9wdWVydG8gTmV3YXJrIGVuIE5ldyBKZXJzZXkgZXN0w6EgbcOhcyBsZWpvcyB5IGVsIHRyYW5zcG9ydGUgYSBNYW5oYXR0YW4gc2FsZSBtw6FzIGNhcm8sIHBlcm8gbXVjaGFzIHZlY2VzIGhheSBvZmVydGFzIGVuIHZ1ZWxvcyB5IHBvZHLDrWEgc2FsaXIgbcOhcyBiYXJhdG8gcGFyYSBsb3MgY2xpZW50ZXMuCgpFbCBBZXJvcHVlcnRvIExhR3VhcmRpYSBlcyBlbCB0ZXJtaW5hbCBkZSB2dWVsb3MgZG9tw6lzdGljb3MgbyBuYWNpb25hbGVzIGRlIE51ZXZhIFlvcmsgKGNvbiBhbGd1bmFzIGV4Y2VwY2lvbmVzKS4gQ29tbyBhbGd1bm9zIHBhc2FqZXJvcyBsbGVnYW4gYSBOWUMgaGFjaWVuZG8gY29uZXhpb25lcywgZXMgY29tw7puIGF0ZXJyaXphciBlbiBMR0EuIFkgc2kgdnVlbGFuIGEgTnVldmEgWW9yayBkZXNkZSBvdHJhIGNpdWRhZCBkZSBFc3RhZG9zIFVuaWRvcyBsbyBtw6FzIHByb2JhYmxlIGVzIHF1ZSBMYUd1YXJkaWEgc2VhIHN1IGFlcm9wdWVydG8uCgpIYWJsYW5kbyBlbiB0ZW1hcyBkZSBsb3MgZGF0b3Mgb2J0ZW5pZG9zLCBzZSBwdWVkZSB2ZXIgcXVlIGVmZWN0aXZhbWVudGUgbGFzIGFlcm9sw61uZWFzIGzDrWRlcmVzIG5vIHNvbiBsYXMgbWlzbWFzIGVuIGNhZGEgYWVyb3B1ZXJ0by4gRW4gZWwgYWVyb3B1ZXJ0byBKRksgbGEgYWVyb2zDrW5lYSBsw61kZXIgZXM6IEFtZXJpY2FuIEFpcmxpbmVzIGNvbiA3LDk2MiwwNzUgbWlsbGFzIHJlY29ycmlkYXMsIGVuIGVsIGFlcm9wdWVydG8gTEdBIGxhIGFlcm9sw61uZWEgbMOtZGVyIGVzOiBBbWVyaWNhbiBBaXJsaW5lcyBjb24gNiw3MTcsMjA0IG1pbGxhcyByZWNvcnJpZGFzIHkgZmluYWxtZW50ZSBlbiBlbCBhZXJvcHVlcnRvIEVXUiBsYSBhZXJvbMOtbmVhIGzDrWRlciBlczogVW5pdGVkIEFpcmxpbmVzIGNvbiAxMSwxNDIsMzYwICBtaWxsYXMgcmVjb3JyaWRhcy4KCgooTkVXWU9SS0FORE8gMjAyMykKCiMjIyBDb25jbHVzaW9uZXMKCkNvbiBsYSBpbmZvcm1hY2nDs24gcHJlc2VudGFkYSBhbnRlcmlvcm1lbnRlIHkgY29uIGxhcyBmdW5jaW9uZXMgdXRpbGl6YWRhcyBlbiBSU3R1ZGlvLCBzZSBwdWRvIG9idGVuZXIgZGF0b3MgZXN0YWTDrXN0aWNvcyBzb2JyZSBsb3MgMyBkaWZlcmVudGVzIGFlcm9wdWVydG9zIGRlIE51ZXZhIFlvcmssIHBhcmEgcG9kZXIgdmVyIGVuIHF1w6kgYXNwZWN0b3Mgc29uIGRpZmVyZW50ZXMgbyBxdcOpIHZhcmlhYmxlcyBhZmVjdGFuIGxhcyBsbGVnYWRhcyBhIGxvcyBkaXN0aW50b3MgYWVyb3B1ZXJ0b3MuIFNlIHB1ZG8gb2JzZXJ2YXIgbGFzIGFlcm9sw61uZWFzLCBkYXRvcyBwcmVjaXNvcyBzb2JyZSBjYWRhIHVuYSBkZSBlbGxhcywgaW5mb3JtYWNpw7NuIHNvYnJlIHZ1ZWxvcywgdGllbXBvcyBkZSBsbGVnYWRhLCBzYWxpZGEsIGV0Yy4gQ29tbyB2aW1vcyB0YW1iacOpbiBsYXMgYWVyb2zDrW5lYXMgbMOtZGVyZXMgY2FtYmlhbiBkZXBlbmRpZW5kbyBkZWwgYWVyb3B1ZXJ0byBhbCBxdWUgbGxlZ2FuLCBkZWJpZG8gYSBsYXMgZGlmZXJlbnRlcyBuZWNlc2lkYWRlcyBkZSBsb3MgcGFzYWplcm9zIGFzw60gY29tbyBjZXJjYW7DrWEgeSBmYWNpbGlkYWRlcyBwYXJhIHRyw6FtaXRlcyBpbXBvcnRhbnRlcywgY29tbyBsb3MgZGUgbWlncmFjacOzbi4KCiMjIyBCaWJsaW9ncmFmw61hCgpXaWNraGFtLCBILiBhbmQgR3JvbGVtdW5kLCBHLiAoMjAxNykgUiBmb3IgRGF0YSBTY2llbmNlOiBJbXBvcnQsIFRpZHksIFRyYW5zZm9ybSwgVmlzdWFsaXplLCBhbmQgTW9kZWwgRGF0YSBP4oCZUmVpbGx5IE1lZGlhOiBTZWJhc3RvcG9sLCBDYWxpZm9ybmlhLiAgCgpOeWNmbGlnaHRzMTMgdjEuMC4wIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy9ueWNmbGlnaHRzMTMvdmVyc2lvbnMvMS4wLjAgCgpBZXJvcHVlcnRvIExhR3VhcmRpYSBbVHJhc2xhZG9zIGVjb27Ds21pY29zLCBCdXMsIE1ldHJvXS4gKDIwMjMsIEZlYnJ1YXJ5IDI3KS4gUmV0cmlldmVkIE1hcmNoIDE0LCAyMDIzLCBmcm9tIE51ZXZhIFlvcmsgd2Vic2l0ZTogaHR0cHM6Ly93d3cubmV3eW9ya2FuZG8uY29tL2NvbW8tbGxlZ2FyLWRlbC1hZXJvcHVlcnRvLWxhLWd1YXJkaWEtYS1udWV2YS15b3JrLwoKQWVyb3B1ZXJ0b3MgZGUgTnVldmEgWW9yayBbSkZLLCBMYUd1YXJkaWEgeSBOZXdhcmtdLiAoMjAyMywgRmVicnVhcnkgMjcpLiBSZXRyaWV2ZWQgTWFyY2ggMTQsIDIwMjMsIGZyb20gTnVldmEgWW9yayB3ZWJzaXRlOiBodHRwczovL3d3dy5uZXd5b3JrYW5kby5jb20vZGVsLWFlcm9wdWVydG8tYS1sYS1jaXVkYWQvCgrigIwKCg==