지도와 데이터

2024. 9. 9. 23:15확률 통계/R 데이터 분석

구글맵 이용 준비

구글 맵 사용을 위한 준비 절차

  1. R을 최신 버전으로 설치해 주기
  2. ggplot2를 최신 버전으로 업데이트
  3. ggmap 패키지를 설치
  4. 구글맵 사용을 위해 API키를 얻는다.

R 최선 버전으로 설치하기

Tools-Global Options로 순서대로 들어간 뒤 General 항목에서 R version: 에서 R의 버전을 바꾼 다음 Change 버튼을 클릭하여 새로 설치한 버전으로 변경해 준다.

ggplot2 패키지 업데이트하기

  • Packages에서 ggplot2 패키지를 검색해 주고 ggplot2를 체크해 주고 Update를 눌러준다.

ggmap 패키지 설치

  • Packages-Install에 들어간 뒤에 ggmap을 입력해 주고 Install버튼을 눌러서 설치해 준다.

특정 지역의 지도 보기

지도 보기

library(ggmap)
register_google(key='AI....o') #키 입력 해주기

x<-geocode(enc2utf8("영통구")) #지점의 경도 위도 불러오기
y<-as.numeric(x) #경도, 위도를 숫자값으로 변경 
map<-get_googlemap(center=y) #지도 생성
ggmap(map)

결과

  • geocode: 지명을 경도와 위도로 변경해 주는 함수이다. enc2 utf8은 한글 인코딩을 utf8 포맷으로 바꾸어 준다. 
  • as.numeric: 한글 인코딩을 utf8로 변경해 준 것을 숫자 벡터로 변경해 준다. 
  • get_googlemap: 함수의 경도와 위도 값을 입력해 주고 지도로 불러온다. center와 같은 경우는 지도에서 중심점의 좌표를 경도, 위도로 해주는 것을 의미한다. 
get_googlemap() 매개변수
center: 지도 중심의 좌표값을 지정한다.
zoom: 지도의 확대 크기를 조절한다.(매개변수 값: 3(대륙)~21(빌딩))
size: 지도의 가로와 세로의 픽셀 크기를 입력한다.
maptype: 출력될 지도의 유형을 지정한다.

maptype="roadmap"
maptype="satellite"
maptype="hybrid"

설악산 근방의 지도 보기

library(ggmap)
register_google(key='AIzaSyDZIe_xTN123TXPHWFnFGs0q1w4OE9hJzo') #키 입력하기

x<-geocode(enc2utf8("설악산")) #설악산을 utf8형식으로 변형한다.
y<-as.numeric(x)
map<-get_googlemap(center=y,zoom=9, #지도의 확대를 9로 해준다.
                   size=c(640,640), #지도의 크기를 640*640으로 해준다.
                   maptype="roadmap") #maptype을 roadmap으로 해준다.
ggmap(map)

결과

지도 위에 마커와 텍스트 표시하기

지도 중심에 마커 표시하기

library(ggmap)
register_google(key='AIzaSyDZIe_xTN123TXPHWFnFGs0q1w4OE9hJzo')

x<-geocode(enc2utf8("설악산"))
y<-as.numeric(x)
map<-get_googlemap(center=y,zoom=9,
                   size=c(640,640),
                   maptype="roadmap",
                   marker=x)
ggmap(map)

결과

  • marker매개변수를 사용하여서 위도와 경도에 해당하는 부분에 마커를 표시한다.

지도의 여러 지점에 마커와 텍스트 표시

library(ggmap)
library(ggplot2)
register_google(key='AIzaSyDZIe_xTN123TXPHWFnFGs0q1w4OE9hJzo')
x1 <- c("용두암","성산 일출봉","정방 폭포",
        "중문 관광단지","한하산1100고지","차귀도")
x2 <- c("제주시 용두암길 15", 
        "서귀포시 성산읍 성산리",
        "서귀포시 동홍동 299-3",
        "서귀포시 중문동 2624-1",
        "서귀포시 색달동 산1-2",
        "제주시 한경면 고산리 125")
y <- geocode(enc2utf8(x2))
df <- data.frame(name=x1, lon=y$lon, lat=y$lat)
center <- c(mean(df$lon), mean(df$lat))
mp <- get_googlemap(center=center, 
                    maptype='roadmap', 
                    zoom=10, 
                    size=c(640,640), 
                    markers=y)
gm <- ggmap(mp)
gm + geom_text(data=df, aes(x=lon, y=lat, label=name), size=4)

결과

  • y: x2벡터에 있는 주소들을 경도와 위도로 변경하여서 저장해 준다.
  • df: 관광지의 명칭과 좌표값으로 데이터 프레임을 생성해 준다.
  • c: 지도의 중심점
  • mp: 지도의 형태를 roadmap, 확대 크기는 10으로 해주고 지도의 크기는 640*640으로 지정해 주고 마커는 좌표값은 y로 해주었다.
  • gm+goem_text: 텍스트를 지도에 표시해 주기 위해서 사용한다. aes(x="", y="", label=name)으로 하여서 좌표를 지정해 주고 label을 name에 있는 값으로 지정해 주었다. 

지도 위에 데이터 표시하기 

library(ggmap)
library(ggplot2)
register_google(key='AIzaSyDZIe_xTN123TXPHWFnFGs0q1w4OE9hJzo')

sp<-sample(1:nrow(wind), 50)
df<-wind[sp,]

c<-c(mean(df$lon), mean(df$lat))
gc<-data.frame(lon=df$lon, lat=df$lat)
gc

mp<-get_googlemap(center=c, 
                  maptype="roadmap",
                  zoom=6,)
gp<-ggmap(mp)
gp+geom_point(data=df,
              aes(x=lon, y=lat, size=spd),
              alpha=0.5,
              col="blue")+
  scale_size_continuous(range=c(1,14))

결과

  • sp: sample 함수를 활용하여서 열에 해당하는 50개의 데이터를 뽑아준다.
  • df: sp에서 뽑은 데이터의 행을 df에 넣어준다.
  • gc: 경도와 위도를 데이터 프레임 형식으로 넣어준다.
  • gp+goem_point: data에는 사용할 데이터 셋을 넣어주고, 원의 크기는 spd열의 값으로 지정해 주고, alpha는 투명도를 지정해 주는 함수로 사용되었다. 
  • scale_size_continuous: 원의 범위를 조정해 주는데, 1~14까지 원의 크기를 조정할 수 있다. 

'확률 통계 > R 데이터 분석' 카테고리의 다른 글

확률 활용  (1) 2024.10.06
차원 축소  (1) 2024.09.08
ggplot 패키지  (0) 2024.09.05
데이터 시각화1  (0) 2024.09.03
데이터 전처리  (1) 2024.09.02