1. 대한민국 수출입 상위 5개국

United Nations Comtrade API를 R 팩키지 comtradr: Interface with the United Nations Comtrade API로 구현이 되어 있어 R에서 쉽게 무역데이터를 분석할 수 있다. 데이터를 분석하는 2016년이 가장 최근 데이터로 조만간 2017년 데이터도 갱신될 것으로 기대된다. 대한민국이 수출, 수입하는 상대 5개국을 대상으로 무역 파트너로 뜨는 국가와 저물어가는 국가를 살펴보자.

1.1. comtradr 대한민국 수출입 데이터

대한민국 수출입 무역 실적 데이터를 시각화하는데 필요한 팩키지를 설치하고 ct_search() 함수에 reporters, partners, trade_direction 등 인자에 적절한 값을 넣어 주어 원하는 무역데이터를 가져온다.

그리고, 수출, 수입 데이터프레임을 제작하는데 top_n() 함수를 통해 상위 5개국을 추출한다. 이유는 API에서 최대 5개국만 허용되기 때문이다.

# 0. 환경설정 -----
library(plotly)
library(tidyverse)
library(comtradr)
library(ggthemes)
library(extrafont)
loadfonts()
library(crosstalk)

# 1. 데이터 가져오기 -----

trade_df <- ct_search(reporters = "Rep. of Korea", 
               partners = "all", 
               start_date = "2016-01-01", 
               end_date = "2016-12-31",
               trade_direction = "all") %>% as_tibble()
  
## 1.1. 대한민국 수출 상위 5개국 -----

export_top_5 <- trade_df %>% 
  filter(trade_flow == "Export",
         partner != "World") %>% 
  top_n(5, trade_value_usd) %>% 
  pull(partner)

trade_export_df <- ct_search(reporters = "Rep. of Korea", 
                      partners = c("China", "China, Hong Kong SAR", "Japan", "Viet Nam", "USA"),
                      trade_direction = "export") %>% as_tibble()

## 1.2. 대한민국 수입 상위 5개국 -----

import_top_5 <- trade_df %>% 
  filter(trade_flow == "Import",
         partner != "World") %>% 
  top_n(5, trade_value_usd) %>% 
  pull(partner)

trade_import_df <- ct_search(reporters = "Rep. of Korea", 
                             partners = c("China", "Germany", "Japan", "Other Asia, nes", "USA"),
                             trade_direction = "import") %>% as_tibble()

1.2. 인터랙티브 대한민국 수출입 금액 시각화

대한민국 수출 및 수입 금액이 미화로 되어 있고 단위가 매우 크기 때문에 \(10^9\) billion 달러로 한화로 1조에 상당한 단위로 변환시킨다. 그리고 crosstalk 팩키지 활용 작업흐름인 공유데이터, 제어, 시각화 혹은 표, 그리고 인터랙티브 시각화로 마무리 한다.

1.2.1. 인터랙티브 대한민국 수출금액 시각화

# 3. 수출 인터랙티브 데이터 시각화 -----
## 3.1. 공유 데이터
trade_exp_df <- trade_export_df %>% 
  mutate(trade_value_usd = trade_value_usd / 10^9) %>% 
  mutate(year = lubridate::make_date(year = year)) %>% 
  mutate(partner = case_when(str_detect(partner, "Hong Kong") ~ "Hong Kong",
                             str_detect(partner, "Other Asia") ~ "Other Asia",
                             TRUE ~ partner))

trade_exp_sd <- SharedData$new(trade_exp_df)

## 3.2. 제어
filter_checkbox("partner", "국가", trade_exp_sd, ~partner, inline=TRUE)
## 3.3. 시각화
trade_exp_g <- ggplot(trade_exp_sd, aes(x=year, y = trade_value_usd, group=1, color = factor(`partner`))) +
  geom_point(size = 2) +
  geom_line(size = 1) +
  labs(title = "한국발 수출 상위 5개국 실적", x="", y="수출액 (Billion USD ~ 조)", color="국가명") +
  theme_bw(base_family="NanumGothic")

trade_exp_gg <- ggplotly(trade_exp_g)

## 3.4. 인터랙티브시각화
bscols(trade_exp_gg)

1.2.2. 인터랙티브 대한민국 수입금액 시각화

# 4. 수입 인터랙티브 데이터 시각화 -----
## 4.1. 공유 데이터
trade_imp_df <- trade_import_df %>% 
  mutate(trade_value_usd = trade_value_usd / 10^9) %>% 
  mutate(year = lubridate::make_date(year = year)) %>% 
  mutate(partner = case_when(str_detect(partner, "Hong Kong") ~ "Hong Kong",
                             str_detect(partner, "Other Asia") ~ "Other Asia",
                             TRUE ~ partner))

