ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [데이터 분석 토이 프로젝트] 공공 데이터 API 사용법
    데이터 분석/Project 2021. 4. 27. 10:26

    공공데이터 API Call 하는 법

     

    사실 파일이 있으면 다운 받는 것이 제일 편하지만 대개 다운 받는 것은 운이 좋은 경우입니다. 대다수 Open API를 활용하여 데이터를 불러오는 경우가 많습니다. 저는 실제 open API를 활용하는 것을 연습하기 위해서 데이터 활용신청을 했습니다. 

     

    공공데이터 포털에서 데이터 사용 신청하면 마이페이지>OpenAPI>개발계정에서 활용 신청 내용을 확인할 수 있습니다.

     

     

    승인은 바로 되는 편입니다. 활용신청 승인 내역을 클릭하면 인증키를 확인할 수 있습니다.

     

     

    Json과 XML 형태의 데이터포맷 모두 사용가능합니다. 보통 JSon 타입이 XML보다 훨씬 가볍고 파싱하기 쉬우므로 JSon으로 데이터를 불러옵니다. 

     

    일반인증키는 Encoding과 Decoding이 있는데 웹 브라우저에서 바로 Call 하고 싶을 때는 Encoding 인증키를 사용하고 프로그램으로 돌리고 싶을 때는 Decoding 인증키를 사용하면 알아서 Encoding으로 데이터를 불러옵니다.

     

    데이터를 핸들링할 때 프로그래밍을 해야 하는 경우가 있는데요, 그럴 때 저는 분석용 툴인 Jupyter notebook이 아니라 Pycharm Tool을 사용하는 것을 더 선호합니다.

     


    Json 데이터 확인

     

    대파 품목코드를 의미하는 1202를 prd_cd=1202로 설정하고 1월 4일 데이터를 불러와봤습니다.

    확인해보니 1월 1일은 공휴일로 시장이 열리지 않아 데이터가 없었습니다. 

     

    Json 형태의 일부 1월 4일 하루 데이터 건수만 해도 최소 수천건에서 수만건에 달합니다.

     

    json 형태로 데이터를 확인해보니 Dict형 자료구조로 되어 있는 것을 확인하였습니다. 

     

    그러면 파이썬 프로그래밍을 통해 데이터를 가져오고 Json 파일 형태로 저장하는 건 어떻게 해야 할까요?

     

    API 호출 프로그래밍

     

    먼저 requests와 json 라이브러리를 import 합니다.

     

    여기서 date는 불러올 당일 날짜이며, prd_cd는 대파의 품목코드, limit은 한번에 불러온 데이터 건수를 의미합니다.

     

    데이터를 뽑아내기 위해서는 불러온 url의 json파일에 접근하고 한줄씩 데이터를 읽어들이면서 Key, Value에서 Key를 의미하는 윗단 구조의 response, body, items, item을 끄집어 내야합니다. 

     

    당일 불러온 데이터 건수는 len()함수를 이용해 확인할 수 있습니다.

     

    import requests
    import json
    
    # 공공데이터 API Call (농수산물 도매시장 경락가격 data)
    key='CTFUEzKcx7CIIBqAvwD%2BJ9MObIpZoglK5TtrmnaBqeaiaFS%2FDlPS2Bt%2Fq52xl%2B33kK8hAHvCMK1b7Mu77hN17w%3D%3D'
    date = '20210104'
    prd_cd="1202"
    limit = '30000'
    url=f'http://apis.data.go.kr/B552895/openapi/service/OrgPriceAuctionService/getExactProdPriceList?ServiceKey={key}&pageNo=1&numOfRows={limit}&delngDe={date}&prdlstCd={prd_cd}&_type=json'
    #parameter 서버로 넘겨주는 정보
    print(url)
    
    # 데이터불러오기
    r= requests.get(url).content#json파일에 접근
    
    jo = json.loads(r)
    item = jo['response']['body']['items']#['item']
    
    # 당일 경매 데이터 건수
    # print(len(item))

     

    불러온 데이터를 바로 분석하고 싶다면 판다스 데이터프레임으로 변환해주면 됩니다.

     

    # # 데이터프레임으로 변환
    # df = pd.DataFrame.from_dict(item, orient='columns')
    # print(df.head(10))

     

    읽어들인 데이터를 Json으로 저장해보겠습니다.

     

    if item != "":  # item이 널이 아닐때(공휴일, 휴일 등 data가 없음)
        # json으로 저장
        file_name = f'res_js{date}_{prd_cd}.json'
    
        # 파일 저장
        with open(file_name, 'w+') as f:
            f.write(json.dumps(item))
            # print(file_name, 'save success')#로그 기록 찍기`

     

    일일 데이터를 json으로 저장하고 불러와서 데이터프레임으로 변환했을 때 성공했다면 아래의 모습일 겁니다.

     

     

    반응형
Designed by Tistory.