聰明不如鈍筆
총명불여둔필
assignment Kidult

ggmap '404 forbidden' 에러 해결하기

access_time 2018.10.14 18:12


ggmap 패키지를 사용한 이 포스트이 포스트에 코드를 따라 했는데 '403 forbidden' 에러가 난다고 댓글을 쓴 분들이 계십니다. 위키피디아 한국어판은 이 에러를 "서버가 허용하지 않는 웹 페이지나 미디어를 사용자가 요청할 때 웹 서버가 반환하는 HTTP 상태 코드"라고 설명합니다. 한 마디로 '접근을 시도했지만 금지당했다'는 게 바로 403 forbidden입니다. (영어 낱말 'forbid'가 '금지하다'는 뜻입니다.)


ggmap은 구글 지도에서 데이터를 가져오는 방식으로 작동합니다. 그런데 최근 구글에서 지도 자료를 공급하는 방식을 바꿨습니다. 따라서 ggmap도 새로운 방식으로 데이터를 받아 와야 합니다. 문제는 R 공식 패키지 저장소인 CRAN(The Comprehensive R Archive Network)에 있는 최신 버전(2.6.1)에도 아직 이 기능이 들어 있지 않다는 것. 그래서 자꾸 에러 메시지가 나오는 겁니다.


그렇다고 해결책이 없는 건 아닙니다. 깃허브에는 2.7 버전이 올라와 있기 때문입니다. 이 버전을 내려받아 설치하는 게 에러에서 벗어나는 첫 번째 단계입니다. 깃허브에 있는 패키지 파일을 내려받아 설치하려면 devtools 패키지에 들어 있는 install_github() 함수를 쓰면 됩니다. 아래 코드를 실행하시면 R가 여러분 컴퓨터에 ggmap 2.7을 설치하고 불러들입니다.

install.packages('devtools')
library('devtools')
install_github('dkahle/ggmap')
library('ggmap')
## Loading required package: ggplot2
## Google Maps API Terms of Service: http://developers.google.com/maps/terms.
## Please cite ggmap if you use it: see citation("ggmap") for details.


어라? 실행 결과에 '구글 지도(Google Maps) API 이용 약관'이라는 표현이 등장합니다. API는 'Application Programming Interface'를 줄인 말로 흔히 '응용 프로그램 프로그래밍 인터페이스'라고 번역합니다. 이때 인터페이스는 사용자가 어떤 동작을 쉽게 할 수 있도록 도움을 주는 시스템이라고 생각하시면 됩니다. 그러니까 구글 지도 API는 구글 지도를 쉽게 작동할 수 있도록 도움을 주는 시스템입니다.


이런 API에 접근하려면 인증키(key)가 필요합니다. 구글 지도 API 키는 이 페이지에서 발급받으실 수 있습니다. 링크를 클릭하시면 아래 제품 선택 화면이 나오는데 세 가지를 모두 선택합니다.



다음 단계는 프로젝트 이름 입력하기. 저는 그냥 'my ggmap'이라는 이름으로 프로젝트를 만들었습니다.



여기까지 진행하시면 결제 계정을 만들어야 한다는 화면이 나옵니다. 기본적으로 구글 지도 API는 무료지만 신용카드 정보를 입력하셔야 합니다.



결제 정보 입력이 모두 끝나고 몇 번 더 '다음'을 클릭하시면 아래 화면처럼 API 키를 발급받을 수 있습니다.



키를 발급받으셨으면 다시 R로 돌아오셔서 register_google() 함수를 써서 이 키를 등록합니다. 

register_google(key='자기 인증키')

그 다음 '크롤링부터 시각화까지…R 데이터 분석 실제로 어떻게?' 포스트에 들어 있는 아래 코드를 실행하시면 잘 작동하는 걸 확인할 수 있습니다.

library('rvest')

html.airports <- read_html('https://en.wikipedia.org/wiki/List_of_busiest_airports_by_passenger_traffic')
df <- html_table(html_nodes(html.airports, 'table')[[1]], fill = TRUE)

colnames(df)[6] <- 'total'
df$total <- gsub('\\[[0-9]+\\]', '', df$total)
df$total <- gsub(',', '', df$total)
df$total <- as.numeric(df$total)

gc <- geocode(df$Airport)
df <- cbind(df, gc)

world <- map_data('world')
ggplot(df, aes(x=lon, y=lat)) +
  geom_polygon(data=world, aes(x=long, y=lat, group=group), fill='grey75', color='grey70') + 
  geom_point(color='dark red', alpha=.25, aes(size=total)) +
  geom_point(color='dark red', alpha=.75, shape=1, aes(size=total)) +
  theme(legend.position='none')


