imfr. Sau đó chúng ta sẽ thử plot một cái interactive map bằng leaflet biểu thị hướng xuất khẩu của Việt Nam.
Packages
Sử dụng package “imfr” từ https://github.com/christophergandrud/imfr
Để cài được thì trước tiên cần cài devtool trước.
install.packages("devtools")
install.packages("tidyverse")
devtools::install_github("christophergandrud/imfr")
imfr và số thư viện thường dùng
library(imfr)
library(tidyverse)
library(stringr)
library(knitr)
Database
IMF sử dụng rất nhiều cơ sở dữ liệu khác nhau, mỗi CSDL cho biết thông tin về một nhóm các chỉ số nào đó, mỗi chỉ số đi kèm với một code riêng và các parameters khác nhau. Đễ dễ hình dung, nếu muốn lấy dữ liệux nào đó, chúng ta theo các bước sau:
- Tìm xem
xthuộc CSDL nào - Có những parameters nào cần phải biết.
- Sử dụng API để lấy data
databases <- imf_databases()
Query
Nhìn qua sẽ thấy một số databases sau
IFS nên mình sẽ sử dụng nó. Một số databases khác khá phổ biến là DOTS, BOP, vân vân.
Bước 2:
Bên trong mỗi Database sẽ đi kèm với một loạt các tham số (parameters). Để truy suất, dùng lệnh sau:
params_ifs <- imf_parameters(database_id = "IFS")

freq: tần suất theo tháng, quý, hay nămref_area: khu vực. Chúng ta có thể lấy khu vực hoặc quốc gia.indicator: chỉ số.
param_codelist_ifs <- imf_codelist(database_id = "IFS")

CL_INDICATOR_IFS có rất nhiều thứ ngoài GDP. Để xem rõ hơn các giá trị bên trong parameter đó, dùng lệnh sau:
IFS_INDICATOR_codes<-imf_codes(codelist = "CL_INDICATOR_IFS")

Gross Domestic Product cho ra các kết quả sau:

