정구리의 우주정복
Python Project 02. 공적마스크 api 를 사용해서 내 주변에서 판매하는 곳과 재고를 지도로 시각화하기 (2) 1일차 (api 분석,csv 파일 만들기) 본문
Python Project 02. 공적마스크 api 를 사용해서 내 주변에서 판매하는 곳과 재고를 지도로 시각화하기 (2) 1일차 (api 분석,csv 파일 만들기)
Jungry_ 2020. 4. 21. 00:44api 를 처음 써보기 때문에 구체적으로 분석을 해보기로 했다 !
https://www.data.go.kr/dataset/15043025/openapi.do
데이터는 여기서 다운 받았다
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 를 아예 몰랐다면 더 어려웠을수도있겠는데 조금 알아서 그런지 의외로 너무 술술 만들어져서 좀 놀랐음 (나는 평생 못할줄)
마스크 재고 확인 버전도 만들어봐야겠다 (일단 지도에 하는거부터 만들어보고)