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) # 인터랙티브
![](http://lectureblue.pe.kr/ckstorage/images/special_subject/R/09/02.jpg)
[참고] 한국행정지도 패키지
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) # 인터랙티브
댓글