# 1. Tìm hiểu công cụ Tableu
## 1.1 Giới thiệu dataset dùng để thao tác trong quá trình tìm hiểu tableau
Đây là một bộ dataset do **cơ quan quản lý lao động nước ngoài của Hoa Kỳ** cung cấp. Dữ liệu cho thông tin về những người nước ngoài lao động tại Hoa Kỳ, bao gồm thông tin cá nhân, mức lương, thành phố làm việc ở nước Mỹ,...

## 1.2 Tiền xử lý dataset
### 1.2.1 Đưa dữ liệu vào Tableau
Dữ liệu có thể đưa vào Tableau dưới nhiều dạng : file(xml,csv,excel,... ) hoặc lấy từ server.
Dataset của bọn em là file excel nên bọn em sẽ chọn như hình dưới.
\
*hello*
### 1.2.2 Đổi kiểu dữ liệu
Tableau sẽ đọc dữ liệu và tự định nghĩ kiểu dữ liệu cho các trường dữ liệu. Tuy nhiên, đôi khi Tableau sẽ định nghĩa không chinh xác, chúng ta cần can thiệp vào. Thao tác như hình dưới.

### 1.2.3 Measure và Dimension
Tableau sẽ phân các trường dữ liệu ra làm 2 loại : **Dimension** và **Measure** .
* **Dimension** : là trường dữ liệu dùng để phân tách các trường dữ liệu khác ra thành các nhóm.
* **Measure** : là trường dữ liệu có khả năng thực hiện các tính toán giữa các dòng với nhau như tính trung bình, tính trung vị,...
*Job Title Subgroup* là một trường dữ liệu dimension vì khi trực quan hoá nó với trường dữ liệu *Paid Wage Per Year*, nó sẽ phân tách các dòng có *Job Title Subgroup* khác nhau ra thành từng nhóm. *Paid Wage Per Year* là trường dữ liệu measure vì có thể thực hiện tính toán mean, median của từng nhóm (được gom nhóm theo trường *Job Title Subgroup*).

*Trực quan hoá với **Job Title Subgroup** và **Paid Wage Per Year***
Thông thường, Tableau sẽ tự phân kiểu dữ liệu measure và dimension. Tuy nhiên, ta vẫn có thể điều chỉnh chúng nếu muốn bằng cách click chuột phải vào trường dữ liệu muốn chuyển ở bảng bên trái màn hình, chọn "Convert to Measure"/"Convert to Dimension".

## 1.3 Format biểu đồ
Tableu là một công cụ mang thiên hướng GUI nên cách format rất đa dạng, một phép biến đổi có thể thực hiện bằng nhiều cách khác nhau, kéo thả khác nhau. Vì vậy, nếu tụi em nói hết thì bài báo cáo sẽ rất dài, bọn em xin trình bày một vài thao tác nổi bật.
### 1.3.1 Cách trình bày của trường dữ liệu
Trường dữ liệu có nhiều các trình bày như : màu sắc, kích thước, nhán dãn,...
Khi ta muốn trình bày một trường dữ liệu theo cách nào đó, ta chỉ việc kéo thả trường dữ liệu ở cột Tables vào cách trình bày ta mong muốn ở bảng Marks. Ví dụ :

*Kéo thả trường Visa Class vào ô Color*

*Kết quả*
### 1.3.2 Format cách biểu diễn
Ví dụ thay vì biểu diễn *Paid Wage Per Year* dưới dạng các cột, ta muốn biểu diễn thành từng chấm tròn tương ứng với mỗi dòng dữ liệu để có thể tìm ra outlier.
Vào tab *Analysis* > tích bỏ Aggregate Measures.

*Hình minh hoạ*

*Kết quả*
Tuy nhiên, ta thấy nó có vẻ không giống scatter plot để ta có thể dễ thấy outlier lắm, ta tiến hành điều chỉnh độ to nhỏ và hình dạng chấm tròn. Ta chọn các mục trong Mark : chỉnh hình dạng về Circle, chọn Size, kéo cho bé lại.


