정구리의 우주정복

Python Project 02. 공적마스크 api 를 사용해서 내 주변에서 판매하는 곳과 재고를 지도로 시각화하기 (2) 1일차 (api 분석,csv 파일 만들기) 본문

PYTHON/PROJECT

Python Project 02. 공적마스크 api 를 사용해서 내 주변에서 판매하는 곳과 재고를 지도로 시각화하기 (2) 1일차 (api 분석,csv 파일 만들기)

Jungry_ 2020. 4. 21. 00:44
반응형

api 를 처음 써보기 때문에 구체적으로 분석을 해보기로 했다 !

 

https://www.data.go.kr/dataset/15043025/openapi.do

 

공공데이터포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다.

www.data.go.kr

 

데이터는 여기서 다운 받았다 

 

Link URL 에 있는걸 쭈루룩 긁어서 쓰면 되는 형태인가부다 

뭐가 뭔지 몰라서 참고문서를 다운받아서 봤다.

 

안에 있는 친구들이 어떤 내용을 담고 있는지가 적혀있었다 참고문서 안에 참고문서가 또 있어서 봤는데 

 

짜잔 이렇게 있어서 이게 뭔가 했더니

 

https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/sales/json?page=1

Url 이 이런 형식으로 생겼는데  맨 뒤에 sales/json 이 자리에 들어가는 거에 따라서 안에 들어있는 자료들이 바뀌나보다 그리고 page 에 따라서 다음 페이지로 넘어가게 되는듯 

 

각 URL 에 따라서 어떤 기능들이 있는지 자세하게 써져있다 . 

 

JSON 파일 내부를 보면(stores/json) 

 

요로코롬 판매처에 대한 정보가 있다 

 

딕셔너리 형태로 되어있고 storeInfos 는 값이 리스트 형태로 되어있다 

 

총 54페이지 , 26763 개의 약국 정보가 있었다 .

 

내가 우선 해준건 저 json 에서 내가 필요한 약국들의 정보만을 가져와서 새로운 csv 파일을 만들려고 했다 (왜냐면 folium 을 사용하려면 필요해서)

 

오늘 만든 코드 (설명은 주석으로 대체하겠다)

import requests
import json
import pandas as pd

#데이터들을 csv 형태로 만들어주기  
def getMaskStore():
    #total_page 를 가져오기 위해
    url = 'https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/stores/json?page=1'
    req = requests.get(url)
    total_page = req.json()['totalPages']
     
    #약국정보에 대해서 가져올 부분
    addr = [] #주소
    code = [] #식별코드
    latitude = [] #위도
    longitude = [] #경도
    name = [] #이름 
    types = [] #판매처 유형
    
    for i in range(1,total_page+1): #totalpage 가 54이기 때문에 +1 을 해줘야한다
        url = 'https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/stores/json?page='+str(i)#각 페이지들 불러오기 
        req = requests.get(url)
        storeInfo = req.json()['storeInfos'] #json 안의 store정보 가져오기 
        for j in storeInfo: #아까 만든거 안에 append 해준다
            addr.append(j['addr'])
            code.append(j['code'])
            latitude.append(j['lat']) 
            longitude.append(j['lng'])
            name.append(j['name'])
            types.append(j['type'])
    
    #넣어준걸로 데이터 프레임 만들어주기 
    df_maskStoreInfo=pd.DataFrame({'addr':addr,
                                      "code":code,'lat':latitude,'lng':longitude,
                                      'name':name,'type':types})
    
    #return
    return df_maskStoreInfo
    
mask_store_info = getMaskStore()
#print(mask_store_info) 없어도됨 (잘만들어졌나 확인용)

mask_store_info.isnull().sum() #안에 NaN (결측치) 가 있나 확인하는 용도 (위도,경도에 5개가 있었음)
drop_mask_store_info = mask_store_info.dropna(axis=0) #drop_mask 에 결측치를 제거한 df를 저장
print(drop_mask_store_info.isnull().sum()) #잘 제거가 되었나 확인해보기 (생략가능)
drop_mask_store_info.to_csv("mask_store_info.csv",index=False) #파일을 csv 파일로 만들어주기 !

 

 

짜잔 이렇게 만들어봤다 

 

json 파일을 처음 다뤄보는데 각 요소들에 대한 설명이 다 제공되어서 그런지 되게 이해하기도 쉽고 , 파이썬을 사용하니까 다루기도 쉽다.

pandas 를 아예 몰랐다면 더 어려웠을수도있겠는데 조금 알아서 그런지 의외로 너무 술술 만들어져서 좀 놀랐음 (나는 평생 못할줄)

마스크 재고 확인 버전도 만들어봐야겠다 (일단 지도에 하는거부터 만들어보고)

 

반응형
Comments