pacman::p_load(jsonlite,httr)

library(dplyr)
library(httr)
library(jsonlite)
library(dplyr)
library(httr)
data("cars")
cars

Question 1.

median(cars$speed)
[1] 15
on_time_preformance <- read.csv("On_Time_Performance.csv")
on_time_preformance

Question 2.

dim(on_time_preformance) 
[1] 570131    110
nrow(on_time_preformance)
[1] 570131
ncol(on_time_preformance)
[1] 110

Question 3.

sum(is.na(on_time_preformance$Div2WheelsOff))
[1] 570122

Question 4.

library(dplyr)

avg_delay_by_carrier <- on_time_preformance %>%
  group_by(Carrier) %>%  # Ensure 'Carrier' is the correct column name
  summarise(avg_dep_delay = mean(DepDelayMinutes, na.rm = TRUE)) %>%  # Use 'DepDelayMinutes'
  arrange(desc(avg_dep_delay))  # Sort in descending order

print(avg_delay_by_carrier)

largest_delay_carrier <- avg_delay_by_carrier %>%
  slice(1)  # Select the top carrier

print(largest_delay_carrier)

Question 5.

# Define the API endpoint
url <- "https://min-api.cryptocompare.com/data/v2/histoday"

# Define parameters
params <- list(
  fsym = "BTC",      # Cryptocurrency symbol (Bitcoin)
  tsym = "USD",      # Measured in USD
  limit = 100        # Last 100 days
)

# Send GET request with parameters
response <- GET(url, query = params)

# Parse JSON response
BT_Data <- fromJSON(content(response, as = "text"))

# Extract closing prices
BTC <- BT_Data$Data$Data$close

# Check if BTC contains valid data
if (length(BTC) > 0 && all(!is.na(BTC))) {
  print(max(BTC))  # Get max closing price
} else {
  print("No valid data retrieved.")
}
[1] 106155.6
LS0tCnRpdGxlOiAiTWluaSBQcm9qZWN0IH4gS2F0aWUgUXVpbm4iCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyfQpwYWNtYW46OnBfbG9hZChqc29ubGl0ZSxodHRyKQoKbGlicmFyeShkcGx5cikKbGlicmFyeShodHRyKQpsaWJyYXJ5KGpzb25saXRlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGh0dHIpCgoKCmBgYAoKCgpgYGB7cn0KZGF0YSgiY2FycyIpCmNhcnMKYGBgCiMjIyBRdWVzdGlvbiAxLiAKYGBge3J9Cm1lZGlhbihjYXJzJHNwZWVkKQpgYGAKCmBgYHtyfQpvbl90aW1lX3ByZWZvcm1hbmNlIDwtIHJlYWQuY3N2KCJPbl9UaW1lX1BlcmZvcm1hbmNlLmNzdiIpCm9uX3RpbWVfcHJlZm9ybWFuY2UKYGBgCgojIyMgUXVlc3Rpb24gMi4gCmBgYHtyfQpkaW0ob25fdGltZV9wcmVmb3JtYW5jZSkgCmBgYAoKYGBge3J9Cm5yb3cob25fdGltZV9wcmVmb3JtYW5jZSkKbmNvbChvbl90aW1lX3ByZWZvcm1hbmNlKQpgYGAKCiMjIyBRdWVzdGlvbiAzLiAKYGBge3J9CnN1bShpcy5uYShvbl90aW1lX3ByZWZvcm1hbmNlJERpdjJXaGVlbHNPZmYpKQpgYGAKCiMjIyBRdWVzdGlvbiA0LiAKYGBge3J9CmxpYnJhcnkoZHBseXIpCgphdmdfZGVsYXlfYnlfY2FycmllciA8LSBvbl90aW1lX3ByZWZvcm1hbmNlICU+JQogIGdyb3VwX2J5KENhcnJpZXIpICU+JSAgIyBFbnN1cmUgJ0NhcnJpZXInIGlzIHRoZSBjb3JyZWN0IGNvbHVtbiBuYW1lCiAgc3VtbWFyaXNlKGF2Z19kZXBfZGVsYXkgPSBtZWFuKERlcERlbGF5TWludXRlcywgbmEucm0gPSBUUlVFKSkgJT4lICAjIFVzZSAnRGVwRGVsYXlNaW51dGVzJwogIGFycmFuZ2UoZGVzYyhhdmdfZGVwX2RlbGF5KSkgICMgU29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyCgpwcmludChhdmdfZGVsYXlfYnlfY2FycmllcikKCmxhcmdlc3RfZGVsYXlfY2FycmllciA8LSBhdmdfZGVsYXlfYnlfY2FycmllciAlPiUKICBzbGljZSgxKSAgIyBTZWxlY3QgdGhlIHRvcCBjYXJyaWVyCgpwcmludChsYXJnZXN0X2RlbGF5X2NhcnJpZXIpCmBgYAoKIyMjIFF1ZXN0aW9uIDUuIAoKYGBge3J9CiMgRGVmaW5lIHRoZSBBUEkgZW5kcG9pbnQKdXJsIDwtICJodHRwczovL21pbi1hcGkuY3J5cHRvY29tcGFyZS5jb20vZGF0YS92Mi9oaXN0b2RheSIKCiMgRGVmaW5lIHBhcmFtZXRlcnMKcGFyYW1zIDwtIGxpc3QoCiAgZnN5bSA9ICJCVEMiLCAgICAgICMgQ3J5cHRvY3VycmVuY3kgc3ltYm9sIChCaXRjb2luKQogIHRzeW0gPSAiVVNEIiwgICAgICAjIE1lYXN1cmVkIGluIFVTRAogIGxpbWl0ID0gMTAwICAgICAgICAjIExhc3QgMTAwIGRheXMKKQoKIyBTZW5kIEdFVCByZXF1ZXN0IHdpdGggcGFyYW1ldGVycwpyZXNwb25zZSA8LSBHRVQodXJsLCBxdWVyeSA9IHBhcmFtcykKCiMgUGFyc2UgSlNPTiByZXNwb25zZQpCVF9EYXRhIDwtIGZyb21KU09OKGNvbnRlbnQocmVzcG9uc2UsIGFzID0gInRleHQiKSkKCiMgRXh0cmFjdCBjbG9zaW5nIHByaWNlcwpCVEMgPC0gQlRfRGF0YSREYXRhJERhdGEkY2xvc2UKCiMgQ2hlY2sgaWYgQlRDIGNvbnRhaW5zIHZhbGlkIGRhdGEKaWYgKGxlbmd0aChCVEMpID4gMCAmJiBhbGwoIWlzLm5hKEJUQykpKSB7CiAgcHJpbnQobWF4KEJUQykpICAjIEdldCBtYXggY2xvc2luZyBwcmljZQp9IGVsc2UgewogIHByaW50KCJObyB2YWxpZCBkYXRhIHJldHJpZXZlZC4iKQp9CgpgYGAKCgoKCgo=