*Kết quả: phát hiện ra 2 outlier rất rõ*
### 1.3.3 Filter
Ta có thể filter để loại bỏ outlier (Giữ ctrl+shift để paid wage per year không bị mất khỏi ô Rows). Kéo thả trường dữ liệu cần filter vào ô Filter. Ô Filter hiện lên, chọn range dữ liệu cần filter.


*Kết quả : 2 outlier đã mất*
## 1.4 Tính toán trên cột
Một tính năng hay của Tableau chính là cho phép ta thực hiện các phép trên các cột như trong các ngôn ngữ lập trình.
Ví dụ : ta muốn trực quan hoá xem nên lựa chọn các công ty nào để làm việc khi đến Hoa Kỳ làm việc dựa vào dữ liệu về tiền lương. Ta sẽ thực hiện các bước như sau:
### 1.4.1 Tạo cột mới
Ta sẽ tạo cột mới, nội dung của cột này là chênh lệch giữa tiền lương sẽ được trả khi nhập tịch và tiền lương đang được trả hiện tại.
Ấn chuột phải vào tab Tables > Create Calculated Field. Nhập công thức tính toán cột mới dựa vào các cột có sẵn.
Syntax của các công thức khá đơn giản, giống như các ngôn ngữ lập trình khác, cũng có If-else, and-or, abs,...

### 1.4.2 Kết hợp tính toán cột với filter
Để lọc ra những dòng có lương được trả ít hơn lương hiện tại. Ta tạo thêm cột ` pay less`. Sau đó kéo cột `pay less` vào filter.

### 1.4.3 Một vài thao tác nho nhỏ
Thêm một vài filter, các hàm đơn giản, ta cho ra được biểu đồ trực quan xem công ty nào có nhiều trường hợp trả lương ít hơn lương hiện tại của người lao động. Có thể thấy rõ các công ty như IBM, Google trả lương thấp hơn cho ngành Software engineer. Ngoài ra, nếu muốn xem ngành khác có thể điều chỉnh tại khung filter bên phải màn hình.

*Có thể là các công ty lớn ỷ có danh tiếng nên trả lương thấp cho nhân viên*
## 1.5 Tạo dashboard
Dashboard chính là một cái bảng lớn chứa nhiều biểu đồ, giúp người xem có cái nhìn trực quan hơn. Các biểu đồ trong dashboard thường liên quan tới nhau, bổ trợ cho nhau.
Để tạo dashboard, ta nhấn vào ô được khoanh tròn bên dưới. Để thêm các sheet (biểu đồ) vào dashboard, ta chỉ việc kéo thả các sheet vào dashbaord theo vị trí mong muốn.

# 2. Phân tích dữ liệu worldometer
## 2.0 Tiền xử lý dữ liệu
Vì dữ liệu bọn em thu thập mỗi ngày được lưu vào các file riêng biệt. Để dễ dàng phân tích dữ liệu của tất cả các ngày đã thu thập được, bọn em sẽ merge tất cả các file này thành một file duy nhất là `merge_data.csv`, đồng thời thêm một trường dữ liệu là date để phân biệt các ngày với nhau.
File `merge_data.py`
```python=
## file merge_data.py
import pandas as pd
import numpy as np
import os
#for each date in folder data, merge data and save to file
dates = os.listdir('./data')
merge_data=pd.DataFrame()
dates = dates[:-3] # 3 tên cuối là 3 file không phải dữ liệu
for date in dates:
sub_df = pd.read_csv('./data/'+date)
sub_df['Date'] = date[:-4] # bỏ đuôi .csv
merge_data = pd.concat([merge_data,sub_df])
merge_data.to_csv('./data/merge_data.csv',index=False)
```
## 2.1 Các nước có mật độ ca cao nhất
**Mục đích** trực quan để biết được nước nào chịu tác động bởi covid-19 nhiều nhất. Bọn em không dùng `Total case` vì tổng dân số của mỗi nước là khác nhau. `Total case/1M pop` có lẽ phản ảnh đúng hơn về tình hình ca nhiễm ở mỗi nước.
**Kỹ thuật reduce** : Có tổng cộng khoảng 200 nước trong dữ liệu. Nếu phân tích hết, ta có khó có cái nhìn trực quan về tình hình các nước. Vì vậy, bọn em đã cắt giảm và chỉ trực quan top 20 nước có ca nhiễm cao nhất.
**Reference line** : bọn em vẽ 2 reference line. Một cái dùng để trực quan mật độ trung bình của top 20, cái còn lại dùng để trực quan mật độ trung bình của thế giới. Nhờ đó, ta thấy được top 20 nước này có mật độ ca nhiễm cao gần gấp 3 lần so với phần còn lại của thế giới, vì vậy, tác động covid-19 lên các nước này có thể rất lớn.

