messenger_logo
Liên hệ qua Messenger
SciEco

Cách tạo bản đồ choropleth động sử dụng dữ liệu covid-19 từ đại học johns hopkins

I
IEFPA
Ngày viết: 30/03/2026

Trong các phân tích dữ liệu không gian, việc theo dõi sự thay đổi qua thời gian và địa điểm là một kỹ năng quan trọng. Sau khi đã nắm vững cách tải dữ liệu từ kho lưu trữ GitHub, vẽ đồ thị chuỗi thời gian và tạo bản đồ choropleth tĩnh, bước tiếp theo là đưa dữ liệu vào không gian chuyển động. Bài viết này sẽ hướng dẫn bạn cách tạo một bản đồ choropleth động để khám phá sự phân bố của dịch bệnh qua từng ngày.

Cách tạo bản đồ cho từng ngày

Để bắt đầu, chúng ta cần làm sạch và mô tả dữ liệu thô. Dữ liệu này chứa số lượng ca nhiễm tích lũy cho từng quận tại Mỹ bắt đầu từ cuối tháng 1 năm 2020. Các biến số lưu trữ dữ liệu theo ngày được đặt tên theo định dạng từ v12 đến v86.

Quá trình chuẩn bị dữ liệu đòi hỏi chúng ta phải hợp nhất dữ liệu địa lý, dữ liệu ca bệnh và dữ liệu dân số. Chúng ta sử dụng dấu hoa thị như một wildcard trong lệnh gọi biến để giữ lại toàn bộ các cột ngày tháng.

1clear
2copy https://www2.census.gov/geo/tiger/GENZ2018/shp/cb_2018_us_county_500k.zip cb_2018_us_county_500k.zip
3unzipfile cb_2018_us_county_500k.zip
4spshape2dta cb_2018_us_county_500k.shp, saving(usacounties) replace
5use usacounties.dta, clear
6generate fips = real(GEOID)
7save usacounties.dta, replace
8clear
9import delimited https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_US.csv
10drop if missing(fips)
11save covid19_county, replace
12clear
13import delimited https://www2.census.gov/programs-surveys/popest/datasets/2010-2019/counties/totals/co-est2019-alldata.csv
14generate fips = state*1000 + county
15save census_popn, replace
16clear
17use _ID _CX _CY GEOID fips using usacounties.dta
18merge 1:1 fips using covid19_county, keepusing(province_state combined_key v*)
19keep if _merge == 3
20drop _merge
21merge 1:1 fips using census_popn, keepusing(census2010pop popestimate2019)
22keep if _merge==3
23drop _merge
24drop if inlist(province_state, "Alaska", "Hawaii")
25format %16.0fc popestimate2019 v*
26save covid19_adj, replace

Thiết lập vòng lặp và xử lý chuỗi thời gian

Dữ liệu hiện tại bao gồm thông tin địa lý, dân số và số lượng ca nhiễm theo từng ngày. Để tạo một video, chúng ta cần tạo ra các bản đồ riêng biệt cho từng biến số thời gian. Việc này được thực hiện thông qua vòng lặp forvalues.

Trong vòng lặp, chúng ta tính toán số ca nhiễm đã điều chỉnh theo dân số cho mỗi quận. Định dạng ngày tháng trong hệ thống được tính bằng số ngày trôi qua kể từ đầu năm 1960. Do đó, chúng ta dùng các phép tính cơ bản để tịnh tiến mốc thời gian, sau đó dùng hàm string để định dạng lại ngày tháng nhằm hiển thị lên tiêu đề bản đồ.

Đồng thời, mỗi bản đồ cần được xuất ra dưới dạng tệp ảnh với tên gọi được đánh số thứ tự nối tiếp nhau, bắt đầu từ số 1 và có các số 0 ở đầu. Khai báo chuỗi theo định dạng này giúp hệ thống nhận diện đúng trình tự khung hình khi ghép video.

Xuất bản đồ hàng loạt

Mỗi vòng lặp sẽ thực hiện ba nhiệm vụ cốt lõi: tính toán tỷ lệ ca bệnh điều chỉnh theo quy mô dân số của ngày hôm đó, vẽ bản đồ với tiêu đề chứa ngày tháng tương ứng và xuất biểu đồ ra một tệp ảnh có độ phân giải cao.

