library(tidyverse)
library(openintro)
data("nycflights")

Exercise 1: Look carefully at these three histograms. How do they compare? Are features revealed in one that are obscured in another?

The three histograms show the same trend with the main difference being the width of the bar graph. The thinnest one reveals a chunk of data before the peak that is below the peak which can’t be seen in any other histograms.

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?

68 flights match this criteria.

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 × 3
##   mean_dd median_dd     n
##     <dbl>     <dbl> <int>
## 1    9.78        -1  1583
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.

The distribution is mostly is skewed to the right with some outliers to the left of the plot.

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

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?

AA has the mosst varaible arrival delays.

sfo_feb_flights %>%
  group_by(carrier) %>%
  summarise(median_dd = median(dep_delay), iqr_dd = IQR(dep_delay), n_flights = n())
## # A tibble: 5 × 4
##   carrier median_dd iqr_dd n_flights
##   <chr>       <dbl>  <dbl>     <int>
## 1 AA           13     32.8        10
## 2 B6           -2      3.5         6
## 3 DL           -3      6.5        19
## 4 UA           -2     13          21
## 5 VX           -3.5   16.8        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?

A pro of using the mean data is that it shows the average departure delay and represents all the available data. A con of this choice is that the data can be skewed due to outiers.

A pro of using the median is that it lines up all the data in the set and picked the middle value so it won’t be skewed becuase of the outliers. A con is that it doesn’t accuratly represent all of data or how it is distributed.

 nycflights %>%
  group_by(month) %>%
  summarise(mean_dd = mean(dep_delay)) %>%
  arrange(desc(mean_dd))
## # A tibble: 12 × 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))
## # A tibble: 12 × 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
ggplot(data=nycflights, aes(x=dep_delay)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

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?

LGA has the best time departure percentage as it has the least amount of delayed flights compared to the other flights, therefore I would choose LGA.

nycflights <- nycflights %>%
  mutate(dep_type = ifelse(dep_delay < 5, "on time", "delayed"))
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)

nycflights <- nycflights %>%
  mutate(avg_speed = 60*(distance / air_time))

glimpse(nycflights)
## Rows: 32,735
## Columns: 18
## $ year      <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, …
## $ month     <int> 6, 5, 12, 5, 7, 1, 12, 8, 9, 4, 6, 11, 4, 3, 10, 1, 2, 8, 10…
## $ day       <int> 30, 7, 8, 14, 21, 1, 9, 13, 26, 30, 17, 22, 26, 25, 21, 23, …
## $ dep_time  <int> 940, 1657, 859, 1841, 1102, 1817, 1259, 1920, 725, 1323, 940…
## $ dep_delay <dbl> 15, -3, -1, -4, -3, -3, 14, 85, -10, 62, 5, 5, -2, 115, -4, …
## $ arr_time  <int> 1216, 2104, 1238, 2122, 1230, 2008, 1617, 2032, 1027, 1549, …
## $ arr_delay <dbl> -4, 10, 11, -34, -8, 3, 22, 71, -8, 60, -4, -2, 22, 91, -6, …
## $ carrier   <chr> "VX", "DL", "DL", "DL", "9E", "AA", "WN", "B6", "AA", "EV", …
## $ tailnum   <chr> "N626VA", "N3760C", "N712TW", "N914DL", "N823AY", "N3AXAA", …
## $ flight    <int> 407, 329, 422, 2391, 3652, 353, 1428, 1407, 2279, 4162, 20, …
## $ origin    <chr> "JFK", "JFK", "JFK", "JFK", "LGA", "LGA", "EWR", "JFK", "LGA…
## $ dest      <chr> "LAX", "SJU", "LAX", "TPA", "ORF", "ORD", "HOU", "IAD", "MIA…
## $ air_time  <dbl> 313, 216, 376, 135, 50, 138, 240, 48, 148, 110, 50, 161, 87,…
## $ distance  <dbl> 2475, 1598, 2475, 1005, 296, 733, 1411, 228, 1096, 820, 264,…
## $ hour      <dbl> 9, 16, 8, 18, 11, 18, 12, 19, 7, 13, 9, 13, 8, 20, 12, 20, 6…
## $ minute    <dbl> 40, 57, 59, 41, 2, 17, 59, 20, 25, 23, 40, 20, 9, 54, 17, 24…
## $ dep_type  <chr> "delayed", "on time", "on time", "on time", "on time", "on t…
## $ avg_speed <dbl> 474.4409, 443.8889, 394.9468, 446.6667, 355.2000, 318.6957, …

Exercise 8: Make a scatterplot of avg_speed vs. distance. Describe the relationship between average speed and distance.

As distance increase, so does average speed. They are porportiantly related.

ggplot(data = nycflights, aes(x = distance, y = avg_speed)) + geom_point()

