한국은행 오픈API로 생산자물가지수와 소비자물가지수 비교하기

목차

    2018. 5. 21. 23:22

    이전 포스팅에서 생산자물가지수 데이터를 가져오기 위해 한국은행의 오픈API 인증코드를 받았다. (참조: 한국은행 경제지표 오픈API로 사용하기)

    오늘은 이 인증코드를 이용해서 생산자물가지수와 소비자물가지수를 확인해보려고 한다. 인증코드를 받고난 후에 값을 받는 것은 어렵지 않았다. 참고로 생산자물가지수를 왜 가져오려고 하는지 궁금하다면 아래 글을 참조해 보도록 하자.
    (참조: 생산자물가지수와 주가의 관계를 알아보자)

    제목

    추천포스트


    오픈API를 통해서 생산자물가지수를 받는 방법은 원하는 포맷으로 url을 구성하여 요청하면 그 값을 회신받는 방식이다. 이전에 사용하려는 코드로는 값이 잘 나오지 않아 다른 코드로 아래와 같이 url을 만들었다.

    한국은행_오픈API

    (오픈API 요청 포맷)

    - 요청url: http://ecos.bok.or.kr/api/StatisticSearch/[인증키 삽입]/json/kr/1/1000/I02Y001/MM/201501/201805/?/?/?/


    해당 url로 인터넷 브라우저에 입력해도 데이터값은 조회된다. 참고로 I02Y001이 생산자물가지수 코드값이다. 동일하게 코드값만 변경하면 소비자물가지수값도 가져올 수 있다. 소비자물가지수 코드값은 I02Y002이다. 

    생산자물가지수와 소비자물가지수의 값을 15년1월부터 18년4월까지 받아서 두 지수의 그래프를 그려보았다. 참고로 년월을 x축으로 그리기 어려워서 1,2,3,4....순으로 데이터를 변형하여 그래프를 그리고, x축의 라벨을 원하는 문자로 변경하였다.

    생산자물가지수_소비자물가지수_비교하기

    (생산자 물가지수와 소비자 물가지수 비교)

    생산자물가지수는 소비자물가지수를 선행하는 것으로 알고 있었는데 일치하지는 않는 모습이다. 생산자물가지수는 15년6월부터 16년1월까지 하락하였지만 소비자물가지수는 16년 1월부터 계속해서 상승하는 추세를 보인다. 18년 4월에는 최근 3년 사이 최고값을 기록했다.

    15년6월부터 16년1월까지는 원유가격이 낮았던 시기인 듯 하다. 관련 뉴스를 보면 원자재 가격 하락으로 생산자물가지수가 하락했다고 한다.

    생산자물가지수가 떨어졌음에도 6개월뒤 소비자물가지수는 거의 변동이 없었다. 그 원인은 알기 어려우나 원자재 가격의 하락의 혜택을 일반 소비자들은 많이 누리지 못한 듯 하다.
    (참조: 고유가‧축산물 수요 증가… 4월 생산자물가지수 3년 4개월來 최고 / 아주경제 18년 5월 21일,
    10월 생산자물가지수 5년6개월來 최저…원자재 가격 하락 영향 / 뉴스웨이 16년 11월 18일)

    그래프를 통해서 두 값을 비교해 볼 수도 있지만, 상관 계수를 통해서도 비교해 볼 수 있다. 다음에는 상관계수를 통해서 두 값이 얼마나 상관관계가 있는지 알아보도록 하겠다.


    아래에 작업한 코드를 첨부하니 관심 있다면 직접 해 봐도 좋을 듯 하다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    # coding=utf-8
     
    from urllib.request import urlopen
    import pandas as pd
    from html_table_parser import parser_functions as parser
    from bs4 import BeautifulSoup
    import sqlite3
    import datetime
    from dateutil.relativedelta import relativedelta
    import matplotlib
    import matplotlib.pyplot as plt
     
     
    import json
     
     
    if __name__ == "__main__":
        key = [한국은행API 인증코드를 넣는다]
     
        # https://ecos.bok.or.kr/jsp/openapi/OpenApiController.jsp?t=guideServiceDtl&apiCode=OA-1040&menuGroup=MENU000004
        # 여기서 주소 만들면 쉽다.
        url="http://ecos.bok.or.kr/api/StatisticSearch/"+key+"/json/kr/1/1000/I02Y001/MM/201501/201805/?/?/?/"
        result = urlopen(url)
        html = result.read()
        data = json.loads(html)
        data=data["StatisticSearch"]["row"]
        produce = pd.DataFrame(data)
        produce_kr=produce[produce["ITEM_CODE1"]=="KOR"]
        # produce_kr=produce_kr.set_index("TIME")
        produce_kr["DATA_VALUE"]=produce_kr["DATA_VALUE"].astype("float")
     
        produce_kr["DATA_VALUE"].plot()
     
        produce_kr["TIME"= produce_kr["TIME"].astype("int")
     
        # produce_kr["date"] = datetime.datetime(produce_kr["TIME"].str[0:4],produce_kr["TIME"].str[4:5])
        # produce_kr["date"] = produce_kr["TIME"].apply(lambda x: datetime.datetime.strptime(x, '%Y%m'))
     
        produce_kr["TIME"= produce_kr["TIME"].astype("str")
        xlabel=produce_kr["TIME"]
        xlabel = xlabel.drop_duplicates()
     
        produce_kr=produce_kr.sort_values("TIME")
        produce_kr=produce_kr.reset_index(drop=True)
        produce_kr = produce_kr.reset_index()
     
        plt.scatter(produce_kr["index"],produce_kr["DATA_VALUE"])
        plt.plot(produce_kr["index"],produce_kr["DATA_VALUE"])
        plt.xticks(produce_kr["index"], xlabel,rotation=70)
        # 그래프에 값찍기
        # for i,j in zip(produce_kr["index"],produce_kr["DATA_VALUE"]):
        #     plt.text(i,j,str(j))
     
     
        # 소비자 물가지수
        url="http://ecos.bok.or.kr/api/StatisticSearch/"+key+"/json/kr/1/1000/I02Y002/MM/201501/201805/?/?/?/"
        result = urlopen(url)
        html = result.read()
        data = json.loads(html)
        data=data["StatisticSearch"]["row"]
        cunsumer = pd.DataFrame(data)
        cunsumer_kr=cunsumer[cunsumer["ITEM_CODE1"]=="KOR"]
        # produce_kr=produce_kr.set_index("TIME")
        cunsumer_kr["DATA_VALUE"]=cunsumer_kr["DATA_VALUE"].astype("float")
     
        cunsumer_kr=cunsumer_kr.sort_values("TIME")
        cunsumer_kr=cunsumer_kr.reset_index(drop=True)
        cunsumer_kr = cunsumer_kr.reset_index()
     
        plt.scatter(cunsumer_kr["index"], cunsumer_kr["DATA_VALUE"])
        plt.plot(cunsumer_kr["index"],cunsumer_kr["DATA_VALUE"])
    cs


    오픈API를 사용하면 다양한 재미있는 일들을 해 볼 수 있다. 파이썬을 활용한 오픈API 사용이 궁금하다면 아래 글을 참조해보자.

    (참조: 오픈API를 활용한 사례는 어떤 것들이 있을까?)