1spset, modify shpfile(usacounties_shp)
2generate confirmed_adj = .
3forvalues time = 12/86 {
4    local date = 21936 - 12 + `time'
5    local date = string(`date', "%tdMonth_dd,_CCYY")
6    replace confirmed_adj = 100000*(v`time'/popestimate2019)
7    grmap confirmed_adj, clnumber(8) clmethod(custom) clbreaks(0 5 10 15 20 25 50 100 5000) ocolor(gs8) osize(vthin) title("Confirmed Cases of COVID-19 in the United States on `date'") subtitle("cumulative cases per 100,000 population")
8    local filenum = string(`time'-11,"%03.0f")
9    graph export "map_`filenum'.png", as(png) width(3840) height(2160)
10}
11drop confirmed_adj

Đoạn mã trên sẽ tạo ra hàng chục bản đồ khác nhau. Các điểm phân chia màu sắc được thiết lập thủ công thay vì sử dụng phương pháp phân vị mặc định, giúp chú giải bản đồ luôn cố định và nhất quán qua tất cả các ngày.

Đây là hình ảnh bản đồ khởi điểm được tạo ra ở đầu chuỗi thời gian.

Và đây là hình ảnh bản đồ ở những ngày cuối của tập dữ liệu, cho thấy sự lan rộng rõ rệt của dịch bệnh.

Kết hợp hình ảnh thành video bằng FFmpeg

Sau khi đã có bộ sưu tập hình ảnh lưu trong thư mục, công đoạn cuối cùng là ghép chúng lại. FFmpeg là một phần mềm mã nguồn mở mạnh mẽ chuyên xử lý dữ liệu đa phương tiện. Từ bên trong hệ thống, bạn có thể gọi trực tiếp phần mềm này bằng lệnh shell.

Cú pháp dưới đây sẽ nhận các tệp ảnh được đánh số thứ tự, thiết lập tốc độ khung hình ở mức hai ảnh mỗi giây và nén chúng thành một tệp video hoàn chỉnh.

1shell "C:\Program Files\ffmpeg\bin\ffmpeg.exe" -framerate 1/.5 -i map_%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p covid19.mp4

Chỉ mất vài phút để hệ thống xử lý và kết xuất toàn bộ dữ liệu. Kết quả nhận được là một công cụ trực quan hóa không gian và thời gian cực kỳ mạnh mẽ.

✨ Giá trị đắt giá: Việc trực quan hóa dữ liệu không gian theo thời gian thực không chỉ tạo ra các báo cáo sinh động mà còn giúp các nhà nghiên cứu phát hiện ra các cụm lây nhiễm và hướng di chuyển của dữ liệu. Khả năng kết hợp mã lệnh phân tích truyền thống với các công cụ đa phương tiện như FFmpeg mở ra một hướng đi mới cho việc truyền đạt kết quả khoa học dữ liệu một cách trực quan và đại chúng hơn.

Bạn sẽ làm thế nào để thay đổi đoạn mã trên nếu tập dữ liệu được cập nhật thêm một tháng nữa? Hãy thử xác định các tham số cần điều chỉnh trong vòng lặp và tự tay kết xuất một đoạn video với tốc độ khung hình nhanh gấp đôi.


Bài viết khác
Stata cung cấp một phương thức đơn giản và tinh tế để thực hiện các mô hình hồi quy Bayes bằng cách thêm tiền tố bayes vào trước các lệnh ước lượng. Với hơn 45 lệnh được hỗ trợ, người dùng có thể linh hoạt lựa chọn giữa các phân phối tiền nghiệm mặc định hoặc tự thiết lập theo nhu cầu nghiên cứu. Trong bài viết này, chúng ta sẽ tìm hiểu cách áp dụng hồi quy logistic Bayes và khám phá sức mạnh của phân phối tiền nghiệm Cauchy đối với các hệ số hồi quy. Một thách thức phổ biến khi làm việc với Bayes là việc lựa chọn phân phối tiền nghiệm. Cách tiếp cận thận trọng thường dùng các tiền nghiệm yếu hoặc không có thông tin để đảm bảo tính khách quan dựa trên dữ liệu. Tuy nhiên, các tiền nghiệm không có thông tin đôi khi không đủ để giải quyết những vấn đề như hiện tượng phân tách hoàn hảo trong hồi quy logistic. Ngược lại, nếu không có kiến thức chuyên gia sâu sắc, việc chọn tiền nghiệm có thông tin cũng không hề dễ dàng. Dựa trên khuyến nghị của Gelman và các cộng sự, việc sử dụng phân phối tiền nghiệm Cauchy thông tin yếu là một giải pháp cân bằng hiệu quả. Chuẩn bị dữ liệu và chuẩn hóa Chúng ta sử dụng bộ dữ liệu Iris nổi tiếng để phân loại hoa. Biến phụ thuộc virg phân biệt loài Iris virginica với các loài khác. Các biến độc lập bao gồm chiều dài và chiều rộng của đài hoa và cánh hoa. Theo khuyến nghị của các nhà nghiên cứu, các biến độc lập nên được chuẩn hóa để có trung bình bằng 0 và độ lệch chuẩn bằng 0.5 trước khi áp dụng phân phối tiền nghiệm Cauchy.
Trong bài viết này, bạn sẽ tìm hiểu kiểm định t là gì và cách thực hiện phương pháp này trong ngôn ngữ lập trình r. Đầu tiên, chúng ta sẽ làm quen với một hàm đơn giản giúp thực hiện kiểm định chỉ với một dòng mã nguồn. Sau đó, chúng ta sẽ cùng khám phá bản chất của kiểm định thông qua việc xây dựng từng bước với dữ liệu thực tế về hành khách tàu Titanic. Kiểm định t là gì Kiểm định t là một quy trình thống kê được sử dụng để kiểm tra xem sự khác biệt giữa hai nhóm có ý nghĩa hay chỉ là do ngẫu nhiên. Trong bài viết này, chúng ta sẽ xem xét dữ liệu từ các hành khách trên tàu Titanic, chia họ thành hai nhóm nam và nữ. Giả sử chúng ta muốn kiểm tra giả thuyết rằng nam giới và nữ giới có độ tuổi trung bình như nhau. Nếu dữ liệu cho thấy phụ nữ trẻ hơn nam giới trung bình 2 tuổi, chúng ta cần đặt câu hỏi: liệu đây là một sự khác biệt thực sự hay chỉ là sự trùng hợp ngẫu nhiên? Kiểm định t sẽ giúp chúng ta trả lời câu hỏi đó. Tại sao kiểm định t lại quan trọng
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội