1. 시군구별 지역내총생산

시도별 지역내총생산 자료는 통계청 http://kosis.kr/ “국내통계>주제별통계>국민계정/지역계정/국가자산>지역계정>지역소득” 에서 시도 지역내총생산(GRDP) 데이터를 가져올 수 있고, 분석 결과는 시도별 지역내총생산(GRDP) - 2016년을 참조한다. 최근 지역계정에 시군구 GRDP 정보가 추가되었다. 하지만, 서울시를 비롯한 일부 지자체는 빠져있고, 지역내총생산 통계 시점도 최근 2015년에서 2012년까지 차이가 난다.

1.1. 데이터 전처리

시군구 GRDP 데이터는 각 시도 담당자별로 데이터 표준화가 되어 있지 않아 이를 각기 정제하여야 한다.

## 2. 통계 데이터 분석 {#sido-grdp}

# 0. 환경설정 -----

library(tidyverse)
library(stringr)
library(lubridate)
library(sf)
library(mapview)
library(DT)
library(readxl)
library(ggpubr)
library(tmap)
library(crosstalk)

# http://strimas.com/r/tidy-sf/

# 1. 데이터 가져오기 -----
## 1.1. 데이터 가져오기
강원_dat <- read_excel("data/grdp/강원도_GRDP_2014.xlsx", skip=0)
경기_dat <- read_excel("data/grdp/경기_GRDP_2014.xlsx", skip=1)
경남_dat <- read_excel("data/grdp/경남_GRDP_2014.xlsx", skip=1)
경북_dat <- read_excel("data/grdp/경북_GRDP_2015.xlsx", skip=1)
광주_dat <- read_excel("data/grdp/광주_GRDP_2014.xlsx", skip=1)
대구_dat <- read_excel("data/grdp/대구_GRDP_2014.xlsx", skip=1)
대전_dat <- read_excel("data/grdp/대전_GRDP_2014.xlsx", skip=1)
부산_dat <- read_excel("data/grdp/부산_GRDP_2015.xlsx", skip=1)
울산_dat <- read_excel("data/grdp/울산_GRDP_2015.xlsx", skip=1)
인천_dat <- read_excel("data/grdp/인천_GRDP_2015.xlsx", skip=1)
전남_dat <- read_excel("data/grdp/전남_GRDP_2015.xlsx", skip=1)
전북_dat <- read_excel("data/grdp/전북_GRDP_2014.xlsx", skip=2)
제주_dat <- read_excel("data/grdp/제주_GRDP_2014.xlsx", skip=1)
충남_dat <- read_excel("data/grdp/충남_GRDP_2012.xlsx", skip=1)
충북_dat <- read_excel("data/grdp/충북_GRDP_2014.xlsx", skip=1)

강원_df <- 강원_dat %>% 
    mutate(시도명 = "강원도") %>% 
    select(시도명, 시군구명 = 시군별, GRDP = `2014`)

경기_df <- 경기_dat %>% 
    mutate(시도명 = "경기도") %>% 
    select(시도명, 시군구명 = `시군별(1)`, GRDP = `GRDP(당해년 시장가격) (백만원)`)

경남_df <- 경남_dat %>% 
    mutate(시도명 = "경상남도") %>% 
    select(시도명, 시군구명 = `행정구역(시·군)별`, GRDP = `당해년가격`)

경북_df <- 경북_dat %>% 
    mutate(시도명 = "경상북도") %>% 
    select(시도명, 시군구명 = `행정구역별(시군)(1)`, GRDP = `당해년 가격 (백만원)`)

광주_df <- 광주_dat %>% 
    mutate(시도명 = "광주광역시") %>% 
    select(시도명, 시군구명 = `행정구역(구)별`, GRDP = `당해년가격 (백만원)`)

대구_df <- 대구_dat %>% 
    mutate(시도명 = "대구광역시") %>% 
    select(시도명, 시군구명 = `행정구역(구·군)별(1)`, GRDP = `당해년가격 (백만원)`)

대전_df <- 대전_dat %>% 
    mutate(시도명 = "대전광역시") %>% 
    select(시도명, 시군구명 = `대전광역시 시군구별`, GRDP = `당해년가격`)

부산_df <- 부산_dat %>% 
    mutate(시도명 = "부산광역시") %>% 
    select(시도명, 시군구명 = `구·군별`, GRDP = `당해년 가격 (백만원)`)

울산_df <- 울산_dat %>% 
    mutate(시도명 = "울산광역시") %>% 
    select(시도명, 시군구명 = `구군별`, GRDP = `당해년가격 (백만원)`)

인천_df <- 인천_dat %>% 
    mutate(시도명 = "인천광역시") %>% 
    select(시도명, 시군구명 = `행정구역(구.군)별`, GRDP = `당해년가격  (백만원)`)

전남_df <- 전남_dat %>% 
    mutate(시도명 = "전라남도") %>% 
    select(시도명, 시군구명 = `시군별(1)`, GRDP = `당해년가격 (백만원)`)

전북_df <- 전북_dat %>% 
    mutate(시도명 = "전라북도") %>% 
    select(시도명, 시군구명 = `전라북도`, GRDP = `4.424268E7`)

제주_df <- 제주_dat %>% 
    mutate(시도명 = "제주특별자치도") %>% 
    select(시도명, 시군구명 = `행정시별`, GRDP = `당해년가격 (백만원)`)

