본문 바로가기

Python

부동산 엑셀(.xlsx)데이터 (주소→좌표)변환 방법

모듈설정
from urllib.parse import urlparse

import numpy as np
import pandas as pd
import requests
메인 코드1. 주소→좌표 변환함수
temp = {'address': None,    #중복되는 도로명 주소가 올 경우 재사용 사용하기 위함
        'data': None}
def getLatLng(address):
    if temp['address'] == address:  #직전에 계산한값이면 결과값을 재활용
        return temp['data']

    url = 'https://dapi.kakao.com/v2/local/search/address.json?query=' + address
    rest_api_key = '36c2***********************************'	#Kakao 앱 고유의 key 입력

    header = {'Authorization':'KakaoAK '+rest_api_key}
    result = requests.get(urlparse(url).geturl(), headers=header).json()

    try:
        match_first = result['documents'][0]['address']
        lat = float(match_first['y'])
        lng = float(match_first['x'])
        temp['address'] = address
        temp['data'] = list([lat, lng])
        return temp['data']
    except IndexError:
        return 0
메인 코드2. 부동산 데이터(.xlsx) 입력 후 좌표데이터를 추가하여 저장
input_df = pd.read_excel("아파트(매매)_실거래가_20211217033910.xlsx", skiprows=15, header=1, usecols=[0,4,5,8,11])  #필요한 데이터 slicing
lat_lng_df = pd.DataFrame(columns=['lat', 'lng'])
test = 0
for i in input_df['도로명']:
    test += 1

    getlist = getLatLng(i)
    if getlist != 0:
        item = pd.DataFrame([[getlist[0], getlist[1]]], columns=['lat', 'lng'])
        lat_lng_df = lat_lng_df.append(item, ignore_index=True)
    else:
        item = pd.DataFrame([[np.nan, np.nan]], columns=['lat', 'lng'])
        lat_lng_df = lat_lng_df.append(item, ignore_index=True)
    print(test, '/', len(input_df)) #진행상황 출력

output_df = pd.concat([input_df, lat_lng_df], axis=1)
print(output_df)
output_df.to_excel('아파트(테스트).xlsx')

국토교통부에서 제공하는 부동산실거래 데이터
lat, lng 좌표를 추가하여 저장한 데이터

 

입력 및 출력데이터
아파트(매매)_실거래가_20211217033910.xlsx
0.50MB
아파트(테스트).xlsx
0.39MB
Matplot을 이용한 그래프(Graph) 출력
더보기
  • 좌표 데이터를 가지고 있으면, 기계학습 등 데이터 분석에 사용 가능합니다.
import pandas as pd
import matplotlib.pyplot as plt

input_df = pd.read_excel("아파트(테스트).xlsx", usecols=[3,4,6,7])  #필요한 데이터 slicing
print(input_df)

x = input_df['lng']
y = input_df['lat']
plt.scatter(x, y)
plt.show()
matplotlib를 이용한 부동산 거래위치 출력