Khoa Khoa Học & Kỹ Thuật Máy Tính Trong thống kê, đường trưng bình động là một phép tính được sử dụng để phân tích các điểm đữ liệu bằng cách tạo ra một loạt các giá trị trung bình của c
Trang 1DAI HOC QUOC GIA THANH PHO HO CHi MINH TRUONG DAI HOC BACH KHOA
KHOA KHOA HOC & KY THUAT MAY TINH
CAU TRUC ROI RAC CHO KHMT (C01007)
Thống kê khảo sát kết quả Covid-19
môn Cầu trúc rời rạc
GVHD: Huỳnh Tường Nguyên
Trang 2Ea ẽ -aau —.=& 3.22 Phân lại Là ng kg kg gà kg ki kg kg xa 1 Ắố.ẽ ằằẰ ằẻ MT
3.2.4 Cách thức xác định cà gà gà kg kg kg kg va Phương sai - Độ lệch chuẩn HQ ng và vi và xxx va 3.317 ĐịnhngHa Q Q Q Quà ng kg kg k kg ki k k k KV 8z ốẮ.ẽ
96 án n0 80 0 ee 3.4.1 Định ngHaA HQ HH g g g kg kg kg k kg x k k k KV ee 905101 3.5.1 sẽ e-á H
SN “ ẮốẮ.ẽ ee Biểu đồ hộp (Box Plot) ee Em) na ẽ da TH 3.6.2 Các thành phần ng gà vn gà kg kg Vy va 1 ee Tần số tích lũy - Biểu đồ tích lũy ee
3717 ĐịnhngHaA HQ ng kg kg k kg ki k k k KV 3.7.2 Thiết lập bảng tần số tích lũy HQ ng xa
Trang 3& Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
+ Khoa Khoa Học & Kỹ Thuật Mấy Tính
3.7.3 Ÿ nghĩ ee 7
3.8 DuOng trung binh déng 2 ee 8 3.8.1 Dinhnghia “ốc HA da 8 3.8.2 Tinh todn gid tri trung binh déng don gian 2 ee 8
3.8.3 VYoughia ee 8
3.9 Hés6 tuong quan LH Q ng ng gà kg kg kg kg kg gàng 9 3.9.1 Hệ số tương quan PGATSOH ee 9 3.9.2 Hồi quy tuyến tính, phương pháp bình phương cực tiểu 9
4 Phân tích dữ liệu 11 LÀN 6n nh ee 11
` SE ga aqaqannHAHAAdda:ẽẼẽ SA 11 4.2.1 Cài đặt các packages (gói) và source file chứa các hầm tính toán cần thiết 11 4.2.2 Đọc dữ liệu từ ñlc vào datalfrarme (khung đữ liệu) ee 11 4.2.3 Kiểm tra cấu trúc của tập đữ liệu mẫu Q Q Q Q Q Q Q v 12
43 Chuẩn hóa đữ liệu Q Q Q Q Q Q g g g g ng gà v.v va 12 4.3.1 Chuẩn hóa kiéu dit ligu cia thuée tinh date (ngay-gid) Q QQ Q s 12 4.3.2 Xử lí các giá trị âm trong rieU cøses VÀ nó đGNRN& Q Q Q Q Q Q kh kg kia 12 4.3.3 Lọc ra những đữ liệu không phải là quốc gia HH ko 13 4.4 Dữ liệu được phân công riêng HQ HQ HH ng kg kg KT xa 15 4.5 Két qua phantich 2.0 ee 13
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Nién khéa 2021-2022 Trang 2/83
Trang 4+ Khoa Khoa Học & Kỹ Thuật Mấy Tính
1 Động cơ nghiên cứu
Bénh Corona do virus gây ra còn gọi là COVTD-19 đã tạo ra những tác động tiêu cực đến nền đời sống của cư dân trên thề giới Các đợt bùng phát của COVIDI9 hay những biến thể virus đã mang đến những thách thức chưa từng có và được dự báo sẽ có tác động đáng kể đến sự phát triển kinh tế
Nhiều thông tin, tin tức về tình hình dịch bệnh cũng như đữ liệu về COVID-19 được phổ biến rộng rải trong đời sống hay trên internet để giúp cho mọi người quan sát, phân tích, nghiên cứu được cập nhật hàng ngày Phân tích & thống kê đữ liệu về COVTD19 giúp cho ta thấy được số ca nhiễm bệnh, tử vong của một quốc gia,
so sánh tình trạng của các quốc gia trong khu vực hay diễn biến địch trên thế giới Từ số liệu được báo cáo mơi chúng ta muốn biết các ca nhiễm bệnh có xu hướng tăng lên hay giảm xuống quy mô các đợt bùng phát ở mỗi quốc gia
Dữ liệu dùng cho bài tập lớn có tham khào từ:
3 Cơ sở lý thuyết
Trong thống kê, đữ liệu mà ta làm việc cùng là vô cùng lớn và nếu chỉ nhìn vào đữ liệu nói chung thì rất khó
để có thể rút ra được ý nghĩa từ những con số đó Vì vậy, người ta thường tính toán một số giá trị để có thể khái quát duoc dit liu Ta sé cing tim hiểu một vài giá trị có ý nghĩa đối với thống kê
3.1 Trung bình cộng (giá trị kì vọng)
—.1.1 Định nghĩa -1.2 Ý nghĩa
Trưng bình cộng (hay giá trị trưng bình, giá trị © Trong phân tích đữ liệu: giúp ta hình dùng được
ki ong) là một khái niệm vô cùng gần gũi đối với khoa điểm trung tâm của tập giá trị
học và đời sống hàng ngày Giả sử ta có một tập gồm
bk giá trị #1,#s, , 8g: D” {1,a, , =„ } Khi đó,
trung bình cộng của Ð là:
Trong phân tích tình hành dịch Covid: gia tri
kì vọng có thể được xem là đại điện cho số lượng
ca nhiễm hoặc tử vong của một quốc gia trong một khoảng thời gian cụ thể Từ đó đánh giá mức độ
Nà, nghiêm trọng, tình hình của dịch Covid, cũng như
é i (1) so sánh khách quan tình hình dịch giữa các quốc
Trang 5& Trường Đại Học Bach Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính
3.2 Tit phan vi
—.2.1 Định nghĩa
Trong thống kê mô tả, #ứ phêâm, o‡ là một loại tập
lượng tử chia số lượng điểm dữ liệu thành bốn phần có
kích thước bằng nhau hoặc nhỏ hơn Dữ liệu phải được
sắp xếp theo thứ tự từ nhỏ nhất đến lớn nhất để tính
toán tứ phân vị
—.2.2_ Phân loại
Có ở tứ phân vị chính, đó là:
e Tứ phân oị thứ nhất (Q1): là số chính giữa giữa
sé nhé nhat (minimun) va sé trung vi (median)
của tập dữ liệu Nó còn được gọi là phần tư thực
nghiệm thấp hơn hoặc thú 25, vì 25% dữ liệu nằm
dưới điểm này
Tt phan vi thi hat (Q2): la gid tri trung uị của
một tập đữ liệu; do đó 50% đữ liệu nằm dưới điểm
nay
Tt phén vi thứ ba (Qs): la gid tri gitta giita gid
tri trung vi (median) va sé lén nhét (maximun)
của tập đữ liệu Nó được gọi là phần tu thực nghiệm,
trên hoặc thứ 75, vi 75% đữ liệu nằm đưới điểm
bị lệch về một phía hay không
e Trong phân tích tình hành dịch Covid: ttt phân vị thứ hai (Q; hay trung vị) có thể được sử dụng dé thay cho gid tri ki oọng thành trung tâm của tập đữ liệu, trong trường hợp SỐ liệu được báo giá trình hình dịch bệnh
Hinh 8.1 Tit phan vi
Có nhiều quy chuẩn, phương thức để tính các tứ phân vị, mỗi phương thức có thể cho ra kết quả rất khác nhau,
e Tính tứ phân vi thứ hai:
— Nếu & lẻ thì: Qa(Ð) = Mfedian(D) = x 5-1
— Nếu È chẵn thì: Qs(D) = Mfedian(D)
e Tính tứ phân vị thứ nhất và thứ ba:
1 Tìm trung vị (tứ phân vị thứ hai Qa}
nhưng chúng đều được công nhận là đúng Một trong những cách thức tính toán tứ phân vị như sau: giả sử có một tập D gồm k giá trị đã đượ sắp xếp: D ” {z1,za,
— Nếu k lẻ thì loại bỏ trung vị ra khoải tập đữ liệu Chia tập đữ liệu còn lại ra hai phần bằng nhau
— Nếu k chan thì chia tập đữ liệu gốc ra hai phần bằng nhau
2 Tứ phân vị thứ nhất @¡ là trung vị của phần đữ liệu có giá trị thấp hơn Tứ phân vị thứ ba Qs là trung
vị của phần dữ liệu có giá trị cao hơn Sử dụng kí hiệu toán học, ta có thể viết:
Qi(D)=Mecdian({x|m < Median(D)}) (2} Q3(D)=Median({x|2 > Median({D)}) (3)
Trang 6
Khoa Khoa Học & Kỹ Thuật Máy Tính
Ví dụ 1: Cho một tập đã được sắp xếp 6, 7, 15, 36,
39, 40, 41, 42, 43, 47, 49; có k” 11
e Tinh tit phan vi thit 2: Q2 = 26 = 40
e Chia tập đữ liệu ra hai phần bằng nhau sau khi đã
Giá trị trung bình cộng cho ta biết được các giá trị
trong tập đữ liệu phân bố quanh một điểm trung tâm
nào, nhưng phương sai và độ lệch chuẩn, cho ta biết
được các giá trị đó phân bố như thế nào quanh điểm
trung tâm
Phương sơ¿ được định nghĩa là trung bình của bình
phương khoảng cách của mỗi điểm đữ liệu tới điểm trung
e Trong tính toán thông kê: phương sai càng lớn
thì các giá trị có xu hướng phân bố càng xa quanh
điểm kì vọng, giá trị kì vọng càng rnô tả kém chính
xác về điểm trung tâm Ngược lai, phương sai càng
nhỏ thì các điểm dữ liệu càng phân bố gần điểm
kì vọng, giá trị kì vọng càng nô tả chính xác điểm
trung tâm của tập đữ liệu
Trong phân tích tình hành dịch bệnh: khi
phương sai lớn, nên dùng trung vị (Qs) để làm
điểm trung tâm, từ đó đánh giá chính xác hơn tình
Hinh 8.1 Tập dữ liệu có phương sai nhỏ, các các điểm
dữ liệu phân bô gần gid tri ki vong (mean) nén ding gid
Trang 7
& Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
+ Khoa Khoa Học & Kỹ Thuật Mấy Tính
Với IQR 1a khoảng tứ phân vi Outlier là những giá
trị nằm ngoài đoạn |Q+ — 1.5 * QR; Q3 + 1.5 + IQR
Outlicr là những điểm đữ liệu (data point) có sự khác
biệt đáng kế so với những dữ liệu khác Outliers có thể
là kết quả của sự thay đổi vị trí (trung bình) hoặc quy
mô (sự thay đổi) của quá trình mà ta quan tâm Outiers
cũng có thể là bằng chứng về một quần thể mẫu có phân
bố không bình thường
3.6 Biểu đồ hộp (Box Plot)
—.6.1 Định nghĩa
-4.2 ¥ nghia Khoang ttt phan vi chinh 1A khoang chtta 50% cde gid trị với trung vị của tập đữ liệu là giá trị trung tâm
-5.2 Ý nghĩa Đối với thông kê đữ liệu: nhiều tham số thống
kê như giá trị trung bình, tương quan và mọi thống
kê dựa trên những giá trị này đều nhạy cảm với các giá trị ngoại lệ Vì vậy nó là thước đo độ tin cậy của kết quả thống kê
Đối với phân tích tình hành Cooid: Outlicrs cũng là thước đo độ tin cậy của giá trị kì vọng khi dùng nó để đánh giá tình hình dịch bệnh của một khu vực nhất định
Trong thống kê mô tả, biểu đồ hộp hay biểu đồ hành hộp (box plot) là một phương pháp để thể hiện bằng
đồ thị các nhóm đữ liệu số tính theo vùng, độ lan truyền và độ lệch thông qua các tứ phân vị của chúng Ngoài phần ô trên biểu đồ, có thể có các đường kéo dài từ ö cho biết sự thay đổi bên ngoài tứ phân vị thứ nhất và thứ
ba, do đó boxplot còn được gọi là box-and-whiskcr
—.6.2_ Các thành phần
Tùy thuộc theo yêu cầu và đữ liệu mà các thành phần
và hình đạng của biểu đồ hộp có thể khác nhau Nhung
nhìn chung đều có:
e Tứ phân vị thứ nhất (@1}
e Tit phan vi thit ba (Qs)
e Tit phan vị tứ hai (Q2) - trung vị
e Khoảng tứ phân vị (IQR)
e Outlicr: Có thể được loại bỏ nếu thấy cần thiết
e Giá trị lớn nhất (Max) và giá trị nhỏ nhất (Min)
Trang 8Khoa Khoa Học & Kỹ Thuật Máy Tính
-6- Ý nghĩa
- Cấu tạo đơn giản, cho phép các nhà thống kê thực
hiện kiểm tra đồ họa nhanh chóng trên một hoặc nhiều
trực tiếp các đặc điểm của chúng
- Giá trị kì vọng càng gần trung vị (Qa} thì nó càng
đại điện tốt hơn cho trung tâm của tập đữ liệu, phương
sai của tập đữ liệu càng nhỏ và ngược lại
- Trung vị (Qs} càng lệch về phía tập giá trị nào thì
tập giá trị đó có số lần xuất hiện càng lớn trong tập đữ
Nó thể hiện số lượng hay tỉ lệ những quan sát nhỏ hơn hoặc bằng một giá trị cụ thể
—.7.2_ Thiết lap bang tan số tích lũy
- Bước 1: Tính toán và thiết lập bảng tần số thông thường;
- Bước 2: Phân hoạch độ dài khoảng giá trị tần số thành các khoảng bằng nhau sao cho phù hợp;
- Bước Ø: Tìm số lượng tần số cho mỗi khoảng;
- Bước 4: Tính toán tần số tích lũy bần cách cộng đồn các số lượng các tần số tần số
- Bước 5: Từ bảng tần số có thể vẽ biểu đồ tần số tích lũy
Trang 9Khoa Khoa Học & Kỹ Thuật Máy Tính
Trong thống kê, đường trưng bình động là một
phép tính được sử dụng để phân tích các điểm đữ liệu
bằng cách tạo ra một loạt các giá trị trung bình của các
tập con khác nhau của tập đữ liệu đầy đủ
—.8.2_ Tính toán giá trị trung bình động đơn giản
Giá trị trung bình động đơn giản (SMD) là giá trị
trung bình không trọng số của các k đữ liệu trước đó
—_— bình MA càng cao và càng phụ thuộc vào đữ liệu, càng
khó làm mịn đường biểu đồ và khó dự đoán chiều biến (4) thiên
SMD, =
—8- Ý nghia
e Làm "mnịn" biểu đồ đường, làm phẳng các biến động ngắn hạn,lọc nhiễu trong số liệu;
e Xác định xu hướng của dữ liệu trong thời gian dài hạn;
e Dữ đoán một số lượng nhỏ số liệu bị mất hoặc không được báo cáo thường xuyên
e Trong việc phân tích tình hình dịch Covid: Đưa đữ liệu về số ca nhiễm/ tử vong về gần với giá trị chính xác
do đại sai sót trong nhập liệu hoặc không được báo cáo thường xuyên, dự đoán tình hình phát triển của dịch bệnh trong thời gian sắp tới
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 8/83
Trang 10& Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
+ Khoa Khoa Học & Kỹ Thuật Mấy Tính
3.9 Hệ số tương quan
—.9.1 Hệ số tương quan Pearson
Hệ số tương quan Pearsơn (Poarson corrclation cocfficient, kí hiệu r) đo lường mức độ tương quan tuyến tính giữa hai biến Về nguyên tắc, tương quan Pearson sẽ tìm ra một đường thang phù hợp nhất với mối quan hệ tuyến tính của 2 biến
Xét một tập các điểm giá trị P chứa ø điểm (z¿¡,;) hệ số tương quan Pearson được tính bằng:
3 ứn — #)§M — ð)
2 (m —2)23 (ụi — 0)?
Z = ` mm lầ ` TL ` 7 ˆ £ TL ` ` ` ~ Aa a ” ˆ £
Trong đó, # và ÿ lân lượt là giá trị trung bình của tập các giá trị #¿ và ;, ơx và ơ„ là độ lệch chuẩn của tập các ) ‡ s Beg vt x 1 2 1 G
gid trim; va y;
Hệ số tương quan Pcarson (z) sẽ nhận giá trị từ +1
đến -1, cho biết mức độ tương quan giữa hai biến: pat -1<p <0
e Với r = 0, hai biến có rát ít hoặc không có sự tương
quan; r =1 hoặc r = -1, hai biến có sự tương quan — `
chặt chế
e Với -1 < r < 0, hai biến có mối quan hệ tương
quan nghịch, với 0 < r < 1 Hai biến có mỗi quan
hệ tương quan thudn:
e Với r càng tiễn gần đến 1 hoặc -l, thì hai biến có
mối quan hệ tương quan càng chặt chẽ Ngược lại,
hai biến có ít mối quan hệ tương quan nếu càng Hinh 3.8 Gía trị của hé 86 pearson vé su tương quan tiễn gần về 0 giữa hai biến số
—.9.2_ Hồi quy tuyến tính, phương pháp bình phương cực tiểu
Hồi quụ tuyến tính là một bài toán được phát biểu như sau:
Bài toán: Cho một tập các điểm dữ liệu P gồm các phần tử có đạng (z;,1⁄;) Tìm đường thăng đi qua (hoặc gần
đi qua) tất cả các điểm này
Có nhiều phương pháp để hồi quy tuyến tính: dùng phân tích thành phần chính (PCA), phương pháp bình phương cực tiểu Ö tục này chúng ta sẽ tìm hiểu phương pháp đơn giản nhất là bình phương cực tiểu
Giả sử ta có tập đữ liệu P với n điểm dữ liện và một mô hình tuyén tinh F(x) = wo +} tra
e Tại mỗi điểm z;¿ ta ký hiệu Ø¿ = F(a)
Trang 11& Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
+ Khoa Khoa Học & Kỹ Thuật Mấy Tính
Ta nhận thấy nếu ¿ càng gần ÿ¿ hay đường thẳng y ” # càng đi qua chính xác các điểm thì Z((F}) càng nhỏ LIF) =0 == y =F đi qua tất cả các điểm đữ liệu
Điều này không phải lúc nào cũng khả thi, ta sé tim m6 hinh F ma ham £ dat gid trị cực tiểu Ta sử dụng Phương phap bình phương cực tiều
1 an Yn
Xét tich v6 huéng chinh t&c, tte A (u,v) = uly vdi u va v JA cdc vector trong khong gian R”
Như vay Ile | =v? v,
Ta có, | Xw — 1Ị = » + wry — ys)? = 6(7)
i=0 Như vậy, dé £(F) dat cute tiéu, || Xw — y|| phai dat ce tiéu, hay Xw — y 1 Col(X)
e Ta cần tìm + thỏa Immãn véi moi vector v,
Xw-ylXv — (Xo,Xto— )=0 — 0ỀXT(Xuo—p)=0
Vì các vector cột của X độc lập tuyến tính, chứng minh được X”X khả nghịch
Vì vậy, ta có công thức (5) như sau:
Trang 12& Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
+ Khoa Khoa Học & Kỹ Thuật Mấy Tính
1 iso_ code: Định đanh đất nước
2 continent: Tén chau luc
3 location: Tén quéc gia
4, date: Ngay quan sat v6i dinh dang Month-Day-Ycar
5 meu_ cases: Số trường hợp COVTD-19 mới được xác nhận
6 new_ deaths: Số tử vong mới đo COVTD-19
4.2 Tiền xử lí
4.2.1 Cai d&t cdc packages (gói) và source ƒile chứa các hàm tính toán cần thiết
` "1 “ ⁄ à SK
Kiém tra và cài đặt các packages can thict:
Hàm p_ load() kiểm tra và chỉ cài đặt các gói (packagos)
> pacman::p_load(dplyr, readxl, tidyverse, chưa được cài đặt Một công cụ hiệu quả hơn SO VỚI VIỆC cowplot, randomcoloR, plyr, scales ,utf8, cài đặt từng gói bằng install.packages(} Cac packages matlib, here) được sử dụng sẽ được liệt kê chỉ tiết trong phụ lục
¡ install packages ("pacman")
Cai dat source file:
Trong dé: function.R 1a source file, noi chứa các hàm
1 source (here: :here("function.R")) l hỗ trợ mà ta sẽ xây dựng để phục vụ cho việc tính toán
Source file này cần được lưu trong cùng thư mục chứa file thie thi
4.2.2 Doc dif liéu tir file vao dataframe (khung dif liéu)
Dữ liệu được lưu ở filc owid-covid-data.csv tại trong thứ mục đính kèm /L03-NHOM2-9562/Data Tiến hành lưu dữ liệu từ ñle owid-covid-data.esv vào khung đữ liệu COVID.DATA và hiển thị trên màn hình một số dòng đầu tiên của đữ liệu trong R như sau:
1 COVID.DATA <- read.csv ("owid-covid-data.csv")
2 head (COVID.DATA)
2 eae đun TA TÔ
Kết quả hiển trị trên màn hình như sau:
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 11/83
Trang 13Khoa Khoa Học & Kỹ Thuật Máy Tính
iso_code continent location date new_cases new_deaths
1 AFG Asia Afghanistan 2/24/2020 5 NA
2 AFG Asia Afghanistan 2/25/2020 0 NA
3 AFG Asia Afghanistan 2/26/2020 0 NA
4 AFG Asia Afghanistan 2/27/2020 0 NA
5 AFG Asia Afghanistan 2/28/2020 0 NA
6 AFG Asia Afghanistan 2/29/2020 0 NA
"AFG" “AFG" “AFG" "AFG"
"Asia" "Asia" "Asia" "Asia"
"Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan"
"2/24/2020" "2/25/2020" "2/26/2020" "2/27/2020"
5000000000
NA NA NA NA NA NA NA NA NANA
4.3 Chuẩn hóa dữ liệu
4.—.1 Chuẩn hóa kiểu dữ liệu của thuộc tính đa‡e (ngày-giờ)
Để ý thuộc tính date của COVID.DATA có kiểu chuỗi kí tự “chr> Để tiện cho việc tính toán và xử lí số liệu sau này, cần chuyển kiểu đữ liệu sang định đạng ngày tháng “date>, lệnh R sau thực hiện nhiệm vụ trên:
4.2 Xi li cdc gia tri 4m trong new_ cases va new_ deaths
Trong tập dữ liệu gốc, ở thuộc tính new _ cases và new _ deaths có một số giá trị âm, chẳng hạn như: iso_code continent location date new_cases new_deaths
26 AFG Asia Afghanistan 2/20/2020 -2 NA
680 AFG Asia Afghanistan 2/03/2022 -6 NA
COVID.DATA$new_cases <- abs (COVID.DATA$new_cases)
COVID.DATA$new_deaths <- abs (COVID.DATA$new_deaths)
Trang 14
& Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
+ Khoa Khoa Học & Kỹ Thuật Mấy Tính
4.—— Lọc ra những dữ liệu không phải là quốc gia
NOT.COUNTRY <- unique(filter(COVID.DATA, continent == '')$iso_code)
CñVID.DATA <- COVID.DATA[!(COVID.DATA$iso_code %in% NOT.COUNTRY), ]
e Dòng 2: lọc các quan sát rnà iso_ code có trong NOT.COUNTTRY ra khỏi khung dữ liệu
Sau khi lọc đữ liệu, ta thu được fở iso_ code không Dùng str(), thấy khung đữ liệu chỉ còn giữ lại 153316 phải là quốc gia nam trong NOT.COUNTRY như quan sát thuộc về các quốc gia không nằm trong 13 tên Sâu: riêng kia:
“OWID_AFR" “QWID_ASI" “OWID_EUR" “OWID_EUN"
“QWID HIC" “QWID INT" “QWID LIC" “oWID LMC" *data.frame’: 153316 obs of 6 variables:
“OWID_NAM" “QWID_OCE" “OWID_SAM" “OWID_UMC"
1) Nhóm câu hỏi liên quan đến tổng quát đữ liệu:
Dùng tập dữ liệu để trả lời các câu hỏi và trình bày theo đính dang
Các hàm sau được xây dựng để hỗ trợ xử lí dữ liệu:
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 13/83
Trang 15Khoa Khoa Học & Kỹ Thuật Máy Tính
5 data <- đata %>⁄ group_by (.datal[attrll]) %>% dplyr::summarise (bservations = n())}
6 return (data.frame (data)
Trong đó: Khung đữ liệu trả về nếu attr2 được nhập:
— Tham số đầu 0uào: attrl attr?
Obscrvations gia tri attr1.1 | gid tri attr2.1 SỐ lượng 1
* attrl va attr2: chuỗi kí tự là tên thuộc tính giá trị attrl.2 | giá trị attr2.2 | số lượng 2 của khung dit liệu attr2 la thuộc tính tùy giá trị attrl.3 | giá trị attr2.3 số lượng 3 chọn, có the dé trong néu chi muon gép dit
liệu theo một thuộc tính Khung đữ liệu trả về nếu attr2 không được nhập,
Dữ liệu trả oễ : một khung đữ liệu liệt kê các chỉ thao tác trên thuộc tính attrl:
giá trị của các thuộc tính và số lần xuất hiện (số
quan sát) của giá trị đó trong cột Obscrvations
— Đồng 1, 2, 3: Nêu attr2 được nhập vào, gộp
đữ liệu theo cả attr1 và attr2 bằng group_ by(),
đếm số lần xuất hiện theo thuộc tính đã gộp
bằng n() trong sumiarise()
Đồng 4, ð: Nếu attr2 không được nhập vào,
chỉ gộp đữ liệu và đếm số lần xuất hiện theo
e fnd.obs(data, func): Liệt kê giá trị có số lượng quan sát lớn nhất hoặc nhỏ nhất
1 find.obs <- function(data, func) {
2 return (data [data$O0bservations == func (data$Observations), ]) }
Trong đó:
— Tham số đầu 0uào:
« data: khung đữ liệu đã được xử lí từ hàm ñnd.obs (data, func) hoặc có cầu trúc tương tự
* fuine nhận hai giá trị min hoặc max Hàm trả về một khung đữ liệu liệt kê các giá trị của các thuộc tính có số lần xuất hiện (số quan sát) lớn nhất hoặc nhỏ nhấ và giá trị đó
— Dữ liệu trả oề : một khung đữ liệu chứa các giá trị mà có số quan sát lớn nhất hoặc nhỏ nhất 1) Tập mẫu thu thập đữ liệu uào các trắm mào?
Ding unique() liệt kê các năm xuất hiện trong thuộc tính date, lưu vào ycar
| 1 year <- unique (format (COVID.DATA$date, "%Y") )
Kết quả hiển thị trên màn hình: Vay tap méu thu thập đữ liệu vào 3 năm:
1 LOC.ISO <- list.obs(COVID.DATA, ‘iso_code', 'location') [e('iso_code', ‘location')]
2 mames (LOC.ISO) <- c('iso_code', 'Country')
3 print (rbind (LOC.ISO %>% head(10), c('Count:', nrow(LOC.ISO))), row.names = FALSE)
Trang 16Khoa Khoa Học & Kỹ Thuật Máy Tính
Trong đó:
- Đồng 1: Liệt kê các đất nước và định đanh bằng
hầm lisi.obs() và lưu đữ liệu đầy đủ vào LOC.ISO
- Đồng 2, 3: In theo định dang 10 dat nước đầu
tiên kèm định danh
Vậy có 225 dat nước được thu thập đữ liệu
2 oak Tờ sàn Tạ Kết quả hiển thị trên màn hình:
iso_code Country ABW Aruba AFG Afghanistan AGO Angola AIA Anguilla ALB Albania AND Andorra ARE United Arab Emirates ARG Argentina ARM Armenia ATG Antigua and Barbuda Count : 225
Viết code tương tự như ¿.2, và lưu đữ liệu vào CONTINENT trong R như sau:
CONTINENT <- list.obs
names (CONTINENT) "continent ")
ps Số lượng dữ liệu thu thập được trong từng châu lục uà t
Vậy có 225 quốc gia được thu thập số liệu thuộc một trong số 6 châu lục
ong 80
CONTINENT.OBS <- list.obs (COVID.DATA,
print (rbind (CONTINENT.OBS, c('Count:',
- Dong 1: Liệt kê các châu lục kèm số lượng đữ
liệu thu thâp (số quan sát) bằng hàm list.obs() và
lưu đữ liệu đầy đủ vào CONTINENT.OBS
- Đồng 2: In theo định dạng cho trước
Vậy có tổng số 15——16 quán sát từ tất cả các châu
lục
continent Observations Africa 38647 Asia 35528 Europe 36375 North America 24438 Oceania 8993 South America 9335 Count: 153316
5) Số lượng đữ liệu thu thập được trong từng từng đất nước (hiển thị 10 đất nước cuối cùng) vd tổng số Viết các đoạn code tương tự như ¡.4 và lưu dữ liệu đầy đủ vào COUNTTRY.OBS
1 COUNTRY.OBS <- list.obs (COVID.DATA, 'iso_code')
2 print (rbind (COUNTRY.OBS %>% tail(10),
Trang 17Khoa Khoa Học & Kỹ Thuật Máy Tính
| 1 print (MIN.CONTINENT.OBS <-find.obs(list.obs(COVID.DATA,'continent'),min), row.names=FALSE) Ì
Trong đó: Kết quả hiển thị trên màn hình như sau:
e list.obs (COVID.DATA, ’contincnt’) tra vé
khung đữ liệu chứa số lượng đữ liệu thu
continent Observations
Oceania 8993 thập được theo châu lục, tương tự như
CONTINENT.OBS Vậy châu lục có lượng đữ liệu thu thập nhỏ nhất là
e find.obs ( , mnin) trả về khung đữ liệu chứa Chân Đại Dương-Oceania, với tổng số quan sát châu lục và lượng đữ liệu thu thập nhỏ nhất là 899-
Luu 9: Tit i.7 dén ¡.14, các đoạn code được tiết tương tự như ¡4 hoặc 1.6, chí thay đổi một số tham số trong hai ham list.obs() va find.obs()
7) Cho biết các châu lục mào có lượng đữ liệu thu thập lớn nhất uà giá trị lớn nhất đá?
Viết đoạn code tương tự như ¡.6 nhưng đùng fñnd.obs( , max), lưu đữ liệu ở MAX.CONTTNENT.OBS:
| 1 print (MAX.CONTINENT.OBS <-find.obs(list.obs(COVID.DATA,'continent'),max), row.names=FALSE) ]
Kết quả hiển thị trên màn hình như sau: Vậy châu lục có lượng đữ liệu thu thập lớn nhất là
| Châu Phi-Africa, với tổng số quan sát là —8647
| 1 print (MIN.COUNTRY.OBS <- find.obs(list.obs(COVID.DATA,'location'),min), row.names=FALSE)
Kết quả hiển thị trên màn hình như sau: Vậy quốc gia có lượng đữ liệu thu thập nhỏ nhất là
| Pitcairn, với tổng số quan sát là 85
Trang 18>@ Khoa Khoa Học & Kỹ Thuật Máy Tinh
Kết quả hiển thị trên màn hình như sau: Vậy các quốc gia có lượng dữ liệu thu thập lớn nhất location Observations ha và Mexico, với tổng sô quan sát là Argentina 781
Mexico 781
10) Cho biết các date nào có lượng đữ liệu thu thập nhỏ nhất oà giá trị nhỏ nhất đá?
| 1 print (MIN.DATE.OBS <- find.obs (list.obs (COVID.DATA,'date'), min), row.names = FALSE)
Kết quả hiển thị trên màn hình như sau: Vậy các ngày có lượng đữ liệu thu thập nhỏ nhất là date Observations tit 1/1/2020 dén 1/—/2020, với tổng số bản ghi là
12) Cho biết số lượng đữ liệu thu thập được theo dake oà châu lục
Các lệnh R sau hiển thị số lượng dữ liệu thu thập được theo ngày và châu lục (đữ liệu đầy đủ được lưu ở DATE.CONTINENT.OBS)
1 DATE.CONTINENT.OBS <- list.obs (COVID.DATA, ‘date', 'continent')
2 print (DATE.CONTINENT.OBS %>% tail(5), row.names = FALSE)
Kết quả hiển thị trên màn hình như sau: date continent Observations Dữ liệu sẽ được tu tiên sắp xếp theo ngày trước và chau luc sau Két qua hiển thị trên màn hình chỉ
2022-02-19 Asia 48 là 5 đồng (quan sát) cuối cùng của bang kết quả
13) Cho biết số lượng đữ liệu thu thập được là nhỏ nhat theo date vd chau luc
Các lệnh R sau hiển thị số lượng dữ liệu thu thập được là nhỏ nhất theo ngày và châu lục (dữ liệu đầy đủ được lưu ở MIN.DATE.CONTINENT.OBS)
1 MIN.DATE.CONTINENT.OBS <- find.obs (list.obs (COVID.DATA, ‘date', ‘continent'), min)
2 print (MIN.DATE.CONTINENT.OBS %>% head(5), row.mames = FALSE)
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Nién khéa 2021-2022 Trang 17/83
Trang 19Khoa Khoa Học & Kỹ Thuật Máy Tính
2 „1 y2 Tờ uy Tà
Kết quả hiển thị trên man hình như sau:
Dữ liệu sẽ được ưu tiên sắp xếp theo ngày trước
và châu lục sau Kết quả hiển thi trén man hình đate continent Observations hỉ là 5 đè ( st) lầu tiên của bảng kết quả
` chỉ là 5 đồng (quan sát) đầu tiên của bảng kết quả 2020-01-01 North America 1 2 » qs
2020-01-02 North America 1 đủ có 2-2 quan sat)
2020-01-02 South America 1 Vay số lượng đữ liệu thu thập được là nhỏ nhất theo 2020-01-03 North America 1 ngày và châu lục là 1 quan sát
14) Cho biết số lượng đữ liệu thu thập được là lớn nhất theo date à châu lục
Các lệnh R sau hiển thị số lượng đữ liệu thu thập được là lớn nhất theo ngày và châu lục (dữ liệu đầy đủ được lưu ở MAX.DATE.CONTINENT.OBS)
1 MAX.DATE.CONTINENT.OBS <- find obs
2 print (MAX.DATE.CONTINENT.OBS %>% head(5),
date continent Observations
Dữ liệu sẽ được ưu tiên sắp xếp theo ngày trước
và châu lục sau Kết quả hiển thi trén man hình chỉ là 5 đồng (quan sát) đầu tiên của bảng kết quả MAX.DATE.CONTINENT.OBS (bang kết quả day
— Tham số đầu ào:
* k: là chuỗi kí tự đate cho trước
+ t; là chuỗi kí tự chứa châu lục (continent) cho trước
— Dữ liệu trả oễề: số lượng dữ liệu thu thập được (số quan sát) theo đate và continent cho trước
— Đồng 2: dùng filter (): lọc ra các quan sát thỏa điều kiện cho trước; nrow () cho biết số đồng của 1nột khung đữ liệu
Kết quả với một số bộ đữ liệu như sau:
Trang 20Khoa Khoa Học & Kỹ Thuật Máy Tính
— group_by(Obscrvations) va summarisc() gop đữ liệu theo Observations và liệt kê các nước có cùng
số lượng quan sat
e Kết quả thu được 88 nhóm nước có cùng chung số lượng quan sát, liệt kê ð nhóm nước cuối cùng:
1 print.data.frame (GROUP.OBS %>% tail(5), row.names = FALSE) ] Observations Country
759 Hong Kong , Singapore , Vietnam
760 China , Japan , Macao , South Korea , United States
| 1 print (SPECIAL.ID <- LOC.ISO [(nchar (LOC.ISO$ise_code) > 3), ], row.names = FALSE) Ì
Kết hiển thị trên màn hình như sau: Vậy có hai đất nước (không tính các tên không phải iso code Country đất nước đã được loại bỏ) là Cyprus và Kosovo WID_CYN Northern Cyprus
Một phần đữ liệu trong NEW.CASES: Một phần đữ liệu trong NEW.DBATHS:
location new_cases location new_deaths
— Tham số đâu ào: attr: là một vector chứa đữ liệu cần xử lí
— Dữ liệu trả oề: dạng số là các tứ phân vị và số lượng Outlicrs trong tập đữ liệu
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 19/83
Trang 21Khoa Khoa Học & Kỹ Thuật Máy Tính
— Các hàm Q1() và Q3) là hiện thực của công thức (2) và (3) trong cơ sở lí thuyết
— Hàm Q2() xây dựng dựa trên median(): hàm tìm trung vị
— Hàm Outlicrs() đếm số quan sát thỏa điều kiện Outlier bằng surn()
1) Tinh gid trị nhỏ nhất, lớn nhất
e Số ca nhiễm nhỏ nhất và lớn nhất được báo cáo:
1 print.data.frame (MIN.MAX.CASES <- NEW.CASES %>% group_by (Country = location) %>%
dplyr::summarise (Min_cases = min (new_cases), Max_cases = max (new_cases)), row.names = FALSE)
Trong đó: Kết quả hiển thị trên màn hình như sau:
— mmin(new_ casos) trả về giá trị nhỏ nhất của
số ca nhiễm mới, max(new_ casos) trả về giá Country Min cases Max cases trị lớn nhất của số ca nhiễm 1nới Australia 0 175271
— Khung đữ liệu kết quả được lưu ở New Caledonia 0 3343 MIN.MAX.CASES New Zealand 0 2336
e Số ca tử vong nhỏ nhất và lớn nhất được báo cáo:
1 print.data.frame (MIN.MAX.DEATHS <- NEW.DEATHS %>% group_by (Country = location) %>%
Nhận sét: Số ca nhiễm oà tử oong lớn nhất từng đạt được trong ngàu được báo cáo mới của Australia lớn
i lén so v6i hai nude con lai
2) Tính tứ phân uị thú nhất(Q1), thứ hai(Q2), thứ ba(Q3)
e Tứ phân vị của số ca nhiễm được báo cáo 1mới:
Trong đó: Kết quả hiển thị trên màn hình:
— Ql(necw_ cascs),Q2(ncw_ casos), Q3(ncw_ casos)
lần lươt trả về tứ phân vị thứ nhất, thứ hai Country Qi q2 3
và thứ ba của số ca nhiễm mới Australia 10 26.5 646
— Khung đữ liệu kết quả được lưu ở New Caledonia 0 0.0 1
MEDIAN.CASES New Zealand 1 4.0 23
Nhận xét:
- Mặc đà số lượng ca nhiém lớn nhất của Australia đạt đến mức 6 con số; tuy nhiên, số ca nhiễm trong một ngàu thấp hơn 1000 lại chiếm khá lớn, bằng chứng là từ các tứ phan vi, sé ngdy có số ca nhiễm từ 10 đến 646 đã chiếm gần 50% số ngày mà ta thu thập đữ liệu fen y “ của khoảng tứ phân 0) Nếu quan sát tập dữ liệu uề nhié › mới bắt đầu tăng nhanh chỉ oào khoảng thời gian e :
- D6 chénh léch gitta Q3 vd Q2 lén hon so giữa Qs vi Qi, điều nay chúng tô số ca nhiễm tăng nhanh, nhưng SỐ lượng ngàu có ca nhiễm lớn (giả sử là từ 1000 ca/ngày trở lên) không nhiều Có thể giải thách điều nàu do dịch bệnh chỉ mới bắt đầu bùng phát mạnh trong khoảng thời gian cuối khảo sát ở Australia
- Tương tự ta cũng có thể rút ra nhận sét cho hai nước còn lại
Trang 22Khoa Khoa Học & Kỹ Thuật Máy Tính
e Tứ phân vị của số ca tử vong được báo cáo mới:
¡ print.data.frame (MEDIAN.DEATHS <- NEW.DEATHS %>% group_by (Country = location) %>%
dplyr::summarise (Qi = Qi(new_deaths), Q2 = Q2(new_deaths) ,Q3 = Q3(new_deaths)),
row.names = FALSE)
Doan code được viết tương tự như trường Country Qi Q2 3
hop số ca nhiém và lưu kết quả vào: Australia 0 0
MEADIAN.DEATHS New Caledonia 0 0 1
Kết quả hiển thị trên màn hình: New Zealand 0 0 0
so 0uới số ca nhiễm nên sự tăng lên uỀ số ca tử oong không
e Giá trị trung bình các ca nhiễm được báo cáo mới là:
1 print.data.frame (AVG.CASES <- NEW.CASES %>% group_by (Country = location) %>%
dplyr::summarise (Avg = mean (new_cases)), row.names = FALSE)
Trong đó: Kết quả hiển thị trên màn hình:
— Incan(new_ casos) trả về giá trị trung bình Country Ave
của số ca nhiễm mới Australia 4086.63757
— Khung đữ liệu kết quả được lưu ở New Caledonia 62.51709
AVG.CASES New Zealand 43.01107
e Giá trị trung bình các ca tử vong được báo cáo mới là:
¡ print.data.frame (AVG.DEATHS<-NEW.DEATHS %>% group_by(Country=location) %>%
dplyr:: summarise (Avg=mean(new_deaths)), row.names=FALSE)
Đoạn code được viết tương tự như trường hợp
số ca nhiễm và lưu kết quả vào: AVG.DEATHS
Kết quả hiển thị trên màn hình:
Country Avg Australia 6.82108183 New Caledonia 1.76073620 New Zealand 0.07647908
4) Tinh gid trị độ lệch chuẩn (9d)
e Dé lệch chuẩn các ca nhiễm được báo cáo mới:
1 print.data.frame (STD.CASES <- NEW.CASES %>% group_by (Country = location) %>% dplyr::summarise (Std = sd (mew_cases)), row.names = FALSE)
Trong đó: Kết quả hiển thị trên màn hình:
— sd(new _ cascs) trả về giá trị độ lệch chuẩn Country Std
của số ca nhiễm mới Australia 15911.0514
— Khung đữ liệu kết quả được lưu ở New Caledonia 279.5023
STD.CASES New Zealand 171.8859
e Độ lệch chuẩn các ca tử vong được báo cáo mới:
¡ print.data.frame (STD.DEATHS<-NEW.DEATHS %>% group_by(Country=location) %>%
dplyr:: summarise (Std=sd(new_deaths)), row.names=FALSE)
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Nién khéa 2021-2022 Trang 21/83
Trang 23
Khoa Khoa Học & Kỹ Thuật Máy Tính
Đoạn code được viết tương tự như trường hợp
số ca nhiễm và lưu kết quả vào: STD.DEATHS
Kết quả hiển thị trên màn hình:
Country Std Australia 15.7884416 New Caledonia 3.4459394 New Zealand 0.3462153
Nhận xét:
© Dit lieu 0uê củ số ca nhiễm bệnh va tử uong mới đều có sự phân tán Số ca nhiễm bệnh có sự phân tán
rõ hơn sô ca tử bong
e Dữ liệu 0È số ca nhiễm mới uà số ca tử uong mới của Australia có sự phân tán lớn nhất so uới giá trị trưng bình trong có ba nude Dieu nay chúng tô gia trị kà uong không phần một cách chính sác trung tâm của tập dữ liệu cia Australia
e Số outliers của số ca nhiễm được báo cáo mới là:
1 print.data.frame (OUTLIERS.CASES <- NEW.CASES %>% group_by (Country = location)
dplyr::summarise (Outliers = Outliers (new_cases)), row.names = FALSE) %>%
Trong đó:
— outlicrs(new_ cascs) trả về số lượng outlicrs
của số ca nhiễm 1mới
— Khung đữ liệu kết
OUTLIERS.CASES quả được lưu ở
e Số outlicrs của số ca tử vong được báo cáo mới là:
2 oak Tờ sàn Tạ Kết quả hiển thị trên màn hình:
Country Dutliers Australia 127 New Caledonia 151 New Zealand 132
1 print.data.frame (OUTLIERS.DEATHS <- NEW.DEATHS
(new_deaths)), dplyr::summarise (Outliers = Outliers
Doan code được viết tương tự như trường
hợp số ca nhim và lưu kết quả vào:
OUTLIERS.DEATHS Kết quả hiển thị trên
%>%⁄ group_by (Country = location) row.names = FALSE)
6) Lập bảng mô tả số liệu thông kê cho từng đất nước thuộc vé nhém:
Viết đoạn code tổng hợp lại từ các câu trước trên R như sau
e Bằng mô tả cho số ca nhiễm:
2 Min = min (new_cases),
3 Qi = Qi (mew_cases), Q2 = Q2 (new_cases), = Q3 (new_cases),
4 Max = max (new_cases),
5 Avg = mean (new_cases), Std = sd (new_cases), Outliers = Outliers (new_cases)), row.names = FALSE)
Kết quả hiển thị trên màn hình như sau:
Country Min Q1 q2 Q3 Max Avg Std Outliers Australia 0 10 26.5 646 175271 4086.63757 15911.0514 127
Trang 24Khoa Khoa Học & Kỹ Thuật Máy Tính
A Max = max (new_deaths),
5 Avg = mean (new_deaths), Std = sd (new_deaths),
am as ` của -
7) Vé biéu đà boxplot hay con được gọi là box-and-whisker cho nhiém coronavirus
Sử dụng hàm boxplot() để hỗ trợ vẽ biểu đồ box and whisker:
+2 x £ ox At
e Biểu đồ boxplot cho số ca nhiễm mới: e Biểu đồ boxplot cho số ca tử vong mới:
¡ boxploE (new_cases location, NEW.CASES,
"Country", ylab="New Cases",
"Box plot New Cases")
Kết quả hiển thị trên màn hình như sau:
Box plot New Cases
T Austraia New Caledonia New Zealand
lecation, filter (NEW
location, filter (NEW
main = paste ("Box plot New
paste ("Box plot New Cases in
CASES , location == i =
", i), outl DEATHS, location == i), Deaths in ", i), outline
xlab = i,
FALSE) xlab i, ylab FALSE) }
Trang 25Khoa Khoa Học & Kỹ Thuật Máy Tính
Australia New Caledonia New Zealand
Biểu đồ boxplot cho số ca tử vong:
Australia New Caledonia New Zealand
Quan sát các biểu đồ cho ta hình dung một các trực quan về các gái trị đặc trưng trong mô tả thống kê, cũng như đưa ra một số nhận xét ban đầu về tình hình địch bệnh Covid, kiểm tra những nhận xét về dữ liệu ở các câu hỏi trước
ii) Nhóm câu hỏi liên quan đến đữ liệu thể hiện thu thập đữ liệu: Với mỗi quốc gia mà thuộc về nhóm cần tính
số liệu thống kê lần lượt cho nhiễm và tử vong do coronavirus được báo cáo mới:
e Làm rõ một số khái niệm trong thu thập đữ liệu:
— Dữ liệu không được báo cáo mới: là dữ liệu mang giá trị rỗng NA hoặc giá trị 0
— Dữ liệu không được báo cáo: là dữ liệu mang gí trị NA
e Xây dựng hàm hỗ trợ thu thập dữ liệu:
— na.zoro (x): Xác định đữ liệu không được báo cáo mới
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 24/83
Trang 26Khoa Khoa Học & Kỹ Thuật Máy Tính
Trong đó:
- Tham số đầu vào: x là giá trị muốn thao tác
- Hàm trả về TRUE nếu đữ liệu không được báo cáo mới, ngược lại trả về EALSE
- Hàm trả về một vector ruới đã được loại bỏ các
đữ liệu không được báo cáo mới
count.new <- function(attr, func){ ` £ “
- attr lA vector muén thao tác
return (sum(attr[!na.zero(attr)] ==
func (attr[!na.zero(attr)])))} - fune nhận giá trị max nêu muốn đêm số lượng
giá trị lớn nhat vA min nếu muốn đếm số lượng giá trị nhỏ nhất
1) C6 bao nhiêu ngàu có số lan dit liệu không được báo cáo mới
Lệnh R sau sử dụng hàm đếm thỏa điều kiện sum () và na.zcro () cho biết số ngày có đữ liệu không được báo cáo mới của số ca nhiễm và số ca tử vong:
¡ print.data.frame (NO.NEW.REPORT <- CHOSEN.DATA %>% group_by (lecation) %>%
dplyr::summarise (Infections = sum (na.zero (new_cases)), Deaths = sum (na.zero
(new_deaths))), row.names = FALSE)
Kết quả hiển thị trên màn hình như sau: Trong đó Infections là sô ngày có đữ liệu về location Infections Deaths số ca nhiễm không được báo cáo mới, Deaths Australia 28 402 là số ngày có đữ liệu về số ca tử vong không New Caledonia 506 643 được báo cáo mới Dữ liệu kết quả được lưu ở
New Zealand 159 682 NO.NEW.REPORT
2) Có bao nhiêu ngàu có số ca nhiễm/ tử oong là thấp nhất được báo cáo mới
1 print.data.frame (MIN.REPORT<-CHOSEN.DATA %>% group_by(location) %>% dplyr::summari se (
2 Min_Infections=min(na.zero.rm(new_cases)) ,Infections=count new(new_cases ,min),
3 Min_Deaths=min(na.zero.rm(new_deaths) ) ,Deaths=count new(new_deaths ,min)),
row.names=FALSE)
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Nién khéa 2021-2022 Trang 25/83
Trang 27Khoa Khoa Học & Kỹ Thuật Máy Tính
Kết quả được lưu ở MIN.REPORT, với:
- Min_ Infections và Min_ Deaths là số ca nhiễm/ tử vong được báo cáo mới thấp nhất;
- Infections va Deaths 1A s6 ngay có số ca nhiễm/ tử vong thấp nhất (số ngày có đữ liệu chứa các giá trị trên)
C6 bao nhiêu mgàu có số ca nhiễm/ tử oong là cao nhất được báo cáo mới:
Viết đoạn chương trình tương tự như
1i.3 để trả lời câu hỏi trên:
Ne print.data.frame (MAX.REPORT<-CHOSEN.DATA %>% group_by(location) %>% dplyr:: summarise (
Max_Infections=max (na.zero.rm(new_cases)), Infections=count new(new_cases ,max),
Max_Deaths=max(na.zero.rm(new_deaths)), Deaths=count.new(new_deaths, max)),
Két qua duc litu 6é MAX.REPORT, véi:
- Max_ Infections và Max _ Deaths là số ca nhiễm/ tử vong được báo cáo mới cao nhất;
- Infections và Dcaths là số ngày có số ca nhiễm/ tử vong cao nhất (số ngày có dữ liệu chứa các giá trị trên)
CHOSEN.DATA %>% group_by(location) %>% dplyr::summarise (Infections =
sum(!na.zero(new_cases)), Deaths = sum(!na.zero(new_deaths))),
CHOSEN.DATA %>% group_by(location) %>% dplyr::summarise (Infections =
count.new(new_cases, min), Deaths = count.new(new_deaths, min)),
CHOSEN.DATA %>% group_by(location) %>% dplyr::summarise (Infections =
count.new(new_cases, max), Deaths = count.new(new_deaths, max))
)
NO.RP.TABLE <- CHOSEN.DATA %>% group_by(location) %>% dplyr::summarise (Tnfections =
sum(na.zero(new_cases)), Deaths = sum(na.zero(new_deaths)))
name s(REPIRT.TABLE) <- c('Tong the', 'Thap nhat', 'Cao nhat')
TABLE <- list(NO.RP.TABLE, REPORT TABLE)
names(TABLE) <- c('Khong duoc bao cao moi', 'Bao cao moi')
Khong duoc bao cao moi
location Infections Deaths
Trang 28& Trường Đại Học Bach Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính
1 print.data.frame (NO.RP.MIN.TRACK <- CHOSEN.DATA %>% group_by (location) %>%
dplyr::summarise (Infections = track (min, new_cases, is.na), Deaths = track (min, new_deaths, is.na)), row.names = FALSE)
Trong đó:
- track (min,new_ casos,is.na): trả về số ngày ngắn nhất liên tiếp mà số ca nhiễm không được báo cáo
- track (min,new_ deaths,is.na): trả về số ngày ngắn nhất liên tiếp mà số ca tử vong không được báo cáo Kết quả hiển thị trên màn hình như sau:
location Infections Deaths Trong đó Infcctions là sô ngày ngắn nhất liên tiếp Australia 0 35 không có đữ liệu về số ca nhiễm được báo cáo mới, New Caledonia 1 540 Deaths là sô ngày ngắn nhất liên tiếp không có đữ New Zealand 0 30 liệu về số ca tử vong được báo cáo mới Kết quả
lưu ở NO.RP.MIN.TRACK
6) Cho biết số ngàu dài nhất liên tiếp mà không có dữ liệu được báo cáo
Viết đoạn chương trình tương tự như iii.5:
1 print.data.frame (NO.RP.MAX.TRACK <- CHOSEN.DATA %>% group_by (location) %>%
dplyr::summarise (Infections = track (max, new_cases, is.na), Deaths = track (max, new_deaths, is.na)), row.names = FALSE)
đưuọc lữu ở NO.RP.MAX.TRACK
7) Cho biết số ngày ngắn nhất liên tiếp mà không có người nhiễm bệnh mới
Viết đoạn code tương tự như iii.5, thay hàm điều kiện ¡s.na() - ngày không được báo cáo thành is.zcro()
- ngày không có ca bệnh mới
1 print.data.frame (NO.NEW.MIN.TRACK <- CHOSEN.DATA %>% group_by (location) %>%
dplyr::summarise (Infections = track (min, new_cases, is.zero), Deaths = track (min, new_deaths, is.zero)), row.names = FALSE)
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Nién khéa 2021-2022 Trang 27/83
Trang 29Khoa Khoa Học & Kỹ Thuật Máy Tính
Ket quả hiển thị trên màn hình như sau: Trong đó Infcctions là sô ngày ngắn nhất liên tiếp
không có ca nhiễm mới, Dcaths là sô ngày ngắn location Infections Deaths an eo : ma
nhất liên tiêệp không có ca tử vong mới Kêt quả Australia 1 1
New Caledonia 1 1 dutuoc htu 6 NO.NEW.MIN.TRACK
New Zealand 1 1
8) Cho biết số ngàu dài nhất liên tiếp mà không có người nhiễm bệnh mới
Viết đoạn chương trình tương tự như iii.7:
New Caledonia 52 19 htu 6 NO.NEW.MAX.TRACK
New Zealand 24 199
iv} Nhóm câu hỏi liên quan đến trực quan đữ liệu
© Xử lí dữ liệu: Tách khung đữ liệu mẫu COVID.DATA thành danh sách COUNTRY.EREQ chứa 6 khung
đữ liệu riêng theo từng châu lục, mỗi khung đữ liệu chứa tên các quốc gia và tần số xuất hiện của mỗi quốc gia trong châu lục đó
¡ CDUNTRY.FREN <- split(CŨVID.DATA, CŨVID.DATA$#continent) %>% lapply (function (elem)f{
2 data <- selem %>% group_by (location) %>% dplyr::summarise (n ()
3 names (data) <- c(elem$continent[l], 'Freq')
4 return (data)} )
Sau khi tạo ra danh sách, có thể ding ham str () dé xem cau tric cia danh séch trên
e Xdy dựng các hàm 0ẽ biểu đồ theo yéu cau:
— cumsum.freq (data, attr, num): Vẽ biểu đồ tần số tích lũy
1 cumsum.freq<-function(data, attr, num){
2 BREAKS<-seq(round_any (min(data[[attr]]) + num, num, f= floor),
3 round_any(max(data[[attr]]), num, f= ceiling), by=num)
4 FRAME<-table(cut(data[lattr]], breaks=seq(round_any(min(datal[attr]]),num, f=floor),
5 round_ any (max (đata[[attr]]) ,num,
f=ceiling), by=num) , right=TRUE))
FRAME<-data.frame (Number_of_country=cumsum(FRAME), Frequancy=BREAKS)
6
7 ggplot (FRAME, aes(x=Frequancy, y=Number_of_country)) +
8 geom_bar (stat = "identity", fill="#add8e6" ) + geom_line (col="#008b8b", size=1)+
9 xlab ("Frequancy") + ylab ("Number of country") +
10 labs (title=names(data)) +
11 scale_x_continuous (breaks=BREAKS)}
Trong đó:
* Tham số đầu bào:
+ data: khung đữ liệu muốn thao tác
+ attr: chuỗi kí tự chứa tên thuộc tính (thường là tần số của đối tượng)
+ mum: là một số chỉ độ đài khoảng phân hoạch mmong muốn
* Đồng 2, 3: Phân hoạch khoảng giá trị của tần số thành các khoảng có độ đài mm bằng seq ()
* Đồng 4, ð: Xếp các tần số trong attr vào các khoảng đã phân hoạch bằng bằng table ()
* Đồng 6: Cộng dồn các tần số bé hơn giá trị nào đó trong phân hoạch bằng curnsum ()
x Đờng ?, 8, 9, 10: Thực hiện vẽ biểu đồ bằng các gói lệnh trong gói bằng ggplot
— rel.freq(data, attr): Vẽ biểu đồ tần số tương đối
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 28/83
Trang 30
& Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
+ Khoa Khoa Học & Kỹ Thuật Mấy Tính
¡ rel.freq<-function(data, attr){
đata[[attr]]<-dataL[attr]l]/sum(Cdata[Lattr]])
title <- names(data) [1]
names(đata) <- c('CounEry', 'Frequancy ')
ggplot (data,aes(y=Country,x=Frequancy))+ geom_bar(stat="identity" ,fill="#add8e6")+ xlab ("Relative Frequency") + ylab ("Country") +
scale_x_continuous (labels=scales::percent) + labs (title=title)}
* Tham số đầu vào:
+ data: khung đữ liệu muốn thao tác
+ attr: chuỗi kí tự chứa tên thuộc tính (thường là tần số của đối tượng)
* Dòng 2: Tính tần số tương đối của từng quốc gia trong chấu lục (bằng tần số của quốc gia đó chia cho tổng tần số)
ggplot (aes (x=.datal[x]],y=.datally]],group=.data[[group]],color=.data[[group]]))+
3 geom_line(size=1) + geom_point (size=2)+
4 ggtitle(paste(y, ‘in the last 7 day of 2021'))+ xlab (x)+ ylab (y)}
Tham số đầu vào:
+ data: khung đữ liệu muốn thao tác
+ x: chuỗi kí tự chứa tên thuộc tính vẽ trục Ox
+ y: chuỗi kí tự chứa tên thuộc tính vẽ truc Oy
+ group: chuối kí tự muốn gộp nhóm đữ liệu để vẽ theo Mỗi nhóm đữ liệu là một đường riêng biệt trên cùng mnột biểu đồ
— plot.outlicr (đata, attr, num): Vẽ biểu đồ phổ đất nước xuất hiện outlier
¡ plot.outlier<-function(data, attr, num){
2 BREAKS<-seq(round_any (min(data[[attr]]) + num, num, f= floor),
3 round_any(max(data[[attr]]), num, f= ceiling), by=num)
4 FRAME<-table(cut(data[lattr]], breaks=seq(round_any(min(datal[attr]]),num, f=floor),
5 round_ any (max (đata[[attr]]) ,num,
f=ceiling), by=num) , right=TRUE))
6 Number_of_country<-FRAME
7 FRAME<-data frame (Number_of_country, Number_of_Outlier=BREAKS)
8 ggplot (FRAME, aes(x=Number_of_Outlier, y=Number_of_country)) +
9 geom_bar (stat = "identity", fill="#ada8e6" ) + geom_line(col="#008b8b",size=1)+
10 scale_x_continuous (breaks=BREAKS)}
Trong đó:
* Tham số đều 0ào:
+ data: khung đữ liệu muôn thao tác
+ attr: chuỗi kí tự chứa tên thuộc tính (thường là số outliers của một đất nước)
+ mum: là một số chỉ độ đài khoảng phân hoạch mmong muốn
* Đồng 2, 3: Phân hoạch khoảng giá trị của outlicr thành các khoảng có độ đài num bằng seq ()
* Đồng 4, ð: Xếp các outlicr trong attr vào các khoảng đã phân hoạch bằng bằng tablc ()
x Đờng ?, 8, 9, 10: Thực hiện vẽ biểu đồ bằng các gói lệnh trong gói bằng ggplot
1) Vẽ biểu đồ tần số tích lũu quốc gia cho các châm lục
Vẽ biểu đồ tần số tích lũy bằng hàm curmnsurn.feq () với khoảng phân hoạch mrum”60, các biểu đồ được lưu
Trang 31đò Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
>< Khoa Khoa Học & Kỹ Thuật Mấy Tính
Trang 32đò Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
>< Khoa Khoa Học & Kỹ Thuật Mấy Tính
lượng liệu thu thập của các nước trong châu lục đó càng gần nhau, càng đồng đều nhau Một cách trực quan, 86 lượng dữ liệu thu thập của các nước ở châu Nam Mi (South America) la gan nhau nhất, đồng đều nhất
2) Vẽ biểu đồ tần số tương đối quốc gia cho các châu lục
Vẽ biểu đồ tần số tương đối bằng hàm rel.feq (), các biểu đồ được lưu ở COUNTRY.REL.FREQ
Democratic Republic of Congo ~
Comoros ~ Central African Repudlic~
Europe North America
\Vaticn - _ Sener 4
United Kingdom= Umgine- Turks and Calcos Islangs United States
ST I Moved) Span- Sint Maarten (Dutch parl)~ _Tn0Lđ2g an T0b200
OO —— CGQV7ỪẰẴẬG Saint Vincent and the Grenadines - Seiba- ll.`) = Saint Pierre and Miquelon- SaIntLusa~
- : Romana Saint kits and News ~
eC Bonatrs Sint Eustatus and Saba~
——— Cioaia- ððð00202202222 4 nen: Belize -
Trang 33
đò Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
>< Khoa Khoa Học & Kỹ Thuật Mấy Tính
e Xử lí dữ liệu: Tách đữ liệu của 7 ngày cuối của năm cuối cùng thuộc các nước được phân công, lưu
đữ liệu vào LAST.DAYS.DATA
Năm cuối cùng là 2022, tuy nhiên đữ liệu của
¡ LAST DẠNG DẠTA c- CHOSEN DATA[CHOSEN.DATA$date %in% năm này chưa hoàn chỉnh (tại thời điểm kết thúc mm —————— CE TRE seq Date (from=as Date ('2021-12-25'), khảo sát), nên ta sẽ tách đữ liệu trong 7 ngày to=as.Date('2021-12-31'),by='days'),] cuối cùng của năm 2021, là đữ liệu từ ngày 25
tháng 12 đến ngày 31 tháng 12 cua năm 2021
e Kết quả hiển thị trên màn hình và được lưu ở new_cases in the last 7 day of 2021
Trang 34Khoa Khoa Học & Kỹ Thuật Máy Tính
Trang 35Khoa Khoa Học & Kỹ Thuật Máy Tính
5) Vẽ biểu đồ phổ đất nước suất hién outliers cho tu vong
e Xử lí số liệu: Từ tập đữ liệu mẫu COVID.DATA Tìm số lượng các outlier của từng quốc gia cho nhiễm bệnh bằng hàm Outlicrs () đã được xây dựng từ nhóm câu hỏi ii và lưu đữ liệu vào DEATHS.OUTLIERS:
¡ DEATHS.UTLIERS <- COVID.DATA [complete.cases (COVID.DATA$new_deaths), ] %>%
group_by(location) %>% dplyr :: summarise (Outlier = Outliers (mew_deaths))
e Tiên hành vẽ biêu đô phố với khoảng phân hoạch nuin”5
| 1 plot.outlier (DEATHS.OUTLIERS, ‘Outlier', num = 5) ]
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100405 110 15120251 30 4354 40145 150155160 465170175
Number_of_Outlier
6) Vẽ biểu đồ phổ đất nước xuất hiện oufliers cho nhiễm bệnh
e Xử lí số liệu: Từ tập dữ liệu mẫu COVID.DATA Tìm số lượng các outlicr của từng quốc gia cho tử vong bằng hàm Outlicrs () đã được xây dựng từ nhóm câu hỏi ii và lưu đữ liệu vào CASES.OUTLIERS:
CASES.OUTLIERS <- COVID.DATA [complete.cases (COVID.DATA$new_cases), ] %>%
group_by(location) %>% dplyr :: summarise (Outlier = Outliers (mew_cases))
e Tiên hành vẽ biêu đô phố với khoảng phân hoạch nuin”5
| 1 plot.outlier (CASES.DUTLIERS, "Outlier", num = 5) ]
số của mã đề để vẽ 4 tháng tương ứng theo ký số đó Nếu ký số là 0 thì lấy tháng là 10
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 34/83
Trang 363 Khoa Khoa Học & Kỹ Thuật Máy Tính
1 CHOSEN MONTH DATA<-split (CHSEN DÂTA , CHSEN DATA$1ocation) %>% 1apply(function (elem){
2 elem <- elem [format.Date (elem$date, "⁄m") %in% month,
3 elem <- cbind (elem, day = format (elem$date, format = "%d"),
= LAST.MONTH.DATA <- split(CHOSEN.DATA, CHOSEN.DATA$location) %>% lapply (function (elem) {
2 elem <- elem [format.Date (elem$date, "%m") Zinh c("11","12"), ]
3 elem <- cbind (elem, day = format (elem$date, format = "%d"), month=format (elem$date,
¡ plot.line.2 <- function (data, x, yl, y2, group ,title = "") {
2 data %4>% ggplot (aes (x = data[[x]]) ) +
3 geom_line(aes(y =.data[[y1]], group =.datal[group]] ,color ="new_cases"), size=1) +
4 geom_point (aes(y=.data[ly1]],group.data[[group]],color="new_cases"), size=2) +
5 geom_line(aes(y=.data[ly2]],group=.data[[group]],color="new_deaths"), size=1)+ geom_point (aes(y=.datally2]],group =.datal[[group]],color ="new_deaths"), size =2)+ ggtitle (title) + ylab ("") + scale_x_date (date_labels = "%b/%d") }
x Tham số đầu vao:
+ data là khung đữ liệu muốn thao tác
- x là chuỗi chứa tên của thuộc tính iuuốn thể hiện trục Ox
-+ y1 và y2 là chuỗi chứa tên hai thuộc tính muốn vẽ biểu đồ đường
* Dong 3 va 4 vẽ đường ứng với thuộc tính thứ nhất y1; đồng 5 và 6 vẽ đường ứng với thuộc tính thứ hai y2
— cumsum.line (đata, x, y, group „title): Hàm vẽ biểu đồ đường tích lũy
1 cumsum.line <- function (data, x, y, group, title = "") {
2 data <- data [complete.cases (datallyl]), ]
3 đata <- đata %>% group_by (.data[[groupll) %>%
dplyr::mutate(cum_sum=cumsum(.datal[[y]]))
A data %>% plot.line (x, "“cum_sum", group, title = "") }
x Tham số đầu vao:
+ data là khung đữ liệu muốn thao tác
- x là chuỗi chứa tên của thuộc tính iuuốn thể hiện trục Ox
-+ y là chuỗi chứa tên thuộc tính muốn vẽ biểu đồ đường tích lũy
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 35/83
Trang 37
Khoa Khoa Học & Kỹ Thuật Máy Tính
* Đồng 2 ouà ở: Thực hiện tính giá trị tích lũy thuộc tính y theo thuộc tính x
x Đồng 4: sử dụng hầm plot.line () để vẽ biêu đồ đường từ việc tính tích lũy ở các dòng trước 1) Biểu đồ thu thập nhiễm bệnh cho từng tháng
Thực hiện vẽ biển đồ bằng hàm plot.line @ đữ liệu trên danh sách CHOSEN.MONTH.DATA thể hiện thu thập nhiễm bệnh cho các tháng 2, 5, 6 và 9
Biểu đồ thu thập nhiễm bệnh cho từng tháng năm 2020:
Australia New Caledonia
Biểu đồ thu thập nhiễm bệnh cho từng tháng năm 2021:
Australia New Caledonia
Trang 38Khoa Khoa Học & Kỹ Thuật Máy Tính
Nhận xét: Nhàn chung qua các năm, các thang,
số lượng ca nhiễm có xu hướng tăng dần lên,
2 (sé ca nhiém) cting cing ngdy cing mé réng Dac
biệt là đôi uới Autralia thì sự khác biét vé thoi gian càng lớn
01 02 03 04 05 06 07 08 09 20 11 12 13 14 15 16 17 18 19
2) Biểu đồ thu thập tử oong cho từng tháng
Thực hiện vẽ biển đồ bằng hàm plot.line @ đữ liệu trên danh sách CHOSEN.MONTH.DATA thể hiện thu thập tử vong cho các tháng 2, 5, 6 và 9
Trang 39> Khoa Khoa Học & Kỹ Thuật Máy Tính
Biểu đồ thu thập nhiễm bệnh cho từng tháng năm 2020:
Trang 40Khoa Khoa Học & Kỹ Thuật Máy Tính
w ~
Biểu đồ thu thập nhiễm bệnh cho từng tháng năm 2022:
/ ⁄ , 60 ⁄ 22
New Zealand Nhận xét: Chúng ta có thể rút ru nhận sét tương
0.050 - tự như đối uới số ca nhiễm Tuy nhiên, đối với
New Caledonia vi New Zealand, 86 ca tit vong rat 0.025 ñt uà phần lớn ngàu trong các tháng đều có số ca
tử vong la 0, Australia van la nuéc c6 86 ca tử vong dugc xem la lén nhat trong ba nude ma ta
Biểu đồ thể hiện thu thập đữ liệu gồm nhiễm bệnh vd té vong cho từng tháng
Thực hiện vẽ biểu đồ bằng hàm plot.line.2 () đữ liệu trên danh sách CHOSBN.MONTH.DATA thể hiện thu thập nhiễm bệnh và tử vong cho các tháng (2, 5, 6 và 9)
print (split (CHOSEN.MONTH.DATA [[i]l[[j]], CHOSEN.MONTH.DATA [[il][[j]]$month) %>%
lapply (plot.line.2, x='date',yl="new_cases", y2="new_deaths", group="month",
Biểu đồ thu thập nhiễm bệnh/ tử vong cho từng tháng năm 2020:
Bai tập lớn môn Cấu trúc Rời rac cho KHMT (C01007) - Niên khóa 2021-2022 Trang 39/83