1. GNP와 GDP

GDP(Gross Domestic Product)는 국내총생산(國內總生産)으로 일정 기간 동안 한 국가에서 생산된 재화와 용역의 시장 가치를 합한 것을 의미하며 보통 1년을 기준으로 측정한다. 과거 국민총생산(GNP)가 많이 쓰였으나, 실질적인 측도로 국내총생산이 많이 쓰이고 있다.

1.1. 세계은행 GDP 데이터 및 전처리

wbstats 팩키지는 세계은행(world bank)에서 제공하는 다양한 경제데이터를 R에서 쉽게 분석할 수 있도록 도움을 주도록 개발되었다. 이를 통해 국가별 GDP데이터를 가져와서 경제규모를 가늠한다. 세계은행에서 제공하는 데이터가 실업율을 포함하여 방대하기 때문에… wb_cachelist에 메타데이터가 들려있고, wbsearch() 함수에 정규표현식을 넣어 필요한 경제지표를 받아낸다.

NY.GDP.MKTP.CD 경제지표에 GDP 국가별 데이터가 포함되어 있다. 대한민국만 뽑아서 이를 시계열로 분석한다.

# 0. 환경설정 -----
library(wbstats) # devtools::install_github("GIST-ORNL/wbstats")
library(tidyverse)
library(stringr)
library(dygraphs)
library(lubridate)
library(sf)
library(mapview)
library(DT)
library(crosstalk)

# 1. GDP 데이터 가져오기 -----
# listviewer::jsonedit(wb_cachelist)
# gdp_vars <- wbsearch(pattern = "GDP")

## 1.1. GDP 
gdp_dat <- wb(indicator = "NY.GDP.MKTP.CD", startdate = 1950, enddate = 2017) 

gdp_kor_dat <- gdp_dat %>% 
    filter(str_detect(country, "Korea, Rep"))

1.2. 대한민국 GDP 데이터 변화 시각화

시계열 데이터를 시각화하는데 dygraph를 흔히 사용한다. timetk 팩키지를 활용하여 xts 시계열 데이터로 변환하고 이를 dygraph() 함수에 넣고 한글처리 및 여타 설정을 통해 대한민국 GDP 변화를 살펴볼 수 있도록 조치한다.

# 2. 데이터 시각화 -----
gdp_kor_df <- gdp_kor_dat %>% 
    mutate(year = lubridate::make_date(year=date)) %>% 
    mutate(GDP = round(value,0)) %>% 
    select(year, `GDP`) %>% 
    tbl_df()

gdp_kor_xts <- timetk::tk_xts(gdp_kor_df, select =  `GDP`,  date_col = year)

dygraph(data = gdp_kor_xts, main = "대한민국 국내총생산 GDP($) 변화") %>% 
    dyHighlight(highlightCircleSize = 5, 
                highlightSeriesBackgroundAlpha = 0.2,
                hideOnMouseOut = FALSE, highlightSeriesOpts = list(strokeWidth = 3)) %>%
    dyRangeSelector(height = 50, dateWindow = c("1990-01-01", "2017-01-01")) %>% 
    dyLegend(width = 500, show = "onmouseover", hideOnMouseOut = FALSE) %>% 
    dyAxis("y",
           label = "국내 총생산 (달러:$)",
           axisLabelFormatter = 'function(d){return d.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ",");}',
           axisLabelFontSize = 10,
           axisLabelWidth = 70,
           valueFormatter = 'function(d){return d.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ",");}'
    ) %>% 
    dyCSS("blockchain.css")

명목 국내 총생산순 나라 목록1을 참조하면 세계은행에서 발표한 자료와 비교할 수 있다. 최근 GDP의 증가없이 정체된 모습이 나타나고 있다.

2. 2016년 기준 GDP 국가 비교