충남_df <- 충남_dat %>% 
    mutate(시도명 = "충청남도") %>% 
    select(시도명, 시군구명 = `충남 시군별`, GRDP = `당해년가격`)

충북_df <- 충북_dat %>% 
    mutate(시도명 = "충청북도") %>% 
    select(시도명, 시군구명 = `행정구역(시·군)별`, GRDP = `당해년가격 (백만원)`)

grdp_sigun_df <- bind_rows(강원_df, 경기_df) %>% 
    bind_rows(경남_df) %>% 
    bind_rows(경북_df) %>% 
    bind_rows(광주_df) %>% 
    bind_rows(대구_df) %>% 
    bind_rows(대전_df) %>% 
    bind_rows(부산_df) %>% 
    bind_rows(울산_df) %>% 
    bind_rows(인천_df) %>% 
    bind_rows(전남_df) %>% 
    bind_rows(전북_df) %>% 
    bind_rows(제주_df) %>% 
    bind_rows(충남_df) %>% 
    bind_rows(충북_df)

grdp_sigun_df <- grdp_sigun_df %>% 
    mutate(GRDP = GRDP / 10^6) %>%  #단위 백만원 -> 조원 
    mutate(시군구명 = str_replace_all(시군구명, "\\W", ""))

1.2. 시군구별 GRDP 표

힘들게 오랜시간 데이터 전처리 작업을 한 후에 crosstalk 팩키지를 활용하여 인터랙티브 방식으로 시도별 GRDP 분석을 표로 수행한다.

# 4. GRDP 표 -----
## 4.1. 공유 데이터
grdp_sigun_sd_df <- SharedData$new(grdp_sigun_df)

## 4.2. 제어
filter_checkbox("시도명", "시도명", grdp_sigun_sd_df, ~시도명, inline = TRUE)
filter_slider("GRDP", "지역내총생산(GRDP), 단위:조", grdp_sigun_sd_df, ~GRDP, width = "50%")
## 4.3. 표
grdp_tbl <- datatable(grdp_sigun_sd_df, extensions="Scroller", 
                     style="bootstrap", 
                     class="compact", width="100%",
                     options=list(deferRender=TRUE, scrollY=300, scroller=TRUE))

## 4.4. 인터랙티브 시각화
bscols(grdp_tbl)

1.3. 지리정보 시각화를 위한 데이터 전처리

GRDP 데이터를 지리정보 시각화를 위해 데이터를 정제한다. 행정코드를 시도명과 시군구명에 맞춰 정리하고 나서 지도 데이터를 가져온다. 이를 시군구별 GRDP 데이터에 행정코드를 붙이고 다시 지도와 연결한다.

## 1.2. 지도데이터 가져오기
adm_map <- st_read("data/map_admdong/HangJeongDong_ver20171016.geojson")
Reading layer `OGRGeoJSON' from data source `/Users/statkclee/swc/politics/data/map_admdong/HangJeongDong_ver20171016.geojson' using driver `GeoJSON'
Simple feature collection with 3493 features and 2 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: 124.6097 ymin: 33.11187 xmax: 131.8713 ymax: 38.61695
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
sigun_map <- adm_map %>% 
    separate(adm_nm, into=c("시도명", "시군구명", "읍면동명"), sep = " ") %>%
    mutate(시군구명 = case_when(str_detect(시군구명, "성남") ~ "성남시",
                                str_detect(시군구명, "안양") ~ "안양시",
                                str_detect(시군구명, "안산") ~ "안산시",
                                str_detect(시군구명, "포항") ~ "포항시",
                                str_detect(시군구명, "창원") ~ "창원시",
                                str_detect(시군구명, "청주") ~ "청주시",
                                str_detect(시군구명, "용인") ~ "용인시",
                                str_detect(시군구명, "전주") ~ "전주시",
                                str_detect(시군구명, "고양") ~ "고양시",
                                str_detect(시군구명, "천안") ~ "천안시",
                                str_detect(시군구명, "수원") ~ "수원시",
                                TRUE ~ 시군구명)) %>% 
    group_by(시도명, 시군구명) %>% 
    summarise(geometry = st_union(geometry))

## 2.2. GRDP를 지도와 연결
sigun_grdp_map <- left_join(sigun_map, grdp_sigun_df)

2. 시군구별 GRDP 시각화

2.1. 시군구별 GRDP 정적 시각화

sf 팩키지를 활용하면 기존 tidyverse에서 익힌 대부분의 기능을 지리정보 시각화에 나타낼 수 있다.

# 3. 데이터 시각화 -----
## 3.1. 정적 그래프 --------
ggplot(data=sigun_grdp_map, aes(fill=GRDP)) +
    geom_sf() +
    theme_pubr(base_family="NanumGothic") +
    labs(title="시군구별 지역내총생산(GRDP)") + 
    theme(legend.position = "right") +
    scale_fill_gradient(low = "wheat1", high = "red", name = "지역내총생산", labels = scales::comma)

2.2. 시군구별 GRDP 동적 시각화

tmap을 활용하면 시군구별 지역내총생산 GRDP를 인터랙티브하게 지도위에 표현할 수 있다.

sigun_grdp_map <- st_centroid(sigun_grdp_map)
mapview(sigun_grdp_map, 
        zcol = "GRDP")