본문 바로가기
Note/Data Analysis

kakao api 주소지별 위도 경도 데이터 생성

by sooyeoon 2022. 11. 8.
import requests
from urllib.parse import urlparse

1차 수정

# ssdf = sdfd.copy()
address1 = df["출발지주소"].to_list()

for ad1 in address1:
    try:
        url = "https://dapi.kakao.com/v2/local/search/address.json?&query=" + ad1
        result = requests.get(urlparse(url).geturl(),
                              headers={"Authorization":"KakaoAK  "})
        json_obj = result.json()

        long = json_obj["documents"][0]["address"]["x"]
        lat = json_obj["documents"][0]["address"]["y"]

        df.loc[df["출발지주소"] == ad1, "위도"] = lat
        df.loc[df["출발지주소"] == ad1, "경도"] = long

    except:
        pass

df

→ 해당 방법은 출발지 주소와 실제로 api에서 검색된 주소정보가 json_obj["documents"]에 가 정확하게 일치되지 않으면 위도경도 mapping이 되지 않아 nan값으로 저장됨

해당 반복문에 저장된 변수들을 한줄씩 확인했다.

result

>> output
<Response [200]>

→ 요청이 제대로 들어온 것을 확인,

json_obj


→ 가장 마지막에 들어온 주소지값의 정보를 담고 있으므로 제대로 입력되고 있었음

json_obj["documents"][0]["address"]


→ 결국 위도 경도 값을 할당하기 위해 ["address"] 까지 접근해야함을 확인함

그래서 해당 반복문의 range값을 정해 카운트가 증가하는 값 i를 임의 생성한 뒤,
반복문이 실행될 때마다 해당 주소가 순서대로 직접 url에 요청될 수 있도록 변경함

2차 수정

# ssdf = sdfd.copy()
address1 = df["출발지주소"].to_list()

for i in range(len(address1)):
    try:
        url = "https://dapi.kakao.com/v2/local/search/address.json?&query=" + address1[i]
        result = requests.get(urlparse(url).geturl(),
                              headers={"Authorization":"KakaoAK  "})
        json_obj = result.json()

        long = json_obj["documents"][0]["address"]["x"]
        lat = json_obj["documents"][0]["address"]["y"]

        df['위도'].iloc[i] = lat
        df['경도'].iloc[i] = long

    except:
        pass

df

반복문으로 저장된 변수 lat , long 위도 경도의 정보가 i에 해당하는 데이터프레임의 컬럼 순서와 상응할 것이라 판단되어 방법을 변경했으나, 맨 마지막으로 입력된 주소지의 위도 경도정보가 중복되어 모든 행의 위도경도의 정보가 전부 중복되어 저장되는 문제 발생 > 반복문으로 직접 위도 경도 컬럼을 추가하지 않고,

반복문마다 갱신되는 경도 lat / 위도 long 변수 가 데이터 프레임 순서와 상응할 것이라 판단하여 경도 리스트 : longlst 위도 리스트 : ratlist 를 생성하여 해당 리스트에 맞는 위도 경도 컬럼으로 결합하는 방법으로 작성했다.

 

# ssdf = sdfd.copy()
address1 = df["출발지주소"].to_list()
latlst = []
longlst = []
for i in range(len(address1)):
    try:
        url = "https://dapi.kakao.com/v2/local/search/address.json?&query=" + df["출발지주소"].iloc[i]
        result = requests.get(urlparse(url).geturl(),
                              headers={"Authorization":"KakaoAK "})
        
        json_obj = result.json()

        long = json_obj["documents"][0]["address"]["x"]
        lat = json_obj["documents"][0]["address"]["y"]
        
        longlst.append(long)
        latlst.append(lat)
        

    except:
        pass

df['경도'] = longlst
df['위도'] = latlst

위도 경도 컬럼에 결합된 것을 확인