1 BÀI TẬP TUẦN 3

Nguyễn Thị Ngọc Hà_2121012474

1.1 Biến đổi dữ liệu từ dạng wide sang dạng long

Chọn dataset là Superstore_Data: Superstore_Data là một bộ dữ liệu trong package ggplot2 chứa thông tin về hiệu suất nhiên liệu của các mẫu xe hơi được sản xuất trong vài năm gần đây và được xếp hạng từ 1 đến 10 về độ tiết kiệm nhiên liệu.

  • Bộ dữ liệu này gồm 234 quan sát và 11 biến, bao gồm các biến sau:
    • manufacturer: Nhà sản xuất

    • model: Mẫu xe

    • displ: Dung tích động cơ (lít)

    • year: Năm sản xuất

    • cyl: Số xy lanh

    • trans: Loại hộp số

    • drv: Hệ thống truyền động (F: front-wheel drive, R: rear-wheel drive, 4: 4-wheel drive)

    • cty: Mức tiêu thụ nhiên liệu trong đô thị (số dặm/gallon)

    • hwy: Mức tiêu thụ nhiên liệu ngoài đô thị (số dặm/gallon)

    • fl: Loại nhiên liệu (E: Ethanol E85, D: Diesel, R: Regular gasoline, P: Premium gasoline)

    • class: Loại xe (2seater, compact, midsize, minivan, pickup, subcompact, SUV, van)

  • Bộ dữ liệu Superstore_Data có thể được sử dụng để học và trực quan hóa dữ liệu.
library(ggplot2)

Để gọi dữ liệu Superstore_Data, trước hết bạn cần cài đặt package ggplot2. Nếu bạn chưa cài đặt package này, hãy nhập lệnh sau đây:

superstore_data <- as.data.frame(ggplot2::mpg)

Sau khi cài đặt xong, gọi dữ liệu Superstore_Data như sau:

p <- superstore_data

Gán bộ dữ liệu Superstore_data vào p

str(p)
## 'data.frame':    234 obs. of  11 variables:
##  $ manufacturer: chr  "audi" "audi" "audi" "audi" ...
##  $ model       : chr  "a4" "a4" "a4" "a4" ...
##  $ displ       : num  1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
##  $ year        : int  1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
##  $ cyl         : int  4 4 4 4 6 6 6 4 4 4 ...
##  $ trans       : chr  "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
##  $ drv         : chr  "f" "f" "f" "f" ...
##  $ cty         : int  18 21 20 21 16 18 18 18 16 20 ...
##  $ hwy         : int  29 29 31 30 26 26 27 26 25 28 ...
##  $ fl          : chr  "p" "p" "p" "p" ...
##  $ class       : chr  "compact" "compact" "compact" "compact" ...

In ra cấu trúc của bộ dữ liệu, giúp bạn có được cái nhìn tổng quan về các thông tin, cấu trúc và đặc tính của đối tượng đó.

summary(p)
##  manufacturer          model               displ            year     
##  Length:234         Length:234         Min.   :1.600   Min.   :1999  
##  Class :character   Class :character   1st Qu.:2.400   1st Qu.:1999  
##  Mode  :character   Mode  :character   Median :3.300   Median :2004  
##                                        Mean   :3.472   Mean   :2004  
##                                        3rd Qu.:4.600   3rd Qu.:2008  
##                                        Max.   :7.000   Max.   :2008  
##       cyl           trans               drv                 cty       
##  Min.   :4.000   Length:234         Length:234         Min.   : 9.00  
##  1st Qu.:4.000   Class :character   Class :character   1st Qu.:14.00  
##  Median :6.000   Mode  :character   Mode  :character   Median :17.00  
##  Mean   :5.889                                         Mean   :16.86  
##  3rd Qu.:8.000                                         3rd Qu.:19.00  
##  Max.   :8.000                                         Max.   :35.00  
##       hwy             fl               class          
##  Min.   :12.00   Length:234         Length:234        
##  1st Qu.:18.00   Class :character   Class :character  
##  Median :24.00   Mode  :character   Mode  :character  
##  Mean   :23.44                                        
##  3rd Qu.:27.00                                        
##  Max.   :44.00

Tính số lượng quan sát, giá trị trung bình, giá trị trung vị, min-max, độ lệch chuẩn và các phần vị khác cho từng biến.

names(p) <- c("ma", "md", "ds", "yr", "cy", "tr", "dr", "ct", "hw", "fu", "cl")