**Kết hợp với bản đồ :** sau khi biết được top 20 nước có mật độ ca nhiễm khá cao so với phần còn lại, bọn em muốn trực quan vị trí của các lãnh thổ này về mặt địa lý. Bản đồ này có thể dùng để xây dựng một lộ trình phù hợp.
Ví dụ : vẽ lộ trình đi du lịch thì né mấy khu vực này ra, lộ trình thả hàng cứu trợ các nước bị tác động bởi covid thì thiết kế sao cho tối ưu,...
**Độ đậm nhạt của màu sắc** : để có thể so sánh mức ảnh hưởng của các khu vực với nhau. Có thể thấy các khu vực nằm trong top 20 không có chênh lệch quá nhiều.
## 2.2 Trực quan về biến động số lần xét nghiệm

**Màu sắc** : bọn em sử dụng các màu đối nhau thì vì các màu xếp kế nhau như hình bên. Mục đích là để phân biệt các quốc gia với nhau dễ hơn. Tuy rằng các quốc gia có thể phân biệt với nhau dựa vào ký tự chú thích bên trái, nhưng trong trường hợp biểu đồ thời gian biến động thì rất khó để người xem theo dõi, bám sát, so sánh từng nước với nhau.
**Static reference line** : khác với biểu đồ trên, refence line được giữ cố định để người xem có thể dựa vào đó làm hệ quy chiếu để so sánh các số liệu của từng nước.
**Manipulate view reduce** : Bọn em rút gọn danh sách các nước lại trong khu vực Đông Nam Á để dễ so sánh với nhau.
**Biến động theo thời gian** : những biến động về số lần xét nghiệm được trực quan bằng chuyển động của các cột.
:-1:**Hạn chế** :
* Tại thời điểm làm bài, dịch covid đã hạ nhiệt nên các số liệu thu thập cũng không thay đổi quá nhiều. 30 ngày là quá ít để thấy được sự biến đổi khi dịch đã "bão hoà".
* Dữ liệu được worldometer ghi nhận thiếu chính xác. Bằng cách nào đó thì mật độ test bị giảm tương đối nhiều. Mật độ test chỉ giảm khi dân số tăng, tuy nhiên không thể nào có chuyện giảm nhanh tới mức như trong hình được (khoảng từ ngày 10-20).
**Nhận xét**: Malaysia, singapo có số ca nhiễm cao hơn cả, khiến các nước khác trong khu vực có mật độ ca mắc thấp hơn so với trung bình.
## 2.3 Trực quan về tổng số ca nhiễm theo quốc gia

- Sử dụng dash board để tích hợp nhiều dạng biểu đồ để trực quan cho trường "Total cases" (ngày 18.4.2022). Cụ thể:
- Bản đồ nhiệt:
- Cho một cái nhìn tổng quát về hiện trạng tổng số ca nhiễm trên toàn thể giới.
- Horizontal bar:
- Chi tiết về các quốc gia có ca nhiễm nhiều nhất (sắp xếp số ca nhiễm giảm dần)
- Có đường trung bình để so sánh số lượng ca nhiễm ở nước đó với trung bình toàn thế giới
- Có hiển thị số lượng tổng ca nhiễm để thêm thông tin cho biểu đồ
- Treemap:
- Kỹ thuật reduce: Trích xuất 10 quốc gia có tổng số ca nhiễm nhiều nhất
- Có hiển thị thêm thông tin về: châu lục, tổng số ca nhiễm
- Mục đích là để so sánh một cách trực quan số lượng ca nhiễm các quốc gia top đầu về số lượng ca nhiễm với nhau
- Màu sắc: sử dụng thanh sắc độ (màu đỏ) từ nhạt tới đậm theo tổng số ca nhiễm từ ít (min) tới nhiều (max) để trực quan trên cả 3 biểu đồ.
- Nhận xét:
- Khoảng độ lớn tổng số ca nhiễm phân bố trải dài cả thế giới. Có quốc gia có ít tổng số ca nhiễm, có quốc gia có nhiều tổng số ca nhiễm.
- Đặc biệt nổi bật trong dashboard là USA có số ca nhiễm nhiều nhất (màu đậm nhất) với số ca nhiễm gấp đôi số ca nhiễm của quốc gia có số ca nhiễm nhiều thứ 2 là Ấn Độ. (dựa vào so sánh 2 diện tích ở biểu đồ tree map và dựa vào số liệu ở biểu đồ cột ngang). Thêm nữa, số lượng ca nhiễm ở USA lớn hơn số ca nhiễm trung bình toàn thế giới gấp nhiều lần.
- Bổ sung: Biểu đồ trực quan tổng số ca nhiễm theo lục địa.

