library(tidyverse)
library(openintro)
ggplot(data = nycflights, aes(x = dep_delay)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data = nycflights, aes(x = dep_delay)) +
  geom_histogram(binwidth = 15)

ggplot(data = nycflights, aes(x = dep_delay)) +
  geom_histogram(binwidth = 150)

Exercise 1

It appears that some flights are leaving before their departure time and this is not apparent in the first histogram with the lower binwidth.

lax_flights <- nycflights %>%
  filter(dest == "LAX")
ggplot(data = lax_flights, aes(x = dep_delay)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

lax_flights %>%
  summarise(mean_dd   = mean(dep_delay), 
            median_dd = median(dep_delay), 
            n         = n())
## # A tibble: 1 x 3
##   mean_dd median_dd     n
##     <dbl>     <dbl> <int>
## 1    9.78        -1  1583

Exercise 2

sfo_feb_flights <- nycflights %>%
  filter(dest == "SFO", month == 2)
sfo_feb_flights %>% summarise(count = n())
## # A tibble: 1 x 1
##   count
##   <int>
## 1    68

68 flights departed to San Francisco in February.

Exercise 3

ggplot(data = sfo_feb_flights, aes(x = arr_delay)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

sfo_feb_flights %>%
  summarise(median_ad = median(arr_delay), iqr_ad = IQR(arr_delay), n_flights = n())
## # A tibble: 1 x 3
##   median_ad iqr_ad n_flights
##       <dbl>  <dbl>     <int>
## 1       -11   23.2        68

The distribution is right-skewed and unimodal. The median and IQR would be the best summary statistics to avoid variability due to the few outliers. The Median arrival delay is -11 and the IQR is 23.25

Exercise 4

sfo_feb_flights %>%
  group_by(carrier) %>%
  summarise(median_ad = median(arr_delay), iqr_ad = IQR(arr_delay), n_flights = n())
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 5 x 4
##   carrier median_ad iqr_ad n_flights
##   <chr>       <dbl>  <dbl>     <int>
## 1 AA            5     17.5        10
## 2 B6          -10.5   12.2         6
## 3 DL          -15     22          19
## 4 UA          -10     22          21
## 5 VX          -22.5   21.2        12

Delta Airlines (DL) and United Airlines (UA) have the most variability in arrival delays.

Exercise 5

nycflights %>%
  group_by(month) %>%
  summarise(mean_dd = mean(dep_delay)) %>%
  arrange(desc(mean_dd))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 12 x 2
##    month mean_dd
##    <int>   <dbl>
##  1     7   20.8 
##  2     6   20.4 
##  3    12   17.4 
##  4     4   14.6 
##  5     3   13.5 
##  6     5   13.3 
##  7     8   12.6 
##  8     2   10.7 
##  9     1   10.2 
## 10     9    6.87
## 11    11    6.10
## 12    10    5.88
nycflights %>%
  group_by(month) %>%
  summarise(median_dd = median(dep_delay)) %>%
  arrange(desc(median_dd))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 12 x 2
##    month median_dd
##    <int>     <dbl>
##  1    12         1
##  2     6         0
##  3     7         0
##  4     3        -1
##  5     5        -1
##  6     8        -1
##  7     1        -2
##  8     2        -2
##  9     4        -2
## 10    11        -2
## 11     9        -3
## 12    10        -3

The Median is a more robust value as it is less susceptible to outliers. In this case, I think measuring the outliers and thus, using the mean, would give us a better chance to avoid most delays.

Exercise 6

nycflights <- nycflights %>%
  mutate(dep_type = ifelse(dep_delay < 5, "on time", "delayed"))

nycflights %>%
  group_by(origin) %>%
  summarise(ot_dep_rate = sum(dep_type == "on time") / n()) %>%
  arrange(desc(ot_dep_rate))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 3 x 2
##   origin ot_dep_rate
##   <chr>        <dbl>
## 1 LGA          0.728
## 2 JFK          0.694
## 3 EWR          0.637

Based only On Time Departure Percentage, La Guardia would be the logical choice.

ggplot(data = nycflights, aes(x = origin, fill = dep_type)) +
  geom_bar()

Exercise 7

nycflights <- nycflights %>%
  mutate(avg_speed = distance/(air_time/60))
head(nycflights)
## # A tibble: 6 x 18
##    year month   day dep_time dep_delay arr_time arr_delay carrier tailnum flight
##   <int> <int> <int>    <int>     <dbl>    <int>     <dbl> <chr>   <chr>    <int>
## 1  2013     6    30      940        15     1216        -4 VX      N626VA     407
## 2  2013     5     7     1657        -3     2104        10 DL      N3760C     329
## 3  2013    12     8      859        -1     1238        11 DL      N712TW     422
## 4  2013     5    14     1841        -4     2122       -34 DL      N914DL    2391
## 5  2013     7    21     1102        -3     1230        -8 9E      N823AY    3652
## 6  2013     1     1     1817        -3     2008         3 AA      N3AXAA     353
## # ... with 8 more variables: origin <chr>, dest <chr>, air_time <dbl>,
## #   distance <dbl>, hour <dbl>, minute <dbl>, dep_type <chr>, avg_speed <dbl>

Exercise 8

ggplot(nycflights, aes(distance, avg_speed )) +
        geom_point(size=1, shape=15)

There appears to be a non-linear relationship between avg_speed and distance. There is an increase of avg speed when distance increases.

Exercise 9

airlines <- c("AA", "DL", "UA")
selectedFlights <- nycflights %>%
  filter(carrier %in% airlines)

qplot(x = dep_delay, y = arr_delay, data = selectedFlights, color = carrier)

George Cruz

LS0tDQp0aXRsZTogIkRTNjA2LUxhYjIiDQphdXRob3I6ICJHZW9yZ2UgQ3J1eiINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShvcGVuaW50cm8pDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IG55Y2ZsaWdodHMsIGFlcyh4ID0gZGVwX2RlbGF5KSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpDQoNCmdncGxvdChkYXRhID0gbnljZmxpZ2h0cywgYWVzKHggPSBkZXBfZGVsYXkpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTUpDQoNCmdncGxvdChkYXRhID0gbnljZmxpZ2h0cywgYWVzKHggPSBkZXBfZGVsYXkpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTUwKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAxDQoNCkl0IGFwcGVhcnMgdGhhdCBzb21lIGZsaWdodHMgYXJlIGxlYXZpbmcgYmVmb3JlIHRoZWlyIGRlcGFydHVyZSB0aW1lIGFuZCB0aGlzIGlzIG5vdCBhcHBhcmVudCBpbiB0aGUgZmlyc3QgaGlzdG9ncmFtIHdpdGggdGhlIGxvd2VyIGJpbndpZHRoLiANCg0KYGBge3IgY29kZS1jaHVuay1sYWJlbH0NCmxheF9mbGlnaHRzIDwtIG55Y2ZsaWdodHMgJT4lDQogIGZpbHRlcihkZXN0ID09ICJMQVgiKQ0KZ2dwbG90KGRhdGEgPSBsYXhfZmxpZ2h0cywgYWVzKHggPSBkZXBfZGVsYXkpKSArDQogIGdlb21faGlzdG9ncmFtKCkNCg0KbGF4X2ZsaWdodHMgJT4lDQogIHN1bW1hcmlzZShtZWFuX2RkICAgPSBtZWFuKGRlcF9kZWxheSksIA0KICAgICAgICAgICAgbWVkaWFuX2RkID0gbWVkaWFuKGRlcF9kZWxheSksIA0KICAgICAgICAgICAgbiAgICAgICAgID0gbigpKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAyDQoNCmBgYHtyfQ0Kc2ZvX2ZlYl9mbGlnaHRzIDwtIG55Y2ZsaWdodHMgJT4lDQogIGZpbHRlcihkZXN0ID09ICJTRk8iLCBtb250aCA9PSAyKQ0Kc2ZvX2ZlYl9mbGlnaHRzICU+JSBzdW1tYXJpc2UoY291bnQgPSBuKCkpDQpgYGANCjY4IGZsaWdodHMgZGVwYXJ0ZWQgdG8gU2FuIEZyYW5jaXNjbyBpbiBGZWJydWFyeS4NCg0KIyMjIEV4ZXJjaXNlIDMNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBzZm9fZmViX2ZsaWdodHMsIGFlcyh4ID0gYXJyX2RlbGF5KSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpDQoNCnNmb19mZWJfZmxpZ2h0cyAlPiUNCiAgc3VtbWFyaXNlKG1lZGlhbl9hZCA9IG1lZGlhbihhcnJfZGVsYXkpLCBpcXJfYWQgPSBJUVIoYXJyX2RlbGF5KSwgbl9mbGlnaHRzID0gbigpKQ0KYGBgDQpUaGUgZGlzdHJpYnV0aW9uIGlzIHJpZ2h0LXNrZXdlZCBhbmQgdW5pbW9kYWwuICBUaGUgbWVkaWFuIGFuZCBJUVIgd291bGQgYmUgdGhlIGJlc3Qgc3VtbWFyeSBzdGF0aXN0aWNzIHRvIGF2b2lkIHZhcmlhYmlsaXR5IGR1ZSB0byB0aGUgZmV3IG91dGxpZXJzLiBUaGUgTWVkaWFuIGFycml2YWwgZGVsYXkgaXMgLTExIGFuZCB0aGUgSVFSIGlzIDIzLjI1DQoNCiMjIyBFeGVyY2lzZSA0DQpgYGB7cn0NCnNmb19mZWJfZmxpZ2h0cyAlPiUNCiAgZ3JvdXBfYnkoY2FycmllcikgJT4lDQogIHN1bW1hcmlzZShtZWRpYW5fYWQgPSBtZWRpYW4oYXJyX2RlbGF5KSwgaXFyX2FkID0gSVFSKGFycl9kZWxheSksIG5fZmxpZ2h0cyA9IG4oKSkNCmBgYA0KRGVsdGEgQWlybGluZXMgKERMKSBhbmQgVW5pdGVkIEFpcmxpbmVzIChVQSkgaGF2ZSB0aGUgbW9zdCB2YXJpYWJpbGl0eSBpbiBhcnJpdmFsIGRlbGF5cy4gDQoNCiMjIyBFeGVyY2lzZSA1DQpgYGB7cn0NCm55Y2ZsaWdodHMgJT4lDQogIGdyb3VwX2J5KG1vbnRoKSAlPiUNCiAgc3VtbWFyaXNlKG1lYW5fZGQgPSBtZWFuKGRlcF9kZWxheSkpICU+JQ0KICBhcnJhbmdlKGRlc2MobWVhbl9kZCkpDQpgYGANCmBgYHtyfQ0KbnljZmxpZ2h0cyAlPiUNCiAgZ3JvdXBfYnkobW9udGgpICU+JQ0KICBzdW1tYXJpc2UobWVkaWFuX2RkID0gbWVkaWFuKGRlcF9kZWxheSkpICU+JQ0KICBhcnJhbmdlKGRlc2MobWVkaWFuX2RkKSkNCmBgYA0KVGhlIE1lZGlhbiBpcyBhIG1vcmUgcm9idXN0IHZhbHVlIGFzIGl0IGlzIGxlc3Mgc3VzY2VwdGlibGUgdG8gb3V0bGllcnMuICBJbiB0aGlzIGNhc2UsIEkgdGhpbmsgbWVhc3VyaW5nIHRoZSBvdXRsaWVycyBhbmQgdGh1cywgdXNpbmcgdGhlIG1lYW4sIHdvdWxkIGdpdmUgdXMgYSBiZXR0ZXIgY2hhbmNlIHRvIGF2b2lkIG1vc3QgZGVsYXlzLiANCg0KIyMjIEV4ZXJjaXNlIDYNCmBgYHtyfQ0KbnljZmxpZ2h0cyA8LSBueWNmbGlnaHRzICU+JQ0KICBtdXRhdGUoZGVwX3R5cGUgPSBpZmVsc2UoZGVwX2RlbGF5IDwgNSwgIm9uIHRpbWUiLCAiZGVsYXllZCIpKQ0KDQpueWNmbGlnaHRzICU+JQ0KICBncm91cF9ieShvcmlnaW4pICU+JQ0KICBzdW1tYXJpc2Uob3RfZGVwX3JhdGUgPSBzdW0oZGVwX3R5cGUgPT0gIm9uIHRpbWUiKSAvIG4oKSkgJT4lDQogIGFycmFuZ2UoZGVzYyhvdF9kZXBfcmF0ZSkpDQpgYGANCg0KQmFzZWQgb25seSBPbiBUaW1lIERlcGFydHVyZSBQZXJjZW50YWdlLCBMYSBHdWFyZGlhIHdvdWxkIGJlIHRoZSBsb2dpY2FsIGNob2ljZS4NCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IG55Y2ZsaWdodHMsIGFlcyh4ID0gb3JpZ2luLCBmaWxsID0gZGVwX3R5cGUpKSArDQogIGdlb21fYmFyKCkNCmBgYA0KDQojIyMgRXhlcmNpc2UgNw0KYGBge3J9DQpueWNmbGlnaHRzIDwtIG55Y2ZsaWdodHMgJT4lDQogIG11dGF0ZShhdmdfc3BlZWQgPSBkaXN0YW5jZS8oYWlyX3RpbWUvNjApKQ0KaGVhZChueWNmbGlnaHRzKQ0KYGBgDQoNCg0KIyMjIEV4ZXJjaXNlIDgNCmBgYHtyfQ0KZ2dwbG90KG55Y2ZsaWdodHMsIGFlcyhkaXN0YW5jZSwgYXZnX3NwZWVkICkpICsNCiAgICAgICAgZ2VvbV9wb2ludChzaXplPTEsIHNoYXBlPTE1KQ0KYGBgDQoNClRoZXJlIGFwcGVhcnMgdG8gYmUgYSBub24tbGluZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGF2Z19zcGVlZCBhbmQgZGlzdGFuY2UuICBUaGVyZSBpcyBhbiBpbmNyZWFzZSBvZiBhdmcgc3BlZWQgd2hlbiBkaXN0YW5jZSBpbmNyZWFzZXMuICANCg0KDQojIyMgRXhlcmNpc2UgOQ0KYGBge3J9DQphaXJsaW5lcyA8LSBjKCJBQSIsICJETCIsICJVQSIpDQpzZWxlY3RlZEZsaWdodHMgPC0gbnljZmxpZ2h0cyAlPiUNCiAgZmlsdGVyKGNhcnJpZXIgJWluJSBhaXJsaW5lcykNCg0KcXBsb3QoeCA9IGRlcF9kZWxheSwgeSA9IGFycl9kZWxheSwgZGF0YSA9IHNlbGVjdGVkRmxpZ2h0cywgY29sb3IgPSBjYXJyaWVyKQ0KYGBgDQoNCkdlb3JnZSBDcnV6IA==