본문 바로가기
공부/IT-R프로그래밍

R프로그래밍 강좌 - [09] [실습] 지도 시각화

by 썸볼 2018. 1. 8.

1. 지도 시각화

 - 지도에 지역별 특성을 색깔로 표현한 지도를 단계 구분도라 한다.
 - 단계 구분도를 보면 인구나 소득 같은 특성이 지역별로 얼마나 다른지 쉽게 이해할수 있다.


(1) 미국 주별 강력 범죄율 단계 구분도 만들기  
1) 데이터 준비 
- 단계 구분도는 ggiraphExtra 패키지를 이용해 만든다.
- R에 내장된 
USArrests데이터는 1973년 미국 주(State)별 강력 범죄율 정보를 담고 있다.

install.packages("ggiraphExtra")

library(ggiraphExtra)
 
> str(USArrests)
'data.frame': 50 obs. of  4 variables:
 $ Murder  : num  13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
 $ Assault : int  236 263 294 190 276 204 110 238 335 211 ...
 $ UrbanPop: int  58 48 80 50 91 78 77 72 80 60 ...
 $ Rape    : num  21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
> head(USArrests)
           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7


- USArrests데이터는 지역명변수가 따로 없고, 대신 행 이름(rownames)이 지역명이다.
- tibble패키지의 rownames_to_column()를 이용해 행 이름을 state 변수로 바꿔 새 데이터 프레임을 생성한다.
- tolower()로 state의 값을 소문자로 변경한다.


library(tibble)
 
crime <- rownames_to_column(USArrests, var = "state")
crime$state <- tolower(crime$state)
> str(crime)
'data.frame': 50 obs. of  5 variables:
 $ state   : chr  "alabama" "alaska" "arizona" "arkansas" ...
 $ Murder  : num  13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
 $ Assault : int  236 263 294 190 276 204 110 238 335 211 ...
 $ UrbanPop: int  58 48 80 50 91 78 77 72 80 60 ...
 $ Rape    : num  21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
 



2) 미국 주 지도 데이터
- 단계 구분도는 지역별 위도, 경도 정보가 있는 지도 데이터 필요하다.
- R내장 maps패키지의 미국 주별 위/경도를 나타낸 state데이터를 ggplot2패키지의 
  map_data()를 이용하여 데이터 프레임으로 가져온다.


> library(ggplot2)
> states_map <- map_data("state")
> str(states_map)
'data.frame': 15537 obs. of  6 variables:
 $ long     : num  -87.5 -87.5 -87.5 -87.5 -87.6 ...
 $ lat      : num  30.4 30.4 30.4 30.3 30.3 ...
 $ group    : num  1 1 1 1 1 1 1 1 1 1 ...
 $ order    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ region   : chr  "alabama" "alabama" "alabama" "alabama" ...
 $ subregion: chr  NA NA NA NA ...
 



3) 단계 구분도 생성
- ggiraphExtra패키지의 ggChoropleth()를 이용해서 단계 구분도 생성한다.


ggChoropleth(data = crime,         # 지도에 표현할 데이터
             aes(fill = Murder,    # 색깔로 표현할 변수
                 map_id = state),  # 지역 기준 변수
             map = states_map)     # 지도 데이터


 


4) 인터랙티브 단계 구분도 생성
- interactive = TRUE로 설정하면, 마우스 움직임에 반응하는 인터렉티브 단계 구분도를 만들 수 있다.
- 실행하면 뷰어창에 단계구분도가 나타난다. 뷰어창의 [Export -> Save as Web Page...]를 클릭하면 
  HTML 포맷으로 저장할 수 있다.


ggChoropleth(data = crime,         # 지도에 표현할 데이터

             aes(fill = Murder,    # 색깔로 표현할 변수
                 map_id = state),  # 지역 기준 변수
             map = states_map,     # 지도 데이터
             interactive = T)      # 인터랙티브


 

[참고] 한국행정지도 패키지

install.packages("stringi")

 
install.packages("devtools")
devtools::install_github("cardiomoon/kormaps2014")
 
library(kormaps2014)
 
str(changeCode(korpop1))
 
library(dplyr)
korpop1 <- rename(korpop1,
                  pop = 총인구_명,
                  name = 행정구역별_읍면동)
 
str(changeCode(kormap1))
 
ggChoropleth(data = korpop1,       # 지도에 표현할 데이터
             aes(fill = pop,       # 색깔로 표현할 변수
                 map_id = code,    # 지역 기준 변수
                 tooltip = name),  # 지도 위에 표시할 지역명
             map = kormap1,        # 지도 데이터
           interactive = T)        # 인터랙티브
 
 
## -------------------------------------------------------------------- ##
str(changeCode(tbc))
 
ggChoropleth(data = tbc,           # 지도에 표현할 데이터
             aes(fill = NewPts,    # 색깔로 표현할 변수
                 map_id = code,    # 지역 기준 변수
                 tooltip = name),  # 지도 위에 표시할 지역명
             map = kormap1,        # 지도 데이터
             interactive = T)      # 인터랙티브


댓글