반응형
오늘은 아래의 이전 포스팅에 이어, Python과 카카오맵 API를 활용하여 지오코딩하는 방법을 정리한다.
카카오맵 API 사이트
우측 상단 버튼
REST API 키 복사
코드
수정해야 할 부분 : csv좌표, 당신의_API_Key, 소재지전체주소
import requests
import pandas as pd
# CSV 파일 읽기
place = pd.read_csv("csv좌표.csv")
# API 키 설정
KAKAO_MAP_API_KEY = "당신의_API_Key"
result = pd.DataFrame()
# 주소 리스트 추출
address_list = place['소재지전체주소']
# 지오코딩 결과 저장할 빈 리스트 생성
geocode_results = []
# 지오코딩 API 호출 및 결과 처리
for address in address_list:
res = requests.get(
'https://dapi.kakao.com/v2/local/search/address.json',
params={'query': address},
headers={'Authorization': f'KakaoAK {KAKAO_MAP_API_KEY}'}
)
# JSON 데이터를 딕셔너리로 파싱
coord = res.json()
# 기본값 설정 (데이터가 없을 경우 None으로 유지)
address_name, x, y = None, None, None
# 'documents' 내에 정보가 있을 때만 처리
if 'documents' in coord and coord['documents']:
for doc in coord['documents']:
try:
# 'road_address'와 필요한 키들이 있는 경우에만 데이터 추가
if doc.get('road_address') and all(key in doc['road_address'] for key in ['address_name', 'x', 'y']):
address_name = doc['road_address']['address_name']
x = doc['road_address']['x']
y = doc['road_address']['y']
break # 첫 번째 결과만 사용
except KeyError:
print(f"필드가 누락된 항목을 건너뜁니다: {doc}")
# 결과 리스트에 추가
geocode_results.append({'address_name': address_name, 'x': x, 'y': y})
# 지오코딩 결과를 데이터프레임으로 변환
geocode_df = pd.DataFrame(geocode_results)
# 기존 place 데이터에 지오코딩 결과 열 추가
place_with_geocode = pd.concat([place, geocode_df], axis=1)
print("지오코딩 완료! place_with_geocode를 확인하세요.")
# 결과를 CSV 파일로 저장
place_with_geocode.to_csv("geocoding_result_with_original.csv", encoding="euc-kr", index=False)
결과
가장 우측에 주소, x좌표, y좌표가 생성됨
일반적으로 지오코딩에 실패하는 경우는 주소 끝에 건물명과 호수가 붙어있는 경우이다.
반응형
'🖥️ IT, 컴퓨터 > 🐍 Python' 카테고리의 다른 글
[Python] 부동산 지수 데이터 시각화하기 (feat. matplotlib) (0) | 2023.01.03 |
---|---|
[Python] 'utf-8' codec can't decode byte 0xbb in position 1: invalid start byte 오류 해결 (0) | 2022.12.02 |
[Python] 파이썬 테이블 열 이름이 밀려나는 오류 (0) | 2022.11.27 |
[Python] 파이썬으로 GIS하기 : GeoPandas로 간단한 지오프로세싱 수행하기 (좌표계 설정, join, spatial join, intersect, 지도 그리기) (0) | 2022.11.26 |
[Python] 구글맵 API를 사용해 지오코딩하기 (주소를 경위도로 변환) (0) | 2022.11.26 |
댓글