기존 코드
# 좌표 변환 (Geocoding)
!pip install requests tqdm
import requests
from tqdm.notebook import tqdm
from urllib.parse import quote
import pandas as pd
import time
# 1. 카카오 REST API 키 입력
KAKAO_REST_API_KEY = 'KakaoAK 7bc29ad53927d7c84514b6cd27e8d380' # 실제 키로 바꿔주세요
# 2. 변환 함수 정의 (api_key 받도록 수정)
def get_lat_lon(address, api_key):
url = "https://dapi.kakao.com/v2/local/search/address.json"
headers = {"Authorization": api_key}
params = {"query": address}
response = requests.get(url, headers=headers, params=params)
if response.status_code != 200:
return None, None
result = response.json()
if result['documents']:
lon = float(result['documents'][0]['x'])
lat = float(result['documents'][0]['y'])
return lat, lon
else:
return None, None
# 3. 주소 컬럼에서 좌표 변환 (api_key 매개변수 추가)
def apply_geocoding(df, address_col='주소', api_key=None):
latitudes = []
longitudes = []
for addr in tqdm(df[address_col]):
lat, lon = get_lat_lon(addr, api_key)
latitudes.append(lat)
longitudes.append(lon)
time.sleep(0.1) # API 요청 속도 제한 방지
df['위도'] = latitudes
df['경도'] = longitudes
return df
# 4. 좌표 변환 실행
apt = apply_geocoding(apt, address_col='주소', api_key=KAKAO_REST_API_KEY)
multi = apply_geocoding(multi, address_col='주소', api_key=KAKAO_REST_API_KEY)

해결 방안
✅ 1. 캐시 사용 이미 변환한 주소는 다시 요청 안 하기 (딕셔너리로 저장)
✅ 2. tqdm + 중간 저장 진행 상태 보이게 하고, 중간에 저장 파일로 복구 가능하게
✅ 3. sleep() 넣기 속도 제한 걸리지 않도록 텀 주기
✅ 4. 또는 한 번 변환한 결과 CSV 저장 후 재활용
import requests
import time
from tqdm import tqdm
KAKAO_API_KEY = 'YOUR_REST_API_KEY'
def kakao_geocode(address):
url = f'https://dapi.kakao.com/v2/local/search/address.json?query={address}'
headers = {'Authorization': f'KakaoAK {KAKAO_API_KEY}'}
res = requests.get(url, headers=headers)
if res.status_code == 200:
result = res.json()['documents']
if result:
return result[0]['y'], result[0]['x'] # 위도, 경도
return None, None
# ✅ 캐시 딕셔너리 사용
geocoded_cache = {}
def safe_geocode(address):
if address in geocoded_cache:
return geocoded_cache[address]
lat, lon = kakao_geocode(address)
geocoded_cache[address] = (lat, lon)
time.sleep(0.2) # 속도 제한 회피용
return lat, lon
# ✅ 적용 (진행 표시 + 중간 저장도 가능)
coords = []
for addr in tqdm(df['주소']): # 주소 컬럼 이름에 맞게 수정
lat, lon = safe_geocode(addr)
coords.append((lat, lon))
df['위도'] = [c[0] for c in coords]
df['경도'] = [c[1] for c in coords]
# ✅ CSV로 저장해두기 (다음엔 안 돌려도 됨)
df.to_csv('geocoded_아파트좌표.csv', index=False)