x là gì. Nó là NGDP_R_XDC.
Bước 3:
Để lấy dữ liệu, các bạn sử dụng lệnh imf_dataset và liệt kê các tham số mà chúng ta vừa tìm. Các arguments gồm có: database_id, freq, ref_area, indicator, start_year, end_year.
df2 <- imf_dataset(database_id = "IFS",
freq = "A", ref_area = "VN",
indicator = "NGDP_XDC",
start_year = 2000, end_year = 2015)
ref_area sẽ dùng ISO 2 kí tự.
Mình đã thử freq="Q" (quý) nhưng nó báo không ra kết quả. Thử lại theo năm freq="A" thì được.
Kết quả
date value freq ref_area indicator unit_mult time_format
1 2000 441646126.403925 A VN NGDP_XDC 6 P1Y
2 2001 481294607.382071 A VN NGDP_XDC 6 P1Y
3 2002 535761844.030122 A VN NGDP_XDC 6 P1Y
4 2003 613443025.683183 A VN NGDP_XDC 6 P1Y
5 2004 779337670.445458 A VN NGDP_XDC 6 P1Y
6 2005 914001166.898895 A VN NGDP_XDC 6 P1Y
7 2006 1061564518.7912 A VN NGDP_XDC 6 P1Y
8 2007 1246769288.99484 A VN NGDP_XDC 6 P1Y
9 2008 1616047128.951 A VN NGDP_XDC 6 P1Y
10 2009 1809148949.95394 A VN NGDP_XDC 6 P1Y
11 2010 2739843171.96272 A VN NGDP_XDC 6 P1Y
12 2011 3539881312.29571 A VN NGDP_XDC 6 P1Y
13 2012 4073762287.04081 A VN NGDP_XDC 6 P1Y
14 2013 4473655598.64269 A VN NGDP_XDC 6 P1Y
15 2014 4937031677.60098 A VN NGDP_XDC 6 P1Y
16 2015 5191323729.85015 A VN NGDP_XDC 6 P1Y
17 2016 5639401003.26228 A VN NGDP_XDC 6 P1Y
18 2017 6293904553.91016 A VN NGDP_XDC 6 P1Y
19 2018 7009042131.65849 A VN NGDP_XDC 6 P1Y
20 2019 7707200287.05148 A VN NGDP_XDC 6 P1Y
21 2020 8044385729.09459 A VN NGDP_XDC 6 P1Y
c("x","y") trong R. Ví dụ
IFS_VN <-imf_dataset(database_id = "IFS",
indicator = c("BG_BP6_USD" , "LE_PE_NUM" , "EREER_IX" , "FMA_XDC"),
ref_area = "VN",
freq = 'A',
start_year = 1990 , end_year = 2020)
date value @OBS_STATUS freq ref_area indicator unit_mult time_format
1 1996 -2775 <NA> A VN BG_BP6_USD 6 P1Y
2 1997 -1247 <NA> A VN BG_BP6_USD 6 P1Y
3 1998 -989 <NA> A VN BG_BP6_USD 6 P1Y
4 1999 972 <NA> A VN BG_BP6_USD 6 P1Y
5 2000 375 <NA> A VN BG_BP6_USD 6 P1Y
6 2001 481 <NA> A VN BG_BP6_USD 6 P1Y
7 2002 -1054 <NA> A VN BG_BP6_USD 6 P1Y
8 2003 -2581 <NA> A VN BG_BP6_USD 6 P1Y
9 2004 -2287 <NA> A VN BG_BP6_USD 6 P1Y
10 2005 -2439.18900000001 <NA> A VN BG_BP6_USD 6 P1Y
11 2006 -2775.559 <NA> A VN BG_BP6_USD 6 P1Y
12 2007 -10438.1 <NA> A VN BG_BP6_USD 6 P1Y
13 2008 -12783 <NA> A VN BG_BP6_USD 6 P1Y
14 2009 -7607 <NA> A VN BG_BP6_USD 6 P1Y
15 2010 -5136 <NA> A VN BG_BP6_USD 6 P1Y
16 2011 -450 <NA> A VN BG_BP6_USD 6 P1Y
17 2012 9913 <NA> A VN BG_BP6_USD 6 P1Y
18 2013 8713 B A VN BG_BP6_USD 6 P1Y
19 2014 12126 <NA> A VN BG_BP6_USD 6 P1Y
20 2015 7374 <NA> A VN BG_BP6_USD 6 P1Y
21 2016 11042 <NA> A VN BG_BP6_USD 6 P1Y
22 2017 10846 <NA> A VN BG_BP6_USD 6 P1Y
23 2018 16539.629 <NA> A VN BG_BP6_USD 6 P1Y
24 2019 21494.247 <NA> A VN BG_BP6_USD 6 P1Y
25 2020 30708 <NA> A VN BG_BP6_USD 6 P1Y
26 1990 30286 <NA> A VN LE_PE_NUM 3 P1Y
27 1991 30974 <NA> A VN LE_PE_NUM 3 P1Y
28 1992 31815.2 <NA> A VN LE_PE_NUM 3 P1Y
29 1993 32718 <NA> A VN LE_PE_NUM 3 P1Y
30 1994 33663.9 <NA> A VN LE_PE_NUM 3 P1Y
31 1995 34589.6 <NA> A VN LE_PE_NUM 3 P1Y
32 1996 35385.968 <NA> A VN LE_PE_NUM 3 P1Y
33 1997 35602.532 <NA> A VN LE_PE_NUM 3 P1Y
34 1998 36954.303 <NA> A VN LE_PE_NUM 3 P1Y
35 1999 38119.872 <NA> A VN LE_PE_NUM 3 P1Y
36 2000 38367.6 <NA> A VN LE_PE_NUM 3 P1Y
37 2001 39000.3 <NA> A VN LE_PE_NUM 3 P1Y
38 2002 40162.3 <NA> A VN LE_PE_NUM 3 P1Y
39 2003 41175.7 <NA> A VN LE_PE_NUM 3 P1Y
40 2004 42315.615 <NA> A VN LE_PE_NUM 3 P1Y
41 2005 42526.9 <NA> A VN LE_PE_NUM 3 P1Y
42 2006 43338.9 <NA> A VN LE_PE_NUM 3 P1Y
43 2007 46020.235 <NA> A VN LE_PE_NUM 3 P1Y
44 2009 48011.95 <NA> A VN LE_PE_NUM 3 P1Y
45 2010 49493.696 <NA> A VN LE_PE_NUM 3 P1Y
46 2011 50881.18025 <NA> A VN LE_PE_NUM 3 P1Y
47 2012 51685.54275 <NA> A VN LE_PE_NUM 3 P1Y
48 2013 52208.07625 <NA> A VN LE_PE_NUM 3 P1Y
49 2014 52754.39725 <NA> A VN LE_PE_NUM 3 P1Y
50 2015 52619.05175 <NA> A VN LE_PE_NUM 3 P1Y
51 2016 53302.75575 <NA> A VN LE_PE_NUM 3 P1Y
52 2017 53703.36225 <NA> A VN LE_PE_NUM 3 P1Y
53 2018 54211.847 <NA> A VN LE_PE_NUM 3 P1Y
54 2019 54574.308 <NA> A VN LE_PE_NUM 3 P1Y
55 2020 53326.0225 <NA> A VN LE_PE_NUM 3 P1Y
DIRECTION OF TRADE
Ở phần cuối, chúng ta sẽ thử làm một bản đồDOT của Việt Nam sang các nước khác trong năm 2018 (trước Covid).
DOT_VN <- imf_dataset(database_id = "DOT" ,
indicator = c("TXG_FOB_USD") ,
ref_area = "VN" ,
start_year = 1990 , end_year = 2020,
return_raw = TRUE)
# filter annual data
DOT_VN_data <- DOT_VN %>%
filter(`@FREQ` == "A")
# unnest Obs
DOT_VN_data_df <- DOT_VN_data %>%
mutate(Obs = map(Obs, ~ if(is.list(.x)) as_tibble(.x) else .x)) %>%
unnest(Obs)
leaflet, leaflet.extras và leaflet.minicharts
library(leaflet)
library(leaflet.extras)
library(leaflet.minicharts)
# extract codes for trade partners
TRADE_PARTNERS <- unique(DOT_VN_data_df$`@COUNTERPART_AREA`)
# extract lattitudes and longitudes of trade partners
library(CoordinateCleaner)
data(countryref)
Long_Lat <-countryref %>%
filter(type == "country" & iso2 %in% TRADE_PARTNERS) %>%
select(iso2, "destination_lon" = centroid.lon , "destination_lat"= centroid.lat, capital.lon, capital.lat) %>%
distinct(capital.lat, .keep_all = TRUE) %>%
mutate(VN_Lat = 14.0583, VN_Long = 108.2772) %>% rename("destination" = iso2)
# extract map data
VN_X_Flow <- DOT_VN_data_df %>%
filter(`@REF_AREA`== "VN" & `@TIME_PERIOD` == 2018) %>%
select("origin" = `@REF_AREA`, "destination" = `@COUNTERPART_AREA`, "Export_Value" =`@OBS_VALUE`) %>%
left_join(. , Long_Lat)
VN_X_Flow$Export_Value <- as.numeric(VN_X_Flow$Export_Value)/1000
# plot flows
leaflet() %>%
addTiles() %>%
addFlows(lng0 = VN_X_Flow$VN_Long ,
lat0 = VN_X_Flow$VN_Lat ,
lng1 = VN_X_Flow$destination_lon ,
lat1 = VN_X_Flow$destination_lat ,
flow = VN_X_Flow$Export_Value ,
dir = 1,
minThickness = 0.1,
maxThickness = 2.5)

Tham khảo: