반응형
공공데이터 아파트 실거래 데이터 수집(1)
이전 글에서는 국토부 아파트 실거래가 수집에 앞서 공공데이터 계정 생성 및 서비스키 발급을 진행하였습니다.
1. 요청변수 확인
오픈API 참고문서 또는 미리보기 기능으로 제공되는것처럼 필수 요청변수는 아래와 같습니다.
- LAWD_CD(각 지역별코드)
- DEAL_YMD(월 단위 신고자료)
- 그리고 발급받은 서비스키
보통 오픈API 활용을 위해 명세서(가이드)가 제공이 되며, 문서를 참고하여 개발을 하게 됩니다.
2. python 활용한 데이터 수집
특정시점(예를들어 12년 7월)부터 현재까지 아파트 실거래 데이터를 수집하고 CSV파일로 저장하는 기능을 구현해 볼게요.
구글 코랩(colab)을 활용하며, 최종코드는 맨 아래 첨부파일로 올려드릴게요.
아래는 코드에 대한 설명을 같이 해드리겠습니다.
- 국토부 아파트실거래 데이터의 경우 'xml'로 응답이 제공되며, DataFrame에 넣기 위해 json으로 변환을 하겠습니다.
! pip install xmltodict # 국토부 실거래 데이터 xml -> json 변환
- 필요한 라이브러리를 불러옵니다.
import os
import json
import xmltodict
import pandas as pd
from urllib.request import Request, urlopen
from urllib.parse import urlencode, quote_plus, quote
from datetime import datetime, date
from dateutil.relativedelta import relativedelta
- 발급받은 서비스키를 입력하고, Request 모듈을 이용해서 호출합니다.
- json.loads 를 통해 데이터를 json 형태로 불러와 DataFrame에 넣습니다.
molit_serviceKey = '발급받은서비스키입력'
Exception 처리 : 아직 실거래가 등록이 되지 않은 년월 조회할 때 None 리턴(업데이트: 2021.5.1.)
def molit_public_api(key, rcode, dealdate):
try:
# print(rcode, dealdate)
base = "http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?"
try:
parameters = "serviceKey=%s&" % (key) + urlencode({quote_plus('LAWD_CD'): rcode, quote_plus('DEAL_YMD'): str(dealdate), quote_plus('numOfRows'): str(9999)}, encoding='UTF-8')
except:
return None
url = base + parameters
# print('url', url)
request = Request(url)
response = urlopen(request)
rescode = response.getcode()
# print(rescode)
if rescode == 200:
response_body = response.read().decode('utf-8')
else:
print('error code :' + rescode)
if response_body == None:
return None
jsonData = json.loads(json.dumps(xmltodict.parse(response_body)))
if jsonData['response']['body']['items'] is not None:
df = pd.DataFrame(jsonData['response']['body']['items']['item'])
return df
else:
return None
except Exception as e:
print('exception occur!', str(e))
- 호출할 함수 구현은 완료 되었고, 다음은 데이터를 불러올 기간에 대한 설정입니다.
def get_yearmonth_list(year, month):
this_yearmonth = date.today()
init_yearmonth = datetime.strptime(year+month, "%Y%m").date()
year_months = []
while init_yearmonth <= this_yearmonth:
year_months.append(init_yearmonth)
init_yearmonth = init_yearmonth + relativedelta(months=1)
return year_months
year_months = get_yearmonth_list(year='2021', month='2')
업데이트: 2021.5.1.
Exception 처리 : 아직 실거래가 등록이 되지 않은 년월 조회할 때 None 리턴(업데이트: 2021.5.1.)
for year_month in year_months:
try:
dirname = '/content/drive/MyDrive/국토부_실거래'
yearmonth = year_month.strftime("%Y%m") #202102
filename = os.path.join(dirname, '{}.csv'.format(yearmonth))
if not os.path.isfile(filename):
df_molit_api = molit_public_api(molit_serviceKey, rcode='36110', dealdate=yearmonth)
if df_molit_api is not None:
df_molit_api.to_csv(filename, encoding='utf8', index=False)
else:
print(yearmonth, '조회 가능한 데이터가 없어 파일을 생성할 수 없습니다.')
else:
print(yearmonth, '이미 파일이 존재합니다.')
except Exception as e:
print(str(e))
- 수집된 데이터 불러와 봅니다.
df = pd.read_csv('/content/drive/MyDrive/국토부_아파트실거래/202102.csv')
df.head()
구글 코랩으로 작성한 .ipynb 파일을 올려드립니다.
이상 끝.
'자기개발 > 데이터분석' 카테고리의 다른 글
[데이터분석] 국토부 아파트 실거래가 분석 - 2. 데이터 수집(2) (0) | 2021.04.11 |
---|---|
[GIS] 브이월드 지오코딩 - 공간정보 오픈플랫폼 브이월드 활용법 (0) | 2021.04.08 |
[정보공유] 데이터 분석 경진대회 사이트 (0) | 2021.03.28 |
[데이터분석] 국토부 아파트 실거래가 분석 - 1. 계정생성 및 서비스키 발급 신청 (0) | 2021.03.27 |
[정보공유] 인공지능, 블록체인, 데이터 분석 교육 안내 (0) | 2021.03.27 |