Question 1

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.0     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.1     ✔ tibble    3.1.8
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(lubridate)
library(scales)
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
library(nycflights13)
## Warning: package 'nycflights13' was built under R version 4.2.3
setwd("C:/Users/jerem/Documents/Financial Database")
# Late arrivals by month
late_arrivals_by_month <- flights %>%
  group_by(month) %>%
  summarise(lateflights = sum(arr_delay > 5, na.rm = TRUE))
print(late_arrivals_by_month)
## # A tibble: 12 × 2
##    month lateflights
##    <int>       <int>
##  1     1        8988
##  2     2        8119
##  3     3        9033
##  4     4       10544
##  5     5        8490
##  6     6       10739
##  7     7       11518
##  8     8        9649
##  9     9        5347
## 10    10        7628
## 11    11        7485
## 12    12       12291

Question 2

# Calculate the total number of flights per month
total_flights_per_month <- flights %>%
  group_by(month) %>%
  summarise(total = n())

# Calculate the number of flights per carrier per month
carrier_flights_per_month <- flights %>%
  group_by(carrier, month) %>%
  summarise(count = n()) 
## `summarise()` has grouped output by 'carrier'. You can override using the
## `.groups` argument.
# Join total flights with carrier flights and calculate percentage
carrier_percentage <- left_join(carrier_flights_per_month, total_flights_per_month, by = "month") %>%
  mutate(percentage = paste0(round((count / total) * 100, 3), "%"))

# Spread data to wide format for easier viewing
spread_data <- carrier_percentage %>% 
  select(-count, -total) %>% 
  spread(key = month, value = percentage)

print(spread_data)
## # A tibble: 16 × 13
## # Groups:   carrier [16]
##    carrier `1`     `2`     `3`   `4`   `5`   `6`   `7`   `8`   `9`   `10`  `11` 
##    <chr>   <chr>   <chr>   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##  1 9E      5.825%  5.847%  5.64… 5.33… 5.07… 5.08… 5.07… 4.96… 5.58… 5.79… 5.84…
##  2 AA      10.347% 10.088% 9.66… 9.60… 9.73… 9.76… 9.79… 9.73… 9.48% 9.39… 9.45…
##  3 AS      0.23%   0.224%  0.21… 0.21… 0.21… 0.21… 0.21… 0.21… 0.21… 0.21… 0.19…
##  4 B6      16.394% 16.444% 16.5… 15.9… 15.8… 16.3… 16.9… 16.8… 15.5… 15.0… 15.7…
##  5 DL      13.665% 13.803% 14.5… 14.4… 14.1… 14.6… 14.4… 14.7… 14.0… 14.1… 14.1…
##  6 EV      15.446% 15.338% 16.3… 16.1% 16.7… 15.7… 15.7… 15.5… 17.1… 16.9… 16.3…
##  7 F9      0.218%  0.196%  0.19… 0.20… 0.20… 0.19… 0.19… 0.18… 0.21% 0.19… 0.22…
##  8 FL      1.215%  1.186%  1.09… 1.09… 1.12… 0.89… 0.89… 0.89… 0.92… 0.81… 0.74…
##  9 HA      0.115%  0.112%  0.10… 0.10… 0.10… 0.10… 0.10… 0.10… 0.09… 0.07… 0.09…
## 10 MQ      8.41%   8.192%  7.82… 7.80… 7.93… 7.71… 7.68… 7.71… 8%    7.71… 7.54%
## 11 OO      0.004%  <NA>    <NA>  <NA>  <NA>  0.00… <NA>  0.01… 0.07… <NA>  0.01…
## 12 UA      17.172% 17.418% 17.2… 17.8… 17.2… 17.6… 17.2… 17.4… 17.0… 17.5… 17.8…
## 13 US      5.932%  6.22%   5.96… 6.09… 6.19… 6.14… 6.07% 6.06… 6.15… 6.39% 6.23…
## 14 VX      1.17%   1.086%  1.05… 1.64… 1.72… 1.7%  1.66… 1.66… 1.64… 1.63… 1.65…
## 15 WN      3.688%  3.651%  3.46… 3.45… 3.49… 3.64% 3.65… 3.57% 3.66… 3.77… 3.78…
## 16 YV      0.17%   0.192%  0.06… 0.13… 0.17% 0.17… 0.27… 0.22… 0.15… 0.22… 0.18%
## # … with 1 more variable: `12` <chr>

