안녕하세요 오늘은 도로명 주소를 위도, 경도 좌표로 변환해보도록 하겠습니다
고유 명칭(주소나 산, 호수의 이름 등) 을 가지고 위도와 경도의 좌표값을 얻는 것을
지오코딩(Geocoding) 이라고 합니다.
카카오, 구글 에서는 지오코딩 가능한 api 를 제공합니다.
하나의 주소에 대해서만 위도, 경도가 필요한 것이라면, 구글 검색으로도 충분합니다.
본 게시글에서는 카카오 지오코딩을 사용하여서 csv 파일에 저장된 대량의 도로명 주소들에 대한
위도, 경도 좌표를 한번에 가져오도록 하겠습니다.
1. 카카오 키 발급하기
먼저 카카오 개발자 홈페이지 (Kakao Developers) 에 들어갑니다.
'내 애플리케이션 -> 애플리케이션 추가' 버튼을 눌러줍니다.
지오코딩이라는 이름으로 새로운 프로젝트를 생성해줍니다.
애플리케이션 생성과 동시에 사용 가능한 키가 발급됩니다.
이는 api 요청을 보낼 때 사용해야 하는 키입니다.
애플리케이션 '앱 키' 메뉴에서 확인 가능합니다
네 개의 키 중, RESt API 키를 복사해줍니다.
2. 파이썬에서 지오코딩 하기
본 게시글에서는 파이썬으로 지오코딩을 진행할 예정입니다.
경찰청에서 제공하는 전국 치안 센터 주소 현황 파일을 사용해보겠습니다.
확장자는 csv 이며, 해당 파일에는 전국에 있는 약 740여 개의 치안센터 도로명 주소가
기재되어 있는 것을 확인할 수 있습니다. 하나하나 위경도로 전환하는 것은 굉장히 시간이 걸리는 작업이 될 것입니다.
먼저 파이썬의 pandas 라이브러리에서 제공하는 메소드를 활용해 csv 파일을 불러옵니다.
해당 파일은 프로젝트 내에 저장되어 있어야 합니다.
# CSV 파일 불러오기
df = pd.read_csv('../data/경찰청_전국치안센터 주소현황.csv', encoding='cp949', low_memory=False) # 메모리 사용 최적화 기능 끄기 # 도로명 주소 포함한 파일.
발급받은 api 키를 입력해주고
카카오에서 안내하는 api 요청을 보낼 서버 주소를 입력해줍니다
KAKAO_API_KEY = '8cfba63ec3a9c908937b040f11ff0b28' # 발급받은 API 키 입력
KAKAO_URL = "https://dapi.kakao.com/v2/local/search/address.json"
# 카카오 API를 사용하여 주소를 위경도 좌표로 변환하는 함수
def get_lat_lon(address):
headers = {
"Authorization": f"KakaoAK {KAKAO_API_KEY}"
}
params = {
"query": address # 검색할 도로명 주소
}
try:
response = requests.get(KAKAO_URL, headers=headers, params=params)
if response.status_code == 200:
data = response.json()
if data['documents']: # 결과가 존재할 경우
latitude = data['documents'][0]['y'] # 위도
longitude = data['documents'][0]['x'] # 경도
return latitude, longitude
else:
return None, None
else:
print(f"Error: {response.status_code}")
return None, None
except Exception as e:
print(f"Exception occurred: {e}")
return None, None
# '주소' 컬럼의 도로명 주소를 위경도로 변환하여 새 컬럼 추가
df['latitude'], df['longitude'] = zip(*df['주소'].apply(get_lat_lon))
'주소' 칼럼은 도로명 주소가 있는 칼럼입니다.
기존 파일에 새로운 칼럼 위도(latitude )와 경도(longitude) 칼럼을 새로 추가해줍니다.
칼럼을 추가한 파일을 새롭게 저장해줍니다.
# 결과를 새로운 CSV 파일로 저장
df.to_csv("geocoded_results.csv", index=False, encoding='utf-8-sig')
print("지오코딩 완료! 결과는 'geocoded_results.csv'에 저장되었습니다.")
위도, 경도 좌표 칼럼이 추가된 것을 확인할 수 있습니다
결과를 확인하고 결측값을 따로 처리해주면 됩니다
감사합니다
'Python' 카테고리의 다른 글
[Python] 사이킷런(scikit-learn) 라이브러리를 활용하여 정규화 하기 Min-Max Scaling (0) | 2024.10.26 |
---|---|
[Python] 판다스 (Pandas) 라이브러리 사용해서 csv 데이터 특정 칼럼에 문자열 추가하기 (0) | 2024.10.20 |
[Python] random 모듈의 다양한 기능 (0) | 2024.08.25 |
[Python] 다양한 문자열 연결(포매팅) 방법 (0) | 2024.08.19 |
[Python] Blueprint로 소스 코드 나누기 (0) | 2024.07.04 |