
마지막 데이터 처리는 위도, 경도를 추가하는 일이었다.
공공데이터가 제공하는 위치 정보는 “주소”만 존재했다. 그러나 지도에 가게 정보들을 표시해주려면 위도, 경도가 필요했다.
따라서
카카오
네이버
구글
maps API들에 대해 찾아봤다.
카카오는 하루 제공량은 넉넉했지만 1분동안 30건만 호출할 수 있었다. 8000개를 변경해야하는데 1분마다 제한을 해서 코드를 짜기에는 더 좋은 API가 있을 것 같았다.
두번째는 구글 클라우드에서 제공하는 것을 이용해봤다.
다음 코드와 같이 변경이 잘 되었다. 해당코드는 한가지 주소만 변경되는 것이지 전체 코드를 변경하는 것은 아니다
import googlemaps
# API키 입력
mykey =
def change(address):
try:
geo_location = maps.geocode(address)[0].get('geometry')
lat = geo_location['location']['lat']
lng = geo_location['location']['lng']
return [lat,lng]
except:
return [0,0]
print(change('서울특별시 종로구 삼일대로 428 (낙원동, 4층)'))
그러나 공공데이터에 적혀있는 주소를 인지못하거나 위도경도가 조금 떨어진 곳으로 잡히는 등의 오류가 아주 많았다.
서비스는 한국 가게들만 제공하기 때문에 마지막으로 네이버 클라우드에서 제공하는 것을 살펴보았고 결론적으로 말하자면 변경이 아주 잘되고 하루 제공량도 넉넉했다.
아래 코드는 종로구 삼일대로에 대한 위도경도를 반환하는 코드이다.
import requests
import pandas as pd
client_id =
client_secret =
# 주소 텍스트
query = "서울특별시 종로구 삼일대로 428 (낙원동, 4층)"
endpoint = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode"
url = f"{endpoint}?query={query}"
# 헤더
headers = {
"X-NCP-APIGW-API-KEY-ID": client_id,
"X-NCP-APIGW-API-KEY": client_secret,
}
url = f"{endpoint}?query={query}"
res = requests.get(url, headers=headers)
if res.status_code == 200 and res.json().get("addresses"):
print(res.json()["addresses"][0]['y'])
print(res.json()["addresses"][0]['x'])
전체 데이터는 df로 데이터 프레임으로 바꾼 뒤 tqdm으로 진행상황을 보면서 데이터 가공을 완료했다.


이렇게 약 8000개의 가게를 변환시켰다. 각종 테스트로 인해 총 9000번정도를 API를 사용했다.
공공데이터 자체에 문제가 있는 주소
“서울특별시 종로구 종로구 ~~” 이런식으로 종로구가 2번 입력된 것같은 주소들 빼고는 변경이 잘 되어서 약 95%는 위도경도로 변경이 되었다.
이렇게 3개의 작업을 마무리 한 뒤 몽고DB에 csv파일을 import해주었다. (csv파일을 utf8로 저장하고 import하는 것 빼먹으면 안된다.)