Lệnh này sẽ gán các tên ngắn hơn cho các biến trong bộ dữ liệu theo thứ tự tương ứng của tên cột trong bộ dữ liệu.

library(tidyverse)
## Warning: package 'tidyr' was built under R version 4.3.1
## Warning: package 'dplyr' was built under R version 4.3.1
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.1     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
srd <- p %>%
  pivot_longer(cols = c('ct','hw') , 
               names_to = "ac",
               values_to = "number")

Biến đổi dữ liệu từ rộng sang dài, giúp phân tích dữ liệu và thực hiện tính toán dễ dàng hơn. Thực hiện lệnh pivot_longer() cho các biến liên quan đến mức tiêu thụ nhiên liệu của xe ô tô gồm “ct” : Mức tiêu thụ nhiên liệu trong đô thị (số dặm/gallon), “hw”: Mức tiêu thụ nhiên liệu ngoài đô thị (số dặm/gallon) để chuyển trình bày nhữug biến này từ hàng sang cột. Lệnh name_to =“ac” được sử dụng để chỉ định tên của cột mới được tạo ra sau khi chuyển đổi. Lệnh values_to = “number” để chỉ định tên của cột chứa giá trị được tạo ra sau khi chuyển đổi.

Kết quả thu được là tập dữ liệu srd với 468 quan sát và 11 biến, dài gấp đôi so với tập dữ liệu gốc ban đầu.

table(srd$ac)
## 
##  ct  hw 
## 234 234

Tạo bảng tần số của biến **“ac” trong bộ dữ liệu srd. Bảng tần số giúp hiển thị số lần xuất hiện của từng giá trị trong biến. Kết quả cho thấy rằng biến “ct” thuộc “ac” xuất hiện 234 lần trong “srd” và bằng con số xuất hiện của biến “hw” thuộc “ac”

library(ggplot2)
ggplot(p, aes(x = cl, y = hw, fill = ma)) +
  geom_boxplot() +
  labs(title = "Highway MPG by Vehicle Class",
       x = "Vehicle Class",
       y = "Highway MPG",
       fill = "Manufacturer")

 Lệnh này sẽ tải gói ggplot2, sau đó tải bộ dữ liệu 'p' và vẽ một biểu đồ hộp (boxplot) với trục x là loại xe ('cl'), trục y là khả năng tiết kiệm nhiên liệu trên xa lộ ('hw') và màu sắc được phân biệt theo nhà sản xuất ('ma').
ggplot(p, aes(x = ds, y = ct, color = cl)) +
  geom_point(alpha = 0.6, size = 3) +
  labs(title = "City MPG vs. Engine Displacement",
       x = "Engine Displacement (L)",
       y = "City MPG",
       color = "Vehicle Class")

Lệnh này sẽ vẽ một biểu đồ phân tán (scatter plot) với trục x là dung tích động cơ (‘ds’) và trục y là khả năng tiết kiệm nhiên liệu trong thành phố (‘ct’). Màu sắc được phân biệt theo loại xe (‘cl’).Ở đây, chúng ta sử dụng hàm geom_point để thêm các điểm trên đồ thị và sử dụng ‘alpha’ để thiết lập độ trong suốt của điểm và ‘size’ để thiết lập kích thước của từng điểm.

Biểu đồ scatter plot trên cho thấy mối quan hệ giữa khả năng tiết kiệm nhiên liệu trong thành phố (City MPG) và dung tích động cơ (Engine Displacement) của các loại xe hơi theo từng lớp (Vehicle Class).

Các điểm trên đồ thị biểu diễn thông tin của từng xe hơi. Màu sắc của từng điểm biểu hiện cho lớp xe tương ứng của nó. Chúng ta có thể thấy rằng các xe màu trắng biểu thị cho lớp xe “compact” thường có dung tích động cơ nhỏ hơn và tiêu thụ nhiên liệu hiệu quả hơn so với các lớp xe khác, trong khi các xe màu đen biểu thị cho lớp xe “suv” thường có dung tích động cơ lớn hơn và tiêu thụ nhiên liệu kém hơn.

Biểu đồ này giúp chúng ta nhìn thấy một mối quan hệ đáng kể giữa khả năng tiết kiệm nhiên liệu và dung tích động cơ của các loại xe hơi, và cũng giúp chúng ta so sánh khả năng tiết kiệm nhiên liệu giữa các lớp xe khác nhau.