Exercise 9: Replicate the following plot.

nycflights_3carriers <- nycflights %>%
  filter(carrier == "AA" | carrier == "DL" | carrier == "UA")
ggplot(data = nycflights_3carriers, aes(x = dep_delay, y = arr_delay, color= carrier)) + geom_point()

LS0tCnRpdGxlOiAiTGFiIGludHJvIHRvIGRhdGEiCmF1dGhvcjogIlNhcmEgQWxpIgpkYXRlOiAiYDkvMTIvMjJgIgpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydAotLS0KCmBgYHtyIGxvYWQtcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KG9wZW5pbnRybykKZGF0YSgibnljZmxpZ2h0cyIpCmBgYAoKIyMjIEV4ZXJjaXNlIDE6IExvb2sgY2FyZWZ1bGx5IGF0IHRoZXNlIHRocmVlIGhpc3RvZ3JhbXMuIEhvdyBkbyB0aGV5IGNvbXBhcmU/IEFyZSBmZWF0dXJlcyByZXZlYWxlZCBpbiBvbmUgdGhhdCBhcmUgb2JzY3VyZWQgaW4gYW5vdGhlcj8KClRoZSB0aHJlZSBoaXN0b2dyYW1zIHNob3cgdGhlIHNhbWUgdHJlbmQgd2l0aCB0aGUgbWFpbiBkaWZmZXJlbmNlIGJlaW5nIHRoZSB3aWR0aCBvZiB0aGUgYmFyIGdyYXBoLiBUaGUgdGhpbm5lc3Qgb25lIHJldmVhbHMgYSBjaHVuayBvZiBkYXRhIGJlZm9yZSB0aGUgcGVhayB0aGF0IGlzIGJlbG93IHRoZSBwZWFrIHdoaWNoIGNhbid0IGJlIHNlZW4gaW4gYW55IG90aGVyIGhpc3RvZ3JhbXMuCgpgYGB7ciBjb2RlLWNodW5rLWxhYmVsfQpnZ3Bsb3QoZGF0YSA9IG55Y2ZsaWdodHMsIGFlcyh4ID0gZGVwX2RlbGF5KSkgKwogIGdlb21faGlzdG9ncmFtKCkKZ2dwbG90KGRhdGEgPSBueWNmbGlnaHRzLCBhZXMoeCA9IGRlcF9kZWxheSkpICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDE1KQpnZ3Bsb3QoZGF0YSA9IG55Y2ZsaWdodHMsIGFlcyh4ID0gZGVwX2RlbGF5KSkgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTUwKQpgYGAKCiMjIyBFeGVyY2lzZSAyOiBDcmVhdGUgYSBuZXcgZGF0YSBmcmFtZSB0aGF0IGluY2x1ZGVzIGZsaWdodHMgaGVhZGVkIHRvIFNGTyBpbiBGZWJydWFyeSwgYW5kIHNhdmUgdGhpcyBkYXRhIGZyYW1lIGFzIHNmb19mZWJfZmxpZ2h0cy4gSG93IG1hbnkgZmxpZ2h0cyBtZWV0IHRoZXNlIGNyaXRlcmlhPwoKNjggZmxpZ2h0cyBtYXRjaCB0aGlzIGNyaXRlcmlhLiAKCmBgYHtyfQpsYXhfZmxpZ2h0cyA8LSBueWNmbGlnaHRzICU+JQogIGZpbHRlcihkZXN0ID09ICJMQVgiKQpnZ3Bsb3QoZGF0YSA9IGxheF9mbGlnaHRzLCBhZXMoeCA9IGRlcF9kZWxheSkpICsKICBnZW9tX2hpc3RvZ3JhbSgpCmxheF9mbGlnaHRzICU+JQogIHN1bW1hcmlzZShtZWFuX2RkICAgPSBtZWFuKGRlcF9kZWxheSksIAogICAgICAgICAgICBtZWRpYW5fZGQgPSBtZWRpYW4oZGVwX2RlbGF5KSwgCiAgICAgICAgICAgIG4gICAgICAgICA9IG4oKSkKc2ZvX2ZlYl9mbGlnaHRzIDwtIG55Y2ZsaWdodHMgJT4lCiAgZmlsdGVyKGRlc3QgPT0gIlNGTyIsIG1vbnRoID09IDIpCnNmb19mZWJfZmxpZ2h0cyAlPiUKICBzdW1tYXJpc2Uobj0gbigpKQpgYGAKCiMjIyBFeGVyY2lzZSAzOkRlc2NyaWJlIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGFycml2YWwgZGVsYXlzIG9mIHRoZXNlIGZsaWdodHMgdXNpbmcgYSBoaXN0b2dyYW0gYW5kIGFwcHJvcHJpYXRlIHN1bW1hcnkgc3RhdGlzdGljcy4gSGludDogVGhlIHN1bW1hcnkgc3RhdGlzdGljcyB5b3UgdXNlIHNob3VsZCBkZXBlbmQgb24gdGhlIHNoYXBlIG9mIHRoZSBkaXN0cmlidXRpb24uCgpUaGUgZGlzdHJpYnV0aW9uIGlzIG1vc3RseSBpcyBza2V3ZWQgdG8gdGhlIHJpZ2h0IHdpdGggc29tZSBvdXRsaWVycyB0byB0aGUgbGVmdCBvZiB0aGUgcGxvdC4KCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IHNmb19mZWJfZmxpZ2h0cywgYWVzKHggPSBhcnJfZGVsYXkpKSArCiAgZ2VvbV9oaXN0b2dyYW0oKQoKYGBgCgojIyMgRXhlcmNpc2UgNDogQ2FsY3VsYXRlIHRoZSBtZWRpYW4gYW5kIGludGVycXVhcnRpbGUgcmFuZ2UgZm9yIGFycl9kZWxheXMgb2YgZmxpZ2h0cyBpbiBpbiB0aGUgc2ZvX2ZlYl9mbGlnaHRzIGRhdGEgZnJhbWUsIGdyb3VwZWQgYnkgY2Fycmllci4gV2hpY2ggY2FycmllciBoYXMgdGhlIG1vc3QgdmFyaWFibGUgYXJyaXZhbCBkZWxheXM/CgpBQSBoYXMgdGhlIG1vc3N0IHZhcmFpYmxlIGFycml2YWwgZGVsYXlzLgoKYGBge3J9CnNmb19mZWJfZmxpZ2h0cyAlPiUKICBncm91cF9ieShjYXJyaWVyKSAlPiUKICBzdW1tYXJpc2UobWVkaWFuX2RkID0gbWVkaWFuKGRlcF9kZWxheSksIGlxcl9kZCA9IElRUihkZXBfZGVsYXkpLCBuX2ZsaWdodHMgPSBuKCkpCmBgYAoKCiMjIyBFeGVyY2lzZSA1OiBTdXBwb3NlIHlvdSByZWFsbHkgZGlzbGlrZSBkZXBhcnR1cmUgZGVsYXlzIGFuZCB5b3Ugd2FudCB0byBzY2hlZHVsZSB5b3VyIHRyYXZlbCBpbiBhIG1vbnRoIHRoYXQgbWluaW1pemVzIHlvdXIgcG90ZW50aWFsIGRlcGFydHVyZSBkZWxheSBsZWF2aW5nIE5ZQy4gT25lIG9wdGlvbiBpcyB0byBjaG9vc2UgdGhlIG1vbnRoIHdpdGggdGhlIGxvd2VzdCBtZWFuIGRlcGFydHVyZSBkZWxheS4gQW5vdGhlciBvcHRpb24gaXMgdG8gY2hvb3NlIHRoZSBtb250aCB3aXRoIHRoZSBsb3dlc3QgbWVkaWFuIGRlcGFydHVyZSBkZWxheS4gV2hhdCBhcmUgdGhlIHByb3MgYW5kIGNvbnMgb2YgdGhlc2UgdHdvIGNob2ljZXM/CgpBIHBybyBvZiB1c2luZyB0aGUgbWVhbiBkYXRhIGlzIHRoYXQgaXQgc2hvd3MgdGhlIGF2ZXJhZ2UgZGVwYXJ0dXJlIGRlbGF5IGFuZCByZXByZXNlbnRzIGFsbCB0aGUgYXZhaWxhYmxlIGRhdGEuCkEgY29uIG9mIHRoaXMgY2hvaWNlIGlzIHRoYXQgdGhlIGRhdGEgY2FuIGJlIHNrZXdlZCBkdWUgdG8gb3V0aWVycy4KCkEgcHJvIG9mIHVzaW5nIHRoZSBtZWRpYW4gaXMgdGhhdCBpdCBsaW5lcyB1cCBhbGwgdGhlIGRhdGEgaW4gdGhlIHNldCBhbmQgcGlja2VkIHRoZSBtaWRkbGUgdmFsdWUgc28gaXQgd29uJ3QgYmUgc2tld2VkIGJlY3Vhc2Ugb2YgdGhlIG91dGxpZXJzLgpBIGNvbiBpcyB0aGF0IGl0IGRvZXNuJ3QgYWNjdXJhdGx5IHJlcHJlc2VudCBhbGwgb2YgZGF0YSBvciBob3cgaXQgaXMgZGlzdHJpYnV0ZWQuIAoKYGBge3J9CiBueWNmbGlnaHRzICU+JQogIGdyb3VwX2J5KG1vbnRoKSAlPiUKICBzdW1tYXJpc2UobWVhbl9kZCA9IG1lYW4oZGVwX2RlbGF5KSkgJT4lCiAgYXJyYW5nZShkZXNjKG1lYW5fZGQpKQogbnljZmxpZ2h0cyAlPiUKICBncm91cF9ieShtb250aCkgJT4lCiAgc3VtbWFyaXNlKG1lZGlhbl9kZCA9IG1lZGlhbihkZXBfZGVsYXkpKSAlPiUKICBhcnJhbmdlKGRlc2MobWVkaWFuX2RkKSkKCmdncGxvdChkYXRhPW55Y2ZsaWdodHMsIGFlcyh4PWRlcF9kZWxheSkpICsKICBnZW9tX2hpc3RvZ3JhbSgpCmBgYAoKICAKIyMjIEV4ZXJjaXNlIDY6IElmIHlvdSB3ZXJlIHNlbGVjdGluZyBhbiBhaXJwb3J0IHNpbXBseSBiYXNlZCBvbiBvbiB0aW1lIGRlcGFydHVyZSBwZXJjZW50YWdlLCB3aGljaCBOWUMgYWlycG9ydCB3b3VsZCB5b3UgY2hvb3NlIHRvIGZseSBvdXQgb2Y/CgpMR0EgaGFzIHRoZSBiZXN0IHRpbWUgZGVwYXJ0dXJlIHBlcmNlbnRhZ2UgYXMgaXQgaGFzIHRoZSBsZWFzdCBhbW91bnQgb2YgZGVsYXllZCBmbGlnaHRzIGNvbXBhcmVkIHRvIHRoZSBvdGhlciBmbGlnaHRzLCB0aGVyZWZvcmUgSSB3b3VsZCBjaG9vc2UgTEdBLgoKYGBge3J9Cm55Y2ZsaWdodHMgPC0gbnljZmxpZ2h0cyAlPiUKICBtdXRhdGUoZGVwX3R5cGUgPSBpZmVsc2UoZGVwX2RlbGF5IDwgNSwgIm9uIHRpbWUiLCAiZGVsYXllZCIpKQpnZ3Bsb3QoZGF0YSA9IG55Y2ZsaWdodHMsIGFlcyh4ID0gb3JpZ2luLCBmaWxsID0gZGVwX3R5cGUpKSArCiAgZ2VvbV9iYXIoKQoKYGBgCgoKIyMjIEV4ZXJjaXNlIDc6IE11dGF0ZSB0aGUgZGF0YSBmcmFtZSBzbyB0aGF0IGl0IGluY2x1ZGVzIGEgbmV3IHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIGF2ZXJhZ2Ugc3BlZWQsIGF2Z19zcGVlZCB0cmF2ZWxlZCBieSB0aGUgcGxhbmUgZm9yIGVhY2ggZmxpZ2h0IChpbiBtcGgpCgoKYGBge3J9Cm55Y2ZsaWdodHMgPC0gbnljZmxpZ2h0cyAlPiUKICBtdXRhdGUoYXZnX3NwZWVkID0gNjAqKGRpc3RhbmNlIC8gYWlyX3RpbWUpKQoKZ2xpbXBzZShueWNmbGlnaHRzKQpgYGAKCgoKIyMjIEV4ZXJjaXNlIDg6IE1ha2UgYSBzY2F0dGVycGxvdCBvZiBhdmdfc3BlZWQgdnMuIGRpc3RhbmNlLiBEZXNjcmliZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYXZlcmFnZSBzcGVlZCBhbmQgZGlzdGFuY2UuCgpBcyBkaXN0YW5jZSBpbmNyZWFzZSwgc28gZG9lcyBhdmVyYWdlIHNwZWVkLiBUaGV5IGFyZSBwb3Jwb3J0aWFudGx5IHJlbGF0ZWQuCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBueWNmbGlnaHRzLCBhZXMoeCA9IGRpc3RhbmNlLCB5ID0gYXZnX3NwZWVkKSkgKyBnZW9tX3BvaW50KCkKYGBgCgoKCiMjIyBFeGVyY2lzZSA5OiBSZXBsaWNhdGUgdGhlIGZvbGxvd2luZyBwbG90LgoKCmBgYHtyfQpueWNmbGlnaHRzXzNjYXJyaWVycyA8LSBueWNmbGlnaHRzICU+JQogIGZpbHRlcihjYXJyaWVyID09ICJBQSIgfCBjYXJyaWVyID09ICJETCIgfCBjYXJyaWVyID09ICJVQSIpCmdncGxvdChkYXRhID0gbnljZmxpZ2h0c18zY2FycmllcnMsIGFlcyh4ID0gZGVwX2RlbGF5LCB5ID0gYXJyX2RlbGF5LCBjb2xvcj0gY2FycmllcikpICsgZ2VvbV9wb2ludCgpCmBgYAoKCg==