Tải bản đầy đủ (.pdf) (84 trang)

BTL Cấu trúc rời rạc Chủ đề: Phân tích tình hình dịch Covid 19 bằng R

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.46 MB, 84 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH

CẤU TRÚC RỜI RẠC CHO KHMT (CO1007)
Thống kê khảo sát kết quả Covid-19
môn Cấu trúc rời rạc

GVHD :

SV thực hiện :

Huỳnh Tường Nguyên
Nguyễn Ngọc Lễ
Nguyễn Hoài Khang
Hà Văn Châu
Vũ Ngọc Thuận
Đỗ Nguyễn An Huy
Dương Trọng Khơi

Tp. Hồ Chí Minh, Tháng 04/2022

-

2111453
2110054
2112394
2110193
2113786



Mục lục
1 Động cơ nghiên cứu

3

2 Mục tiêu

3

3 Cơ sở lý thuyết

3

3.1

3.2

3.3

3.4

3.5

3.6

3.7

Trung bình cộng (giá trị kì vọng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3


3.1.1

Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

3.1.2

Ý nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

Tứ phân vị . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

3.2.1

Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

3.2.2

Phân loại . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

3.2.3


Ý nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

3.2.4

Cách thức xác định . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

Phương sai - Độ lệch chuẩn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

3.3.1

Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

3.3.2

Ý nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

Khoảng tứ phân vị . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5


3.4.1

Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

3.4.2

Ý nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

Outlier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

3.5.1

Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

3.5.2

Ý nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

Biểu đồ hộp (Box Plot) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


6

3.6.1

Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

3.6.2

Các thành phần . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

3.6.3

Ý nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

Tần số tích lũy - Biểu đồ tích lũy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

3.7.1

Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7


3.7.2

Thiết lập bảng tần số tích lũy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7


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
3.8

3.9

Ý nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

Đường trung bình động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

3.8.1

Định nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8


3.8.2

Tính tốn giá trị trung bình động đơn giản . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

3.8.3

Ý nghĩa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

Hệ số tương quan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

3.9.1

Hệ số tương quan Pearson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

4.1

Tập dữ liệu mẫu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

4.2

Tiền xử lí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

4.2.1

Cài đặt các packages (gói) và source file chứa các hàm tính tốn cần thiết . . . . . . . . . . .

11

4.2.2

Đọc dữ liệu từ file vào dataframe (khung dữ liệu) . . . . . . . . . . . . . . . . . . . . . . . . .

11

4.2.3

Kiểm tra cấu trúc của tập dữ liệu mẫu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


12

Chuẩn hóa dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

4.3.1

Chuẩn hóa kiểu dữ liệu của thuộc tính date (ngày-giờ) . . . . . . . . . . . . . . . . . . . . . .

12

4.3.2

Xử lí các giá trị âm trong new_cases và new_deaths . . . . . . . . . . . . . . . . . . . . . . .

12

4.3.3

Lọc ra những dữ liệu không phải là quốc gia . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

4.4

Dữ liệu được phân công riêng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13


4.5

Kết quả phân tích . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

4.3

5 Kết luận

82

Tài liệu

82

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 2/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
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à COVID-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 COVID19 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ư dữ 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ê dữ liệu về COVID19 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 dị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ừ:
/>
2

Mục tiêu

Trong bài tập lớn này, chúng ta sẽ bắt đầu với các bài toán thống kê đơn giản từ những dữ liệu được cung cấp.
Qua đó, tìm ra những con số thú vị, có ý nghĩa đối với các dữ liệu thực tế từ tình hình dịch corona.
Những kết quả tìm ra sẽ là bước khởi đầu cho việc khai phá nguồn dữ liệu của hệ thống sau này, nhằm đạt tới
mục tiêu nâng cao kỹ năng lập trình, kỹ năng giải quyết vấn đề cho người học, kỹ năng làm việc nhóm cũng như
hướng tới mục tiêu cao hơn là đam mê trong làm việc, học tập và nghiên cứu.

3

Cơ sở lý thuyết

Trong thống kê, dữ liệu mà ta làm việc cùng là vô cùng lớn và nếu chỉ nhìn vào dữ 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 tốn một số giá trị để có thể khái
quát được dữ liệu. Ta sẽ cùng tìm hiểu một vài giá trị có ý nghĩa đối với thống kê.

3.1
3.1.1


Trung bình cộng (giá trị kì vọng)
Định nghĩa

3.1.2

Trung bình cộng (hay giá trị trung bình, giá trị
kì vọng ) là một khái niệm vơ cùng gần gũi đối với khoa
học và đời sống hàng ngày. Giả sử ta có một tập D gồm
k giá trị x1 , x2 , ..., xk : D = {x1 , x2 , ..., xk }. Khi đó,
trung bình cộng của D là:
k

xi
M ean(D)=

i=0

(1)

k

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Ý nghĩa

• Trong phân tích dữ liệu: giúp ta hình dùng được
điểm trung tâm của tập giá trị.
• Trong phân tích tình hình dịch Covid : giá trị
kì vọng có thể được xem là đại diệ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 độ
nghiêm trọng, tình hình của dịch Covid, cũng như
so sánh khách quan tình hình dịch giữa các quốc
gia, các châu lục...

Trang 3/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

3.2
3.2.1

Tứ phân vị
Định nghĩa

3.2.3

Trong thống kê mô tả, tứ phân vị 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
tốn tứ phân vị.

3.2.2

Phân loại

Có 3 tứ phân vị chính, đó là:

• Tứ phân vị thứ nhất (Q1 ): là số chính giữa giữa
số nhỏ nhất (minimun) và số trung vị (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.

Ý nghĩa

• Trong tính tốn thống kê: ba tứ phân vị trên
chia một tập hợp dữ liệu (đã sắp xếp theo trật tự
từ bé đến lớn) thành bốn phần có số lượng quan
sát đều bằng nhau. Nó cung cấp thơng tin về cả
trung tâm và sự phân tán của dữ liệu. Tứ phân vị
thứ nhất và thứ ba cung cấp thông tin về mức độ
chênh lệch lớn như thế nào và liệu tập dữ liệu có
bị lệch về một phía hay khơng.
• Trong phân tích tình hình dịch Covid : tứ
phân vị thứ hai (Q2 hay trung vị) có thể được sử
dụng để thay cho giá trị kì vọng thành trung tâm
của tập dữ liệu, trong trường hợp số liệu được báo
cáo có sự phân tán cao (độ lệch chuẩn lớn) để đánh
giá trình hình dịch bệnh.

• Tứ phân vị thứ hai (Q2 ): là giá trị trung vị của
một tập dữ liệu; do đó 50% dữ liệu nằm dưới điểm
này.
• Tứ phân vị thứ ba (Q3 ): là giá trị giữa giữa giá
trị trung vị (median) và số lớn nhất (maximun)
của tập dữ liệu. Nó được gọi là phần tư thực nghiệm
trên hoặc thứ 75, vì 75% dữ liệu nằm dưới điểm

này.

3.2.4

Hình 3.1. Tứ phân vị

Cách thức xác định

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,
nhưng chúng đều được công nhận là đúng. Một trong những cách thức tính tố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 = {x1 , x2 , ..., xk }.
• Tính tứ phân vi thứ hai:
– Nếu k lẻ thì: Q2 (D) = M edian(D) = x k−1
2
1
– Nếu k chẵn thì: Q2 (D) = M edian(D) = (x k + x k +1 )
2
2 2
• Tính tứ phân vị thứ nhất và thứ ba:
1. Tìm trung vị (tứ phân vị thứ hai Q2 )
– Nếu k lẻ thì loại bỏ trung vị ra khoải tập dữ liệu. Chia tập dữ liệu còn lại ra hai phần bằng nhau.
– Nếu k chẵn thì chia tập dữ liệu gốc ra hai phần bằng nhau
2. Tứ phân vị thứ nhất Q1 là trung vị của phần dữ liệu có giá trị thấp hơn. Tứ phân vị thứ ba Q3 là trung
vị của phần dữ liệu có giá trị cao hơn. Sử dụng kí hiệu tốn học, ta có thể viết:
Q1 (D)=M edian({x|x < M edian(D)})

(2)

Q3 (D)=M edian({x|x > M edian(D)})


(3)

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 4/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
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.

Ví dụ 2: Cho một tập đã được sắp xếp 7, 15, 36, 39,
40, 41; có k = 6.

• Tính tứ phân vị thứ 2: Q2 = x6 = 40.
• Chia tập dữ liệu ra hai phần bằng nhau sau khi đã
loại trung vị
+ D1 = {6, 7, 15, 36, 39} và Q1 = 15.
+ D3 = {41, 42, 43, 47, 49} và Q3 = 43.

3.3
3.3.1

• Tính tứ phân vị thứ 2: Q2 =

x3 +x4
2


= 37.5.

• Chia tập dữ liệu ra hai phần bằng nhau:
+ D1 = {7, 15, 36} và Q1 = 15.
+ D3 = {39, 40, 41} và Q3 = 40.

Phương sai - Độ lệch chuẩn
Định nghĩa

Giá trị trung bình cộng cho ta biết được các giá trị
trong tập dữ 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 sai được định nghĩa là trung bình của bình
phương khoảng cách của mỗi điểm dữ liệu tới điểm trung
bình (giá trị kỳ vọng- trung bình cộng).
i=k

(xi − M ean(D))2
V (D) =

i=0

k

Hình 3.1. Tập dữ liệu có phương sai nhỏ, các các điểm
Độ lệch chuẩn được định nghĩa là căn bậc hai của
dữ liệu phân bố gần giá trị kì vọng (mean) nên dùng giá
phương sai

trị kì vọng để mơ tả (đại diện) cho trung tâm tập dữ liệu.
Std(D) = V (D)

3.3.2

Ý nghĩa

.
• Trong tính tố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 mơ 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 mơ tả chính xác điểm
trung tâm của tập dữ liệu.

Hình 3.2. Tập dữ liệu có phương sai lớn, các các điểm
dữ liệu phân bố xa giá trị kì vọng nên dùng trung vị
• 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ị (Q2 ) để làm (median) để mô tả (đại diện) cho trung tâm tập dữ liệu.
điểm trung tâm, từ đó đánh giá chính xác hơn tình
hình dịch bệnh.

3.4

Khoảng tứ phân vị

Bài tập lớn mơn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 5/83



Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

3.4.1

Định nghĩa

Khoảng tứ phân vị của một tập dữ liệu được định
nghĩa là
IQR(D) = Q3 (D) − Q1 (D)

3.5
3.5.1

3.4.2

Khoảng tứ phân vị chính là khoảng chứa 50% các giá
trị với trung vị của tập dữ liệu là giá trị trung tâm.

Outlier
Định nghĩa

3.5.2

Outlier là những điểm dữ 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. Outliers

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.1

Ý nghĩa

• Đối với thống kê dữ 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ê.

Với IQR là khoảng tứ phân vị. Outlier là những giá
trị nằm ngoài đoạn [Q1 − 1.5 ∗ IQR; Q3 + 1.5 ∗ IQR].

3.6

Ý nghĩa

• Đối với phân tích tình hình Covid : Outliers
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.

Biểu đồ hộp (Box Plot)
Định nghĩa

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 dữ 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. Ngồ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-whisker.
3.6.2

Các thành phần

Tùy thuộc theo yêu cầu và dữ liệu mà các thành phần
và hình dạng của biểu đồ hộp có thể khác nhau. Nhung
nhìn chung đều có:
• Tứ phân vị thứ nhất (Q1 ).
• Tứ phân vị thứ ba (Q3 ).
• Tứ phân vị tứ hai (Q2 ) - trung vị.
• Khoảng tứ phân vị (IQR).
• Outlier: Có thể được loại bỏ nếu thấy cần thiết.
• Giá trị lớn nhất (Max) và giá trị nhỏ nhất (Min).

Hình 3.3. Các thành phần tạo nên một biểu đồ hộp.

• Ngồi ra cịn có thể có: giá trị kì vọng,...

Bài tập lớn mơn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 6/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

3.6.3


Ý 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
tập dữ liệu.
- Dùng để so sánh với các hàm mật độ xác suất (biểu
đồ lý thuyết) cho phân phối N(0, σ 2 ) chuẩn và quan sát
trực tiếp các đặc điểm của chúng.
- Giá trị kì vọng càng gần trung vị (Q2 ) thì nó càng
đại diện tốt hơn cho trung tâm của tập dữ liệu, phương
sai của tập dữ liệu càng nhỏ và ngược lại.
- Trung vị (Q2 ) 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 dữ
liệu mẫu.

3.7
3.7.1

Hình 3.4. Biểu đồ hộp và hàm mật độ xác suất phân
phối N(0, σ 2 )

Tần số tích lũy - Biểu đồ tích lũy
Định nghĩa

Trong thống kê, tần số của khoảng lớp thứ nhất được thêm vào tần số của lớp thứ hai, và tổng này được thêm
vào lớp thứ ba và cứ thế, các tần số thu được theo cách này được gọi là tần số tích lũy. Một bảng hiển thị các
tần số tích lũy được phân phối trên các lớp khác nhau được gọi là bảng phân phối tần số tích lũy hoặc bảng
tần suất tích lũy. Biểu đồ tần số tích lũy (cumulative frequency plots) biểu thị những thơng tin dạng tích lũy.
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ể.


3.7.2

Thiết lập bảng tần số tích lũy

- Bước 1 : Tính tố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 3 : Tìm số lượng tần số cho mỗi khoảng;
- Bước 4 : Tính tốn tần số tích lũy bằn cách cộng dồ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.

3.7.3

Ý nghĩa

- Tần suất tích lũy được sử dụng để biết số lượng quan sát nằm trên (hoặc thấp hơn) một tần số cụ thể trong
một tập dữ liệu nhất định
- Các cột của biểu đồ càng ít, chiều cao các cột càng gần nhau thì số lượng quan sát càng gần nhau.

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 7/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

Hình 3.5. Biểu đồ tần số bình thường.

3.8
3.8.1


Hình 3.6. Biểu đồ tần số tích lũy tương ứng.

Đường trung bình động
Định nghĩa

Trong thống kê, đường trung bình động là một
phép tính được sử dụng để phân tích các điểm dữ 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 dữ liệu đầy đủ.

3.8.2

Tính tố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 dữ liệu trước đó
Hình 3.7. Ứng dụng của đường trung bình động trong
việc làm "mịn" dữ liệu và dự đốn biến động.
i=n

pi
SM Dk =

i=n−k+1

k
(4)

3.8.3


Đặc điểm: với k càng nhỏ độ nhạy của đường trung
bình MA càng cao và càng phụ thuộc vào dữ liệu, càng
khó làm mịn đường biểu đồ và khó dự đốn chiều biến
thiên.

Ý nghĩa

• Làm "mị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;
• Xác định xu hướng của dữ liệu trong thời gian dài hạn;
• Dữ đốn một số lượng nhỏ số liệu bị mất hoặc không được báo cáo thường xun.
• Trong việc phân tích tình hình dịch Covid: Đưa dữ liệu về số ca nhiễm/ tử vong về gần với giá trị chính xác
do dai sai sót trong nhập liệu hoặc không được báo cáo thường xuyên, dự đốn tình hình phát triển của dịch
bệnh trong thời gian sắp tới...

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 8/83


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
3.9.1

Hệ số tương quan
Hệ số tương quan Pearson

Hệ số tương quan Pearson (Pearson correlation coefficient, 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 thẳng 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 n điểm (xi , yi ), hệ số tương quan Pearson được tính bằng:
n

(xi − x
¯)(yi − y¯)
rxy =

i=1
n

n

(xi − x
¯ )2
i=1

(yi − y¯)2
i=1

Trong đó, x
¯ và y¯ lần lượt là giá trị trung bình của tập các giá trị xi và yi , σx và σy là độ lệch chuẩn của tập các
giá trị xi và yi .
Hệ số tương quan Pearson (r ) sẽ nhận giá trị từ +1
đến -1, cho biết mức độ tương quan giữa hai biến:
• 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ẽ.
• 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 thuận;
• Với r càng tiến gần đến 1 hoặc -1, 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 Hình 3.8. Gía trị của hệ số pearson vè sự tương quan
giữa hai biến số
tiến gần về 0

3.9.2

Hồi quy tuyến tính, phương pháp bình phương cực tiểu

Hồi quy tuyến tính là một bài tố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ó dạng (xi , yi ). 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,... Ở mụ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 dữ liệu P với n điểm dữ liệu và một mơ hình tuyến tính F(x) = w0 + w1 x.
• Tại mỗi điểm xi ta ký hiệu yˆi = F(xi ).
n

• Ta xét hàm số L(F) =


yi − yi )2 làm thước đo độ chính xác cho mơ hình tuyến tính F.
i=1

Bài tập lớn mơn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022


Trang 9/83


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 yi càng gần yˆi hay đường thẳng y = F càng đi qua chính xác các điểm thì L((F )) càng
nhỏ. L(F) = 0 ⇐⇒ y = F đi qua tất cả các điểm dữ liệu.
Điều này không phải lúc nào cũng khả thi, ta sẽ tìm mơ hình F mà hàm L đạt giá trị cực tiểu. Ta sử dụng Phương
pháp bình phương cực tiểu.
n

n

• Với F(x) = w0 + w1 x ta có L(F) =

yi − yi )2 =
(w0 + w1 xi − yi )2 .
 i=1

 i=1 
y1
1 x1
 y2 
1 x2 
w0
 


Xét các vector w =


y
=
, X = .
 .. .

..
w1
.
 ..

.
yn
1 xn
Xét tích vơ hướng chính tắc, tức là (u, v) = uT v với u và v là các vector trong không gian Rn .
Như vậy v = v T v.
n

(w0 + w1 xi − yi )2 = L(F).

Ta có, Xw − y =
i=0

Như vậy, để L(F) đạt cực tiểu, Xw − y phải đạt cực tiểu, hay Xw − y ⊥ Col(X).
• Ta cần tìm w thỏa mãn với mọi vector v,
Xw − y ⊥ Xv ⇐⇒ (Xv, Xw − y) = 0 ⇐⇒ v T X T (Xw − y) = 0

⇐⇒ v T X T Xw = v T X T y ⇐⇒

⇐⇒


X T Xw
X T Xw

v1 v2

Vì v1 và v2 tùy ý nên nên ta chọn v1 và v2 để v1
X T Xw
XT y
=
T
X Xw
XT y

v2

T

T

v1T X T Xw
vT X T y
= 1T T
T
T
v2 X Xw
v2 X y
=

XT y

XT y

v1 v2

T

= I. Khi đó,

⇐⇒ X T Xw = X T y

Vì các vector cột của X độc lập tuyến tính, chứng minh được X T X khả nghịch.
Vì vậy, ta có công thức (5) như sau:
w = (X T X)−1 X T y

Cơng thức trên chính là cơng thức để tính hệ số tối ưu của đường thẳng đi qua chính xác nhất các điểm dữ liệu.

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 10/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

4

Phân tích dữ liệu

4.1


Tập dữ liệu mẫu

Dữ liệu gồm có 6 thuộc tính chính “iso_code, continent, location, date, new_cases, new_deaths” được
lưu trong file dưới định dạng *csv:
1. iso_code: Định danh đất nước
2. continent: Tên châu lục
3. location: Tên quốc gia
4. date: Ngày quan sát với định dạng Month-Day-Year
5. new_cases: Số trường hợp COVID-19 mới được xác nhận
6. new_deaths: Số tử vong mới do COVID-19

4.2
4.2.1

Tiền xử lí
Cài đặt các packages (gói) và source file chứa các hàm tính tốn cần thiết

Kiểm tra và cài đặt các packages cần thiết:

1
2

install . packages ( " pacman " )
pacman :: p _ load ( dplyr , readxl , tidyverse ,
cowplot , randomcoloR , plyr , scales , utf8 ,
matlib , here )

Hàm p_load() kiểm tra và chỉ cài đặt các gói (packages)
chưa được cài đặt. Một cơng cụ hiệu quả hơn so với việc
cài đặt từng gói bằng install.packages(). Các packages

được sử dụng sẽ được liệt kê chi tiết trong phụ lục.

Cài đặt source file:

1

source ( here :: here ( " function . R " ) )

4.2.2

Trong đó: function.R là source file, nơi chứa các hàm
hỗ trợ mà ta sẽ xây dựng để phục vụ cho việc tính tốn.
Source file này cần được lưu trong cùng thư mục chứa
file thực thi.

Đọc dữ liệu từ file vào dataframe (khung dữ liệu)

Dữ liệu được lưu ở file 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ừ file owid-covid-data.csv vào khung dữ liệu COVID.DATA và hiển thị trên màn hình
một số dịng đầu tiên của dữ liệu trong R như sau:
1
2

COVID . DATA <- read . csv ( " owid - covid - data . csv " )
head ( COVID . DATA )

Kết quả hiển trị trên màn hình như sau:

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022


Trang 11/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

1
2
3
4
5
6

iso_code continent
location
date new_cases new_deaths
AFG
Asia Afghanistan 2/24/2020
5
NA
AFG
Asia Afghanistan 2/25/2020
0
NA
AFG
Asia Afghanistan 2/26/2020
0
NA
AFG
Asia Afghanistan 2/27/2020

0
NA
AFG
Asia Afghanistan 2/28/2020
0
NA
AFG
Asia Afghanistan 2/29/2020
0
NA

4.2.3
1

Kiểm tra cấu trúc của tập dữ liệu mẫu

str ( COVID . DATA )

Kết quả hiển thị trên màn hình như sau:
'data.frame': 163090 obs. of 6 variables:
$ iso_code : chr "AFG" "AFG" "AFG" "AFG" ...
$ continent : chr "Asia" "Asia" "Asia" "Asia" ...
$ location : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
$ date
: chr "2/24/2020" "2/25/2020" "2/26/2020" "2/27/2020" ...
$ new_cases : int 5 0 0 0 0 0 0 0 0 0 ...
$ new_deaths: int NA NA NA NA NA NA NA NA NA NA ...

4.3


Chuẩn hóa dữ liệu

4.3.1

Chuẩn hóa kiểu dữ liệu của thuộc tính date (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 tốn và xử lí số liệu
sau này, cần chuyển kiểu dữ liệu sang định dạng ngày tháng <date>, lệnh R sau thực hiện nhiệm vụ trên:
1

COVID . DATA $ date <- as . Date ( COVID . DATA $ date , format = " % m / % d / % Y " )

Sau đó, có thể dùng lại hàm str() để xem lại cấu trúc của khung dữ liệu. Kết quả cho thấy sự thay đổi:
$ date : Date, format: "2020-02-24" "2020-02-25" "2020-02-26" ...

4.3.2

Xử lí các giá trị âm trong new_cases và 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ư:
26
680

iso_code continent
location
date new_cases new_deaths
AFG
Asia Afghanistan 2/20/2020
-2
NA

AFG
Asia Afghanistan 2/03/2022
-6
NA
...

new_cases và new_deaths đại diện cho số ca nhiễm và số ca tử vong mới, vì vậy chúng khơng thể mang giá trị
âm. Các giá trị trên có thể bị sai sót trong q trình nhập liệu. Vì vậy ta cần chuẩn hóa, lấy trị tuyệt đối bằng
abs():
1
2

COVID . DATA $ new _ cases <- abs ( COVID . DATA $ new _ cases )
COVID . DATA $ new _ deaths <- abs ( COVID . DATA $ new _ deaths )

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 12/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

4.3.3

Lọc ra những dữ liệu khơng phải là quốc gia

Thuộc tính location chứa một số tên riêng không phải một quốc gia cụ thể mà là số liệu tổng hợp của các quốc
gia có chung tính chất, chẳng hạn như: thuộc cùng một lục địa, nhóm có nền kinh tế phát triển,..., chẳng hạn
như:

iso_code continent
728
OWID_AFR
86947
OWID_LIC
...

location
date new_cases new_deaths
Africa 2/13/2020
0
0
Low income 2/23/2020
0
0

Nhận thấy rằng thuộc tính continent của chúng ln là kí tự rỗng "". Để có thể xử lí tốt hơn trên dữ liệu, cần tách
các dữ liệu có tính chất như vậy ra khỏi khung COVID.DATA. Trong R ta hiện thực như sau:
1
2

NOT . COUNTRY <- unique ( filter ( COVID . DATA , continent == ' ') $ iso _ code )
COVID . DATA <- COVID . DATA [ ! ( COVID . DATA $ iso _ code % in % NOT . COUNTRY ) , ]

Trong đó:
• Dịng 1 : dùng filter() và unique() để lọc và liệt kê các iso_code có continent mang giá trị rỗng, lưu vào
NOT.COUNTRY.
• Dịng 2 : lọc các quan sát mà iso_code có trong NOT.COUNTRY ra khỏi khung dữ liệu.
Dùng str(), thấy khung dữ liệu chỉ còn giữ lại 153316
quan sát thuộc về các quốc gia không nằm trong 13 tên

riêng kia:

Sau khi lọc dữ liệu, ta thu được 13 iso_code không
phải là quốc gia nằm trong NOT.COUNTRY như
sau:
"OWID_AFR" "OWID_ASI" "OWID_EUR" "OWID_EUN"
"OWID_HIC" "OWID_INT" "OWID_LIC" "OWID_LMC"
"OWID_NAM" "OWID_OCE" "OWID_SAM" "OWID_UMC"
"OWID_WRL"

4.4

’data.frame’: 153316 obs. of 6 variables:

Dữ liệu được phân công riêng

Dữ liệu được phân công riêng bao gồm ba nước
Australia, New Caledonia và New Zealand, theo
thời gian, dữ liệu được phân công là bốn tháng 2, 5,
6 và 9.

1

2

country <- c ( ' Australia ' , ' New Caledonia ' ,
' New Zealand ')
month <- c ( " 02 " ," 05 " ," 06 " ," 09 " )

Tiến hành lọc các dữ liệu thuộc về ba nước trên và lưu vào khung dữ liệu riêng CHOSEN.DATA:

1

CHOSEN . DATA <- COVID . DATA [ COVID . DATA $ location % in % country , ]

4.5

Kết quả phân tích

i) Nhóm câu hỏi liên quan đến tổng quát dữ liệu:
Dùng tập dữ liệu để trả lời các câu hỏi và trình bày theo đinh dạng.
Các hàm sau được xây dựng để hỗ trợ xử lí dữ liệu:

Bài tập lớn mơn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 13/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính
• list.obs(data, attr1, attr2): Liệt kê giá trị của thuộc tính và đếm số lần xuất hiện.
1
2
3

4
5
6

list . obs <- function ( data , attr1 , attr2 = " NULL " ) {
if ( attr2 ! = " NULL " ) {

data <- data % >% group _ by (. data [ [ attr1 ] ] , . data [ [ attr2 ] ] ) % >% dplyr :: summarise
( Observations = n () ) }
else {
data <- data % >% group _ by (. data [ [ attr1 ] ] ) % >% dplyr :: summarise ( Observations = n () ) }
return ( data . frame ( data ) ) }

Trong đó:
Khung dữ liệu trả về nếu attr2 được nhập:
– Tham số đầu vào:
attr1
attr2
Observations
∗ data: khung dữ liệu muốn thao tác;
giá trị attr1.1 giá trị attr2.1
số lượng 1
∗ attr1 và attr2: chuỗi kí tự là tên thuộc tính
giá trị attr1.2 giá trị attr2.2
số lượng 2
của khung dữ liệu. attr2 là thuộc tính tùy
giá trị attr1.3 giá trị attr2.3
số lượng 3
chọn, có thể để trống nếu chỉ muốn gộp dữ
Khung dữ liệu trả về nếu attr2 khơng được nhập,
liệu theo một thuộc tính.
– Dữ liệu trả về : một khung dữ liệu liệt kê các chỉ thao tác trên thuộc tính attr1:
giá trị của các thuộc tính và số lần xuất hiện (số
attr1
Observations
quan sát) của giá trị đó trong cột Observations.
giá trị attr1.1

số lượng 1
– Dòng 1, 2, 3 : Nếu attr2 được nhập vào, gộp
giá trị attr1.2
số lượng 2
dữ liệu theo cả attr1 và attr2 bằng group_by(),
giá trị attr1.3
số lượng 3
đếm số lần xuất hiện theo thuộc tính đã gộp
bằng n() trong sumarise().
– Dịng 4, 5 : Nếu attr2 không được nhập vào,
chỉ gộp dữ liệu và đếm số lần xuất hiện theo
attr1.
• find.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
2

find . obs <- function ( data , func ) {
return ( data [ data $ Observations == func ( data $ Observations ) , ] ) }

Trong đó:
– Tham số đầu vào:
∗ data: khung dữ liệu đã được xử lí từ hàm find.obs (data, func) hoặc có cấu trúc tương tự.
∗ func nhận hai giá trị min hoặc max. Hàm trả về một khung dữ 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ả về : một khung dữ 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 dữ liệu vào các năm nào?
Dùng unique() liệt kê các năm xuất hiện trong thuộc tính date, lưu vào year
1

year <- unique ( format ( COVID . DATA $ date , " % Y " ) )


Kết quả hiển thị trên màn hình:
> year
[1] "2020" "2021" "2022"

Vậy tập mẫu thu thập dữ liệu vào 3 năm:
2020, 2021 và 2022.

2) Số lượng đất nước và định danh mỗi đất nước (hiển thị 10 đất nước đầu tiên).
1
2
3