- Nhận xét:
- Để thêm độ chi tiết cho thông tin về tổng số ca nhiễm. Ta đổi góc nhìn từ các quốc gia sang các lục địa.
- Sử dụng biểu đồ bong bóng cùng với sắc độ của màu (đỏ) để trực quan về số lượng ca nhiễm giữa các lục địa với nhau.
- Nếu đánh giá trực quan theo diện tích của Châu Âu và Châu Á thì không dễ để xác định. Màu sắc sẽ hỗ trợ người xem về việc so sánh.
- Thông tin số lượng tổng số ca nhiễm được hiển thị thêm để tăng độ tin cậy cho biểu đồ.
- Bổ sung 2: Ta nhìn tổng số lượng ca nhiễm trên toàn thế giới theo thời gian

- Số lượng ca nhiễm trên toàn thế giới vẫn đang tăng đều trong 1 tháng qua.
- Từ ngày 18.4.2022 đến 26.5.2022, số lượng ca nhiễm tăng từ khoảng 505 triệu ca mắc đến 530 triệu ca mắc. (~25 triệu ca nhiễm mới)
## 2.4 Kiểm tra độ phân bố của tỷ lệ số ca hồi phục mới trên số ca nhiễm mới (mức độ hồi phục) theo từng ngày.
- Tạo thêm một trường mới (to_normal_speed_rate) = NewRecovered/NewCases
- Mức độ hồi phục:
- Nếu rate càng lớn hơn 1 thể hiện mức hồi phục càng nhanh
- Nếu rate càng gần bằng 0 thể hiện mức độ hồi phục càng chậm
- Trực quan:
- 18.4.2022

- 19.4.2022

- 26.4.2022

- 2.5.2022

- 10.5.2022

