-
20년 서울시 행정구역별 전세 값 데이터 분석 & 시각화 with Python/MapboxData Analysis/Real Estate 2021. 3. 4. 19:30
Data Source
공공데이터 국토교통부_아파트 전월세 자료
data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15058017
20년 서울시 행정구역별 평균 전세값 시각화 With Mapbox
20년 서울시 행정구역별 총 거래금액 Tree map 시각화 With Python
20년 총 거래금액(전세)을 기준으로 보았을때 확실히 강남 3구 전세 금액이 가장 큰 점을 확인 가능함
20년 서울시 행정구역별 평균 전세 금액 월별 변화
Python Code
데이터 추출과 시각화를 위한 파이썬 코드는 다음과 같다.
import pandas as pd code=pd.read_html('https://inasie.github.io/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/5/',encoding='utf-8')[0] code2=code[code['법정동주소'].str.contains('서울특별시')][1:] from urllib.request import urlopen from urllib.parse import urlencode, unquote, quote_plus import urllib import requests import pandas as pd import xmltodict import json from datetime import datetime import requests api='~~~' url=f'http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptRent?serviceKey={api}&' months=[] for i in range(1,13): if i <10: months.append('2020'+'0'+str(i)) else: months.append('2020'+str(i)) wol=[] for code in code2['법정동코드']: for dates in months: queryParams =urlencode({quote_plus('LAWD_CD') : code, quote_plus('DEAL_YMD') : dates}) url2 = url + queryParams response = urlopen(url2) results = response.read().decode("utf-8") results_to_json = xmltodict.parse(results) data = json.loads(json.dumps(results_to_json)) wol.extend(data['response']['body']['items']['item']) df=pd.DataFrame(wol) code2['법정동코드']=code2['법정동코드'].astype(str) df2=df[df['월세금액']=='0'] df2['보증금액']=df2['보증금액'].str.replace(',','').astype(float) jeon=pd.DataFrame(df2.groupby(['지역코드']).mean()['보증금액']).reset_index() jeon2=pd.merge(left=jeon,right=code2,left_on=jeon['지역코드'],right_on=code2['법정동코드'],how='inner') import json state=json.load(open('C:/Users/banad/Downloads/TL_SCCO_SIG (1).zip.geojson', encoding='utf-8')) for idx, sigun in enumerate(state['features']): code=sigun['properties']['SIG_CD'] if code in jeon2['지역코드'].values: price= jeon2.loc[(jeon2['지역코드']==code),'보증금액'].iloc[0] addr= jeon2.loc[(jeon2['지역코드']==code),'법정동주소'].iloc[0] state['features'][idx]['properties']['보증금액(만 원)']=price state['features'][idx]['properties']['법정동주소']=addr data=[x for x in state['features'] if len(x['properties'])>1 ] state['features']=data import mapboxgl from mapboxgl.viz import * import os from mapboxgl.utils import create_color_stops from mapboxgl.utils import create_numeric_stops api='~' center =[126.977123, 37.517169] color_breaks = [10000,20000,30000,40000,50000,60000,70000,80000,90000] color_stops =create_color_stops(color_breaks,colors='YlGnBu') viz =ChoroplethViz( access_token=api, data=state, color_property='보증금액(만 원)', color_stops=color_stops, center=center, zoom=10, bearing=-11, pitch=43, height_property='보증금액(만 원)', height_stops=create_numeric_stops(color_breaks,0,10000), height_function_type='interpolate' ) viz.show() import squarify import numpy as np import matplotlib.pyplot as plt total=pd.DataFrame(df2.groupby(['지역코드']).sum()['보증금액']).reset_index() total2=pd.merge(left=total,right=code2,left_on=total['지역코드'],right_on=code2['법정동코드'],how='inner') total2['구']=total2['법정동주소'].apply(lambda x: x.split(' ')[1]) plt.rcParams["font.family"] = 'Malgun Gothic' sizes=np.array(total2['보증금액']) labels=total2['구'] colors = [plt.cm.Spectral(i/float(len(labels))) for i in range(len(labels))] plt.figure(figsize=(12,8), dpi= 100) squarify.plot(sizes=sizes, label=labels, color = colors, alpha=.5, edgecolor="black", linewidth=3, text_kwargs={'fontsize':10}) plt.axis('off') plt.show() df2['월']=df2['월'].apply(lambda x: '0'+str(x) if int(x)<10 else str(x) ) df2['년월']=df2['년']+df2['월'] df3=pd.merge(left=df2,right=code2,left_on=df2['지역코드'],right_on=code2['법정동코드'],how='left') df4=pd.DataFrame(df3.groupby(['법정동주소','년월']).mean()['보증금액']).reset_index() df4['주소']=df4['법정동주소'].apply(lambda x:x.split(' ')[1]) eng=pd.read_excel('C:/Users/banad/Downloads/seoul.xlsx') df5=pd.merge(left=df4,right=eng,how='left',left_on=df4['주소'],right_on=eng['kor']) df5=df5.rename(columns={'법정동주소':'addr','년월':'date','보증금액':'price'}) import plotly.express as px fig = px.bar(df5, x="eng", y="price", color="price", animation_frame="date", range_y=[0,100000]) fig.show() jj=fig.to_json() eng2=eng.set_index('eng') eng3=eng2.to_dict()['kor'] for x,y in zip(list(eng3.keys()), list(eng3.values())): jj = jj.replace(x, y)
'Data Analysis > Real Estate' 카테고리의 다른 글
서울 주요 핫플레이스(홍대입구, 건대입구, 이태원, 명동) 방문객 분석 with 지하철역 하차 인원 수 (0) 2021.05.19 서울시 전통시장 현황 분석 With Python, Mapbox, Pydeck (0) 2021.04.17 국민 임대 주택 총 세대 수 현황 알아보자 with 공공데이터 & 파이썬 (0) 2021.04.08 서울 내 스타벅스가 가장 많은 지역을 알아보자 - 스타벅스 위치 데이터 분석 With Python (0) 2021.04.01 국내 대형마트(홈플러스, 이마트, 롯데마트) 위치 데이터 분석 & 시각화 With Python/Mapbox (0) 2021.03.30