본문으로 바로가기

 


 

 

서비스  소개

 


 

1. 사이트 접속

 

https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=main

 

한국은행 경제통계시스템 - OpenAPI 서비스

 

ecos.bok.or.kr

1. 한국은행 경제통계시스템 사이트 접속

 

 

 

2. 인증키 신청

 

https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=useProvAgree&menuGroup=MENU000003&menuCode=MENU000014

 

한국은행 경제통계시스템 - OpenAPI 서비스

1. 개인정보의 수집 및 이용 목적 한국은행은 경제통계OpenAPI서비스 제공을 위해 아래와 같이 개인정보를 수집하고자 하오며 수집된 개인정보는 목적 이외의 용도로는 사용되지 않습니다. 이용

ecos.bok.or.kr

2-1. 개인정보 수집동의

 

2-2. 인증키 신청정보 입력

 

2-3. 인증키 발급 팝업창 확인

 

2-4. 인증키 발급내역 확인

 

 

 

3. 활용 (python)

 

0) 환경

- Anaconda3, Python 3.7.6 or higher
- Jupyter Notebook

 

1) 프로젝트 실행

- 시작 > Anaconda3(32/64-bit) > Jupyter Notebook을 실행합니다.

3-1. Jupyter Notebook 실행

 

2) 프로그램 작성

- Files > New > Python3 를 선택하여 New Notebook을 생성합니다. 

3-2. Python3 Notebook 생성 

 

- 생성된 편집기에 다음과 같이 Python 코드를 작성합니다. (*복사 + 붙여넣기)

- url 변수에 호출하려는 API주소를 입력합니다.

import requests 

import xml.etree.ElementTree as ET 



## 호출하려는 OpenAPI URL를 정의합니다.

url = "http://ecos.bok.or.kr/api/StatisticItemList/sample/xml/kr/1/1/043Y070/"



## 정의된 OpenAPI URL을 호출합니다.

response = requests.get(url)



## http 요청이 성공했을때 API의 리턴값을 가져옵니다.

if response.status_code == 200:

    try:

        contents = response.text

        ecosRoot = ET.fromstring(contents)

        

        ## 호출결과에 오류가 있었는지 확인합니다.

        if ecosRoot[0].text[:4] in ("INFO","ERRO"):

            print(ecosRoot[0].text + " : " + ecosRoot[1].text)

            ## 오류메세지를 확인하고 처리합니다.

        else:

            print(contents)

            ## 결과값을 활용하여 필요한 프로그램을 작성합니다.

    except Exception as e:

        print(str(e))

        ##예외가 발생했을때 처리합니다.

 

3) 실행 및 확인

- Cell > Run Cell 또는 Run 버튼을 클릭하여 프로그램을 실행하고 결과를 확인합니다.

3-3. 실행결과 확인

 

 

 

4. OpenAPI URL 

 

통계코드 검색

https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=guideStatCd&menuGroup=MENU000004&menuCode=MENU000024

 

한국은행 경제통계시스템 - OpenAPI 서비스

통계코드검색 메인 > 개발가이드 > 통계코드검색

ecos.bok.or.kr

 

TIP 언어별 개발 가이드 확인

https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=guideDevGuide&menuGroup=MENU000004&menuCode=MENU000017

 

한국은행 경제통계시스템 - OpenAPI 서비스

파일 다운로드 Python 개발 메뉴얼 0. 환경 - Anaconda3, Python 3.7.6 or higher - Jupyter Notebook 1. 프로젝트 실행 - 시작 > Anaconda3(32/64-bit) > Jupyter Notebook을 실행합니다. 2. 프로그램 작성 - File > New > Python3 를 선

ecos.bok.or.kr

 

 

 

5. 응용

 

개발명세서 다운로드

specExcel.xls
0.02MB

 

python requests module

https://me2nuk.com/Python-requests-module-example/

 

Python requests 모듈(module) 사용법

Python requests 모듈(module) 사용법

me2nuk.com

## 환경구축

import datetime as dt 
import requests as r 
import pandas as pd
import numpy as np
from bs4 impoort BeautifulSoup
import json
from urllib.request import urlopen
from datetime import date, timedelta

import warnings
warnings.filterwarnings(action='ignore')

 

## 날짜 데이터프레임 생성

start_date = '20100101'  # 시작날짜

yesterday = date.today() - timedelta(1)  # 'yesterday' 변수 생성
end_date = yesterday.strftime('%Y%m%d')  # 날짜 포맷팅

date_df = pd.Dataframe(pd.date_range(start=start_date, end=end_date, freq='D').strftime('%Y%m%d'))  # 날짜 데이터프레임 만들기
date_df.columns = ['Date']  # date_df 칼럼명을 'Date'로 지정 (4304, 1)
date_df.set_index('Date', inplace=True)  # date_df 인덱스를 'Date'칼럼으로 대체 (4304, 0)
date_df
# 매일 업데이트 되는 자료 (daily updated data)

## 환율 : 원/달러, 원/위안, 윈/엔, 원/유로 (매매기준율)
## 금리 : 콜금리(1일,전체거래)

key = 'Your Key'  # 한국은행 OpenAPI서비스 메인 > 마이페이지 > 인증키 발급내역
start_page = '1'
end_page = '10000'


main_codes = {'036Y001':'환율',
             '060Y001':'시장금리'
            }

code_036Y001 = {'0000001':'환율(DD)_원달러환율',
                '0000053':'환율(DD)_원위안환율',
                '0000002':'환율(DD)_원엔환율',
                '0000003':'환율(DD)_원유로환율'
               }

code_060Y001 = {'010101000':'시장금리(DD)_콜금리(DD)',
                '010200000':'시장금리(DD)_국고채(3년)'
               }


daily_df = pd.DataFrame()  # 빈 데이터프레임 생성
row_list = []              # 빈 리스트 생성

for main_code in main_codes :
    if main_code == '036Y001' :
        sub_code = code_036Y001
    elif main_code == '060Y001' :
        sub_code = code_060Y001
        
        
    for code in sub_code : # 칼럼수 만큼 반복
        url = 'http://ecos.bok.or.kr/api/StatisticSearch/'+key+'/xml/kr/'+start_page+'/'+end_page+'/'+main_code+'/DD/'+start_date+'/'+end_date+'/'+code+'/?/?/' 
        res = requests.get(url)
        xml = BeautifulSoup(res.text,'xml')
        ecos = xml.find_all("row")
        
        TIME_list = []
        DATA_VALUE_list = []
        ITEM_NAME1_list = []

        for item in ecos :
            ITEM_NAME1 = item.find('ITEM_NAME1').text     
            DATA_VALUE = item.find('DATA_VALUE').text
            #DATA_VALUE = float(DATA_VALUE)
            TIME = item.find('TIME').text
            
            TIME_list.append(TIME)
            DATA_VALUE_list.append(DATA_VALUE)
            ITEM_NAME1_list.append(ITEM_NAME1)
            
        temp = pd.DataFrame(DATA_VALUE_list, index = TIME_list)
        daily_df = pd.concat([daily_df, temp], axis = 1)
    row_list.extend(sub_code.values())
    
daily_df.columns = row_list
#Daily_df.fillna(method='pad', inplace=True) # 휴일 결측치 처리(전일값)
daily_df.reset_index(0, inplace=True)  # index 재설정
daily_df.rename(columns = {"index": "Date"}, inplace = True)  # 컬럼 이름 변경

daily_df