library(tidyverse)
library(openintro)
Exercise 1
Answer to Exercise 1: The default bin width set by ggplot2 shows the
overall shape of the histogram but the smaller bin width of 15 provides
a better look at the variability in the data. The larger bin width of
150 is very broad and doesn’t show much variation.
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 2
Create a new data frame that includes flights headed to SFO in
February, and save this data frame as sfo_feb_flights. How many flights
meet these criteria?
sfo_feb_flights <- nycflights %>%
filter(dest == "SFO", month == 2)
sfo_feb_flights %>%
summarise (n=n())
## # A tibble: 1 × 1
## n
## <int>
## 1 68
… ### Exercise 3 Describe the distribution of the arrival delays of
these flights using a histogram and appropriate summary statistics.
Hint: The summary statistics you use should depend on the shape of the
distribution.
sfo_feb_flights <- nycflights %>%
filter(dest == "SFO", month == 2)
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 (mean_ad = mean(arr_delay), median_ad = median(arr_delay), n=n())
## # A tibble: 1 × 3
## mean_ad median_ad n
## <dbl> <dbl> <int>
## 1 -4.5 -11 68
Exercise 4
Calculate the median and interquartile range for arr_delays of
flights in in the sfo_feb_flights data frame, grouped by carrier. Which
carrier has the most variable arrival delays?
sfo_feb_flights %>%
group_by(carrier) %>%
summarise(median_ad = median(arr_delay), iqr_ad = IQR(arr_delay), n_flights = n())
## # A tibble: 5 × 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
Exercise 5
Suppose you really dislike departure delays and you want to schedule
your travel in a month that minimizes your potential departure delay
leaving NYC. One option is to choose the month with the lowest mean
departure delay. Another option is to choose the month with the lowest
median departure delay. What are the pros and cons of these two choices?
Answer: I am not sure how to fix the median values in this code but from
my understanding, median is a better choice when the data is skewed
because of outliers etc.
nycflights %>%
group_by(month) %>%
summarise(mean_dd = mean(dep_delay), median_dd = median(dep_delay)) %>%
arrange(desc(mean_dd))
## # A tibble: 12 × 3
## month mean_dd median_dd
## <int> <dbl> <dbl>
## 1 7 20.8 0
## 2 6 20.4 0
## 3 12 17.4 1
## 4 4 14.6 -2
## 5 3 13.5 -1
## 6 5 13.3 -1
## 7 8 12.6 -1
## 8 2 10.7 -2
## 9 1 10.2 -2
## 10 9 6.87 -3
## 11 11 6.10 -2
## 12 10 5.88 -3
Exercise 6
If you were selecting an airport simply based on on time departure
percentage, which NYC airport would you choose to fly out of? Answer:
LGA appears to have the highest on-time departure percentage.
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))
## # A tibble: 3 × 2
## origin ot_dep_rate
## <chr> <dbl>
## 1 LGA 0.728
## 2 JFK 0.694
## 3 EWR 0.637
ggplot(data = nycflights, aes(x = origin, fill = dep_type)) +
geom_bar()
### Exercise 7 Mutate the data frame so that it includes a new variable
that contains the average speed, avg_speed traveled by the plane for
each flight (in mph). Hint: Average speed can be calculated as distance
divided by number of hours of travel, and note that air_time is given in
minutes.
nycflights <- nycflights %>%
mutate(avg_speed = distance/(air_time/60))
Exercise 8
Make a scatterplot of avg_speed vs. distance. Describe the
relationship between average speed and distance. Hint: Use
geom_point().
ggplot(data = nycflights, aes(x = distance, y = avg_speed)) +
geom_point()

