728x90
반응형
공공데이터 국토교통부에서 제공하고 있는 아파트 매매 실거래 데이터를 활용해서 2021년 11월 서울 아파트 평당 평균 매매가를 구해보고 이 수치를 전년도 11월과 비교해보도록 하겠다.
https://www.data.go.kr/data/15057511/openapi.do
우선 데이터를 뽑기 위해서는 서울 지역구별 법정코드가 필요하다. 그래서 아래 코드를 통해서 서울 법정코드를 크롤링해오도록 하겠다. 아래 코드가 문제없이 돌아간다면 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 |
댓글