TI - Evidencia 1. Analítica descriptiva

Extracción y Manipulación de datos

Situacion Problema

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

Exploracion

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)
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  
## 

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"
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" ...
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" ...
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" ...
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 vectors contiene enteros, ejemplo year. double vectors contain numeros reales, ejemplo latitud. character vector contiene texto”“, por ejmplo carrier. data tim contiene fecha y tiempo, por ejemplo time_hour. *logical vectors contiene valores TRUE or FALSE.

Hallazgos Mediante la exploracion de datos podemos indetificar las principales varibales de los dataframes. Podemos obsverar si hay algunas variables con NAs, o si tenemos preguntas para alcarar antes de la manipulacion.

Manipulacion 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)

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_distancia=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_distancia 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_distancia))
head(distancias_orden)
## # A tibble: 6 × 5
## # Groups:   carrier, origin [5]
##   carrier origin distance suma_distancia 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 Dentro de esta tabla se logra ver el registro de aerolinas en proporcion a su distancia recorrida, se destaca que los primeros dos lugares pertenecen al aeropuerto EWR con una distancia promedio de 2,565 millas y en total recorre 11,142,360 millas dentro del tiempo establecido. Siguendole a esto tenemos en tercer lugar el aeropueto JFK, continuando el aeropueto LGA.

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. Jhon F. Kennedy (JFK)

JFK <-distancias_orden %>%
  filter(origin=="JFK")
  
JFK
## # A tibble: 69 × 5
## # Groups:   carrier, origin [8]
##    carrier origin distance suma_distancia 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_distancia 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_distancia 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

Basándome en la tabla del resultado del cogido a simple vista tenemos que la aerolínea American Airlines es líder en el aeropuerto JFK y LGA, basándonos en el recorrido de distancia total en millas por lo que hace que American Airlines esté en el top de estos dos aeropuertos. Por otra parte el aeropuerto EWR se encontró que la aerolínea con mayor distancia recorrida fue United airlines o como su siglas lo dicen UA, hay que destacar aerolínea obtuvo los primeros 6 lugares en el aeropuerto EWR, este porcentaje puede ser resultado de una variable como el tiempo, el costo por ticket en la zona, la ubicación entre otros más.

Conclusión

En conclusión se logró visualizar la situación problema dando resultado a cada punto, por medio de la ciencia de datos se logró obtener y validar el tipo de información proporcionada. Con base a la información presentada por el caso y a mano de las herramientas de Rstudio, se logró observar y analizar tres tipos de aeropuertos en Nueva York, los aeropuertos que se tomaron a investigaciones fueron John F. Kennedy (JFK), LaGuardia (LGA) y Newark Liberty (EWR). Esta información resultó de mucha utilidad ya que abarca el análisis de los tres aeropuertos donde se analizó las variables y su nivel de afectación en cada aeropuerto, así como organizando la información de forma decente para sea de un entendimiento fácil de interpretar. Se cuenta con grandes cantidad de datos de vuelos nacionales e internacionales lo cual a la hora de escribir el código y correrlo se tardaba un tiempo en mostrar los resultados.

Bibliografia

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