LOC . ISO <- list . obs ( COVID . DATA , ' iso _ code ' , ' location ') [ c ( ' iso _ code ' , ' location ') ]
names ( LOC . ISO ) <- c ( ' iso _ code ' , ' Country ')
print ( rbind ( LOC . ISO % >% head (10) , c ( ' Count : ' , nrow ( LOC . ISO ) ) ) , row . names = FALSE )

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 14/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

Trong đó:
- Dịng 1 : Liệt kê các đất nước và định danh bằng
hàm list.obs() và lưu dữ liệu đầy đủ vào LOC.ISO.
- Dòng 2, 3 : In theo định dạng 10 đất nước đầu
tiên kèm định danh.


Vậy có 225 đất nước được thu thập dữ liệu

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

3) Số lượng châu lục trong tập mẫu
Viết code tương tự như i.2 , và lưu dữ liệu vào CONTINENT trong R như sau:
1

2
3

CONTINENT <- list . obs ( COVID . DATA , " continent " ) [ c ( ' continent ') ]
names ( CONTINENT ) <- c ( paste ( ' Continent : ' , nrow ( CONTINENT ) ) )
print ( CONTINENT , row . names = FALSE )

Kết quả hiển thị trên màn hình:
Continent: 6
Africa
Asia
Europe
North America
Oceania
South America

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.