freq_table <- table(p$tr)
freq_table
## 
##   auto(av)   auto(l3)   auto(l4)   auto(l5)   auto(l6)   auto(s4)   auto(s5) 
##          5          2         83         39          6          3          3 
##   auto(s6) manual(m5) manual(m6) 
##         16         58         19

Để lập bảng tần số cho các biểu hiện của biến loại hộp số trong bộ dữ liệu, sử dụng lệnh table() như trên. Kết quả bảng tần số cho thấy rằng loại hộp số tự động (automatic) nhiều hơn loại hộp sốsố thủ công (manual) và nhiều hơn 80 mẫu

prop_table <- prop.table(freq_table) * 100
prop_table
## 
##   auto(av)   auto(l3)   auto(l4)   auto(l5)   auto(l6)   auto(s4)   auto(s5) 
##  2.1367521  0.8547009 35.4700855 16.6666667  2.5641026  1.2820513  1.2820513 
##   auto(s6) manual(m5) manual(m6) 
##  6.8376068 24.7863248  8.1196581

Tính toán phần trăm của mỗi loại hộp số trong tổng số xe và lưu kết quả vào đối tượng prop_table. Kết quả phần trăm cho thấy rằng khoảng 70% các xe sử dụng hộp số tự động và khoảng 30% sử dụng hộp số thủ công. Có thể kết luận rằng hộp số tự động là loại hộp số phổ biến nhất trong bộ dữ liệu, và hầu hết các xe sử dụng loại hộp số này.

barplot(prop_table, main = "Phân phối phần trăm xe theo loại hộp số", ylab = "%")

Biểu đồ phần trăm cột về phân phối số lượng xe của từng loại hộp số trong bộ dữ liệu trông rất đơn giản và dễ hiểu. Biểu đồ cho thấy rõ được tỷ lệ phần trăm của số lượng xe sử dụng mỗi loại hộp số, với đường kẻ ngang trên cùng biểu thị cho 100%.

Ta có thể dễ dàng nhận thấy rằng loại hộp số tự động chiếm phần lớn trong tổng số xe, chiếm khoảng 70%, trong khi đó loại hộp số thủ công chiếm khoảng 30%.

Đây là một cách tốt để trực quan hóa phân phối số lượng xe của mỗi loại hộp số trong bộ dữ liệu, giúp người dùng dễ dàng hiểu được tình hình sử dụng hộp số trong các xe hơi khác nhau.

1.2 Biến đổi dữ liệu từ long sang wide

Chọn dataset: Flight Delays. Đây là một bộ dữ liệu trong ngành hàng không, chứa thông tin về các chuyến bay và thời gian trễ của chúng ở Hoa Kỳ trong năm 2019. Bộ dữ liệu này chứa các thông tin về thời gian bay, điểm xuất phát và điểm đến, hãng hàng không, thời gian trễ, số lượng hành khách, trạng thái chuyến bay và nhiều thông tin khác. Bộ dữ liệu này có tính ứng dụng cao cho các nghiên cứu về hiệu quả hoạt động của các hãng hàng không, hiệu suất sân bay, quản lý hệ thống hàng không và hàng ngàn lĩnh vực khác trong ngành hàng không.

Bộ dữ liệu Flight Delays là một ví dụ điển hình cho việc ứng dụng phân tích dữ liệu trong ngành hàng không để giúp các nhà điều hành và quản lý nghiên cứu và cải thiện hiệu suất vận hành.

Dữ liệu Flight Delays nằm trong package R called “nycflights13”, tương ứng với các chuyến bay trong các sân bay ở New York trong năm 2013. Bộ dữ liệu này bao gồm 5 tập tin dữ liệu, trong đó tập tin “flights” chứa thông tin về các chuyến bay, trong đó bao gồm 19 biến. Các biến trong tập tin “flights” bao gồm:

  • year: Năm bay (2013).

  • month: Tháng bay (1-12).

  • day: Ngày bay (1-31).

  • dep_time: Thời gian khởi hành (tính bằng phút, ví dụ 930 = 9:30 AM).

  • sched_dep_time: Thời gian dự kiến khởi hành (tính bằng phút, ví dụ 930 = 9:30 AM).

  • dep_delay: Thời gian chậm trễ khởi hành (tính bằng phút).

  • arr_time: Thời gian đến (tính bằng phút, ví dụ 1530 = 3:30 PM).

  • sched_arr_time: Thời gian dự kiến đến (tính bằng phút, ví dụ 1530 = 3:30 PM).

  • arr_delay: Thời gian chậm trễ đến (tính bằng phút).

  • carrier: Mã hãng hàng không.

  • flight: Số hiệu chuyến bay.

  • tailnum: Số đuôi máy bay.

  • origin: Sân bay xuất phát.

  • dest: Sân bay đích.

  • air_time: Thời gian bay (tính bằng phút).

  • distance: Khoảng cách bay (tính bằng dặm).

  • hour: Giờ khởi hành (local time).

  • minute: Phút khởi hành (local time).

  • time_hour: Formatted date/time (local time).

