지오코딩(Geocoding)
원하는 주소를 x, y 좌표(위도, 경도)로 변환하자!
from geopy.geocoders import Nominatim
# Nominatim 객체 생성
geo_local = Nominatim(user_agent= 'South Korea', timeout=None)
# 위도/경도 반환 함수
def geocoding(address):
try:
geo = geo_local.geocode(address)
x_y = [geo.latitude, geo.longitude]
return x_y
except:
return [0, 0]
역지오코딩(Geocoding-reverse)
원하는 좌표를(x, y) 주소로 변환하자!
def geocoding_reverse(lat, lng):
try:
address = geo_local.reverse([lat, lng], exactly_one=True, language='ko')
detail_address = address.address # 상세주소
zip_code = address.raw['address']['postcode'] # 우편번호
x_y = [detail_address, zip_code]
return x_y
except:
return [0, 0]
실제 주소정보가 포함된 데이터를 불러온 후 위도/경도로 변환하고,
상세주소와 우편번호까지 출력해보자!
공공데이터포털에서 제공하는 상가업소정보 2019년 데이터를 이용한다.
해당 데이터에서는 도로명주소만 불러온다.
import pandas as pd
df = pd.read_csv('data/상가업소정보_201912_01.csv', sep='|',
usecols=['도로명주소'])
df_ex = df.head(10)
df_ex
불러온 도로명주소를 위도/경도 값으로 변환한 후
변환된 위도/경도 값을 이용하여 상세주소와 우편번호를 불러온다.
그리고, 데이터 프레임 형식으로 저장한 후 csv 파일 형식으로 데이터를 외부 파일로 저장한다!
result_df = pd.DataFrame(columns=['Address', 'Latitude', 'Longitude', 'detail_address', 'zip_code'])
for index, row in df_ex.iterrows():
address = row['도로명주소']
coordinates = geocoding(address) # 위도/경도 변환
lat, lng = coordinates
coordinates_reverse = geocoding_reverse(lat, lng) # 상세주소/우편번호 변환
detail_address, zip_code = coordinates_reverse
result_df = pd.concat([result_df, pd.DataFrame({'Address': [address], 'Latitude': [lat], 'Longitude': [lng],
'detail_address': [detail_address], 'zip_code': [zip_code]})],
ignore_index=True)
print(result_df)
result_df.to_csv('geocoding_result.csv', index=False, encoding='euc-kr')
'분석가 Step 1. 데이터 분석 > Python' 카테고리의 다른 글
Geocoder API 2.0 레퍼런스를 이용하여 좌표계 추출 (0) | 2023.07.26 |
---|---|
데이터 분석의 기초, 데이터 파악하기 (0) | 2023.06.29 |
데이터 파일 인코딩 확인하기 (0) | 2023.06.22 |
특정 폴더 안의 특정 파일(목록) 반복해서 가져오기 (0) | 2023.03.16 |
특정 폴더 안의 파일(목록) 가져오기 (0) | 2023.03.16 |