Question 3

# Calculate the delay time
flights <- flights %>%
  mutate(delay = dep_delay)

# Find the flight with the most delayed departure time each month
most_delayed_flights <- flights %>%
  group_by(month) %>%
  filter(delay == max(delay, na.rm = TRUE)) %>%
  slice(1)

print(most_delayed_flights)
## # A tibble: 12 × 20
## # Groups:   month [12]
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <int> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013     1     9      641        900    1301    1242    1530    1272 HA     
##  2  2013     2    10     2243        830     853     100    1106     834 F9     
##  3  2013     3    17     2321        810     911     135    1020     915 DL     
##  4  2013     4    10     1100       1900     960    1342    2211     931 DL     
##  5  2013     5     3     1133       2055     878    1250    2215     875 MQ     
##  6  2013     6    15     1432       1935    1137    1607    2120    1127 MQ     
##  7  2013     7    22      845       1600    1005    1044    1815     989 MQ     
##  8  2013     8     8     2334       1454     520     120    1710     490 EV     
##  9  2013     9    20     1139       1845    1014    1457    2210    1007 AA     
## 10  2013    10    14     2042        900     702    2255    1127     688 DL     
## 11  2013    11     3      603       1645     798     829    1913     796 DL     
## 12  2013    12     5      756       1700     896    1058    2020     878 AA     
## # … with 10 more variables: flight <int>, tailnum <chr>, origin <chr>,
## #   dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
## #   time_hour <dttm>, delay <dbl>, and abbreviated variable names
## #   ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay

Question 4

responses <- read.csv("multipleChoiceResponses1.csv")
usefulness_count <- responses %>%
  select(starts_with("LearningPlatformUsefulness")) %>%
  gather(key = "learning_platform", value = "usefulness") %>%
  filter(!is.na(usefulness)) %>%
  group_by(learning_platform, usefulness) %>%
  summarise(count = n(), .groups = 'drop')

# Remove "LearningPlatformUsefulness" from each string in learning_platform
usefulness_count$learning_platform <- sub("LearningPlatformUsefulness", "", usefulness_count$learning_platform)

print(usefulness_count)
## # A tibble: 54 × 3
##    learning_platform usefulness      count
##    <chr>             <chr>           <int>
##  1 Arxiv             Not Useful         37
##  2 Arxiv             Somewhat useful  1038
##  3 Arxiv             Very useful      1316
##  4 Blogs             Not Useful         45
##  5 Blogs             Somewhat useful  2406
##  6 Blogs             Very useful      2314
##  7 College           Not Useful        101
##  8 College           Somewhat useful  1405
##  9 College           Very useful      1853
## 10 Communities       Not Useful         16
## # … with 44 more rows

Question 5

selected_data <- responses %>% select(starts_with("LearningPlatformUsefulness"))

# Convert data into long format
long_data <- selected_data %>% 
  pivot_longer(cols = everything(), names_to = "learning_platform", values_to = "usefulness") %>%
  filter(!is.na(usefulness))

# Remove "LearningPlatformUsefulness" from each string in learning_platform
long_data$learning_platform <- sub("LearningPlatformUsefulness", "", long_data$learning_platform)

# Compute total count and count of useful responses for each learning platform
result <- long_data %>%
  group_by(learning_platform) %>%
  summarise(
    count = n(),
    tot = sum(usefulness != "Not Useful"),
    perc_usefulness = tot / count
  )

print(result)
## # A tibble: 18 × 4
##    learning_platform count   tot perc_usefulness
##    <chr>             <int> <int>           <dbl>
##  1 Arxiv              2391  2354           0.985
##  2 Blogs              4765  4720           0.991
##  3 College            3359  3258           0.970
##  4 Communities        1142  1126           0.986
##  5 Company             981   940           0.958
##  6 Conferences        2182  2063           0.945
##  7 Courses            5992  5945           0.992
##  8 Documentation      2321  2279           0.982
##  9 Friends            1581  1530           0.968
## 10 Kaggle             6583  6527           0.991
## 11 Newsletters        1089  1033           0.949
## 12 Podcasts           1214  1090           0.898
## 13 Projects           4794  4755           0.992
## 14 SO                 5640  5576           0.989
## 15 Textbook           4181  4112           0.983
## 16 TradeBook           333   324           0.973
## 17 Tutoring           1426  1394           0.978
## 18 YouTube            5229  5125           0.980

Plotting of question 5