본문 바로가기
Data Science/Web Crawling

[googlemaps] 파이썬으로 구글 맵스 API 불러와서 데이터 업그레이드하기

by 루크 Luke 2021. 10. 14.
반응형

- 구글맵스 API를 불러와서 데이터를 정리해봤다.

- 정확히는 정리라기보다는, 우리가 가진 행정시/구 데이터를 바탕으로, 구글맵스에서 위도/경도 정보를 가져왔다.

- 그 정보를 우리가 만든 데이터프레임(피봇테이블 등)에 업데이트했다.

- 기본적으로 API를 이용하기 위해서는 Google Maps Platform에서 키 값을 받아와야 한다.

- 아래 링크에 들어가서 키를 받으면 된다.

 

https://mapsplatform.google.com/?hl=ko#products 

 

Google Maps Platform - Location and Mapping Solutions

Create real world and real time experiences for your customers with dynamic maps, routes & places APIs from Google Maps Platform’s location solutions.

mapsplatform.google.com

 

구글맵스 API 이용을 위한 키(Key) 값 얻기

1) 접속 (Get started 클릭)

2) 로그인한다.

(계정 없으면 가입, 무료 기간이 있다. 등록할 해외 결제 가능 카드가 있어야 한다.)

(자동 결제되는 건 아니니까 걱정하지 말기)

 

3) 가운데 상단에 My First Project 있는 부분을 눌러서 새 프로젝트 추가

4) Geocoding API 클릭 (없으면 위에 제품 및 리소스 검색에 Geocoding API 검색하면 나온다.)

5) 사용 클릭

6) 사용자 인증정보 들어가서 사용자 인증정보 만들기 - API 키 

7) 생성된 키의 오른쪽 펜 모양 (키 수정) 클릭

8) 키 제한 - Geocoding API 선택 - 저장

Geocoding API 클릭 - 저장

9) 키 아래 있는 영어가 키 값이다. 오른쪽 네모 2개 아이콘을 눌러서 복사하면 된다.

 

구글맵스(Google Maps)로부터 데이터 얻기

- 기본적으로 googlemaps 모듈을 사용한다.

- 기본 설정은 이 정도한다.

gmap_keys = "# 내가 받아온 키 값을 적어준다."
pip install googlemaps
import googlemaps

- 구글맵스 모듈의 Client()로 키값을 활용해 셋팅한다.

gmaps = googlemaps.Client(key=gmap_keys)

- '서울영등포경찰서'의 정보를 구글맵스에서 불러오자. gmaps.geocode()를 활용

tmp = gmaps.geocode("서울영등포경찰서", language="ko")
	# 여기서 오류나면 보통 키값 설정할 때 "geocoding API"으로 키 제한을 안 한 것이다.

- tmp라는 변수에 저장했는데, 한번 출력해봤다.

- 여러 정보들이 다 보이지만, 우리가 필요한 것은, 위도, 경도, 주소다.

- 위도/경도는 geometry[location]

- 주소는 formatted_address

- tmp가 리스트로 감싸져있기 때문에, tmp[0]에서 해당 부분만 추출할 수 있다. - .get()을 활용한다.

- 주소를 split()을 이용해서 나누고, 행정구 이름만 활용한다.

tmp[0]["formatted_address"].split()[2]

- 우리가 만든 피봇 테이블을 다시 불러오자.

- 이 테이블에, 구글맵스에서 받는 '행정구', '위도', '경도' 데이터를 채우려고 한다.

- 해당 컬럼부터 만든다.

crime_station["구별"] = np.nan
crime_station["lat"] = np.nan
crime_station["lng"] = np.nan

- 그 이후에, 해당 빈칸(np.nan)에 구글맵스에서 받는 데이터를 채워 넣는다.

- 각 행마다 하나씩 추가하는 반복문 형태를 활용할 수 있다. 이럴 때는 for~in df.iterrows()를 쓴다.

- iterrows()는 일반 파이썬 코드에서 enumerate()와 비슷한 역할을 한다. 해당 행 인덱스와 해당 값을 변수로 넣어준다.

- 추가적으로, 데이터 양이 많으면 어느 정도 진행되었는지 시각화해서 직관적으로 보면 좋다.

- tqdm 모듈의 tqdm_notebook을 활용하면 좋다.

from tqdm import tqdm_notebook
for idx, rows in tqdm_notebook(crime_station.iterrows()):  # crime_station의 반복을 시각화(tqdm)
    station_name = "서울" + str(idx) + "경찰서"  # 경찰서의 주소를 받아서 쓰려고 함
    tmp = gmaps.geocode(station_name, language="ko")
    
    tmp_gu = tmp[0].get("formatted_address").split()[2]  #행정구
    lat = tmp[0].get("geometry")["location"]["lat"]  # 위도
    lng = tmp[0].get("geometry")["location"]["lng"]  # 경도
    
    crime_station.loc[idx, "구별"] = tmp_gu
    crime_station.loc[idx, "lat"] = lat
    crime_station.loc[idx, "lng"] = lng

tqdm의 결과물은 진행 프로그레스 바 형태로 나온다. 그리고 해당 코딩의 결과는 위와 같다.

cf) 각 컬럼의 최대 width를 지정하고 싶다면 다음 옵션을 적용한다.

pd.set_option("display.max.colwidth", 50)

시각화 다섯째 날 후기

구글 맵 API 어쩌고 하는 것들을 공대생들 사이에 껴서 들은 적이 있었다.

그때는 뭐가 어떻고, 저쩧고 하는 부분들이 나와는 연관 없는 이야기라고 생각했는데,

그런 것들을 내가 지금 하고 있다니 신기하다.

빠삭하게 익혀서 재미난 시각화들을 더 많이 해봐야지!

 

 

- 네카라쿠배 데이터사이언스 오프라인 1기 수강 中

https://zero-base.co.kr/

 

제로베이스 - 밑바닥부터 끝까지 듣는 온라인 강의

무조건 간다! 개발자 스쿨 '네카라쿠배', 끝까지 공부하는 '온라인 완주반', 전문가가 베스트셀러를 해석해 주는 '한달한권' 등 교육 서비스로 삶의 전환점을 제공하는 제로베이스입니다.

zero-base.co.kr

 

반응형

댓글