- Sử dụng biểu đồ histogram, có thêm đường thể hiện median và phương sai (vùng độ phân bố được trực quan tốt hơn.
- Có thanh trượt là date để xem sự thay đổi của biểu đồ trực quan mức độ hồi phục theo ngày.
- Có sử dụng máu sắc phân biệt các cluster (cam và xanh). Cluster cam thể hiện mode và xu hướng hiện tại về mức độ hồi phục trên toàn thế giới (vào ngày cụ thể).
- Ở lab 1, ta có biểu đồ và nhận xét sau:

- Nhận xét:
- Tình hình hồi phục khá chậm khi phân phối tỷ lệ lệch hẳn sang mức gần 0.
Mức hồi phục trung bình ở khoảng 1.5 cho ta dự báo về khả năng chuyển dịch của phân phối này tiến sang phải.
- Để tránh bias, ta cần xem xét nhiều ngày, nhiều tháng tiếp theo để dự đoán cho tình hình hồi phục của thế giới.
- Theo các biểu đồ ở lab2, ta có thể thấy phân phối đúng là có sự dịch chuyển sang phải. (thế giới đang hồi phục (từ ngày 18.4.2022 đến 2.5.2022)).
- Nhưng đại dịch covid vẫn khẳng định nó là một vấn đề khó lường khi biểu đồ ngày 10.5.2022 đã quay về tình trạng báo động khi số lượng các quốc gia có mức độ hồi phục xấu (<1 (bin 0)) rất lớn.
## 2.5 Trực quan về lượng hồi phục và tử vong mới trong ngày (18.4.2022) [Kết hợp các thuộc tính].

- Mục đích: Quan sát sự phân phối và tương quan của cả 2 trường đối lập nhau này (kết quả khi nhiễm) cùng lúc.
- Sử dụng duo axis bar để trực quan. Nghĩa là 2 trường này không nằm cùng hệ quy chiếu. Ta có thể thấy sự phân phối một cách độc lập cũng như mức độ tương quan của 2 trường dữ liệu này.
- Lý do sử dụng duo axis: Vì nếu giá trị được lưu trữ trong trường này lớn gấp nhiều lần trường kia (Ví dụ: max của new recovered là ~220k, max của new death là 220). Thì có thể sẽ không thấy được độ phân bố của dữ liệu vì trên biểu đồ chỉ thể hiện một đường thẳng
- Sắp xếp số lượng tử vong giảm dần. (Nếu để phân bố số lượng tử ngẫu nhiên theo tên, biểu đồ trực quan sẽ không có giá trị so sánh tuyến tính nào giữa 2 trường với nhau)
- Màu sắc ở mỗi trường được phân theo sắc độ là tỷ lệ độ lớn của giá trị trong trường đó.
- Hai trường được phân biệt bởi 2 màu sắc khác nhau (đỏ và xanh)
- Nhận xét:
- Điều rõ ràng nhất có thể nhận thấy ở biểu đồ này là 2 trường này không có quan hệ tương quan với nhau. Khi số lượng tử vong trong ngày giảm dần, số lượng hồi phục trong ngày có phân phối không theo quy luật nào cả.
- Nếu số lượng hồi phục trong ngày thay đổi thì ta sẽ không có bất kì dự đoán nào về số lượng tử vong. (Điều này khá hiển nhiên, trực quan này là một phép thử để kiểm chứng lại nhận định hiển nhiên )
## 2.6 Các mối quan hệ phụ thuộc tương quan
- Các biểu đồ dưới dây đều sử dụng chung 1 dạng trực quan là line chart sử dụng duo axis. Ở lab1, nhóm cũng phân tích một chuỗi các câu hỏi dưới đây.
- Việc trực quan kết hợp với sắc độ của màu theo độ lớn giá trị của trường dữ liệu. Và sử dụng bộ màu đồng bộ ứng với mỗi trường xuyên suốt các biểu đồ trực quan dưới đây.
- Khác với biểu đồ phân phối ở lab1, duo axis line chart này khó có thể xác định được outlier của dữ liệu.
### 2.6.1 Dân số và tổng số ca nhiễm
- Câu hỏi: Dân số lớn có làm số ca nhiễm tăng hay không?
- Ở đây ta xác định dân số là nguyên nhân và số ca nhiễm là kết quả, tạm thời bỏ qua các yếu tố ảnh hưởng khác và cũng không quan tâm chiều ngược lại.
- Trực quan:
- Sử dụng duo axis
- Sắp xếp giảm dần theo population

- Nhận xét:
- Ta có thể thấy dân số và số lượng ca nhiễm có tương quan với nhau. Khi population giảm, số lượng ca nhiễm cũng có xu hướng giảm dần.
- Trả lời câu hỏi: Dân số có thể là 1 trong những nguyên nhân làm số ca nhiễm thay đổi.
### 2.6.2 Dân số và số lượng test
- Câu hỏi: Dân số lớn có là nguyên nhân khiến chính phủ cho thực hiện test covid nhiều hay không?
- Ở đây ta xác định dân số là nguyên nhân và số lượng test là kết quả, tạm thời bỏ qua các yếu tố ảnh hưởng khác và cũng không quan tâm chiều ngược lại.
- Trực quan:
- Sử dụng duo axis
- Sắp xếp giảm dần theo population

- Nhận xét:
- Ta có thể thấy dân số và số lượng test khá tương quan với nhau. Khi population giảm, số lượng ca nhiễm cũng có xu hướng giảm dần.
- Trả lời câu hỏi: Dân số có thể là 1 trong những nguyên nhân làm số lượng test thay đổi.
### 2.6.3 Số ca nhiễm và số lượng test
- Câu hỏi: Số ca nhiễm nhiều có là nguyên nhân làm cho chính phủ yêu cầu thực hiện test covid nhiều hay không ?
- Ở đây ta xác định số ca nhiễm là nguyên nhân và số lượng test là kết quả, tạm thời bỏ qua các yếu tố ảnh hưởng khác và cũng không quan tâm chiều ngược lại.
- Trực quan:
- Sử dụng duo axis
- Sắp xếp giảm dần theo total cases

- Nhận xét:
- Ta có thể thấy số lượng ca nhiễm và số lượng lượng test tương quan với nhau. Khi total cases giảm, total tests cũng có xu hướng giảm dần.
- Trực quan, ta thấy độ tương quan giữa 2 trường này lớn hơn so với 2 cặp phía trên.
- Trả lời câu hỏi: số lượng ca nhiễm có thể là 1 trong những nguyên nhân khiến số lượng test thay đổi.
### 2.6.4 Số lượng test và độ hồi phục
- Câu hỏi: Có ý kiến cho rằng việc test covid nhiều ở một quốc gia đem lại sự chắc chắn và tăng khả năng phòng tránh, làm giảm số ca nhiễm mới, do đó có thể tăng khả năng hồi phục. Kiểm chứng lại ý kiến trên.
- Ở đây ta xác định số lượng test là nguyên nhân và mức độ hồi phục là kết quả, tạm thời bỏ qua các yếu tố ảnh hưởng khác và cũng không quan tâm chiều ngược lại.
- Trực quan:
- Sử dụng duo axis
- Trung bình của total test theo ngày (18.4 - 26.5)
- Trung bình của to_normal_speed_rate theo ngày (18.4 - 26.5)
- Khác với total tests có sự thay đổi to_normal_speed_rate tăng giảm khá ngẫu nhiên theo ngày. Do đó ta tính trung bình để kết quả mang tính tổng quát hơn.
- Sắp xếp giảm dần theo total tests

- Nhận xét:
- Nhìn vào biểu đồ phía trên, không có mối quan hệ tương quan giữa 2 trường dữ liệu này.
- Trả lời câu hỏi: Việc test nhiều hơn không có mối liên hệ đến mức độ hồi phục của 1 quốc gia. Có thể vì số lượng test không có tác động đến khả năng chữa covid, số lượng hồi phục.
- Lời khuyên: Không cần quá gấp để test covid quá nhiều lần khi đang trong quá trình điều trị.
## 2.7 Tỉ lệ tử vong (deaths/cases) trên toàn Thế giới dùng clustering
Ý tưởng: Nhóm đưa ra ý tưởng rằng khi mật độ ca nhiễm tăng cao sẽ dẫn đến hệ thống y tế bị quá tải, làm cho tỉ lệ tử vong tăng cao.
Nhận xét : trái với dự đoán, mật độ ca nhiễm càng tăng thì range (phổ giá trị) của tỉ lệ tử vong càng giảm.

Suy diễn : Mật độ ca nhiễm cao vì nước đó có khả năng phát hiện ca nhiễm covid-19 tốt hơn, trong khi các nước có mật độ nhiểm thấp chỉ có thể phát hiện ca nhiễm khi các triệu chứng đã trở nặng, dẫn đến tỉ lệ tử vong cũng tương đối cao. Một số nước có mật độ nhiễm cao và có tỉ lệ tử vong thấp vừa có khả năng phát hiện tốt, lại vừa phòng chống tốt.
Nhóm sẽ dùng thuật toán clustering có sẵn trong tableau để chia thành 2 nhóm nước như đã để cập ở trên, đồng thời trực quan 2 nhóm nước đó bằng 2 màu khác nhau trên bản đồ thế giới để có thể hiểu rõ hơn về dữ liệu.

Theo bọn em tìm hiểu, thuật toán cluster tableau dùng là K-means. Nguồn : *https://help.tableau.com/current/pro/desktop/en-us/clustering.htm#:~:text=The%20clustering%20algorithm,the%20points%20in%20that%20cluster.*