여태 ggmap으로 지도 잘 그렸는데 갑자기 에러 메시지 공세에 시달렸다고 생각하시는 분들께 도움이 되었으면 좋겠습니다. 혹시 이 포스트에 이해가 가지 않거나 잘못된 부분이 있으면 언제든 알려주세요. 같이 공부하면서 바로잡도록 하겠습니다.

댓글, 17

  • 댓글 수정/삭제 뚜비
    2018.10.21 18:10 신고

    install_github('dkahle/ggmap') 을 입력하고 나면
    Enter one or more numbers separated by spaces, or an empty line to cancel
    1:
    이렇게 뜨는데 여기서 어떻게 해야하나요?

  • 댓글 수정/삭제 나나
    2018.10.22 09:51 신고

    install_github("dkahle/ggmap")
    library(ggmap) 여기까지 잘 입력하고 나면,
    ERROR: dependencies 'ggplot2', 'RgoogleMaps', 'png', 'plyr', 'rjson', 'jpeg', 'scales', 'dplyr', 'bitops' are not available for package 'ggmap'
    * removing 'C:/Users/사용자/Documents/R/win-library/3.5/ggmap'
    In R CMD INSTALL

    이런 에러가 떠요.

    removing 의 경로를 찾아가면 ggmap 이라는 폴더는 없는데...
    어떻게 해결할 수 있을까요?

  • 댓글 수정/삭제 BlogIcon
    2018.10.30 22:54 신고

    1: ggmap(get_map(location='south korea', zoom=7))
    Invalid input, please try again 이라고 뜹니다 ㅠㅠ... 혹시 해결방법을 알려주실 수 있으실까요...

  • 댓글 수정/삭제
    2018.10.30 22:57 신고

    + register_google(key='AIzaSyCPMdk_dfjGYYjTERpxcNks32K4EAybXxk')
    Error in register_google(key = "AIzaSyCPMdk_dfjGYYjTERpxcNks32K4EAybXxk") :
    could not find function "register_google"
    또 register_ google 함수를 찾을 수 없다구 나오네요 ㅠㅠㅠ... 어떻게 해야 할까요?!

  • 댓글 수정/삭제 완다보이
    2018.11.14 12:17 신고

    안녕하세요. 설명대로 쭉 따라가다가 에러가 떠서 질문드립니다.

    ggmap dev 버전을 설치하면 아래와 같이 뜨고

    These packages have more recent versions available.
    Which would you like to update?

    1: dplyr (0.7.7 -> 0.7.8) [CRAN]
    2: Rcpp (0.12.19 -> 1.0.0) [CRAN]
    3: CRAN packages only
    4: All
    5: None


    어떤 번호를 선택해도 아래처럼 에러가 납니다.
    어떻게 해야할까요?


    Installing 1 packages: bitops
    Error in readLines(f) :
    (converted from warning) incomplete final line found on '/Users/Seo27/.Rprofile'

  • 댓글 수정/삭제 BlogIcon 레드홀스
    2018.12.05 16:46 신고

    안녕하세요 항상 좋은글 감사합니다. 다름이 아니라 2가지 질문이 있어서 댓글을 남깁니다.

    devtools::install_github('dkahle/ggmap', force = T)
    입력해서 ggmap 2.7 버전 설치하면 Console 창에 아래 메세지가 나옵니다.

    Warning messages:
    1: In untar2(tarfile, files, list, exdir) :
    skipping pax global extended headers
    2: In untar2(tarfile, files, list, exdir) :
    skipping pax global extended headers

    그리고

    ggmap::register_google(key = '제 개인키') 입력하면

    Error: 'register_google'는 'namespace:ggmap'로부터 내보내어진 객체가 아닙니다

    라고 나옵니다. 어떻게 하면 좋을지 도움 부탁드리겠습니다. ㅠㅠㅠ

    •  수정/삭제 BlogIcon kini
      2018.12.12 00:22 신고

      이 댓글을 이제 봤습니다. 이제 해결하셨나요?

    •  수정/삭제 BlogIcon 레드홀스
      2018.12.18 01:09 신고

      여러 커뮤니티 찾아가면서 다양한 방법 시도해봤지만 아직 해결하지 못 했습니다.
      혹시 OS가 윈도우라서 문제가 되는건가요??

  • 댓글 수정/삭제 초보자
    2019.01.11 23:48 신고

    위 코드를 따라 해 봤는데 register_google에서 에러가 나왔습니다. 그런데 install_github('dkahle/ggmap') 에 force=TRUE를 삽입, 즉 install_github('dkahle/ggmap', force=TRUE) 이렇게 했더니 그 뒤부터는 지도가 나오기까지 실행이 잘 되었습니다.

account_circle
vpn_key
web

security

mode_edit
Kidult | 카테고리 다른 글 더 보기