Tác giả: Hoàng Đức Anh | 2018-11-01
Giới thiệu
Khi phân tích dữ liệu, xây dựng bản đồ là một trong những công cụ rất mạnh giúp cho việc trực quan hóa, đặc biệt trong lĩnh vực kinh doanh, marketing. Việc xây dựng bản đồ giúp truyền tài kết quả phân tích một cách nhanh chóng và hiệu quả.
Với cách làm truyền thống, việc xây dựng bản đồ là không hề dễ dàng. Các packages như sp
, sf
hay tmap
đều rất mạnh trong vẽ biểu đồ. Tuy nhiên, các packages này đều chưa thực sự tương thích với hệ sinh thái của tidyverse
. Tuy nhiên, với ggplot2
phiên bản từ 2.3
trở lên, việc xây dựng biểu đồ được thực hiện khá rất dễ dàng với sự tương thích của tidyverse
.
Trong bài viết này, Ranalytics
sẽ hướng dẫn các bạn vẽ biểu đồ Việt Nam một cách đơn giản.
Bước 1: Load dữ liệu địa lý
Để dọc dữ liệu địa lý định dang .shp
, ta sử dụng package sf
với hàm st_read
. Dữ liệu về bản đồ Việt Nam được Ranalytics
chuẩn bị ở đường link sau [https://github.com/anhhd/data/VNM_adm]
library(tidyverse)
library(sf)
vn <- st_read("VNM_adm/VNM_adm1.shp")
vn %>% class
## Reading layer `VNM_adm1' from data source `E:\01.GitHub\Ranalytics.vn\static\data\VNM_adm\VNM_adm1.shp' using driver `ESRI Shapefile'
## Simple feature collection with 63 features and 9 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: 102.145 ymin: 8.563332 xmax: 109.4694 ymax: 23.39273
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## [1] "sf" "data.frame"
Bước 2: Trực quan hóa biểu đồ
Như chúng ta thấy, dữ liệu có định dang sf
và data.frame
. Với ggplot2
từ 2.3, ta có thể trực quan hóa object sf
như sau
theme_set(
theme_minimal() +
theme(axis.line = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()))
vn %>%
ggplot() +
geom_sf(aes(fill = NAME_1)) +
theme(legend.position = "none")
Bước 3: Tạo biểu đồ nhiệt
Với định dạng sf
, ta hoàn toàn có thể tạo thêm biến mới thể hiện doanh số bán hàng hoặc lượng dân cư và thể hiện dưới dạng biểu đồ nhiệt như sau.
#Tạo thêm biến sale
df <- vn %>% mutate(sale = runif(63, 1, 10))
df %>% names
## [1] "ID_0" "ISO" "NAME_0" "ID_1" "NAME_1"
## [6] "TYPE_1" "ENGTYPE_1" "NL_NAME_1" "VARNAME_1" "sale"
## [11] "geometry"
df %>%
ggplot() +
geom_sf(aes(fill = sale)) +
scale_fill_viridis_c()
Tạo biểu đồ với cấp quận, thành phố
# Load biểu đồ cấp quận huyện
vn2 <- st_read("VNM_adm/VNM_adm2.shp")
## Reading layer `VNM_adm2' from data source `E:\01.GitHub\Ranalytics.vn\static\data\VNM_adm\VNM_adm2.shp' using driver `ESRI Shapefile'
## Simple feature collection with 678 features and 11 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: 102.145 ymin: 8.563332 xmax: 109.4694 ymax: 23.39273
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
# Lọc biểu đồ với 1 tỉnh
vn2 %>%
filter(NAME_1 == "Yên Bái") %>%
# Tạo thêm doanh số bán hàng
mutate(sale = runif(nrow(.), 1, 10)) %>%
ggplot() +
geom_sf(aes(fill = sale)) +
geom_sf_text(aes(label = VARNAME_2)) +
scale_fill_viridis_c() +
labs(title = "Volume of Vodka in Yen Bai in 2018",
caption = "Created by Ranalytics.vn")
Như vậy chúng ta đã học được cách xây dựng biểu đồ cơ bản với ggplot2
. Chúc các bạn làm việc hiệu quả với Ranalytics.vn