GDP(Gross Domestic Product)는 국내총생산(國內總生産)으로 일정 기간 동안 한 국가에서 생산된 재화와 용역의 시장 가치를 합한 것을 의미하며 보통 1년을 기준으로 측정한다. 과거 국민총생산(GNP)가 많이 쓰였으나, 실질적인 측도로 국내총생산이 많이 쓰이고 있다.
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"))
시계열 데이터를 시각화하는데 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의 증가없이 정체된 모습이 나타나고 있다.
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
지도(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)
세계은행 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)