프로젝트
[geocoding] 파이썬 geopy를 이용한 주소 위경도로 변환
무룡룡
2022. 2. 11. 16:58
이전글 : https://pyjac.tistory.com/61
[openAPI] 공공데이터 - 건축물대장정보 (xmltodict)
0. 준비물 (1) 시군구 / 법정동 코드 정보 https://www.code.go.kr/index.do 행정표준코드 관리시스템 www.code.go.kr (2) 공공데이터 인증키 - 방법 생략 - (3) 라이브러리 설치 !pip install xmltodict 1. 데..
pyjac.tistory.com
1. csv 파일 불러오기
이전글에서 생성한 csv파일을 불러온다
import pandas as pd
df = pd.read_csv('/content/drive/MyDrive/csv/건축물대장정보.csv')
2. 라이브러리 설치
geopy 라이브러리를 인스톨해주고 디폴트 지역을 남한으로 설정한다.
!pip install geopy
from geopy.geocoders import Nominatim
from geopy.distance import geodesic
geolocator = Nominatim(user_agent='South Korea')
geopy 는 입력된 주소에 대한 위경도를 추출하는 기능을 포함하고 있으며
사용 예시는 다음과 같다
# 예시
geo = geo_local.geocode("서울특별시 서대문구 통일로9안길 28")
print(geo.latitude)
print(geo.longitude)
>>> 37.5660715
>>> 126.9654782
3. 라이브러리 활용
위와 같은 작업은 바로 데이터 프레임에 적용할 수 없으므로
(1) geocode 생성 과 (2) 위경도 분리 두 가지로 나누어 작업한다.
해당 csv는 약 2만3천개의 행을 가지는 데이터로 코렙 작업이 time out이 발생하지만
아래 방법을 통해 해결이 가능하다.
구글 코랩 (Google colab)의 런타임 연결 끊김을 방지하는 방법
구글 코랩 (Google colab)의 런타임 연결 끊김을 방지하는 방법에 대한 내용입니다.
teddylee777.github.io
(1) geocode 생성
df['x_y'] = df['newPlatPlc'].apply(geolocator.geocode)
df
ㅗㅗ
(2) 위경도 분리
apply와 lambda 함수를 활용해 위도['lat']와 경도['lon'] 컬럼을 따로 생성하고 원래 컬럼['x_y']을 삭제한다.
ddf['lat'] = ddf['x_y'].apply(lambda x: x.latitude if x != None else None)
ddf['lon'] = ddf['x_y'].apply(lambda x: x.longitude if x != None else None)
ddf = ddf.drop(['x_y'], axis=1)
ddf
4. csv 저장 & 코맨트
ddf.to_csv('geo.csv',encoding='utf-8-sig')
csv로 저장하고 작업을 완료한다.
geocode를 생성할 때 고작 2만개의 데이터를 돌리는데 몇시간이 걸렸다. (geocoding 자체가 시간이 오래걸린다.)
tqdm 같은 진행상황을 시각화 해주는 라이브러리를 적용하면 좋을거같다.