library(nycflights13)
## Warning: package 'nycflights13' was built under R version 4.3.1
data(flights)
f <- flights
summary(f)
##       year          month             day           dep_time    sched_dep_time
##  Min.   :2013   Min.   : 1.000   Min.   : 1.00   Min.   :   1   Min.   : 106  
##  1st Qu.:2013   1st Qu.: 4.000   1st Qu.: 8.00   1st Qu.: 907   1st Qu.: 906  
##  Median :2013   Median : 7.000   Median :16.00   Median :1401   Median :1359  
##  Mean   :2013   Mean   : 6.549   Mean   :15.71   Mean   :1349   Mean   :1344  
##  3rd Qu.:2013   3rd Qu.:10.000   3rd Qu.:23.00   3rd Qu.:1744   3rd Qu.:1729  
##  Max.   :2013   Max.   :12.000   Max.   :31.00   Max.   :2400   Max.   :2359  
##                                                  NA's   :8255                 
##    dep_delay          arr_time    sched_arr_time   arr_delay       
##  Min.   : -43.00   Min.   :   1   Min.   :   1   Min.   : -86.000  
##  1st Qu.:  -5.00   1st Qu.:1104   1st Qu.:1124   1st Qu.: -17.000  
##  Median :  -2.00   Median :1535   Median :1556   Median :  -5.000  
##  Mean   :  12.64   Mean   :1502   Mean   :1536   Mean   :   6.895  
##  3rd Qu.:  11.00   3rd Qu.:1940   3rd Qu.:1945   3rd Qu.:  14.000  
##  Max.   :1301.00   Max.   :2400   Max.   :2359   Max.   :1272.000  
##  NA's   :8255      NA's   :8713                  NA's   :9430      
##    carrier              flight       tailnum             origin         
##  Length:336776      Min.   :   1   Length:336776      Length:336776     
##  Class :character   1st Qu.: 553   Class :character   Class :character  
##  Mode  :character   Median :1496   Mode  :character   Mode  :character  
##                     Mean   :1972                                        
##                     3rd Qu.:3465                                        
##                     Max.   :8500                                        
##                                                                         
##      dest              air_time        distance         hour      
##  Length:336776      Min.   : 20.0   Min.   :  17   Min.   : 1.00  
##  Class :character   1st Qu.: 82.0   1st Qu.: 502   1st Qu.: 9.00  
##  Mode  :character   Median :129.0   Median : 872   Median :13.00  
##                     Mean   :150.7   Mean   :1040   Mean   :13.18  
##                     3rd Qu.:192.0   3rd Qu.:1389   3rd Qu.:17.00  
##                     Max.   :695.0   Max.   :4983   Max.   :23.00  
##                     NA's   :9430                                  
##      minute        time_hour                     
##  Min.   : 0.00   Min.   :2013-01-01 05:00:00.00  
##  1st Qu.: 8.00   1st Qu.:2013-04-04 13:00:00.00  
##  Median :29.00   Median :2013-07-03 10:00:00.00  
##  Mean   :26.23   Mean   :2013-07-03 05:22:54.64  
##  3rd Qu.:44.00   3rd Qu.:2013-10-01 07:00:00.00  
##  Max.   :59.00   Max.   :2013-12-31 23:00:00.00  
## 
names(f) <- c("yr", "mt", "dy", "dt", "sdt", "dd", "at", "sat", "ad", "ca", "fl","ta","or","de","ai","ds","hr","mi","th")
plot(f$ai, f$ad)

