프로그래밍/파이썬

[Python] 주택금융통계 Open API 키 발급 및 데이터 불러오기

퀀트매니아 2023. 2. 9. 22:48
728x90

주택금융통계 Open API 키 발급 및 데이터 불러오기

 

안녕하세요.

 

오늘은 국내의 여러 가지 주택금융 통계 데이터를 확인할 수 있는 '주택금융통계시스템' 사이트의 Open API 키를 발급하는 방법을 알아보고, 발급한 키를 이용하여 데이터를 불러올 수 있는 파이썬 코드를 같이 작성해 보는 시간을 가져보려고 합니다.

 

 

주택금융통계시스템

 

 

며칠 전 부동산 관련 동영상을 시청하던 중 국내 주택 시장의 흐름을 파악해 볼 수 있는 지표인 '주택구입부담지수'에 대해 알게 되었는데요.

 

이 데이터는 주택금융통계시스템 사이트에서 확인이 가능한 것을 알 수 있었고, 이 사이트에서는 데이터를 활용할 수 있도록 Open API를 제공을 하고 있다는 사실도 알게 되었습니다.

 

그래서 이번시간에 API 키를 발급받아 데이터를 불러와 보고, 이 불러온 데이터를 기반으로 그래프를 출력하는 코드를 작성해 보도록 하겠습니다.

 

 

 

Open API 키 발급하기

 

먼저, 데이터를 가져오기 위해서는 Open API의 키 발급이 필요합니다.

 

▼ 아래 링크를 이용하여 사이트로 이동해 줍니다.

주택금융통계시스템 사이트로 이동

 

주택금융통계시스템 HOUSTAT (HOUSING FINANCE STATISTICS SYSTEM)

 

houstat.hf.go.kr

 

 

Open API 인증키발급 메뉴

 

 

사이트를 접속하신 뒤 상단의 메뉴 중 Open API 메뉴를 누르신 뒤 '인증키발급'을 눌러 키 발급 페이지로 이동합니다.

 

 

로그인 페이지

 

 

인증키 발급을 위해서 회원가입이 필요합니다. 회원가입을 진행하신 뒤 로그인을 진행하시면 되겠습니다.

 

로그인을 완료하셨다면, 아래 사진처럼 인증키 발급내역 페이지에서 [인증키 발급] 버튼을 눌러 인증키를 발급 페이지로 이동해 줍니다.

 

 

인증키발급

 

인증키 발급요청

 

 

활용용도내용을 채워 넣으신 뒤 [인증키 발급요청] 버튼을 누르시면 인증키가 발급이 됩니다.

 

발급이 완료된 인증키는 아래 사진과 같이 발급내역에 표시됩니다. 여기까지 진행하셨다면, 데이터를 불러올 준비는 완료되었다고 보시면 됩니다.

 

 

발급 내역

 

 

 

필요 라이브러리

 

아래 pip 명령어로 필요 라이브러리들을 정리해 드렸습니다. 복사하셔서 사용하시면 되겠습니다.

 

pip install requests
pip install time
pip install json
pip install pandas
pip install matplotlib
pip install datetime

 

 

 

전체코드

 

아래 코드는 주택금융통계시스템 Open API를 이용하여 불러온 데이터를 그래프로 출력하는 코드입니다.

 

import requests
import time
import json
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime


# 필요 값 저장
access_key = 'Open API 키 입력'
statbl_id = 'T186503126543136' # 주택 구입 부담지수
dtacycle = 'QY'                # 분기별

# URL 저장
url = 'https://houstat.hf.go.kr/research/openapi/SttsApiTblData.do?Key={access_key}&Type=json&pIndex=1&pSize=100&STATBL_ID={statbl_id}&DTACYCLE_CD={dtacycle}&WRTTIME_IDTFR_ID={wrrtime_idtfr_id}&ITM_DATANO={itm_datano}'

# 시작기간 설정
start_year = 2004
end_year = int(datetime.now().strftime('%Y'))

# 지역 설정(전국, 서울)
itm_datano = ['10001', '10002']

region_name = [] # 지역이름
quarters = []    # 기간
datas = []       # 데이터 값

# 지역별로 시작기간부터 데이터를 불러오는 로직
for i in range(0, len(itm_datano)):

    name_flag = 0

    j = start_year

    sub_quarters = []
    sub_datas = []

    while j <= end_year:

        print(j)

        break_flag = 0

        for k in range(1, 5):

            wrrtime_idtfr_id = str(j) + '0' + str(k)

            query_url = url.format(access_key = access_key, statbl_id = statbl_id, dtacycle = dtacycle, wrrtime_idtfr_id = wrrtime_idtfr_id, itm_datano = itm_datano[i])
            print(query_url)

            response = requests.get(query_url)
            contents = response.text

            json_ob = json.loads(contents)

            if 'RESULT' in json_ob:
                break_flag = 1
                break

            if name_flag == 0:
                region_name.append(json_ob['SttsApiTblData'][1]['row'][0]['ITM_NM'])
                name_flag = 1

            sub_quarters.append(json_ob['SttsApiTblData'][1]['row'][0]['WRTTIME_IDTFR_ID'])
            sub_datas.append(json_ob['SttsApiTblData'][1]['row'][0]['DTA_VAL'])
			
            # 시간당 요청횟수 제한때문에 sleep 적용
            time.sleep(0.6)

        j = j + 1

        if break_flag == 1:
            break

    quarters.append(sub_quarters)
    datas.append(sub_datas)