2016년 기준 GDP 데이터를 입수하여 대한민국 GDP 순위를 살펴보자. 단위가 너무 커서 \(10^6\) 백만달러 단위로 조정한다. 그리고 나서 http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_map_units.zip 전세계 지도 데이터를 가져온다. 하지만 남극관련된 지역은 제외한다.

## 1.1. 1인당 GDP 
gdp_dat <- wb(indicator = "NY.GDP.MKTP.CD", startdate = 2016, enddate = 2016) 

gdp_df <- gdp_dat %>% 
    rename(GDP = value) %>% 
    mutate(GDP = round(GDP/10^6, 0)) %>% 
    tbl_df()

## 1.2. 지도 데이터
# map_url <- "http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_map_units.zip"
# download.file(map_url, destfile="data/ne_110m_admin_0_map_units.zip")
# unzip("data/ne_110m_admin_0_map_units.zip", exdir = "data/worldmap")

world_map <- st_read("data/worldmap/ne_110m_admin_0_map_units.shp") %>% 
    st_transform(crs = "+proj=longlat +datum=WGS84") %>% 
    filter(!SUBUNIT %in% c("French Southern and Antarctic Lands", "Antarctica"))
Reading layer `ne_110m_admin_0_map_units' from data source `D:\docs\politics\data\worldmap\ne_110m_admin_0_map_units.shp' using driver `ESRI Shapefile'
Simple feature collection with 183 features and 71 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -180 ymin: -90 xmax: 180 ymax: 83.64513
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs

2.1. 2016년 기준 GDP 국가 비교

지도(world_map)와 국가별 GDP 정보(gdp_df)가 담긴 정보를 세자리 국가코드를 키값으로 병합하고 나서 mapview 함수로 지리정보 시각화를 한다.

# 2. 데이터 시각화 -----

world_gdp_sf <- left_join(world_map, gdp_df, by=c("ADM0_A3"="iso3c"))

world_gdp_mapview_sf <- world_gdp_sf %>% 
    select_("date", "GDP", "indicatorID", "indicator", "iso2c", "country", "ADMIN", "ADM0_A3", "geometry")

mapview(world_gdp_mapview_sf, zcol = c("GDP"), legend = TRUE)

2.2. 2016년 기준 GDP 국가 순위

세계은행 API를 통해 전달받은 데이터에는 국가외에 연합(예를 들어 EU) 및 메타 통계량이 포함되어 있어 국가만 추출하여 파레토 분석을 수행한다. 한국의 국내총생산(GDP) 규모는 1조 4,112억달러 (약 1589조7168억원)로 집계된다. 2

# 3. GDP 순위 -----
st_geometry(world_gdp_sf) <- NULL

gdp_tbl_df <- world_gdp_sf %>% 
    arrange(desc(GDP)) %>% 
    filter(!is.na(GDP)) %>% 
    mutate(GDP율 = GDP/sum(GDP),
           누적GDP율 = round(cumsum(GDP율),2)) %>% 
    select(CONTINENT, country, ADM0_A3, GDP, GDP율, 누적GDP율, date) %>% 
    group_by(country) %>% 
    filter(row_number(GDP) == 1) %>% 
    ungroup()

## 3.2. GDP 파레토 분석

gdp_sd <- SharedData$new(gdp_tbl_df)

## 3.3. 제어
filter_checkbox("CONTINENT", "대륙", gdp_sd, ~CONTINENT, inline = TRUE)
filter_slider("누적GDP율", "누적 GDP율(%)", gdp_sd, ~누적GDP율, width = "50%")
gdp_tbl <- datatable(gdp_sd) %>% 
    formatCurrency("GDP", currency="", digits=0) %>% 
    formatPercentage(c("GDP율", "누적GDP율"), digits=1)

## 3.4. 인터랙티브 시각화

bscols(gdp_tbl)

  1. 위키백과 - 명목 국내 총생산순 나라 목록

  2. 조선일보, 2016년 한국 GDP 세계 11위… 11년째 10위권 밖