trade_imp_sd <- SharedData$new(trade_imp_df)

## 4.2. 제어
filter_checkbox("partner", "국가", trade_imp_sd, ~partner, inline=TRUE)
## 3.3. 시각화
trade_imp_g <- ggplot(trade_imp_sd, aes(x=year, y = trade_value_usd, group=1, color = factor(`partner`))) +
  geom_point(size = 2) +
  geom_line(size = 1) +
  labs(title = "한국발 수입 상위 5개국 실적", x="", y="수입액 (Billion USD ~ 조)", color="국가명") +
  theme_bw(base_family="NanumGothic")

trade_imp_gg <- ggplotly(trade_imp_g)

## 3.4. 인터랙티브시각화
bscols(trade_imp_gg)

2. 주요 3국 대상국가 수출입 및 무역수지 추정 규모

2.1. treemap 시각화를 위한 환경설정

주요 3국 한국, 미국, 중국을 대상으로 수출, 수입, 무역수지(수출-수입) 추정 무역교역금액을 treemap으로 시각화한다. 국가명을 넣으면 수출, 수입, 무역수지에 대한 treemap을 자동으로 반환하는 함수를 생성한다.

# 0. 환경설정 -----
library(highcharter)
library(tidyverse)
library(comtradr)
library(ggthemes)
library(extrafont)
loadfonts()

# 1. 국제무역 Treemap 함수 -----

trade_treemap_fn <- function(country) {
  # 1.1. 데이터 가져오기 -----
  country_df <- ct_search(reporters = country,
                        partners = "all",
                        start_date = "2016-01-01", 
                        end_date = "2016-12-31",
                        trade_direction = "all") %>% as_tibble()
  
  # 1.2. 수출입 통계 -----
  country_import_tm_df <- country_df %>% 
    filter(partner != "World") %>% 
    filter(trade_flow == "Import") %>% 
    mutate(trade_value_usd = round(trade_value_usd / 10^9,1))
  
  import_tm <- hchart(country_import_tm_df, "treemap", hcaes(x = partner, value = trade_value_usd, color = trade_value_usd))
  
  country_export_tm_df <- country_df %>% 
    filter(partner != "World") %>% 
    filter(trade_flow == "Export") %>% 
    mutate(trade_value_usd = round(trade_value_usd / 10^9,1))
  
  export_tm <- hchart(country_export_tm_df, "treemap", hcaes(x = partner, value = trade_value_usd, color = trade_value_usd))
  
  # 1.3. 국가별 무역수지 -----
  
  country_import_df <- country_import_tm_df %>% 
    select(classification, year, import_partner=partner, import_trade_value_usd = trade_value_usd)
  
  country_export_df <- country_export_tm_df %>% 
    select(classification, year, export_partner=partner, export_trade_value_usd = trade_value_usd)
  
  country_trade_balance_df <- inner_join(country_import_df, country_export_df, by=c("classification", "year", "import_partner" = "export_partner"))
  
  country_trade_balance_df <- country_trade_balance_df %>% 
    mutate(trade_value_balance_usd = export_trade_value_usd - import_trade_value_usd) %>% 
    rename(partner = import_partner)
  
  trade_balance_tm <- hchart(country_trade_balance_df, "treemap", 
         hcaes(x = partner, value = abs(trade_value_balance_usd), color = trade_value_balance_usd)) %>% 
    hc_colorAxis(stops = color_stops(10, RColorBrewer::brewer.pal(10, "RdBu"))) 
  
  return(list(import_tm = import_tm, export_tm = export_tm, trade_balance_tm = trade_balance_tm))
}

2.2. 한국 수출, 수입, 무역수지

2.2.1. 한국 수출

# 2. 국가별 무역 Treemap -----
## 2.1. 대한민국
# ct_country_lookup("Korea")
korea <- trade_treemap_fn("Rep. of Korea")
korea$export_tm

2.2.2. 한국 수입

korea$import_tm

2.2.3. 한국 무역수지

korea$trade_balance_tm

2.3. 중국 수출, 수입, 무역수지

2.3.1. 중국 수입

## 2.2. 중국
china <- trade_treemap_fn("China")
china$export_tm

2.3.2. 중국 수입

china$import_tm

2.3.3. 중국 무역수지

china$trade_balance_tm

2.4. 미국 수출, 수입, 무역수지

2.3.1. 미국 수입

usa <- trade_treemap_fn("USA")
usa$export_tm

2.3.2. 미국 수입

usa$import_tm

2.3.3. 미국 무역수지

usa$trade_balance_tm