Đồ thị phân tán (scatter plot) giữa các biến “air_time” và “arr_delay” có thể giúp chúng ta hiểu được mối tương quan giữa thời gian bay (air_time) và thời gian chậm trễ đến (arr_delay) của các chuyến bay. Đồ thị phân tán cho thấy một mối tương quan âm giữa thời gian bay (air_time) và thời gian chậm trễ đến (arr_delay), có nghĩa là, khi thời gian bay tăng, thời gian chậm trễ đến giảm. Tuy nhiên, mối tương quan này không mạnh lắm và không đồng đều trên toàn bộ phạm vi của dữ liệu. Việc xác định mức độ ảnh hưởng của thời gian bay đến thời gian chậm trễ đến có thể cần phải sử dụng các phương pháp khác như phân tích hồi quy tuyến tính để xác định rõ hơn.

library(ggplot2)
library(tidyr)

f_wide <- f %>% pivot_wider(names_from = mt, values_from = c(dd, at))

head(f_wide)
## # A tibble: 6 × 40
##      yr    dy    dt   sdt   sat    ad ca       fl ta     or    de       ai    ds
##   <int> <int> <int> <int> <int> <dbl> <chr> <int> <chr>  <chr> <chr> <dbl> <dbl>
## 1  2013     1   517   515   819    11 UA     1545 N14228 EWR   IAH     227  1400
## 2  2013     1   533   529   830    20 UA     1714 N24211 LGA   IAH     227  1416
## 3  2013     1   542   540   850    33 AA     1141 N619AA JFK   MIA     160  1089
## 4  2013     1   544   545  1022   -18 B6      725 N804JB JFK   BQN     183  1576
## 5  2013     1   554   600   837   -25 DL      461 N668DN LGA   ATL     116   762
## 6  2013     1   554   558   728    12 UA     1696 N39463 EWR   ORD     150   719
## # ℹ 27 more variables: hr <dbl>, mi <dbl>, th <dttm>, dd_1 <dbl>, dd_10 <dbl>,
## #   dd_11 <dbl>, dd_12 <dbl>, dd_2 <dbl>, dd_3 <dbl>, dd_4 <dbl>, dd_5 <dbl>,
## #   dd_6 <dbl>, dd_7 <dbl>, dd_8 <dbl>, dd_9 <dbl>, at_1 <int>, at_10 <int>,
## #   at_11 <int>, at_12 <int>, at_2 <int>, at_3 <int>, at_4 <int>, at_5 <int>,
## #   at_6 <int>, at_7 <int>, at_8 <int>, at_9 <int>

Trong câu lệnh trên, sử dụng thư viện ggplot2 để nhập bộ dữ liệu ‘f’ và thư viện ‘tidyr’ để sử dụng hàm pivot_wider() để chuyển đổi bộ dữ liệu từ dạng long sang dạng wide.

Thay vì giữ bộ dữ liệu ‘f’ theo định dạng gốc, ta đã tạo ra một bản sao của bộ dữ liệu với tên “f_wide”. Biến “names_from” trong câu lệnh pivot_wider để biết tên của các cột cần được chuyển đổi từ dạng chéo sang dạng rộng, trong trường hợp này là tháng bay **mmt* . Biến “values_from” để biết tên của các cột ở dạng long mà chúng ta muốn đưa vào các cột tương ứng trong bảng dạng wide.

2 BÀI TẬP VỀ NHÀ TUẦN 2

Nguyễn Thị Ngọc Hà_2121012474 Cơ sở dữ liệu attititude

data(attitude)
# Trong bài tập này nghiên cứu bộ dữ liệu attitude
m <- attitude
# tạo m có nội dung sao chép bộ dữ liệu 
rat71 <- attitude[attitude$rating=="71",]
# tạo ra 1 biến mới là rat71 mang giá trị của bộ dữ liệu attitude với biến rating = 71 
not71 <- attitude[!attitude$rating=="71",]
# thêm dấu chấm than vào hàm, ta được biến not71 mang giá trị của bộ dữ liệu attitude với biến rating không mang giá trị 71 
summary(attitude$rating)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   40.00   58.75   65.50   64.63   71.75   85.00
# tóm tắt những giá trị như phương sai, giá trị trung bình, giá trị lớn nhất, giá trị nhỏ nhất, độ lệch chuẩn 
attitude$advance<- cut(attitude$rating,breaks=c(40.00,56.67,65.5,85.00), lables=c('kém','bình thường','tốt'))
# chia khoảng biến rating thành ba khoảng là kém, bình thường, tốt dựa trên số liệu của bộ dữ liệu đã cho 
table(attitude$advance)
## 
##   (40,56.7] (56.7,65.5]   (65.5,85] 
##           6           8          15
# lập bảng tần số 
k <- table(attitude$advance)
# gán bảng vào biến k 
prop.table(k)
## 
##   (40,56.7] (56.7,65.5]   (65.5,85] 
##   0.2068966   0.2758621   0.5172414
# lập bảng tỷ lệ của từng khoảng trên tổng số quan sát 
hist(k)