# 데이터 프레임 만들기
prop_index = pd.DataFrame({'QY':quarters[0]
                            ,region_name[0]:datas[0]
                            ,region_name[1]:datas[1]})

prop_index = prop_index.set_index('QY', drop=True)

# 데이터 프레임 출력해보기
print(prop_index)

# 그래프 그리기 - 사이즈 설정
plt.figure(figsize=(15, 5))

# 그래프 그리기
plt.rcParams['font.family'] = 'Malgun Gothic' # 한글 깨짐 방지
plt.rcParams['axes.unicode_minus'] = False
plt.plot(prop_index)

# 그래프 제목 작성
plt.title("주택구입부담지수 (서울 : {:.1f})".format(prop_index.iloc[-1][1]))

x_ticks = prop_index.index.to_list()
x_labels = prop_index.index.to_list()

plt.xticks(ticks=x_ticks, labels=x_labels, rotation=45)

# 이미지 저장 경로지정
img_path = './temp_img.png'

# 이미지 저장
plt.savefig(img_path, bbox_inches='tight', facecolor='#eeeeee')

 

코드를 실행해 그래프를 출력해 보시면 아래와 같이 그래프가 출력되는 것을 확인하실 수 있습니다.

 

 

코드 실행으로 출력된 그래프 이미지 (위) / 주택금융통계시스템 사이트 데이터(아래)

 

 

 

코드 설명

 

다음은 코드에 대해 간단히 설명을 드리도록 하겠습니다.

API를 통해 데이터를 불러오게 되면 한 분기의 데이터 값만 가져올 수 있기 때문에 반복문을 중첩하여 코드를 작성하였습니다.

 

 

코드 설명 1

 

 

  • itm_datano 변수에는 가져오기를 희망하시는 지역의 코드를 입력하시면 됩니다. 저는 전국과 서울을 비교해보고 싶었기 때문에 전국과 서울의 지역 코드를 넣어주었습니다.
  • region_name은 코드를 통해 데이터를 불러오면 해당 지역의 이름을 저장하는 변수입니다. for문 중간의 name_flag 변수는 이름은 한 번만 가져오면 되기 때문에 중복으로 이름을 불러오지 않기 위해 flag 값으로 사용하는 변수입니다.
  • quarters는 연도와 분기를 저장하는 변수이고, datas는 해당 지역과 분기의 데이터 값입니다.

 

 

코드 설명 2

 

 

  • sub_quarters와 sub_datas는 각 지역의 기간과 데이터를 담는 리스트입니다. end_year까지 반복되면서 데이터를 이 리스트에 담게 됩니다.
  • break_flag는 기간 끝까지 도달하면 반복문을 종료하기 위해 사용되는 변수입니다.
  • wrrtime_idtfr_id는 연도와 분기 값입니다.

 

 

코드 설명 3

 

 

  • 지금까지 작성했던 변수들을 이용하여 query_url을 작성하고, requests와 json 라이브러리를 이용하여 데이터를 불러와 json_ob 변수에 저장해 줍니다.
  • json_ob 변수에 'RESULT' 문자가 포함되어 있다는 것을 데이터의 끝으로 판단하여 종료해 줍니다.
  • time.sleep을 이용하여 sleep을 0.6초 정도 걸어 두었는데요. 0.5초로 설정해 보니 제한이 걸려서 0.6초로 설정해 뒀습니다.

 

 

코드 설명 4

 

 

이런 식으로 불러온 데이터를 기반으로 데이터 프레임을 만들고, 이 데이터 프레임으로 그래프를 만들어서 출력을 하면 그래프 이미지를 얻으실 수 있습니다.

 

이렇게 출력된 그래프는 제가 이전에 만들었던 미국주식 시황 알림 봇에 추가하여 알림을 받아볼 생각입니다. 주택구입부담지수는 분기마다 발표하는 데이터이기 때문에 한 달에 한번 정도 알림을 받으면 될 것 같습니다.

 

이외에 추가적으로 데이터를 가져오고 싶으신 분이나, 가이드를 확인하고 싶으신 분은 아래 Open API 가이드 링크를 제공해 드릴 테니 확인해 보시면 되겠습니다.

 

주택금융통계시스템 Open API 개발 가이드 페이지로 이동

 

개발 가이드 | 주택금융통계시스템 HOUSTAT (HOUSING FINANCE STATISTICS SYSTEM)

개발 가이드 Open API 사용방법 1. 사용 할 Open API 정하기 Open API 목록 메뉴의 서비스 항목을 확인합니다. 2. 명세서를 다운로드 받습니다. 명세서에는 Open API를 사용하기 위한 설명이 포함되어 있습

houstat.hf.go.kr

 

 

 

마무리...

 

오늘은 주택금융통계시스템 사이트의 OpenAPI 키를 발급하는 방법을 알아보았고, 주택금융 통계 데이터를 불러올 수 있는 파이썬 코드를 같이 작성해 보는 시간을 가져보았습니다. 다음 포스팅에서도 유용한 정보를 소개하는 시간을 가져보도록 하겠습니다. 감사합니다!

 

728x90