4) Số lượng dữ liệu thu thập được trong từng châu lục và tổng số.
1
2

CONTINENT . OBS <- list . obs ( COVID . DATA , ' continent ')
print ( rbind ( CONTINENT . OBS , c ( ' Count : ' , sum ( CONTINENT . OBS $ Observations ) ) ) ,
row . names = FALSE )

Trong đó:
- Dịng 1 : Liệt kê các châu lục kèm số lượng dữ
liệu thu thâp (số quan sát) bằng hàm list.obs() và

lưu dữ liệu đầy đủ vào CONTINENT.OBS.
- Dòng 2 : In theo định dạng cho trước.

Vậy có tổng số 153316 quán sát từ tất cả các châu
lục.

Kết quả hiển thị trên màn hình:
continent Observations
Africa
38647
Asia
35528
Europe
36375
North America
24438
Oceania
8993
South America
9335
Count:
153316

5) Số lượng dữ liệu thu thập được trong từng từng đất nước (hiển thị 10 dất nước cuối cùng) và tổng số.
Viết các đoạn code tương tự như i.4 và lưu dữ liệu đầy đủ vào COUNTRY.OBS.
1
2

COUNTRY . OBS <- list . obs ( COVID . DATA , ' iso _ code ')
print ( rbind ( COUNTRY . OBS % >% tail (10) , c ( ' Count : ' , sum ( COUNTRY . OBS $ Observations ) ) ) ,

row . names = FALSE )

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 15/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

