본문 바로가기
문송충의 코딩하기/파이썬 데이터 분석

2021년 11월 서울 아파트 평균 평당(㎡) 거래 매매가 with python

by 동장군님 2021. 12. 28.
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
반응형

댓글