kakaomap api를 통해 가져올 수 있는 건 지번주소, 도로명주소, 위경도 좌표인거 같습니다. 기존의 주소와 장소명이 맞는지 확인하기 위해 '주소’를 입력하여 주소에 등록된 '장소명’을 가져오고 싶은데 방법이 없을꺄요?
import requests
import pandas as pd
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
API 키 설정
KAKAO_API_KEY = “kakaomap api”
주소로 장소명과 좌표를 검색하는 함수
def get_place_details(address):
url = “https://dapi.kakao.com/v2/local/search/address.json”
headers = {“Authorization”: f"KakaoAK {KAKAO_API_KEY}"}
params = {“query”: address}
# 세션 및 재시도 설정
session = requests.Session()
retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504])
adapter = HTTPAdapter(max_retries=retries)
session.mount("http://", adapter)
session.mount("https://", adapter)
try:
response = session.get(url, headers=headers, params=params, timeout=10)
response.raise_for_status() # HTTP 에러가 발생하면 예외를 발생시킴
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return None
result = response.json()
if "documents" in result and len(result["documents"]) > 0:
places = []
for document in result["documents"]:
place = {
"장소명": document["address_name"] if "address_name" in document else address,
"위도": document["y"],
"경도": document["x"]
}
places.append(place)
return places
else:
print(f"Error: No documents found for address {address}")
return None
엑셀 파일에서 데이터 불러오기
df = pd.read_excel(‘C:\OneDrive\workspace\GeoLocation\places_address.xlsx’, engine=‘openpyxl’)
데이터프레임의 컬럼 이름 출력
print(“컬럼 이름:”, df.columns)
“주소” 컬럼이 실제로 존재하는지 확인
address_column = “주소” # 올바른 컬럼 이름으로 수정
if address_column not in df.columns:
raise KeyError(f"‘{address_column}’ 컬럼이 데이터프레임에 존재하지 않습니다.")
주소를 검색하고 데이터프레임에 추가
data =
missing_addresses =
for index, row in df.iterrows():
address = row[address_column].strip() # 주소를 검색할 키워드로 사용
places = get_place_details(address)
if places:
for place in places:
data.append({
“ID”: row[“ID”], # ‘ID’ 컬럼을 사용하여 수정
“기기명”: row[“기기명”], # ‘기기명’ 컬럼 추가
“주소”: row[address_column],
“장소명”: place[“장소명”],
“위도”: place[“위도”],
“경도”: place[“경도”]
})
else:
data.append({
“ID”: row[“ID”], # ‘ID’ 컬럼을 사용하여 수정
“기기명”: row[“기기명”], # ‘기기명’ 컬럼 추가
“주소”: row[address_column],
“장소명”: None,
“위도”: None,
“경도”: None
})
missing_addresses.append({“주소”: address}) # 누락된 주소를 딕셔너리 형태로 추가
result_df = pd.DataFrame(data)
데이터프레임을 엑셀 파일로 저장
result_df.to_excel(“C:\OneDrive\workspace\GeoLocation\places_coordinates_result_updated.xlsx”, index=False)
누락된 주소를 데이터프레임으로 변환하여 엑셀 파일로 저장
missing_df = pd.DataFrame(missing_addresses)
missing_df.to_excel(“C\OneDrive\workspace\GeoLocation\missing_addresses.xlsx”, index=False)
print(“엑셀 파일이 생성되었습니다.”)
print(f"누락된 주소가 {len(missing_addresses)}건 있습니다. ‘missing_addresses.xlsx’ 파일을 확인하세요.")