Kết quả hiển thị trên màn hình console:
iso_code Observations
VEN
708
VGB
694
VNM
759
VUT
467
WLF
489
WSM
459
YEM
681
ZAF
744
ZMB
704

ZWE
702
Count:
153316

Vậy có tổng số 153316 qn sát từ tất cả các quốc
gia.
Cần lưu ý tổng quan sát (tổng dữ liệu thu thâp) của
tất cả các châu lục bằng tổng quan sát của tất cả
các nước và phải bằng tổng số quan sát của tập
dữ liệu mẫu sau khi đã loại các tên riêng không
phải quốc gia (đều bằng 153316 quan sát)

6) Cho biết các châu lục nào có lượng dữ liệu thu thập nhỏ nhất và giá trị nhó nhất đó?
1

print ( MIN . CONTINENT . OBS <- find . obs ( list . obs ( COVID . DATA , ' continent ') , min ) , row . names = FALSE )

Trong đó:
• list.obs (COVID.DATA, ’continent’) trả về
khung dữ liệu chứa số lượng dữ liệu thu
thập được theo châu lục, tương tự như
CONTINENT.OBS.
• find.obs (..., min) trả về khung dữ liệu chứa
châu lục và lượng dữ liệu thu thập nhỏ nhất.

Kết quả hiển thị trên màn hình như sau:
continent Observations
Oceania
8993