LS0tDQp0aXRsZTogIlNpdHVhY2lvbiBQcm9ibGVtYSINCmF1dGhvcjogIlNlYmFzdGlhbiBFc3Bpbm96YSBBLiBBMDA4MzM3MDQiDQpkYXRlOiAiMjAyMy0wMy0xNCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KPGltZyBzcmM9IkM6XFxVc2Vyc1xcc2ViYXN0aWFuXFxEb3dubG9hZHNcXGFuYWxpc2lzYmFza2V0LnBuZyI+DQoNCiMgVEkgLSBFdmlkZW5jaWEgMS4gQW5hbMOtdGljYSBkZXNjcmlwdGl2YSANCiMjIyBFeHRyYWNjacOzbiB5IE1hbmlwdWxhY2nDs24gZGUgZGF0b3MNCg0KIyMgU2l0dWFjaW9uIFByb2JsZW1hICAgDQrCv0PDs21vIG1lam9yYXIgbGEgcG9zaWNpw7NuIGNvbXBldGl0aXZhIGRlIHVuYSBkZSBsYXMgYWVyb2zDrW5lYXMgbMOtZGVyZXMgZW4gbG9zIGFlcm9wdWVydG9zIGRlIE51ZXZhIFlvcms/ICANCg0KIyMgRXhwbG9yYWNpb24gIA0KVGUgZXN0w6FzIGluaWNpYW5kbyBlbiBsYSBpbmR1c3RyaWEgZGUgbGEgYXZpYWNpw7NuLCBlcyBpbXBvcnRhbnRlIHkgbmVjZXNhcmlvIHF1ZSBjb25vemNhcyBsYSBiYXNlIGRlIGRhdG9zIGRlbCBzaXN0ZW1hIGFkbWluaXN0cmF0aXZvIGRlbCBhZXJvcHVlcnRvIHkgcGFyYSBlbGxvIHRlbmRyw6FzIHF1ZSBleHBsb3JhcmxhIGUgaWRlbnRpZmljYXIgbGFzIHZhcmlhYmxlcyBxdWUgbGEgZm9ybWFuIHkgc3VzIHRpcG9zLiBFbCBhbsOhbGlzaXMgZXhwbG9yYXRvcmlvIGRlYmVyw6EgaW5jbHVpciBhbGd1bm9zIHJlc3VsdGFkb3MgZGVzY3JpcHRpdm9zLg0KDQpMYSBiYXNlIGRlIGRhdG9zIHNlIGVuY3VlbnRyYSBlbiBlbCBwYXF1ZXRlIGxpYnJhcnkobnljZmxpZ2h0czEzKSB5IGVzdMOhIGZvcm1hZGEgcG9yIDUgZGF0YSBmcmFtZXMuIA0KDQpgYGB7cn0NCmxpYnJhcnkobnljZmxpZ2h0czEzKQ0Kc3VtbWFyeShmbGlnaHRzKQ0KYGBgDQoNCk5lY2VzaXRhcyBjb25zdWx0YXIgcGFyYSBjYWRhIGRhdGEgZnJhbWUgZGUgbGEgYmFzZSBkZSBkYXRvcy4gDQoqKsK/Q3XDoWxlcyBzb24gbG9zIGNhbXBvcyB5IHN1cyB0aXBvcyBkZSBkYXRvcz8gKioNCg0KDQpCYXNlIGRlIGRhdG9zIDEtQWlybGluZXMNCmBgYHtyfQ0Kc3VtbWFyeShhaXJsaW5lcykNCnN0cihhaXJsaW5lcykNCmRhdGEoYWlybGluZXMpDQpuY29sKGFpcmxpbmVzKQ0KbnJvdyhhaXJsaW5lcykNCmRpbShhaXJsaW5lcykNCmhlYWQoYWlybGluZXMpDQp0YWlsKGFpcmxpbmVzKQ0KYGBgDQoNCkJhc2UgZGUgZGF0b3MgMi0gQWlycG9ydHMNCmBgYHtyfQ0Kc3VtbWFyeShhaXJwb3J0cykNCnN0cihhaXJwb3J0cykNCm5jb2woYWlycG9ydHMpDQpucm93KGFpcnBvcnRzKQ0KZGltKGFpcnBvcnRzKQ0KaGVhZChhaXJwb3J0cykNCnRhaWwoYWlycG9ydHMpDQpgYGANCg0KDQpCYXNlIGRlIGRhdG9zIDMtIGZsaWdodHMNCmBgYHtyfQ0Kc3VtbWFyeShmbGlnaHRzKQ0Kc3RyKGZsaWdodHMpDQpuY29sKGZsaWdodHMpDQpucm93KGZsaWdodHMpDQpkaW0oZmxpZ2h0cykNCmhlYWQoZmxpZ2h0cykNCnRhaWwoZmxpZ2h0cykNCmBgYA0KDQpCYXNlIGRlIGRhdG9zIDQtIFBsYW5lcw0KYGBge3J9DQpzdW1tYXJ5KHBsYW5lcykNCnN0cihwbGFuZXMpDQpuY29sKHBsYW5lcykNCm5yb3cocGxhbmVzKQ0KZGltKHBsYW5lcykNCmhlYWQocGxhbmVzKQ0KdGFpbChwbGFuZXMpDQpgYGANCg0KQmFzZSBkZSBkYXRvcyA1IC0gd2VhdGhlcg0KYGBge3J9DQpzdW1tYXJ5KHdlYXRoZXIpDQpzdHIod2VhdGhlcikNCm5jb2wod2VhdGhlcikNCm5yb3cod2VhdGhlcikNCmRpbSh3ZWF0aGVyKQ0KaGVhZCh3ZWF0aGVyKQ0KdGFpbCh3ZWF0aGVyKQ0KYGBgDQoNCklkZW50aWZpY2EgbG9zIGRpZmVyZW50ZXMgdGlwb3MgZGUgZGF0b3MgeSBleHBsaWNhIGVuIHF1w6kgY29uc2lzdGUgY2FkYSB1bm8gZGUgZWxsb3MgeSBjdcOhbCBlcyBsYSBkaWZlcmVuY2lhIGVudHJlIHVubyB5IG90cm8sIGluY2x1eWVuZG8gbG9zIHNpZ3VpZW50ZXMgdGlwb3MgZGUgZGF0b3M6IGludCwgZGJsLCBjaHIsIGR0dG0uDQoNCippbnRlZ2VyIHZlY3RvcnMgPGludD4gY29udGllbmUgZW50ZXJvcywgZWplbXBsbyB5ZWFyLg0KKmRvdWJsZSB2ZWN0b3JzIDxkYmw+IGNvbnRhaW4gbnVtZXJvcyByZWFsZXMsIGVqZW1wbG8gbGF0aXR1ZC4NCipjaGFyYWN0ZXIgdmVjdG9yIDxjaHI+IGNvbnRpZW5lIHRleHRvIiIsIHBvciBlam1wbG8gY2Fycmllci4NCipkYXRhIHRpbSA8ZHR0bT4gY29udGllbmUgZmVjaGEgeSB0aWVtcG8sIHBvciBlamVtcGxvIHRpbWVfaG91ci4NCipsb2dpY2FsIHZlY3RvcnMgPGxnbD4gY29udGllbmUgdmFsb3JlcyBUUlVFIG9yIEZBTFNFLg0KDQpfSGFsbGF6Z29zXw0KTWVkaWFudGUgbGEgZXhwbG9yYWNpb24gZGUgZGF0b3MgcG9kZW1vcyBpbmRldGlmaWNhciBsYXMgcHJpbmNpcGFsZXMgdmFyaWJhbGVzIGRlIGxvcyAqZGF0YWZyYW1lcyouIFBvZGVtb3Mgb2JzdmVyYXIgc2kgaGF5IGFsZ3VuYXMgdmFyaWFibGVzIGNvbiBOQXMsIG8gc2kgdGVuZW1vcyBwcmVndW50YXMgcGFyYSBhbGNhcmFyIGFudGVzIGRlIGxhIG1hbmlwdWxhY2lvbi4gDQoNCiMjIE1hbmlwdWxhY2lvbiBkZSBEYXRvcyAgICAgIA0KU2UgdGUgaGEgc29saWNpdGFkbyBjb25zdWx0YXIgY3XDoWxlcyBzb24gbGFzIGFlcm9sw61uZWFzIGRlIG1heW9yIHRyw6FmaWNvIGHDqXJlbyBlbiBvcmlnZW4geSBkZXN0aW5vLiBDdWVudGFzIGNvbiB1biBkYXRhIGZyYW1lIGxsYW1hZG8gZmxpZ2h0cyBxdWUgY29udGllbmUgdG9kYSBsYSBpbmZvcm1hY2nDs24gZGUgbG9zIHZ1ZWxvcyBkZSB0b2RvcyBsb3MgYWVyb3B1ZXJ0b3MgZGUgTmV3IFlvcmsuIA0KDQpQYXJhIGxvZ3JhcmxvIGNvbnNpZGVyYSBsYXMgZnVuY2lvbmVzIHN1Z2VyaWRhcyBlbiBsb3Mgc2lndWllbnRlcyBwYXNvczoNCg0KKipDb25zdWx0YSBlbCBkYXRhIGZyYW1lIGZsaWdodHMgcGFyYSByZWNvcmRhciBzdSBjb250ZW5pZG86KioNCmBgYHtyfQ0KIyBWaWV3KGZsaWdodHMpDQpgYGANCg0KKipFbmN1ZW50cmEgbG9zIGRhdG9zIGRlc2NyaXB0aXZvcyBkZWwgZGF0YSBmcmFtZSBmbGlnaHRzLiBJZGVudGlmaWNhIGxhIG1lZGlhIGRlIGxhcyBkaXN0YW5jaWFzIHJlY29ycmlkYXMgZW4gbWlsbGFzLioqDQpgYGB7cn0NCnN1bW1hcnkoZmxpZ2h0cykNCmBgYA0KDQoNCioqRGVmaW5lIHVuIGNyaXRlcmlvIHBhcmEgZW5jb250cmFyIGxhcyBhZXJvbMOtbmVhcyBxdWUgaGFuIHJlY29ycmlkbyBtw6FzIGRpc3RhbmNpYSAoZW4gbWlsbGFzKSB5IGNyZWEgdW4gbnVldm8gZGF0YSBmcmFtZSBxdWUgZmlsdHJlIHNvbGFtZW50ZSBhIGxhcyBhZW9ybMOtbmVhcyBxdWUgaGFuIHJlY29ycmlkbyB1bmEgZGlzdGFuY2lhIHN1cGVyaW9yIGEgbGEgbWVkaWEsIHNlIGRlc2VhbiB2ZXIgbG9zIGNhbXBvcyBjYXJyaWVyLCBkaXN0YW5jZSwgb3JpZ2luLCBkZXN0IGVuIGZvcm1hIGRlc2NlbmRlbnRlIHBvciBkaXN0YW5jZS4qKg0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQptYXNfZGlzdGFuY2lhIDwtIHNlbGVjdChmbGlnaHRzLCBjYXJyaWVyLCBkaXN0YW5jZSwgb3JpZ2luLCBkZXN0KQ0KDQptYXlvcl9tZWRpYSA8LWZpbHRlcihtYXNfZGlzdGFuY2lhLCBkaXN0YW5jZT4xMDQwKQ0KaGVhZChtYXlvcl9tZWRpYSkNCm9yZGVuIDwtIGFycmFuZ2UobWF5b3JfbWVkaWEsIGRlc2MoZGlzdGFuY2UpKQ0KaGVhZChvcmRlbikNCmNvdW50KG9yZGVuLCBjYXJyaWVyLCBzb3J0PVRSVUUpDQoNCmBgYA0KDQoNCioqRW5jdWVudHJhIGxhIHN1bWEgeSBsYSBtZWRpYSBkZSBsYXMgZGlzdGFuY2lhcyByZWNvcnJpZGFzIHBvciBjYXJyaWVyLCBlbGltaW5hIGxvcyBOQeKAmVMgIGUgaW50ZXJwcmV0YSBxdWUgc2lnbmlmaWNhIGxhIHN1bWEgeSBsYSBtZWRpYSBkZSBsYXMgZGlzdGFuY2lhcyByZWNvcnJpZGFzLioqDQoNCmBgYHtyfQ0KZGlzdGFuY2lhcyA8LW9yZGVuICU+JSBncm91cF9ieShjYXJyaWVyLCBvcmlnaW4sIGRpc3RhbmNlKSAlPiUNCiAgc3VtbWFyaXplKHN1bWFfZGlzdGFuY2lhPXN1bShkaXN0YW5jZSwgbmEucm09VFJVRSksIHByb21lZGlvX2Rpc3RhbmNpYT0gbWVhbihkaXN0YW5jZSwgbmEucm09VFJVRSkpDQpkaXN0YW5jaWFzDQpgYGANCg0KDQpfT3JkZW5hIGVuIGZvcm1hIGRlc2NlbmRlbnRlIHBvciBkaXN0YW5jaWEgcmVjb3JyaWRhXw0KYGBge3J9DQpkaXN0YW5jaWFzX29yZGVuIDwtYXJyYW5nZShkaXN0YW5jaWFzLCBkZXNjKHN1bWFfZGlzdGFuY2lhKSkNCmhlYWQoZGlzdGFuY2lhc19vcmRlbikNCmBgYA0KDQoqKk9ic2VydmEgdHVzIHJlc3VsdGFkb3MgZGUgbGEgw7psdGltYSB0YWJsYSB5IGFncmVnYSB0dXMgaW50ZXJwcmV0YWNpb25lcyoqDQpEZW50cm8gZGUgZXN0YSB0YWJsYSBzZSBsb2dyYSB2ZXIgZWwgcmVnaXN0cm8gZGUgYWVyb2xpbmFzIGVuIHByb3BvcmNpb24gYSBzdSBkaXN0YW5jaWEgcmVjb3JyaWRhLCBzZSBkZXN0YWNhIHF1ZSBsb3MgcHJpbWVyb3MgZG9zIGx1Z2FyZXMgcGVydGVuZWNlbiBhbCBhZXJvcHVlcnRvIEVXUiBjb24gdW5hIGRpc3RhbmNpYSBwcm9tZWRpbyBkZSAyLDU2NSBtaWxsYXMgeSBlbiB0b3RhbCByZWNvcnJlIDExLDE0MiwzNjAgbWlsbGFzIGRlbnRybyBkZWwgdGllbXBvIGVzdGFibGVjaWRvLiBTaWd1ZW5kb2xlIGEgZXN0byB0ZW5lbW9zIGVuIHRlcmNlciBsdWdhciBlbCBhZXJvcHVldG8gSkZLLCBjb250aW51YW5kbyBlbCBhZXJvcHVldG8gTEdBLiANCg0KKipJZGVudGlmaWNhIHNpIGxhcyBhZXJvbMOtbmVhcyBsw61kZXJlcyBzb24gbGFzIG1pc21hcyBlbiBsb3MgdHJlcyBhZXJvcHVlcnRvcyBjdXlvIG9yaWdlbiBlcyBOdWV2YSBZb3JrICggSm9obiBGLiBLZW5uZWR5IChKRkspLCBMYUd1YXJkaWEgKExHQSkgYW5kIE5ld2FyayBMaWJlcnR5ICAoRVdSKSApLkdlbmVyYSB1biBkYXRhIGZyYW1lICBwYXJhIGNhZGEgYWVyb3B1ZXJ0by4qKg0KSmhvbiBGLiBLZW5uZWR5IChKRkspDQpgYGB7cn0NCkpGSyA8LWRpc3RhbmNpYXNfb3JkZW4gJT4lDQogIGZpbHRlcihvcmlnaW49PSJKRksiKQ0KICANCkpGSw0KDQpMR0E8LWRpc3RhbmNpYXNfb3JkZW4lPiUNCiAgZmlsdGVyKG9yaWdpbj09IkxHQSIpDQogIA0KTEdBDQoNCkVXUjwtZGlzdGFuY2lhc19vcmRlbiU+JQ0KICBmaWx0ZXIob3JpZ2luPT0iRVdSIikNCg0KRVdSDQpgYGANCg0KQmFzw6FuZG9tZSBlbiBsYSB0YWJsYSBkZWwgcmVzdWx0YWRvIGRlbCBjb2dpZG8gYSBzaW1wbGUgdmlzdGEgdGVuZW1vcyBxdWUgbGEgYWVyb2zDrW5lYSBBbWVyaWNhbiBBaXJsaW5lcyBlcyBsw61kZXIgZW4gZWwgYWVyb3B1ZXJ0byBKRksgeSBMR0EsIGJhc8OhbmRvbm9zIGVuIGVsIHJlY29ycmlkbyBkZSBkaXN0YW5jaWEgdG90YWwgZW4gbWlsbGFzIHBvciBsbyBxdWUgaGFjZSBxdWUgQW1lcmljYW4gQWlybGluZXMgZXN0w6kgZW4gZWwgdG9wIGRlIGVzdG9zIGRvcyBhZXJvcHVlcnRvcy4gUG9yIG90cmEgcGFydGUgZWwgYWVyb3B1ZXJ0byBFV1Igc2UgZW5jb250csOzIHF1ZSBsYSBhZXJvbMOtbmVhIGNvbiBtYXlvciBkaXN0YW5jaWEgIHJlY29ycmlkYSBmdWUgVW5pdGVkIGFpcmxpbmVzIG8gY29tbyBzdSBzaWdsYXMgbG8gZGljZW4gVUEsIGhheSBxdWUgZGVzdGFjYXIgYWVyb2zDrW5lYSBvYnR1dm8gbG9zIHByaW1lcm9zIDYgbHVnYXJlcyBlbiBlbCBhZXJvcHVlcnRvIEVXUiwgZXN0ZSBwb3JjZW50YWplIHB1ZWRlIHNlciByZXN1bHRhZG8gZGUgdW5hIHZhcmlhYmxlIGNvbW8gZWwgdGllbXBvLCBlbCBjb3N0byBwb3IgdGlja2V0IGVuIGxhIHpvbmEsIGxhIHViaWNhY2nDs24gZW50cmUgb3Ryb3MgbcOhcy4gDQoNCiMjIENvbmNsdXNpw7NuICAgIA0KRW4gY29uY2x1c2nDs24gc2UgbG9ncsOzIHZpc3VhbGl6YXIgbGEgc2l0dWFjacOzbiBwcm9ibGVtYSBkYW5kbyByZXN1bHRhZG8gYSBjYWRhIHB1bnRvLCBwb3IgbWVkaW8gZGUgbGEgY2llbmNpYSBkZSBkYXRvcyBzZSBsb2dyw7Mgb2J0ZW5lciB5IHZhbGlkYXIgZWwgdGlwbyBkZSBpbmZvcm1hY2nDs24gcHJvcG9yY2lvbmFkYS4gQ29uIGJhc2UgYSBsYSBpbmZvcm1hY2nDs24gcHJlc2VudGFkYSBwb3IgZWwgY2FzbyB5IGEgbWFubyBkZSBsYXMgaGVycmFtaWVudGFzIGRlIFJzdHVkaW8sIHNlIGxvZ3LDsyBvYnNlcnZhciB5IGFuYWxpemFyIHRyZXMgdGlwb3MgZGUgYWVyb3B1ZXJ0b3MgZW4gTnVldmEgWW9yaywgbG9zIGFlcm9wdWVydG9zIHF1ZSBzZSB0b21hcm9uIGEgaW52ZXN0aWdhY2lvbmVzIGZ1ZXJvbiBKb2huIEYuIEtlbm5lZHkgKEpGSyksIExhR3VhcmRpYSAoTEdBKSB5IE5ld2FyayBMaWJlcnR5ICAoRVdSKS4gRXN0YSBpbmZvcm1hY2nDs24gcmVzdWx0w7MgZGUgbXVjaGEgdXRpbGlkYWQgeWEgcXVlIGFiYXJjYSBlbCBhbsOhbGlzaXMgZGUgbG9zIHRyZXMgYWVyb3B1ZXJ0b3MgZG9uZGUgc2UgYW5hbGl6w7MgbGFzIHZhcmlhYmxlcyB5IHN1IG5pdmVsIGRlIGFmZWN0YWNpw7NuIGVuIGNhZGEgYWVyb3B1ZXJ0bywgYXPDrSBjb21vIG9yZ2FuaXphbmRvIGxhIGluZm9ybWFjacOzbiBkZSBmb3JtYSBkZWNlbnRlIHBhcmEgc2VhIGRlIHVuIGVudGVuZGltaWVudG8gZsOhY2lsIGRlIGludGVycHJldGFyLiBTZSBjdWVudGEgY29uIGdyYW5kZXMgY2FudGlkYWQgZGUgZGF0b3MgZGUgdnVlbG9zIG5hY2lvbmFsZXMgZSBpbnRlcm5hY2lvbmFsZXMgbG8gY3VhbCBhIGxhIGhvcmEgZGUgZXNjcmliaXIgZWwgY8OzZGlnbyB5IGNvcnJlcmxvIHNlIHRhcmRhYmEgdW4gdGllbXBvIGVuIG1vc3RyYXIgbG9zIHJlc3VsdGFkb3MuIA0KDQoNCg0KDQojIyBCaWJsaW9ncmFmaWEgICAgDQpXaWNraGFtLCBILiBhbmQgR3JvbGVtdW5kLCBHLiAoMjAxNykgUiBmb3IgRGF0YSBTY2llbmNlOiBJbXBvcnQsIFRpZHksIFRyYW5zZm9ybSwgVmlzdWFsaXplLCBhbmQgTW9kZWwgRGF0YSBP4oCZUmVpbGx5IE1lZGlhOiBTZWJhc3RvcG9sLCBDYWxpZm9ybmlhDQpOeWNmbGlnaHRzMTMgdjEuMC4wIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy9ueWNmbGlnaHRzMTMvdmVyc2lvbnMvMS4wLjAgICANCg0K