R | ggmap | 지도 시각화(1)

2023. 1. 25. 16:20·R/ggplot2

 

 

 

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 종류 

 

좌:terrain / 우: satellite
좌:roadmap / 우: hybrid

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 활용(이동수,장인홍 (지은이)자유아카데미)

http://www.freeaca.com/new/book/MainBookView.aspx?bookid=30472&page=1&ca1=0&ca2=0&sword=%EC%8B%9C%EA%B0%81%ED%99%94%EB%A5%BC%20%EC%9D%B4%EC%9A%A9%ED%95%9C&stype=subject 

 

자유아카데미 - 도서

정보분석은 다양한 자료를 통해 필요한 가치를 도출시키는 것을 말하며, 이것은 빅데이터에 기반한 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
'R/ggplot2' 카테고리의 다른 글
  • R | ggmap | 지도 시각화(3) - polygon
  • R | ggmap | 지도 시각화(2) - line
  • R | ggplot2 | Text (geom_text)
  • R | ggplot2 | Line Plot
갬보리
갬보리
제발 코드정리좀 하자 (R, SQL, SAS, Python , etc...)
  • 갬보리
    보딩코
    갬보리
  • 전체
    오늘
    어제
    • 분류 전체보기 (49)
      • R (32)
        • dplyr (7)
        • preprocessing (2)
        • EDA (0)
        • ggplot2 (10)
        • plotly (11)
        • leaflet (2)
      • SQL (15)
      • SAS (0)
      • Python (1)
        • preprocessing (0)
        • ML (0)
        • Library (0)
      • ETC (1)
  • hELLO· Designed By정상우.v4.10.3
갬보리
R | ggmap | 지도 시각화(1)
상단으로

티스토리툴바