Vậy châu lục có lượng dữ liệu thu thập nhỏ nhất là
Châu Đại Dương-Oceania, với tổng số quan sát
là 8993.

Lưu ý: Từ i.7 đến i.14, các đoạn code được viết tương tự như i.4 hoặc i.6, chỉ thay đổi một số tham số trong
hai hàm list.obs() và find.obs().
7) Cho biết các châu lục nào có lượng dữ liệu thu thập lớn nhất và giá trị lớn nhất đó?
Viết đoạn code tương tự như i.6 nhưng dùng find.obs(..., max), lưu dữ liệu ở MAX.CONTINENT.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:
continent Observations
Africa
38647

Vậy châu lục có lượng dữ liệu thu thập lớn nhất là
Châu Phi-Africa, với tổng số quan sát là 38647.

8) Cho biết các nước nào có lượng dữ liệu thu thập nhỏ nhất và giá trị nhỏ nhất đó?
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:
location Observations
Pitcairn
85


Vậy quốc gia có lượng dữ liệu thu thập nhỏ nhất là
Pitcairn, với tổng số quan sát là 85.

9) Cho biết các nước nào có lượng dữ liệu thu thập lớn nhất và giá trị lớn nhất đó?
1

print ( MAX . COUNTRY . OBS <- find . obs ( list . obs ( COVID . DATA , ' location ') , max ) , row . names = FALSE )

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 16/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

