본문 바로가기
Real Estate Data/아파트

아파트 파이썬 데이터 분석 시리즈 1 - 1 [인천시 실거래가 Top 10 아파트 순위]

by 동장군님 2024. 2. 13.
728x90
반응형

 

https://www.data.go.kr/data/15058747/openapi.do

 

국토교통부_아파트매매 실거래자료

부동산 거래신고에 관한 법률에 따라 신고된 주택의 실거래 자료를 제공

www.data.go.kr

 

1. 부동산에 관심이 많아 이번 포스팅을 시작으로 전국 부동산 분석은 해보고자 함

 

2. 우선 가장 중요한 데이터를 가져와야 하는데, 내가 살고 있는 인천 시단위부터 시작하고자 함. 나중에 추후 전국단위로 넓히겠음

 

3. 데이터는 맨 위 국토교통부_아파트매매 실거래자료 공공데이터 오픈 API에서 가지고 옴

 

4. API에서 특정 지역 데이터를 가지고 오기 위해서는 우선 인천의 코드가 필요함. 그건 아래 코드에서 추출

 

import pandas as pd
import requests
from bs4 import BeautifulSoup as bs

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]

gu['법정동코드']=gu['법정동코드'].astype(str)

se=gu[~gu['법정동코드'].str.contains('000')]
se=se[se['법정동주소'].str.contains('인천광역시')]

 

 

5. 코드가 있고, API를 사용할 수 있는 인증키만 있으면 아래 코드와 같이 3년치 데이터를 가지고 올 수 있음.

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

mo=[m for m in range(202101,202113)]
mo.extend([m for m in range(202201,202213)])
mo.extend([m for m in range(202301,202313)])

data=[]
api='Your API KEY'

for i in see['법정동코드']:
    for a in mo:
        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') : a})

        url2 = url + queryParams
        response = urlopen(url2) 
        results = response.read().decode("utf-8")
        results_to_json = xmltodict.parse(results)
        print(results_to_json['response']['body']['totalCount'])
        try:
            rows = json.loads(json.dumps(results_to_json))
            data.extend(rows['response']['body']['items']['item'])
            print(a)
        except:
            print('오류')
            
incheon=pd.DataFrame(data)

 

6. 위 코드에서 저장한 incheon 변수를 출력하면 아래와 같은 결과가 나타남

 

7.  최근 3년 동안 단순하게 거래금액 기준으로 어느 아파트가 가장 비싼지 알아봤음 

 

8. 21년 9월에 거래된 48층 88평 더샵센트러파크가 45억으로 가장 비싸게 거래된 아파트로 나타남

incheon['거래금액']=incheon['거래금액'].apply(lambda x:int(x.replace(',','')))
inc=incheon.sort_values(by='거래금액',ascending=False)[['거래금액','법정동','아파트','년','월','층','전용면적']]
inc['평수']=inc['전용면적'].apply(lambda x: round(float(x)*0.3025,2))
inc['아파트 거래연도']=inc.apply(lambda row: row['아파트']+' '+row['년'],axis=1)
inc10=inc.head(10).reset_index()

import matplotlib.pyplot as plt

plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 12
plt.figure(figsize=(16,8))

plt.figure(figsize=(12,10))
sns.barplot(x='거래금액',y=inc10['아파트 거래연도'].tolist(),data=inc10)

 

9. 그리고 다 어떻게 Top10 아파트가 다 송도인지... 이해는 간다

 

 

 

728x90
반응형

댓글