R에서는 지도 시각화를 위한 'ggmap' 패키지를 제공한다.
Google map에서 지도 그림을 가져와 조각조각 붙인다.
이를 위해서는 위도, 경도 좌표값이 꼭 필요하다.
참고로 예전에는 구글맵 api를 등록하지 않고도 ggmap을 사용할 수 있었는 데, 지금은 등록해야됨.
이번 포스팅에서는 ggmap 패키지를 사용하여 지도시각화를 진행할 것이며,
크게 아래 3가지 시각화를 진행할 것이다
- get_map와 ggmap을 사용한 간단한 지도 불러오기
- 공공데이터포털의 상가정보를 사용해 ggmap에 geom_point 그리기
- 공공데이터포털의 상가정보를 사용해 ggmap에 stat_density2d()을 사용해 등고선 및 밀도 추가
00. 구글맵 API 등록
- 구글맵 api는 밑의 주소에서 간단하게 등록할 수 있음.
https://developers.google.com/maps/gmp-get-started?hl=ko
Google Maps Platform 시작하기 | Google Developers
의견 보내기 Google Maps Platform 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에서는 Google Maps Platform의 API 및 SDK를 사용하기 위한 기본 필
developers.google.com
register_google(key="본인 api 입력")
01. 지도 불러오기
지도를 불러오기 위해서는 get_map() 함수가 사용된다.
get_map(location = c(lon = -95.3632715, lat = 29.7632836),
zoom = "auto",
scale = "auto",
maptype = c("terrain", "terrain-background", "satellite", "roadmap", "hybrid", "toner",
"watercolor", "terrain-labels", "terrain-lines", "toner-2010", "toner-2011",
"toner-background", "toner-hybrid", "toner-labels", "toner-lines", "toner-lite"),
source = c("google", "osm", "stamen"),
force = ifelse(source == "google", TRUE, FALSE),
messaging = FALSE,
urlonly = FALSE,
filename = NULL,
crop = TRUE,
color = c("color","bw"),
language = "en-EN", ...)
· 주요 Arguments
Argument | 사용 방법 | 설명 |
location | location = 'seoul' | 영문 지역명 or bounding box의 좌표 두 쌍 |
zoom | zoom = 11 | 지도를 확대, 축소할 수 있음. 3~20까지 지정할 수 있고, default는 10임 |
maptype | maptype = "roadmap" | 지도의 유형을 지정할 수 있음. |
1) 영문 지역명을 사용해서 지도 불러오기
- 대전광역시 지도 불러오기
- location = "Daejeon"
- 먼저 get_map()을 사용하여 대전광역시 지도 파일을 다운로드한 후 daejeon 변수에 할당해주고,
ggmap() 함수를 사용하여 지도를 그린다.
# get_map()
daejeon <- get_map(location = "Daejeon", zoom =12, maptype = "roadmap")
# ggmap()
ggmap(daejeon)
2) bounding box의 좌표 두 쌍 입력해서 지도 불러오기
- 시각화 하려는 지도를 사각형으로 bounding box로 그린다고 생각했을 때,
1) (x1, y1) 에 해당하는 경도, 위도값을 입력하고 2) (x2, y2)에 해당하는 경도 위도 값을 입력하면 된다.
boxLocation <- c(127.273, 36.358721, 127.497, 36.453)
krMap <- get_map(boxLocation, maptype = "roadmap")
# 지도 표시
ggmap(krMap)
- 매번 두 쌍의 위경도 값을 찾는게 번거로울 경우 간단한 함수를 사용해 해결할 수 있다.
# 경도와 위도 상자 좌표 계산 함수: fn_lon_lat_box(lon,lat,dist=1)
fn_lon_lat_box <- function(lon, lat, dist=1){
h <- 0.0035*3.5*dist
w <- 0.0035*4*dist
# 경도와 위도로 표시할 사각형의 좌하, 우상의 좌표
c(lon-w, lat-h,lon+w, lat+h)
boxLocation <- fn_lon_lat_box(127.385, 36.355, 8)
krMap <- get_map(boxLocation)
# 지도표시
ggmap(krMap)
fn_lon_lat_box() 함수에 시각화 하고자 하는 지도의 중심좌표를 입력해준다.
3) maptype 종류
4개의 지도 외에도 더 많은 종류의 지도를 시각화 할 수 있다. 시각화 목적에 맞게 적절히 사용하면 된다.
02. 공공데이터를 활용한 지도 시각화
1) 소상공인시장진흥공단_상가(상권)정보
: 영업 중인 전국 상가업소 데이터를 제공
(상호명, 업종코드, 업종명, 지번주소, 도로명주소, 경도, 위도 등)
https://www.data.go.kr/data/15083033/fileData.do
소상공인시장진흥공단_상가(상권)정보_20220930
<br/>영업 중인 전국 상가업소 데이터를 제공합니다. <br/>(상호명, 업종코드, 업종명, 지번주소, 도로명주소, 경도, 위도 등)
www.data.go.kr
2) 파일 불러오기
소상공인시장진흥공단_상가(상권)정보_대전_202209.csv 파일 사용
data.file <- read.csv(file.choose(), fileEncoding = "utf-8")
data.raw<- data.file
data.raw %>% head()
data.raw %>% summary()
data.raw %>% dim()
data.raw %>% str()
data.raw %>% select(상호명, 상권업종대분류명,도로명주소, 경도, 위도)
3) ggmap에 point 추가
- 상권업종소분류명이 '커피전문점/카페/다방'인 상가 지도 위에 point 찍기
data.use <- data.raw %>% filter(상권업종소분류명=='커피전문점/카페/다방')
data.use %>% head()
data.use %>% dim()
(1) 좌표평면에 - ggplot()
## (1) 좌표평면에 - ggplot()
ggplot()+
geom_point(data=data.use, aes(x=경도, y=위도,
colour=시군구명))
(2) 지도위에 - ggmap() + geom_point()
g<-ggmap(daejeon)+
geom_point(data=data.use, aes(x=경도, y=위도,
colour=시군구명))
g
4) ggmap에 stat_density2d 등고선 및 밀도 추가하기
- ggplot2 패키지에서 제공하는 stat_density2d() 함수를 사용하여 ggmap 위에 등고선을 추가할 수 있다.
ggmap(krMap)+
stat_density2d(data=data.use, aes(x=경도, y=위도))
(1) geom = "polygon" 추가
ggmap(daejeon)+
stat_density2d(data=data.use, aes(x=경도, y=위도),
geom='polygon', # 밀도에 맞게
alpha=0.4) # 투명도
(2) scale_fill_gradient() 사용하여 밀도에 따라 색상 달리하기
p <- ggmap(daejeon)+
stat_density2d(data=data.use,
aes(x=경도, y=위도, fill=..level..), #등고선의 레벨에 맞춰 fill
geom='polygon', # 밀도에 맞게
alpha=0.4)+
scale_fill_gradient(low='yellow', high='red')
p
(3) 밀도와 등고선 같이 지도위에 시각화
: 위에서 그린 밀도 시각화에 등고선을 추가해주면 됨.
p + stat_density2d(data=data.use, aes(x=경도, y=위도))
참고 문헌(reference)
사용 데이터
참고 서적 / 시각화를 이용한 데이터 정보 분석- R 활용(이동수,장인홍 (지은이)자유아카데미)
자유아카데미 - 도서
정보분석은 다양한 자료를 통해 필요한 가치를 도출시키는 것을 말하며, 이것은 빅데이터에 기반한 4차 산업혁명 시대에 매우 중요한 의미를 지닌다. 다양한 데이터를 바탕으로 도출된 결과는
www.freeaca.com
참고 사이트
https://warm-uk.tistory.com/79
[R, 시각화, 패키지] ggmap 패키지 사용하여 지도 그리기(R까기)
제가 블로그에 올리는 R 내용은 제가 학교 수업, 국비 수업, 책, 구글링, 프로젝트를 통해 습득했던 내용을 요약 정리해서 웬만하면 다른 데이터에 적용해서 포스팅 하고 있어요. (현재 기준으로
warm-uk.tistory.com
'R > ggplot2' 카테고리의 다른 글
R | ggmap | 지도 시각화(3) - polygon (0) | 2023.01.27 |
---|---|
R | ggmap | 지도 시각화(2) - line (0) | 2023.01.26 |
R | ggplot2 | Text (geom_text) (0) | 2023.01.19 |
R | ggplot2 | Line Plot (0) | 2023.01.18 |
R | ggplot2 | Scatter Plot(산점도) (0) | 2023.01.17 |