#install.packages("nycflights13")

#R-Test 1 ##Hỏi ngày đầu tiên của tháng 1 năm 2013 có bao nhiêu chuyến bay được thực hiện?

library(nycflights13)
# Tạo bản sao dữ liệu để không thay đổi nguồn gốc
flight_data <- flights
count_flights <- subset(flight_data,month == 1 & day ==1)
nrow(count_flights)
## [1] 842

##Vào ngày nào trong năm 2013 có nhiều chuyến bay nhất từ New York?

library(tidyr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
flight_data$month <- as.factor(flight_data$month)
table(flight_data$month, flight_data$day) -> ketqua
ketqua <- as.data.frame(ketqua)
names(ketqua) <- c("Month", "Day", "Total_flight")

ketqua[which.max(ketqua$Total_flight),]
##     Month Day Total_flight
## 323    11  27         1014

##Đưa ra danh sách 10 hãng hàng không thực hiện số chuyến bay lớn nhấ. Hiển thị kết quả theo thứ tự giảm dần

library(nycflights13)
library(tidyr)
library(dplyr)

flight_data %>% 
  group_by(carrier) %>% 
  count() %>% 
  ungroup() %>% 
  arrange(-n) %>% 
  slice(1:10) -> companies_top10
  companies_top10
## # A tibble: 10 × 2
##    carrier     n
##    <chr>   <int>
##  1 UA      58665
##  2 B6      54635
##  3 EV      54173
##  4 DL      48110
##  5 AA      32729
##  6 MQ      26397
##  7 US      20536
##  8 9E      18460
##  9 WN      12275
## 10 VX       5162

##Nếu chúng ta chỉ thu thập dữ liệu mà không bỏ sót giá trị nào từ biến “dep_delay” và đặt tên cho nó là df_full_dep_delay, thì có bao nhiêu hàng trong tập dữ liệu này?

library(nycflights13)
library(tidyr)
library(dplyr)

flight_data %>% 
  filter(!is.na(dep_delay)) -> df_full_delay
df_full_delay
## # A tibble: 328,521 × 19
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <fct> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013 1         1      517        515       2     830     819      11 UA     
##  2  2013 1         1      533        529       4     850     830      20 UA     
##  3  2013 1         1      542        540       2     923     850      33 AA     
##  4  2013 1         1      544        545      -1    1004    1022     -18 B6     
##  5  2013 1         1      554        600      -6     812     837     -25 DL     
##  6  2013 1         1      554        558      -4     740     728      12 UA     
##  7  2013 1         1      555        600      -5     913     854      19 B6     
##  8  2013 1         1      557        600      -3     709     723     -14 EV     
##  9  2013 1         1      557        600      -3     838     846      -8 B6     
## 10  2013 1         1      558        600      -2     753     745       8 AA     
## # … with 328,511 more rows, 9 more variables: flight <int>, tailnum <chr>,
## #   origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
## #   minute <dbl>, time_hour <dttm>, and abbreviated variable names
## #   ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay

##Tính thời gian chậm trung bình của 10 hãng hàng không trong danh sách được tạo từ câu 3 và sắp xếp theo thứ tự giảm dần theo thời gian chậm trung bình

library(nycflights13)
library(tidyr)
library(dplyr)

df_full_delay %>% 
  group_by(carrier) %>% 
  summarise(avg_delay_company = mean(dep_delay)) %>% 
  ungroup() %>% 
  arrange(avg_delay_company) -> xapxep_tb
xapxep_tb
## # A tibble: 16 × 2
##    carrier avg_delay_company
##    <chr>               <dbl>
##  1 US                   3.78
##  2 HA                   4.90
##  3 AS                   5.80
##  4 AA                   8.59
##  5 DL                   9.26
##  6 MQ                  10.6 
##  7 UA                  12.1 
##  8 OO                  12.6 
##  9 VX                  12.9 
## 10 B6                  13.0 
## 11 9E                  16.7 
## 12 WN                  17.7 
## 13 FL                  18.7 
## 14 YV                  19.0 
## 15 EV                  20.0 
## 16 F9                  20.2
library(nycflights13)
library(tidyr)
library(dplyr)

df_full_delay %>% 
  group_by(carrier) %>% 
  summarise(avg_delay_company = mean(dep_delay)) %>% 
  ungroup() %>% 
  arrange(avg_delay_company) -> sapxep_tb
 
sapxep_tb
## # A tibble: 16 × 2
##    carrier avg_delay_company
##    <chr>               <dbl>
##  1 US                   3.78
##  2 HA                   4.90
##  3 AS                   5.80
##  4 AA                   8.59
##  5 DL                   9.26
##  6 MQ                  10.6 
##  7 UA                  12.1 
##  8 OO                  12.6 
##  9 VX                  12.9 
## 10 B6                  13.0 
## 11 9E                  16.7 
## 12 WN                  17.7 
## 13 FL                  18.7 
## 14 YV                  19.0 
## 15 EV                  20.0 
## 16 F9                  20.2

#R-Test 2

##Tạo vectơ rỗng (không có phần tử), với tên là space_vector. Thử viết vòng lặp for để tính tổng bình phương từ 1 đến 10 rồi gán kết quả cho space_vector

library(nycflights13)
library(tidyr)
library(dplyr)
space_vector <- c()
binhphuong <- 1
   
    for (i in 1:10)
         { 
            binhphuong <- i^2
            space_vector <- c(space_vector, binhphuong)
        
                }

space_vector
##  [1]   1   4   9  16  25  36  49  64  81 100

##Tạo hàm ( count_missing ) để đếm số quan sát bị thiếu trong vectơ đã cho. Sử dụng hàm này và vòng lặp for để tóm tắt số lượng quan sát cho các cột của tất cả các chuyến bay và hiển thị kết quả

count_missing <- function(x) # Create the function count_missing
{
    is.na(x) -> missing_value
    sum(missing_value) -> all_missing_value
    return(all_missing_value)
    
    }
myvector <- c(NA, 3, 5, 4, 8, NA, 3, 88, NA, NA, NA)  # Test the function
count_missing(myvector) 
## [1] 5
# Tìm tất cả các giá trị còn thiếu trong chuyến bay tập dữ liệu cho tất cả các biến
vector_missing_flights <- c()
k <- ncol(flight_data)

    for (i in 1:k )  # for loop for all columns
     { 
# Sử dụng hàm pull() để liệt kê tất cả các giá trị cho mỗi cột, chẳng hạn như vòng lặp for thứ hai cho tất cả các hàng của tập dữ liệu
flight_data %>% pull(i) -> alternative_values
        count_missing(alternative_values) -> missing_values_flights 
        vector_missing_flights <- c(vector_missing_flights, missing_values_flights)
        
    }

names(flight_data) -> col_name

final_result <- data.frame(col_name, vector_missing_flights)
names(final_result)[2] <- c("n_missing")

final_result
##          col_name n_missing
## 1            year         0
## 2           month         0
## 3             day         0
## 4        dep_time      8255
## 5  sched_dep_time         0
## 6       dep_delay      8255
## 7        arr_time      8713
## 8  sched_arr_time         0
## 9       arr_delay      9430
## 10        carrier         0
## 11         flight         0
## 12        tailnum      2512
## 13         origin         0
## 14           dest         0
## 15       air_time      9430
## 16       distance         0
## 17           hour         0
## 18         minute         0
## 19      time_hour         0

#R-Test 3 ##Tìm hiểu về định luật Benford và viết hàm tính xác suất của 1 số tự nhiên ngẫu nhiên trong khoảng [1..9]

benford <- function(d)
   {
    prob_d <- log10(1 + 1/d)
    
    return(prob_d)
    
        }
 test_vector_benford <- c()
# Using the for loop
  for (i in 1:9)
        { i <- i + 1
            benford(i) -> vector_benford
            test_vector_benford <- c(test_vector_benford, vector_benford)
            
                    }

test_vector_benford
## [1] 0.17609126 0.12493874 0.09691001 0.07918125 0.06694679 0.05799195 0.05115252
## [8] 0.04575749 0.04139269
digits <- c(1:9)

visualization <- data.frame(digits, test_vector_benford)
names(visualization)[2] <- "Probability"

visualization
##   digits Probability
## 1      1  0.17609126
## 2      2  0.12493874
## 3      3  0.09691001
## 4      4  0.07918125
## 5      5  0.06694679
## 6      6  0.05799195
## 7      7  0.05115252
## 8      8  0.04575749
## 9      9  0.04139269

##The barplot using ggplot2

library(ggplot2)
digits <- c(1:9)

visualization <- data.frame(digits, test_vector_benford)
names(visualization)[2] <- "Probability"

ggBarplot <- ggplot(visualization, aes(x = reorder(factor(digits), Probability), y = Probability, fill = Probability)) +
    geom_col() +
    geom_bar(stat = "identity", width = 0.9) + 
    xlab("Digits") +
    ylab("Probability")+
    ggtitle("The Benford's law") +
    coord_flip ()
ggBarplot