# vẽ biểu đồ histogram 
mean(attitude$rating)
## [1] 64.63333
# Tính giá trị trung bình của biến rating 
sd(attitude$rating)
## [1] 12.17256
# Tính độ lệch chuẩn của biến rating 
var(attitude$rating)
## [1] 148.1713
# Tính phương sai của biến rating 
quantile(attitude$rating,,4)
##    0%   25%   50%   75%  100% 
## 40.00 58.75 65.50 71.75 85.00
# chia dữ liệu biến rating thành 4 phần 
aggregate(attitude$rating,list(attitude$advance),FUN='mean')
##       Group.1        x
## 1   (40,56.7] 47.83333
## 2 (56.7,65.5] 62.87500
## 3   (65.5,85] 73.93333
# Sử dụng hàm trung bình 
attitude_num <- attitude[-5]
# Chúng ta có thể tạo một bảng mới chỉ với các thuộc tính số và xử lýlý
str(attitude_num)
## 'data.frame':    30 obs. of  6 variables:
##  $ rating    : num  43 63 71 61 81 43 58 71 72 67 ...
##  $ complaints: num  51 64 70 63 78 55 67 75 82 61 ...
##  $ privileges: num  30 51 68 45 56 49 42 50 72 45 ...
##  $ learning  : num  39 54 69 47 66 44 56 55 67 47 ...
##  $ critical  : num  92 73 86 84 83 49 68 66 83 80 ...
##  $ advance   : Factor w/ 3 levels "(40,56.7]","(56.7,65.5]",..: 1 2 3 2 3 1 2 3 3 3 ...
# hiển thị cấu trúc dữ liệu 
library(tidyverse)
# liệt kê thư viên tidyverse sẵn dùng trong môi trường R 
library(ggplot2)
# liệt kê thư viên ggplot2 sẵn dùng trong môi trường R 
 ha <- attitude
# gán ha cho bộ dữ liệu attitude 
str(ha)
## 'data.frame':    30 obs. of  7 variables:
##  $ rating    : num  43 63 71 61 81 43 58 71 72 67 ...
##  $ complaints: num  51 64 70 63 78 55 67 75 82 61 ...
##  $ privileges: num  30 51 68 45 56 49 42 50 72 45 ...
##  $ learning  : num  39 54 69 47 66 44 56 55 67 47 ...
##  $ raises    : num  61 63 76 54 71 54 66 70 71 62 ...
##  $ critical  : num  92 73 86 84 83 49 68 66 83 80 ...
##  $ advance   : Factor w/ 3 levels "(40,56.7]","(56.7,65.5]",..: 1 2 3 2 3 1 2 3 3 3 ...
# hiển thị cấu trúc dữ liệu 
names(ha) <- c("rat","com","pri","lea","rai","cri","adv")
# thay các tên biến trong ha 

3 BÀI TẬP TUẦN 1

Nguyễn Thị Ngọc Hà_2121012474

Cơ sở dữ liệu attitude: dataset gồm 30 mẫu quan sát và 7 biến. dữ liệu được tổng hợp từ bảng câu hỏi của khoảng 35 nhân viên cho mỗi 30 phòng ban (được chọn ngẫu nhiên). Các con số đưa ra tỷ lệ phần trăm các câu trả lời thuận lợi cho bảy câu hỏi trong mỗi bộ phận. Gồm 7 biến sau:

  • Biến raiting: tỷ lệ đánh giá chung

  • Biến complaints: tỷ lệ khiếu nại nhân viên

  • Biến privileges: tỷ lệ không cho phép đặc quyền

  • Biến learning: tỷ lệ cơ hội để học hỏi

  • Biến raises: tỷ lệ tăng lên dựa trên hiệu suất

  • Biến critical: tỷ lệ phê bình

  • Biến advance: tỷ lệ thăng tiến

4 Thao tác trên dataset