Kết quả hiển thị trên màn hình như sau:
location Observations
Argentina
781
Mexico
781

Vậy các quốc gia có lượng dữ liệu thu thập lớn nhất
là Argentina và Mexico, với tổng số quan sát là
781.

10) Cho biết các date nào có lượng dữ liệu thu thập nhỏ nhất và 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:
date Observations
2020-01-01
2
2020-01-02
2
2020-01-03
2

Vậy các ngày có lượng dữ liệu thu thập nhỏ nhất là
từ 1/1/2020 đến 1/3/2020, với tổng số bản ghi là
2.

11) Cho biết các date nào có lượng dữ liệu thu thập lớn nhất và giá trị lớn nhất đó?
1

print ( MAX . DATE . OBS <- find . obs ( list . obs ( COVID . DATA , ' date ') , max ) , row . names = FALSE )

Kết quả hiển thị trên màn hình như sau:
date Observations
2021-08-22
225
2021-08-23
225
2021-08-24
225
2021-08-25
225

2021-08-26
225
2021-08-27
225
2021-08-28
225
2021-08-29
225

Vậy các ngày có lượng dữ liệu thu thập lớn nhất là
các ngày từ 8/22/2021 đến 8/29/2021, với tổng
số bản ghi là 225.

12) Cho biết số lượng dữ liệu thu thập được theo date và 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 (dữ liệu đầy đủ được lưu ở
DATE.CONTINENT.OBS).
1
2

DATE . CONTINENT . OBS <- list . obs ( COVID . DATA , ' date ' , ' continent ')
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
2022-02-19
Asia
48
2022-02-19
Europe

49
2022-02-19 North America
34
2022-02-19
Oceania
16
2022-02-19 South America
13

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 thị trên màn hình chỉ
là 5 dịng (quan sát) cuối cùng của bảng kết quả
DATE.CONTINENT.OBS (bảng kết quả dầy đủ có
4600 dịng).

13) Cho biết số lượng dữ liệu thu thập được là nhỏ nhất theo date và châu lục.
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
2

MIN . DATE . CONTINENT . OBS <- find . obs ( list . obs ( COVID . DATA , ' date ' , ' continent ') , min )
print ( MIN . DATE . CONTINENT . OBS % >% head (5) , row . names = FALSE )

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 17/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh

Khoa Khoa Học & Kỹ Thuật Máy Tính

Kết quả hiển thị trên màn hình như sau:
date
2020-01-01
2020-01-01
2020-01-02
2020-01-02
2020-01-03

continent Observations
North America
1
South America
1
North America
1
South America
1
North America
1

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 thị trên màn hình
chỉ là 5 dòng (quan sát) đầu tiên của bảng kết quả
MIN.DATE.CONTINENT.OBS (bảng kết quả dầy
đủ có 232 quan sát).
Vậy số lượng dữ liệu thu thập được là nhỏ nhất theo
ngày và châu lục là 1 quan sát.


14) Cho biết số lượng dữ liệu thu thập được là lớn nhất theo date và châu lục.
Các lệnh R sau hiển thị số lượng dữ 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
2

MAX . DATE . CONTINENT . OBS <- find . obs ( list . obs ( COVID . DATA , ' date ' , ' continent ') , max )
print ( MAX . DATE . CONTINENT . OBS % >% head (5) , row . names = FALSE )

Kết quả hiển thị trên màn hình như sau:
date continent Observations
2020-09-07
Africa
55
2020-09-08
Africa
55
2020-09-09
Africa
55
2020-09-10
Africa
55
2020-09-11
Africa
55

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 thị trên màn hình
chỉ là 5 dòng (quan sát) đầu tiên của bảng kết quả

MAX.DATE.CONTINENT.OBS (bảng kết quả dầy
đủ có 531 quan sát).
Vậy số lượng dữ liệu thu thập được là nhỏ nhất theo
ngày và châu lục là 55 quan sát.

15) Với một date là k và châu lục t cho trước, hãy cho biết số lượng dữ liệu thu thập được.
• Xây dựng hàm date.continent.find.obs(k, t)
1
2

date . continent . find . obs <- function (k , t ) {
return ( nrow ( filter ( COVID . DATA , date == k , continent == t ) ) ) }

Trong đó:
– Tham số đầu vào:
∗ k: là chuỗi kí tự date cho trước.
∗ t: là chuỗi kí tự chứa châu lục (continent) cho trước
– Dữ liệu trả về : số lượng dữ liệu thu thập được (số quan sát) theo date và continent cho trước.
– Dò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ố dịng của
một khung dữ liệu.
• Kết quả với một số bộ dữ liệu như sau:
> date.continent.find.obs("2020-09-07", "Africa")
[1] 55
> date.continent.find.obs("2023-09-07", "Africa")
[1] 0
> date.continent.find.obs("2020-01-01", "North America")
[1] 1
16) Có đất nước nào mà số lượng dữ liệu thu thập được là bằng nhau khơng? Hãy cho biết các iso_code của đất
nước đó.
• Lệnh R sau hiển thị các đất nước có số lượng dữ liệu thu thập được là bằng nhau (dữ liệu đầy đủ được

lưu ở GROUP.OBS).
1

