data(nycflights)
Look carefully at these three histograms. How do they compare? Are features revealed in one that are obscured in another?
Answer: Question 1: How do they compare?
All three histograms display the same data and are right-skewed. However, the second histogram shows more detail in the distribution because it uses smaller bins.
Question 2: Are features revealed in one that are obscured in another?
Yes. The smaller bins in the second histogram reveal more detail, while the larger bins in the third histogram obscure some features of the distribution.
The second histogram is the easiest to interpret because it provides a more detailed view of the flight delays. The third histogram is the most obscure because its larger bins combine more data into each bin.
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?
Answer:
I created a new data frame, sfo_feb_flights, containing flights to SFO in February. The number of flights that meet these criteria is 68
sfo_feb_flights <- nycflights %>%
filter(dest == "SFO", month == 2)
sfo_feb_flights
## # A tibble: 68 × 16
## year month day dep_time dep_delay arr_time arr_delay carrier tailnum
## <int> <int> <int> <int> <dbl> <int> <dbl> <chr> <chr>
## 1 2013 2 18 1527 57 1903 48 DL N711ZX
## 2 2013 2 3 613 14 1008 38 UA N502UA
## 3 2013 2 15 955 -5 1313 -28 DL N717TW
## 4 2013 2 18 1928 15 2239 -6 UA N24212
## 5 2013 2 24 1340 2 1644 -21 UA N76269
## 6 2013 2 25 1415 -10 1737 -13 UA N532UA
## 7 2013 2 7 1032 1 1352 -10 B6 N627JB
## 8 2013 2 15 1805 20 2122 2 AA N335AA
## 9 2013 2 13 1056 -4 1412 -13 UA N532UA
## 10 2013 2 8 656 -4 1039 -6 DL N710TW
## # ℹ 58 more rows
## # ℹ 7 more variables: flight <int>, origin <chr>, dest <chr>, air_time <dbl>,
## # distance <dbl>, hour <dbl>, minute <dbl>
QUESTION: How many flights meet these criteria? ANSWER: 68 Flights
sfo_feb_flights %>% summarise( n_flights = n())
## # A tibble: 1 × 1
## n_flights
## <int>
## 1 68
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.
Answer:
The histogram shows that arrival delays are right-skewed, with most flights having shorter delays and a few flights having very large delays. Therefore, the median and IQR are appropriate summary statistics for describing the distribution.
ggplot(data = sfo_feb_flights, aes(x = arr_delay)) +
geom_histogram(binwidth = 15, fill = "lightblue", color = "black") +
labs(
title = "Distribution of Arrival Delays",
x = "Arrival Delay (minutes)",
y = "Number of Flights"
)
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?
Answer:
The median and IQR of arrival delays were calculated for each carrier. DL and UA have the most variable arrival delays because they have the largest IQR values.
sfo_feb_flights %>%
group_by(carrier) %>%
summarise(median = median(arr_delay), IQR = IQR(arr_delay)) %>%
arrange(desc(IQR))
## # A tibble: 5 × 3
## carrier median IQR
## <chr> <dbl> <dbl>
## 1 DL -15 22
## 2 UA -10 22
## 3 VX -22.5 21.2
## 4 AA 5 17.5
## 5 B6 -10.5 12.2
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:
The mean is the average of the entire Flight data set so in this case the average departure delay will not be as accurate as the median departure delay which is the middle of the data set.
On time departure rate for NYC airports
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
If you were selecting an airport simply based on on time departure percentage, which NYC airport would you choose to fly out of?
Answer:
I would choose to fly out of LGA based on the fact that LGA have the highest on time departure rate.
You can also visualize the distribution of on on time departure rate across the three airports using a segmented bar plot.
ggplot(data = nycflights, aes(x = origin, fill = dep_type)) +
geom_bar() +
labs(
title = "On-Time Departure Rate by NYC Airport",
x = "Airport",
y = "Number of Flights",
fill = "Departure Type"
)
Answer:
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.
Answer:
nycflights <- nycflights %>%
mutate(avg_speed = distance / (air_time / 60))
nycflights
## # A tibble: 32,735 × 18
## year month day dep_time dep_delay arr_time arr_delay carrier tailnum
## <int> <int> <int> <int> <dbl> <int> <dbl> <chr> <chr>
## 1 2013 6 30 940 15 1216 -4 VX N626VA
## 2 2013 5 7 1657 -3 2104 10 DL N3760C
## 3 2013 12 8 859 -1 1238 11 DL N712TW
## 4 2013 5 14 1841 -4 2122 -34 DL N914DL
## 5 2013 7 21 1102 -3 1230 -8 9E N823AY
## 6 2013 1 1 1817 -3 2008 3 AA N3AXAA
## 7 2013 12 9 1259 14 1617 22 WN N218WN
## 8 2013 8 13 1920 85 2032 71 B6 N284JB
## 9 2013 9 26 725 -10 1027 -8 AA N3FSAA
## 10 2013 4 30 1323 62 1549 60 EV N12163
## # ℹ 32,725 more rows
## # ℹ 9 more variables: flight <int>, origin <chr>, dest <chr>, air_time <dbl>,
## # distance <dbl>, hour <dbl>, minute <dbl>, dep_type <chr>, avg_speed <dbl>
Make a scatterplot of avg_speed vs. distance. Describe the relationship between average speed and distance. Hint: Use geom_point().
Answer:
The scatterplot shows a positive relationship between distance and average speed. In general, flights traveling longer distances tend to have higher average speeds.
ggplot(data = nycflights, aes(x = distance, y = avg_speed, color= carrier)) + geom_point()+
labs(title = "AVERAGE SPEED VS DISTANCE", x = "DISTANCE", y = "AVG. SPEED")
Replicate the following plot. Hint: The data frame plotted only contains flights from American Airlines, Delta Airlines, and United Airlines, and the points are colored by carrier. Once you replicate the plot, determine (roughly) what the cutoff point is for departure delays where you can still expect to get to your destination on time.
Answer:
The cutoff point for departure delays where you can still expect to get to your destination on time seems to be somewhere between 50 and 60 mins.
nycflightsF <- nycflights %>%
filter(carrier == "AA" | carrier == "DL" | carrier == "UA")
ggplot(data = nycflightsF, aes(x = dep_delay, y = arr_delay, color= carrier)) + geom_point()+
labs(title = "AVERAGE SPEED VS DISTANCE", x = "DISTANCE", y = "AVG. SPEED")