뱁새유니버스

python folium경기도 의왕시 부동산 실거래가 거래금액 python folium으로 line chart 그래프 차트 그리기

by 뱁새유니버스

1. 개요

파이썬을 통해 부동산 실거래가를 공공데이터포털(data.go.kr)로부터 API 호출해오고 folium으로 지도에 마커 표시 및 데이터를 보여주는 것 까지 계속해오고 있습니다. 

이번 시간엔  2022년 아파트별 거래금액을 line graph로  보여주는 예제를 작성해보고자 합니다.

 

2. 내용

(1) 2022년 12월 경기도 의왕시 부동산 실거래가 가져오기

위 개요 페이지에 부동산 실거래가를 가져오는 코드와 동일합니다. 다만, 한가지 차이점은 <아파트와층>이라는 열을 추가했습니다. 같은 아파트에 2건 이상 거래가 발생할 수 있기 때문에 고유값으로 bar chart의 x축을 표현하고자 <아파트와층>이라는 열을 추가했습니다. 

import requests
import xmltodict
import pandas as pd
import json

#주소를 입력하면 법정동코드를 갖고 오는 함수이다.
def get_lawd_cd(address):
    url = "http://apis.data.go.kr/1741000/StanReginCd/getStanReginCdList"
    key = "공공데이터포털 API Key값"    
    params = {"serviceKey": key, "pageNo": "1", "numOfRows": "3", "type": "json", "locatadd_nm": address}
    r = requests.get(url, params=params)
    _json = r.json()
    results = _json.get("StanReginCd")
    if len(results) > 0:
        return results[1].get("row", [])[0].get("region_cd")[0:5]
    return None
    
#2022년 12월달 경기도 의왕시 부동산 실거래가 데이터를 가져온다.    
LAWD_CD = get_lawd_cd("경기도 의왕시")
DEAL_YMD = "202212"
url = "http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade"
key = "공공데이터포털 API Key값"
params = {"serviceKey": key, "LAWD_CD": LAWD_CD, "DEAL_YMD": DEAL_YMD}


req = requests.get(url, params=params)
result = xmltodict.parse(req.text)
items = result.get("response").get("body").get("items").get("item")

#list를 json방식으로 바꾸기
jsonString = json.dumps(items) 

df = pd.DataFrame(items)

#거래금액에 쉼표를 제거해야 한다. 그렇지 않으면 bar chart를 표기할 때 숫자로 인식을 못한다.
df['거래금액'] = df.거래금액.str.replace(',', '').astype('int64')

#고유값으로 보여주기 위해 거래금액과 층을 합친다. 
#같은 아파트에 거래가 2건 이상일 수 있기 때문이다. 
df['아파트와층'] = df['아파트']+df['층']

#df 데이터를 추출해본다.
df

결과는 아래와 같습니다. <아파트와층>이라는 열(Column)이 추가된 것을 확인할 수 있습니다.

(2) folium 지도에 bar chart 팝업이 출력되는 마커 만들기

아래 코드를 복사하여 실행시킵니다. altair를 import합니다.

x축은 <아파트와층>이고 y축은 <거래금액>입니다. 

import folium

import altair as alt
import pandas as pd

# altair chart를 만들고 JSON으로 변환한다.
chart = alt.Chart(df).mark_bar().encode(x='아파트와층', y='거래금액')
propChart = chart.to_json()

# folium map을 만든다. 위도 경도는 원하는 곳으로 
start_coords = [37.38619010082862,126.98052156518638]
folium_map = folium.Map(
    location=start_coords,
    zoom_start=16,
    width='100%',
    height='100%',
)

#  altair graph 팝업을 띄우기 위한 마커를 만든다. 
propPirceMarker = folium.Marker(
    location=start_coords,
    radius=20,
    color='red',
    fill=True,
    fill_color='red',
    fillOpacity=1.0,
    opacity=1.0,
    tooltip='실거래가 확인하기',
    popup=folium.Popup(max_width="100%").add_child(
    folium.VegaLite(propChart, width="100%", height="100%")),
)

# folium 맵에 propPirceMarker를 추가한다.
propPirceMarker.add_to(folium_map)

#마커를 띄운다.
folium_map

결과값은 아래와 같습니다.

이렇게 2022년 12월에 거래된 부동산 실거래가를 아파트를 x축으로 해서 비교 분석해볼 수 있습니다. 

 

3. 마치며

이번 포스팅에선 altair를 import해서 folium 맵에 marker를 통해 popup을 표기하는 것을 해봤습니다.

다음 번엔 어떤 걸 해볼까? 많은 생각이 드네요.ㅎㅎ 한번 직접 활용해보시고 우리 동네 아파트 실거래가를 조회해보는 프로그램을 구현해보는 건 어떨까요? 

이 글을 읽는 모든 분들 오늘 하루도 행복하시기 바랍니다.

감사합니다. 

반응형

블로그의 정보

가슴이 웅장해지는 모든것

뱁새유니버스

활동하기