GROUP . OBS <- list . obs ( COVID . DATA , ' location ') % >% group _ by ( Observations ) % >%
dplyr :: summarise ( Country = paste ( location , collapse = " , " ) )

Trong đó:
– list.obs(COVID.DATA,’location’): tạo khung dữ liệu liệt kê các châu lục cùng số lượng quan sát,
tương tự như CONTINENT.OBS
Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 18/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

– group_by(Observations) và summarise() gộp dữ liệu theo Observations và liệt kê các nước có cùng
số lượng quan sát.
• Kết quả thu được 88 nhóm nước có cùng chung số lượng quan sát, liệt kê 5 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
766

Taiwan
778
Thailand
781
Argentina , Mexico
17) Liệt kê iso_code, tên đất nước mà chiều dài iso_code lớn hơn 3.
1

print ( SPECIAL . ID <- LOC . ISO [ ( nchar ( LOC . ISO $ iso _ code ) > 3) , ] , row . names = FALSE )

Kết hiển thị trên màn hình như sau:
iso_code
Country
OWID_CYN Northern Cyprus
OWID_KOS
Kosovo

Vậy có hai đất nước (khơng tính các tên không phải
đất nước đã được loại bỏ) là Cyprus và Kosovo.

ii) Nhóm câu hỏi liên quan đến mơ tả thống kê cơ bản dữ 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
• Chuẩn hóa dữ liệu: Các dữ liệu trống NA (xuất hiện do không được báo cáo thường xun) hầu như
khơng có giá trị trong mơ tả thống kê.
Dùng phương thức complete.cases() loại bỏ các quan sát về số ca nhiễm mới new_cases và số ca tử vong
mới new_deaths không được báo cáo và lưu dữ liệu vào hai khung NEW.CASES và NEW.DEATHS.
1
2

NEW . CASES <- CHOSEN . DATA [ complete . cases ( CHOSEN . DATA $ new _ cases ) ,] [ c ( ' location ' , ' new _ cases ') ]

NEW . DEATHS <- CHOSEN . DATA [ complete . cases ( CHOSEN . DATA $ new _ deaths ) ,] [ c ( ' location ' , ' new _ deaths ') ]

Một phần dữ liệu trong NEW.CASES:

Một phần dữ liệu trong NEW.DEATHS:

location new_cases
Australia
4
Australia
1
Australia
0
Australia
1
Australia
3

location new_deaths
Australia
1
Australia
0
Australia
0
Australia
1
Australia
0


• Xây dựng các hàm tìm các tứ phân vị và số lượng Outlier :
1
2
3
4
5
6
7
8

Q1 <- function ( attr ) {
return ( median ( sort ( attr , decreasing = FALSE ) [ 1 : floor ( length ( attr ) / 2) ] ) ) }
Q2 <- function ( attr ) {
return ( median ( sort ( attr , decreasing = FALSE ) ) ) }
Q3 <- function ( attr ) {
return ( median ( sort ( attr , decreasing = FALSE ) [ ceiling ( length ( attr ) / 2+1) : length ( attr ) ] ) ) }
Outliers <- function ( attr ) {
return ( sum
( attr < Q1 ( attr ) -1.5 * ( Q3 ( attr ) - Q1 ( attr ) ) | attr > Q3 ( attr ) +1.5 * ( Q3 ( attr ) - Q1 ( attr ) ) ) ) }

Trong đó:
– Tham số đầu vào: attr: là một vector chứa dữ liệu cần xử lí
– Dữ liệu trả về : dạng số là các tứ phân vị và số lượng Outliers trong tập dữ liệu.
Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 19/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa 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 Outliers() đếm số quan sát thỏa điều kiện Outlier bằng sum()
1) Tính giá trị nhỏ nhất, lớn nhất
• 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 đó:
– min(new_cases) trả về giá trị nhỏ nhất của
số ca nhiễm mới, max(new_cases) trả về giá
trị lớn nhất của số ca nhiễm mới.
– Khung dữ liệu kết quả được lưu ở
MIN.MAX.CASES

Kết quả hiển thị trên màn hình như sau:
Country Min_cases Max_cases
Australia
0
175271
New Caledonia
0
3343
New Zealand
0
2336


• 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 ) % >%
dplyr :: summarise ( Min _ deaths = min ( new _ deaths ) , Max _ deaths = max ( 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:
MIN.MAX.DEATHS.
Kết quả hiển thị trên màn hình như sau:

Country Min_deaths Max_deaths
Australia
0
155
New Caledonia
0
16
New Zealand
0
4

Nhận xét: Số ca nhiễm và tử vong lớn nhất từng đạt được trong ngày được báo cáo mới của Australia lớn
gấp nhiều lần so với hai nước còn lại.
2) Tính tứ phân vị thứ nhất(Q1), thứ hai(Q2), thứ ba(Q3)
• Tứ phân vị của số ca nhiễm được báo cáo mới:
1


print . data . frame ( MEDIAN . CASES <- NEW . CASES % >% group _ by ( Country = location ) % >%
dplyr :: summarise ( Q1 = Q1 ( new _ cases ) , Q2 = Q2 ( new _ cases ) , Q3 = Q3 ( new _ cases ) ) ,
row . names = FALSE )

Trong đó:
– Q1(new_cases),Q2(new_cases), Q3(new_cases)
lần lươt trả về tứ phân vị thứ nhất, thứ hai
và thứ ba của số ca nhiễm mới.
– Khung dữ liệu kết quả được lưu ở
MEDIAN.CASES

Kết quả hiển thị trên màn hình:
Country Q1
Q2 Q3
Australia 10 26.5 646
New Caledonia 0 0.0
1
New Zealand 1 4.0 23

Nhận xét:
- Mặc dù 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ày thấp hơn 1000 lại chiếm khá lớn, bằng chứng là từ các tứ phân vị, số ngày có số ca
nhiễm từ 10 đến 646 đã chiếm gần 50% số ngày mà ta thu thập dữ liệu (xem ý nghĩa của khoảng tứ
phân vị). Nếu quan sát tập dữ liệu về nhiễm bệnh mới của Australia thì số lượng ca nhiễm mới bắt
đầu tăng nhanh chỉ vào khoảng thời gian cuối của tập dữ liệu.
- Độ chệnh lệch giữa Q3 và Q2 lớn hơn so giữa Q2 và Q1 , điều này chứng tỏ số ca nhiễm tăng nhanh,
nhưng số lượng ngày 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ày 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 xét cho hai nước cịn lại.

Bài tập lớn mơn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 20/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính
• Tứ phân vị của số ca tử vong được báo cáo mới:
1

print . data . frame ( MEDIAN . DEATHS <- NEW . DEATHS % >% group _ by ( Country = location ) % >%
dplyr :: summarise ( Q1 = Q1 ( new _ deaths ) , Q2 = Q2 ( new _ deaths ) , Q3 = Q3 ( 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:
MEADIAN.DEATHS.
Kết quả hiển thị trên màn hình:

Country Q1 Q2 Q3
Australia 0 0 7
New Caledonia 0 0 1
New Zealand 0 0 0

Nhận xét:
- Có thể rút ra nhận xét tương tự như số ca nhiễm.
- Tuy nhiên, số ca tử vong thấp hơn rất nhiều so với số ca nhiễm nên sự tăng lên về số ca tử vong không
đáng kể.
3) Tính giá trị trung bình (Avg)
• 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 đó:
– mean(new_cases) trả về giá trị trung bình
của số ca nhiễm mới.
– Khung dữ liệu kết quả được lưu ở
AVG.CASES.

Kết quả hiển thị trên màn hình:
Country
Avg
Australia 4086.63757
New Caledonia
62.51709
New Zealand
43.01107

• Giá trị trung bình các ca tử vong được báo cáo mới là:
1

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) Tính giá trị độ lệch chuẩn (Std)
• Độ 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 ( new _ cases ) ) , row . names = FALSE )

