지도 공간 기법으로 시각화하는 ggmap 패키지는 Google Maps, Stamen Maps, 네이버 맵, 등의 다양한 온라인 소스로부터 가져온 정적인 지도 위에 특별한 데이터나 모형을 시각화하는 함수들을 제공한다.
ggmap 패키지의 주요 함수
함수 | 기능 | 비고 |
geocode() | 거리주소 또는 장소 이름을 이용하여 이용 지도 정보(위도, 경도) 획득 | Geolocation API 지원 |
get_googlemap() | 구글 지도 서비스(Google Static Maps) API에 접근하여 정적 지도 다운로드 지원과 지도에 marker 등을 삽입하고 자신이 원하는 줌 레벨과 center를 지정하여 지도 정보 생성 | Google Static Maps API 지원 |
get_map() | 지도 서비스 관련 서버(Google Maps, OpenStreetMap, StamenMapsor, 네이버 맵)에 관련된 질의어를 지능형으로 인식하여 지도 정보 생성 | Google Maps, 네이버 맵 등 API 지원 |
get_navermap() | 네이버 지도 서비스(Naver Static Maps) API에 접근하여 정적 지도 다운로드 지원 | 네이버 Static Maps API 지원 |
ggimage() | ggplot2 패키지의 이미지와 동등한 수준으로 지도 이미지 생성 | ggplot2 지원 |
ggmap() | get_map 함수에 의해서 생성된 픽셀 객체를 지도 이미지로 시각화 | legend 속성 |
ggmapplot() | fullpage 속성 | |
qmap() | ggmap() 함수와 get_map() 함수의 통합 기능 | 통합 지원 |
qmplot() | ggplot2 패키지의 qplot()와 동등한 수준으로 빠르게 지도 이미지 시각화 | ggplot2 지원 |
구글맵 지도 정보 함수 get_googlemap()을 사용하려면 구글맵 API Key가 필요하다. 아래 URL에 접속하여 프로젝트를 생성하고 개인 API Key를 얻을 수 있다. 단, 결제정보를 요구하므로 해외거래이용이 가능한 신용카드가 필요하다.
https://cloud.google.com/maps-platform/
Geolocation API | Google Maps Platform | Google Cloud
Google Maps Platform을 선택하면 정확한 실시간 데이터 및 동적 이미지로 몰입형 위치정보 활용 환경을 만들고 더 나은 비즈니스 의사결정을 내릴 수 있습니다.
cloud.google.com
get_googlemap() 함수
1
2
3
4
5
6
|
library(ggmap)
register_google(key = '구글맵 API Key 입력')
gc <- geocode(enc2utf8("모투에카")) # 뉴질랜드의 소도시 '모투에카'의 위도와 경도 획득
gc
cen <- as.numeric(gc) # gc 값(경도 및 위도)를 숫자로 변환
cen # 출력 결과: 173.00098 -41.12405
|
gc의 출력 결과는 아래와 같다. lon은 Longitude (경도)를 의미하며, lat은 Latitude (위도)를 의미한다.
한글로 지명을 입력하려면 enc2utf8() 함수를 이용해 인코딩을 바꿔야 한다.
1
2
3
4
|
# A tibble: 1 x 2
lon lat
<dbl> <dbl>
1 173. -41.1
|
이번엔 위의 cen 값과 get_googlemap() 함수를 이용해 지도를 그려보자.
1
2
3
4
5
|
map <- get_googlemap(center = cen, # 지도 중심점 좌표
zoom = 15, # 지도 확대 정도: 숫자가 클수록 확대 3~21
size = c(640,640), # 지도 크기
maptype = 'hybrid') # 지도 유형
ggmap(map)
|
get_googlemap() 함수의 주요 속성
속성 | 설명 |
center | 지도 중심지역(위도와 경도로 표현) |
zoom | 확대비율(수치가 작을수록 중심지역을 기준으로 확대) |
size | 지도 이미지의 가로와 세로 픽셀 수 |
scale | 지도 크기 지정 (예: size = c(640, 640)이고, scale = 2의 경우 1280 X 1280 픽셀 적용) |
format | 지도 이미지 형식("png8" ,"gif", "jpg", "jpg-baseline") |
maptype | 지도 유형("terrain", "satellite", "roadmap", "hybrid") |
language | 언어와 국가 코드("ko=Kr", "en=EN") |
color | 지도 색상 - c("color", "bw") |
sensor | 사용자 위치를 판단하기 위한 센서 사용 여부 지정 |
markers | 지도 위에 표시될 마커(marker = gc) |
path | 마커 연결 표시 |
ggmap 패키지는 '+' 기호를 사용하여 아래 그림처럼 여러 개의 레이어를 겹치는 방식으로 지도 서비스 관련 서버에서 다운로드한 정적 지도 이미지 위에 포인트나 텍스트 등을 추가하여 지도 이미지를 제작할 수 있다. 따라서 geom_text() 함수로 지도 위에 텍스트를 추가하고, geom_point() 함수로 지도 위에 원을 그려넣어 보자.
구글맵 지도에 텍스트(이름)와 마커 추가하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
names <- c("북한산국립공원","설악산국립공원","오대산국립공원","치악산국립공원","태백산국립공원")
gc <- geocode(enc2utf8(names))
cen <- c(mean(df$lon), mean(df$lat))
map <- get_googlemap(center = cen,
maptype = 'roadmap',
zoom = 8,
markers = gc) # 지도 위에 각 위치마다 마커 표시
gmap <- ggmap(map)
gmap + # '+' 기호를 이용하여 geom_text() 함수를 추가
geom_text(data = df,
aes(x = lon, y = lat),
size = 5,
label = df$name) # 지명 이름으로 라벨링
|
구글맵 지도에 데이터에 상응하는 크기의 원 추가하기
1
2
3
4
5
6
|
gmap <- ggmap(map)
gmap +
geom_point(data = df,
aes(x = lon, y = lat, size = spd), # 원의 크기는 df 데이터 안의 spd 변수로 지정함
alpha = 0.5, color = 'navy') + # 투명도 0.5
scale_size_continuous(range=c(1,14)) #원 크기 조절, 생략 가능
|
'빅데이터 > R' 카테고리의 다른 글
[R] 비정형 데이터 처리 - 워드클라우드(wordcloud) 패키지 사용 예시 [텍스트 마이닝] (0) | 2019.12.11 |
---|---|
[R] symbols() 함수 사용 예시 (0) | 2019.12.10 |
[R] treemap() 함수 사용 예시 (0) | 2019.12.10 |
[R] RStudio에서 read.csv 후 한글 깨짐 현상 해결 방법 (영문 OS) (0) | 2019.12.10 |
[R] 고급 시각화 분석 - ggplot() 함수 사용 예시 (0) | 2019.12.09 |