728x90
공공데이터 국토교통부에서 제공하고 있는 아파트 매매 실거래 데이터를 활용해서 2021년 11월 서울 아파트 평당 평균 매매가를 구해보고 이 수치를 전년도 11월과 비교해보도록 하겠다.
https://www.data.go.kr/data/15057511/openapi.do
국토교통부_아파트매매 실거래 상세 자료
부동산 거래신고에 관한 법률에 따라 신고된 주택의 실거래 자료를 제공
www.data.go.kr
우선 데이터를 뽑기 위해서는 서울 지역구별 법정코드가 필요하다. 그래서 아래 코드를 통해서 서울 법정코드를 크롤링해오도록 하겠다. 아래 코드가 문제없이 돌아간다면 25개 서울 지역구 법정코드를 가져올 수 있을 것이다.
import pandas as pd
import requests
url='https://inasie.github.io/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/5/'
headers={'useragent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}
response = requests.get(url, headers=headers)
html = bs(response.text, "lxml")
table = html.select("table")
table = pd.read_html(str(table))
gu=table[0]
se=gu[gu['법정동주소'].str.contains('서울특별시')]
se=se[1:]
다음 공공데이터 API를 통해서 2021년 11월, 2020년 11월 서울 아파트 평당 평균 매매가 수치를 계산하도록 하겠다.
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
data=[]
api='~'
for i in se['법정동코드']:
url = f'http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev?serviceKey={api}'
queryParams = '&' + urlencode({quote_plus('pageNo') : 1, quote_plus('numOfRows') : '1000',
quote_plus('LAWD_CD') : i, quote_plus('DEAL_YMD') : '202111'})
url2 = url + queryParams
response = urlopen(url2)
results = response.read().decode("utf-8")
results_to_json = xmltodict.parse(results)
rows = json.loads(json.dumps(results_to_json))
data.extend(rows['response']['body']['items']['item'])
df_21=pd.DataFrame(data)
df_21['전용면적']=df_21['전용면적'].astype(float)
df_21['m2']=df_21['전용면적']/3.3
df_21['거래금액']=df_21['거래금액'].str.replace(',','').astype(int)
df_21['per price']=df_21['거래금액']/df_21['m2']
seoul_price_2111=df_21['per price'].mean()
for i in se['법정동코드']:
url = f'http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev?serviceKey={api}'
queryParams = '&' + urlencode({quote_plus('pageNo') : 1, quote_plus('numOfRows') : '1000',
quote_plus('LAWD_CD') : i, quote_plus('DEAL_YMD') : '202011'})
url2 = url + queryParams
response = urlopen(url2)
results = response.read().decode("utf-8")
results_to_json = xmltodict.parse(results)
rows = json.loads(json.dumps(results_to_json))
data.extend(rows['response']['body']['items']['item'])
df_20=pd.DataFrame(data)
df_20['전용면적']=df_20['전용면적'].astype(float)
df_20['m2']=df_20['전용면적']/3.3
df_20['거래금액']=df_20['거래금액'].str.replace(',','').astype(int)
df_20['per price']=df_20['거래금액']/df_20['m2']
seoul_price_2011=df_20['per price'].mean()
그래프 시각화를 통해서 비교하면 아래와 같이 볼 수 있다.
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["figure.figsize"] = (20,10)
x = np.arange(2)
years = ['2020년 11월','2021년 11월']
values = [seoul_price_2011,seoul_price_2111]
for a,b in enumerate(values):
plt.text(a, b, b, fontsize=16, color='b',
horizontalalignment='center', verticalalignment='bottom')
plt.bar(x, values,color=['r','g'])
plt.xticks(x, years)
plt.yticks(np.arange(0, 10000,2000))
plt.title('서울 아파트 평균 평당 매매가',fontdict={'fontsize':16})
plt.show()
전년 11월 대비 서울 아파트 평당 평균 매매가가 약 8% 증가한 점을 확인할 수 있다.
728x90
반응형
'문송충의 코딩하기 > 파이썬 데이터 분석' 카테고리의 다른 글
2021년 5월 ~ 11월 서울 강서구 오피스텔 매매가 데이터 가져오기(공공데이터) with Python (0) | 2021.12.27 |
---|---|
KODEX 은행, TIGER 은행 지난 5년간 주가 그래프 파이썬으로 그리기 (0) | 2021.03.22 |
공공데이터 Open API를 통해 국내 주요 은행 현황 분석#1 with Python (0) | 2021.03.20 |
네이버에서 국내 ETF 종목 정보 가져와서 분석 with Python (0) | 2021.03.20 |
[파이썬] - 공공데이터 API에서 시도별 미세먼지 PM10 데이터를 가져와서 Folium으로 시각화하기 (0) | 2020.11.28 |
댓글