LS0tCnRpdGxlOiAiTGFiIDEiCmF1dGhvcjogIlNoaWxwYSBTYW5hcGFsYSIKZGF0ZTogIkp1bmUgMjQsIDIwMjQiCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0Ci0tLQoKYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkob3BlbmludHJvKQpgYGAKCiMjIyBFeGVyY2lzZSAxCgpBbnN3ZXIgdG8gRXhlcmNpc2UgMTogVGhlIGRlZmF1bHQgYmluIHdpZHRoIHNldCBieSBnZ3Bsb3QyIHNob3dzIHRoZSBvdmVyYWxsIHNoYXBlIG9mIHRoZSBoaXN0b2dyYW0gYnV0IHRoZSBzbWFsbGVyIGJpbiB3aWR0aCBvZiAxNSBwcm92aWRlcyBhIGJldHRlciBsb29rIGF0IHRoZSB2YXJpYWJpbGl0eSBpbiB0aGUgZGF0YS4gVGhlIGxhcmdlciBiaW4gd2lkdGggb2YgMTUwIGlzIHZlcnkgYnJvYWQgYW5kIGRvZXNuJ3Qgc2hvdyBtdWNoIHZhcmlhdGlvbi4KCmBgYHtyIGNvZGUtY2h1bmstbGFiZWx9CmdncGxvdChkYXRhID0gbnljZmxpZ2h0cywgYWVzKHggPSBkZXBfZGVsYXkpKSArCiAgZ2VvbV9oaXN0b2dyYW0oKQpnZ3Bsb3QoZGF0YSA9IG55Y2ZsaWdodHMsIGFlcyh4ID0gZGVwX2RlbGF5KSkgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTUpCmdncGxvdChkYXRhID0gbnljZmxpZ2h0cywgYWVzKHggPSBkZXBfZGVsYXkpKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxNTApCgpgYGAKCiMjIyBFeGVyY2lzZSAyCkNyZWF0ZSBhIG5ldyBkYXRhIGZyYW1lIHRoYXQgaW5jbHVkZXMgZmxpZ2h0cyBoZWFkZWQgdG8gU0ZPIGluIEZlYnJ1YXJ5LCBhbmQgc2F2ZSB0aGlzIGRhdGEgZnJhbWUgYXMgc2ZvX2ZlYl9mbGlnaHRzLiBIb3cgbWFueSBmbGlnaHRzIG1lZXQgdGhlc2UgY3JpdGVyaWE/CgpgYGB7cn0Kc2ZvX2ZlYl9mbGlnaHRzIDwtIG55Y2ZsaWdodHMgJT4lCiAgZmlsdGVyKGRlc3QgPT0gIlNGTyIsIG1vbnRoID09IDIpCnNmb19mZWJfZmxpZ2h0cyAlPiUKICBzdW1tYXJpc2UgKG49bigpKQoKCmBgYAoKLi4uCiMjIyBFeGVyY2lzZSAzCkRlc2NyaWJlIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGFycml2YWwgZGVsYXlzIG9mIHRoZXNlIGZsaWdodHMgdXNpbmcgYSBoaXN0b2dyYW0gYW5kIGFwcHJvcHJpYXRlIHN1bW1hcnkgc3RhdGlzdGljcy4gSGludDogVGhlIHN1bW1hcnkgc3RhdGlzdGljcyB5b3UgdXNlIHNob3VsZCBkZXBlbmQgb24gdGhlIHNoYXBlIG9mIHRoZSBkaXN0cmlidXRpb24uCgpgYGB7cn0Kc2ZvX2ZlYl9mbGlnaHRzIDwtIG55Y2ZsaWdodHMgJT4lCiAgZmlsdGVyKGRlc3QgPT0gIlNGTyIsIG1vbnRoID09IDIpCmdncGxvdChkYXRhID0gc2ZvX2ZlYl9mbGlnaHRzLCBhZXMoeCA9IGFycl9kZWxheSkpICsKICBnZW9tX2hpc3RvZ3JhbSgpCnNmb19mZWJfZmxpZ2h0cyAlPiUKICBzdW1tYXJpc2UgKG1lYW5fYWQgICA9IG1lYW4oYXJyX2RlbGF5KSwgbWVkaWFuX2FkID0gbWVkaWFuKGFycl9kZWxheSksIG49bigpKQoKYGBgCgojIyMgRXhlcmNpc2UgNApDYWxjdWxhdGUgdGhlIG1lZGlhbiBhbmQgaW50ZXJxdWFydGlsZSByYW5nZSBmb3IgYXJyX2RlbGF5cyBvZiBmbGlnaHRzIGluIGluIHRoZSBzZm9fZmViX2ZsaWdodHMgZGF0YSBmcmFtZSwgZ3JvdXBlZCBieSBjYXJyaWVyLiBXaGljaCBjYXJyaWVyIGhhcyB0aGUgbW9zdCB2YXJpYWJsZSBhcnJpdmFsIGRlbGF5cz8KYGBge3J9CnNmb19mZWJfZmxpZ2h0cyAlPiUKICBncm91cF9ieShjYXJyaWVyKSAlPiUKICBzdW1tYXJpc2UobWVkaWFuX2FkID0gbWVkaWFuKGFycl9kZWxheSksIGlxcl9hZCA9IElRUihhcnJfZGVsYXkpLCBuX2ZsaWdodHMgPSBuKCkpCmBgYAojIyMgRXhlcmNpc2UgNQpTdXBwb3NlIHlvdSByZWFsbHkgZGlzbGlrZSBkZXBhcnR1cmUgZGVsYXlzIGFuZCB5b3Ugd2FudCB0byBzY2hlZHVsZSB5b3VyIHRyYXZlbCBpbiBhIG1vbnRoIHRoYXQgbWluaW1pemVzIHlvdXIgcG90ZW50aWFsIGRlcGFydHVyZSBkZWxheSBsZWF2aW5nIE5ZQy4gT25lIG9wdGlvbiBpcyB0byBjaG9vc2UgdGhlIG1vbnRoIHdpdGggdGhlIGxvd2VzdCBtZWFuIGRlcGFydHVyZSBkZWxheS4gQW5vdGhlciBvcHRpb24gaXMgdG8gY2hvb3NlIHRoZSBtb250aCB3aXRoIHRoZSBsb3dlc3QgbWVkaWFuIGRlcGFydHVyZSBkZWxheS4gV2hhdCBhcmUgdGhlIHByb3MgYW5kIGNvbnMgb2YgdGhlc2UgdHdvIGNob2ljZXM/CkFuc3dlcjogSSBhbSBub3Qgc3VyZSBob3cgdG8gZml4IHRoZSBtZWRpYW4gdmFsdWVzIGluIHRoaXMgY29kZSBidXQgZnJvbSBteSB1bmRlcnN0YW5kaW5nLCBtZWRpYW4gaXMgYSBiZXR0ZXIgY2hvaWNlIHdoZW4gdGhlIGRhdGEgaXMgc2tld2VkIGJlY2F1c2Ugb2Ygb3V0bGllcnMgZXRjLiAgCmBgYHtyfQpueWNmbGlnaHRzICU+JQogIGdyb3VwX2J5KG1vbnRoKSAlPiUKICBzdW1tYXJpc2UobWVhbl9kZCA9IG1lYW4oZGVwX2RlbGF5KSwgbWVkaWFuX2RkID0gbWVkaWFuKGRlcF9kZWxheSkpICU+JQogIGFycmFuZ2UoZGVzYyhtZWFuX2RkKSkKCmBgYAojIyMgRXhlcmNpc2UgNgpJZiB5b3Ugd2VyZSBzZWxlY3RpbmcgYW4gYWlycG9ydCBzaW1wbHkgYmFzZWQgb24gb24gdGltZSBkZXBhcnR1cmUgcGVyY2VudGFnZSwgd2hpY2ggTllDIGFpcnBvcnQgd291bGQgeW91IGNob29zZSB0byBmbHkgb3V0IG9mPwpBbnN3ZXI6IExHQSBhcHBlYXJzIHRvIGhhdmUgdGhlIGhpZ2hlc3Qgb24tdGltZSBkZXBhcnR1cmUgcGVyY2VudGFnZS4KYGBge3J9Cm55Y2ZsaWdodHMgPC0gbnljZmxpZ2h0cyAlPiUKICBtdXRhdGUoZGVwX3R5cGUgPSBpZmVsc2UoZGVwX2RlbGF5IDwgNSwgIm9uIHRpbWUiLCAiZGVsYXllZCIpKQpueWNmbGlnaHRzICU+JQogIGdyb3VwX2J5KG9yaWdpbikgJT4lCiAgc3VtbWFyaXNlKG90X2RlcF9yYXRlID0gc3VtKGRlcF90eXBlID09ICJvbiB0aW1lIikgLyBuKCkpICU+JQogIGFycmFuZ2UoZGVzYyhvdF9kZXBfcmF0ZSkpCmdncGxvdChkYXRhID0gbnljZmxpZ2h0cywgYWVzKHggPSBvcmlnaW4sIGZpbGwgPSBkZXBfdHlwZSkpICsKICBnZW9tX2JhcigpCmBgYAojIyMgRXhlcmNpc2UgNwpNdXRhdGUgdGhlIGRhdGEgZnJhbWUgc28gdGhhdCBpdCBpbmNsdWRlcyBhIG5ldyB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBhdmVyYWdlIHNwZWVkLCBhdmdfc3BlZWQgdHJhdmVsZWQgYnkgdGhlIHBsYW5lIGZvciBlYWNoIGZsaWdodCAoaW4gbXBoKS4gSGludDogQXZlcmFnZSBzcGVlZCBjYW4gYmUgY2FsY3VsYXRlZCBhcyBkaXN0YW5jZSBkaXZpZGVkIGJ5IG51bWJlciBvZiBob3VycyBvZiB0cmF2ZWwsIGFuZCBub3RlIHRoYXQgYWlyX3RpbWUgaXMgZ2l2ZW4gaW4gbWludXRlcy4KYGBge3J9Cm55Y2ZsaWdodHMgPC0gbnljZmxpZ2h0cyAlPiUKICBtdXRhdGUoYXZnX3NwZWVkID0gZGlzdGFuY2UvKGFpcl90aW1lLzYwKSkKYGBgCiMjIyBFeGVyY2lzZSA4Ck1ha2UgYSBzY2F0dGVycGxvdCBvZiBhdmdfc3BlZWQgdnMuIGRpc3RhbmNlLiBEZXNjcmliZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYXZlcmFnZSBzcGVlZCBhbmQgZGlzdGFuY2UuIEhpbnQ6IFVzZSBnZW9tX3BvaW50KCkuCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG55Y2ZsaWdodHMsIGFlcyh4ID0gZGlzdGFuY2UsIHkgPSBhdmdfc3BlZWQpKSArCiAgZ2VvbV9wb2ludCgpCmBgYAoK