Trong đó:
– sd(new_cases) trả về giá trị độ lệch chuẩn
của số ca nhiễm mới.
– Khung dữ liệu kết quả được lưu ở
STD.CASES.

Kết quả hiển thị trên màn hình:
Country
Std
Australia 15911.0514
New Caledonia
279.5023
New Zealand
171.8859

• Độ lệch chuẩn các ca tử vong được báo cáo mới:
1


print . data . frame ( STD . DEATHS <- NEW . DEATHS % >% group _ by ( Country = location ) % >%
dplyr :: summarise ( Std = sd ( new _ deaths ) ) , row . names = FALSE )

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 21/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
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:
• Dữ liệu về cả số ca nhiễm bệnh và tử vong 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ử vong.
• Dữ liệu về số ca nhiễm mới và số ca tử vong mới của Australia có sự phân tán lớn nhất so với giá trị
trung bình trong cả ba nước. Điều này chứng tỏ gia trị kì vọng khơng phản một cách chính xác trung
tâm của tập dữ liệu của Australia
• Ở mặt ngược lại dữ liệu của New Zealand lại ít có sự phân tán. Gía trị kì vọng thể hiện tốt trung tâm
của tập dữ liệu, đặc biệt là số ca tử vong của quốc gia này.

5) Đếm xem có bao nhiêu outliers
• 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 đó:
– outliers(new_cases) trả về số lượng outliers
của số ca nhiễm mới.
– Khung dữ liệu kết quả được lưu ở
OUTLIERS.CASES.

Kết quả hiển thị trên màn hình:
Country Outliers
Australia
127
New Caledonia
151
New Zealand
132

• Số outliers của số ca tử vong được báo cáo mới là:
1

print . data . frame ( OUTLIERS . DEATHS <- NEW . DEATHS % >% group _ by ( Country = location ) % >%
dplyr :: summarise ( Outliers = Outliers ( 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:

OUTLIERS.DEATHS. Kết quả hiển thị trên

màn hình:
Country Outliers
Australia
60
New Caledonia
33
New Zealand
41

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.
• Bảng mơ tả cho số ca nhiễm:
1

2
3
4
5

print . data . frame ( TABLE . CASES <- NEW . CASES % >% group _ by ( Country = location ) % >%
dplyr :: summarise (
Min = min ( new _ cases ) ,
Q1 = Q1 ( new _ cases ) , Q2 = Q2 ( new _ cases ) , Q3 = Q3 ( new _ cases ) ,
Max = max ( new _ cases ) ,
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
New Caledonia
0 0 0.0
1
3343
62.51709
279.5023
151
New Zealand
0 1 4.0 23
2336
43.01107
171.8859
132
• Bảng mô tả cho số ca tử vong:
Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 22/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính


1

2
3
4
5

print . data . frame ( TABLE . DEATHS <- NEW . DEATHS % >% group _ by ( Country = location ) % >%
dplyr :: summarise (
Min = min ( new _ deaths ) ,
Q1 = Q1 ( new _ deaths ) , Q2 = Q2 ( new _ deaths ) , Q3 = Q3 ( new _ deaths ) ,
Max = max ( new _ deaths ) ,
Avg = mean ( new _ deaths ) , Std = sd ( new _ deaths ) , Outliers = Outliers ( new _ deaths ) ) ,
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 0 0 7 155 6.82108183 15.7884416
60
New Caledonia
0 0 0 1 16 1.76073620 3.4459394
33
New Zealand
0 0 0 0
4 0.07647908 0.3462153
41
7) Vẽ biểu đồ boxplot hay còn đượ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:
• Biểu đồ boxplot cho số ca nhiễm mới:
1

boxplot ( new _ cases ~ location , NEW . CASES ,
xlab = " Country " , ylab = " New Cases " ,
main = " Box plot New Cases " )

Kết quả hiển thị trên màn hình như sau:

• Biểu đồ boxplot cho số ca tử vong mới:
1

boxplot ( new _ deaths ~ location , NEW . DEATHS ,
xlab = " Country " , ylab = " New Death " ,
main = " Box plot New Deaths " )

Kết quả hiển thị trên màn hình như sau:

• Để có quan sát rõ hơn, ta sẽ loại bỏ các giá trị Outliers và vẽ từng biểu đồ cho từng quốc gia:
1
2

3

for ( i in country ) {
boxplot ( new _ cases ~ location , filter ( NEW . CASES , location == i ) , xlab = i , ylab =
" New Cases " , main = paste ( " Box plot New Cases in " , i ) , outline = FALSE )
boxplot ( new _ deaths ~ location , filter ( NEW . DEATHS , location == i ) , xlab = i , ylab =
" New Deaths " , main = paste ( " Box plot New Deaths in " , i ) , outline = FALSE ) }


Biểu đồ boxplot cho số ca nhiễm:

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 23/83


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính

Biểu đồ boxplot cho số ca tử vong:

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 dị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.
iii) Nhóm câu hỏi liên quan đến dữ liệu thể hiện thu thập dữ 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:
• Làm rõ một số khái niệm trong thu thập dữ 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
• Xây dựng hàm hỗ trợ thu thập dữ liệu:
– na.zero (x): Xác định dữ liệu không được báo cáo mới

Bài tập lớn môn Cấu trúc Rời rạc cho KHMT (CO1007) - Niên khóa 2021-2022

Trang 24/83



×