Chapter 2 데이터 세트의 생성

사용할 패키지 불러오기

library(ggmap)
library(ggplot2)
library(raster)
library(rgeos)
library(maptools)
library(rgdal)
library(tidyverse)

2.1 시도 데이터 세트 생성

앞의 “지리정보”에는 시도에 대한 데이터data 슬롯에 포함되어 있다.

즉, shp_CTPRVN@data에 시도에 대한 데이터가 수록되어 있는데, 이를 data_CTPRVN 이라는 변수에 대입한다.

data_CTPRVN <- shp_CTPRVN@data
str(data_CTPRVN)
## 'data.frame':    17 obs. of  3 variables:
##  $ CTPRVN_CD : chr  "11" "26" "27" "28" ...
##  $ CTP_ENG_NM: chr  "Seoul" "Busan" "Daegu" "Incheon" ...
##  $ CTP_KOR_NM: chr  "서울특별시" "부산광역시" "대구광역시" "인천광역시" ...
head(data_CTPRVN)
##   CTPRVN_CD CTP_ENG_NM CTP_KOR_NM
## 0        11      Seoul 서울특별시
## 1        26      Busan 부산광역시
## 2        27      Daegu 대구광역시
## 3        28    Incheon 인천광역시
## 4        29    Gwangju 광주광역시
## 5        30    Daejeon 대전광역시
  • CTPRNVN_CD : 시도 코드(2자리)
  • CTP_ENG_NM, CTP_KOR_NM : 시도 영문/한글명

2.2 시도 지리정보 데이터 세트 생성

shp_CTPRVN은 S4 클래스 구조인데, 이를 데이터 프레임 형태의 지리정보 데이터 세트(shp_result)로 변환한다.

ggplot2 패키지의 fortify() 함수를 이용하여 shp_CTPRVN 변수를 데이터 프레임으로 변환한다.

이때 region = "CTPRVN_CD"를 인수로 이용한다.

shp_result <- fortify(shp_CTPRVN, region="CTPRVN_CD")
## SpP is invalid
str(shp_result)
## 'data.frame':    798838 obs. of  7 variables:
##  $ long : num  127 127 127 127 127 ...
##  $ lat  : num  37.6 37.6 37.6 37.6 37.6 ...
##  $ order: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ hole : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ piece: Factor w/ 2228 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ id   : chr  "11" "11" "11" "11" ...
##  $ group: Factor w/ 4558 levels "11.1","11.2",..: 1 1 1 1 1 1 1 1 1 1 ...
head(shp_result)
##       long      lat order  hole piece id group
## 1 127.1108 37.63841     1 FALSE     1 11  11.1
## 2 127.1108 37.63841     2 FALSE     1 11  11.1
## 3 127.1109 37.63826     3 FALSE     1 11  11.1
## 4 127.1110 37.63821     4 FALSE     1 11  11.1
## 5 127.1116 37.63803     5 FALSE     1 11  11.1
## 6 127.1116 37.63799     6 FALSE     1 11  11.1
  • id : 시도 코드(2자리)
  • 나머지 컬럼들 : 좌표계를 포함한 지리정보

2.3 ’시도 데이터 세트와 '시도 지리정보 데이터 세트의 결합

시도 데이터 세트에는 좌표계 정보가 포함되어 있지 않다. (시도 코드와 시도 한글/영문명 으로 구성)

반면에 시도 지리 정보 데이터 세트에는 좌표계 정보가 포함되어 있지만 시도명에 대한 데이터가 포함되어 있지 않다.(시도 코드와 좌표계 정보 포함)

이제 시도 지리정보 데이터 세트시도 데이터 세트에 있는 시도 영문/한글명 컬럼을 결합하기 위해, 왼쪽 테이블과 오른쪽 테이블 그리고 결합 key를 확인한다.

  • 왼쪽 테이블 : shp_result (시도 지리정보 데이터 세트), 주키 : id
  • 오른쪽 테이블 : data_CTPRVN, 주키 : CTPRVN_CD
  • 왼쪽 테이브과 오른쪽 테이블을 결합하기 위한 key의 이름이 다름다.

이제 데이터 세트를 left_join() 함수를 이용하여 결합한다. (inner_join() 함수를 사용해도 같은 결과)

result <- shp_result %>% left_join(data_CTPRVN, by = c("id" = "CTPRVN_CD"))
str(result)
## 'data.frame':    798838 obs. of  9 variables:
##  $ long      : num  127 127 127 127 127 ...
##  $ lat       : num  37.6 37.6 37.6 37.6 37.6 ...
##  $ order     : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ hole      : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ piece     : Factor w/ 2228 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ id        : chr  "11" "11" "11" "11" ...
##  $ group     : Factor w/ 4558 levels "11.1","11.2",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ CTP_ENG_NM: chr  "Seoul" "Seoul" "Seoul" "Seoul" ...
##  $ CTP_KOR_NM: chr  "서울특별시" "서울특별시" "서울특별시" "서울특별시" ...
head(result)
##       long      lat order  hole piece id group CTP_ENG_NM CTP_KOR_NM
## 1 127.1108 37.63841     1 FALSE     1 11  11.1      Seoul 서울특별시
## 2 127.1108 37.63841     2 FALSE     1 11  11.1      Seoul 서울특별시
## 3 127.1109 37.63826     3 FALSE     1 11  11.1      Seoul 서울특별시
## 4 127.1110 37.63821     4 FALSE     1 11  11.1      Seoul 서울특별시
## 5 127.1116 37.63803     5 FALSE     1 11  11.1      Seoul 서울특별시
## 6 127.1116 37.63799     6 FALSE     1 11  11.1      Seoul 서울특별시