지도 시각화

Posted by Bang Blog on June 5, 2019

1. 지역별 통계치 색깔의 차이로 표현한 지도를 ‘단계 구분도’라고 합니다.

install.packages(“ggiraphExtra”) library(ggiraphExtra)

1. 자료는 R에 내장된 USArrests 데이터를 활용

1
2
3
4
5
6
7
8
9
10
str(USArrests)
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 변수로 바꿔 새 데이터 프레임을 만들겠습니다.

1
2
3
4
5
6
7
8
9
10
11
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 ...

1.미국 주 지도 데이터 준비

단계 구분도를 만들려면 지역별 위도, 경도 정보가 있는 지도 데이터가 필요합니다. R에 내장된 maps 패키지에 미국 주별 위경도를 나타낸 state 데이터가 들어 있습니다. ggplot2 패키지의 map_data()를 이용해 이 데이터를 데이터 프레임 형태로 불러오겠습니다.

1
2
3
4
5
6
7
8
9
10
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 ...

5. 단계 구분도 만들기

데이터가 준비되었으니 ggiraphExtra 패키 지의 ggChoropleth()를 이용해 단계 구분도를 만들어 보겠습니다.

살인 범죄 건수를 색깔로 표현하기 위해 aes의 fill에 Murder 변수를 지정하고, map_id에 지역 구분 기준이 되는 state 변수를 지정합니다. crime 데이터의 state 변수와 states_map 데이터의 region 변수는 미국 주 이름을 나타내는 동일한 값으로 구성되어 있습니다.

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

map