data(attitude)
c <- (attitude)
#gán bộ dữ liệu vào c
str(c)
## 'data.frame':    30 obs. of  7 variables:
##  $ rating    : num  43 63 71 61 81 43 58 71 72 67 ...
##  $ complaints: num  51 64 70 63 78 55 67 75 82 61 ...
##  $ privileges: num  30 51 68 45 56 49 42 50 72 45 ...
##  $ learning  : num  39 54 69 47 66 44 56 55 67 47 ...
##  $ raises    : num  61 63 76 54 71 54 66 70 71 62 ...
##  $ critical  : num  92 73 86 84 83 49 68 66 83 80 ...
##  $ advance   : num  45 47 48 35 47 34 35 41 31 41 ...
#cấu trúc dataset attitude
names(c) <- c('rat','com','pri','lea','rai','cri','adv')
#đặt tên cho 7 biến có trong dataset 
head(c)
##   rat com pri lea rai cri adv
## 1  43  51  30  39  61  92  45
## 2  63  64  51  54  63  73  47
## 3  71  70  68  69  76  86  48
## 4  61  63  45  47  54  84  35
## 5  81  78  56  66  71  83  47
## 6  43  55  49  44  54  49  34
#đọc 6 dòng đầu tiên của dữ liệu 
del <- c$com
# gán bin com của bộ dữ liệu c vào deldel
del50 <- del[del<50]
#lọc ra những số xử lý khiếu nại của nhân viên nhỏ hơn 50 
str(del50)
##  num [1:2] 40 37
# cấu trúc của del50 
del43 <- del[del>43]
#lọc ra những số xử lý khiểu nại lớn hơn 43 
head(del43)
## [1] 51 64 70 63 78 55
# đọc biến del43del43
cut(c$pri,4)
##  [1] (29.9,43.2] (43.2,56.5] (56.5,69.8] (43.2,56.5] (43.2,56.5] (43.2,56.5]
##  [7] (29.9,43.2] (43.2,56.5] (69.8,83.1] (43.2,56.5] (43.2,56.5] (43.2,56.5]
## [13] (56.5,69.8] (69.8,83.1] (43.2,56.5] (43.2,56.5] (56.5,69.8] (56.5,69.8]
## [19] (43.2,56.5] (56.5,69.8] (29.9,43.2] (43.2,56.5] (43.2,56.5] (29.9,43.2]
## [25] (29.9,43.2] (56.5,69.8] (56.5,69.8] (43.2,56.5] (69.8,83.1] (29.9,43.2]
## Levels: (29.9,43.2] (43.2,56.5] (56.5,69.8] (69.8,83.1]
#phân tổ cho biến pri thành 4 tổ 
table(cut(c$pri,4))
## 
## (29.9,43.2] (43.2,56.5] (56.5,69.8] (69.8,83.1] 
##           6          14           7           3
#lập bảng tần số cho 4 tổ đó 
table(cut(c$cri,5),c$com)
##              
##               37 40 51 53 54 55 57 58 60 61 62 63 64 66 67 70 75 77 78 82 83 85
##   (49,57.6]    1  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
##   (57.6,66.2]  0  1  0  0  0  0  0  0  0  0  1  0  0  0  0  0  1  0  0  0  0  0
##   (66.2,74.8]  0  0  0  1  0  0  0  0  1  0  0  0  1  0  1  0  0  0  0  0  0  1
##   (74.8,83.4]  0  0  0  0  1  0  1  1  1  2  0  0  0  1  0  0  1  2  1  2  1  1
##   (83.4,92]    0  0  1  0  0  0  0  0  0  0  0  1  0  0  0  2  0  0  0  0  0  0
##              
##               90
##   (49,57.6]    1
##   (57.6,66.2]  0
##   (66.2,74.8]  0
##   (74.8,83.4]  0
##   (83.4,92]    0
#phân tổ biến cri thành 5 khoảng và lập bảng tần số theo biến com 
max(c$lea)
## [1] 75
# giá trị lớn nhất của biến tỷ lệ cơ hội để học hỏi
min(c$lea)
## [1] 34
# giá trị nhỏ nhất của biến tỷ lệ cơ hội để học hỏi
group <- c(c$lea, g=2)
# chia biến tỷ lệ cơ hội để học hỏi thành 2 nhóm
table(group)
## group
##  2 34 39 42 44 45 47 48 50 54 55 56 57 58 59 62 63 66 67 69 71 72 74 75 
##  1  1  2  1  1  2  2  1  1  2  1  1  1  2  1  1  1  1  1  2  1  2  1  1
#lập bảng