정구리의 우주정복
Python Project 02. 공적마스크 api 를 사용해서 내 주변에서 판매하는 곳과 재고를 지도로 시각화하기 (3) 2일차 (folium 사용해서 지도 만들기 , folium MarkerCluster , 본문
Python Project 02. 공적마스크 api 를 사용해서 내 주변에서 판매하는 곳과 재고를 지도로 시각화하기 (3) 2일차 (folium 사용해서 지도 만들기 , folium MarkerCluster ,
Jungry_ 2020. 4. 21. 19:40오늘은 어제 만든 데이터셋을 지도에 표현하는걸 해보려고 했다
내가 사용한건
folium 라이브러리 !
jupyter notebook 에서 사용시 %pip install folium
terminal 에서 다운시 pip3 install folium 해주면 된다
#folium 잘 작동되나 해보기
seoul = [37.541,126.986]
m=folium.Map(location=seoul,zoom_start=10)
#이름 , 위도, 경도를 가져와주기
get_store_name_loc = drop_mask_store_info.loc[:,['name','lat','lng']]
#.loc[:,['','']] 이름으로 열 가져오기
name=[]
lat =[]
lng =[]
for i in range(len(get_store_name_loc['name'])):
#print(i)
name.append(get_store_name_loc['name'][i])
print(name[i])
lat.append(get_store_name_loc['lat'][i])
print(lat[i])
lng.append(get_store_name_loc['lng'][i])
print(lng[i])
#지도에 표시해주기 위해 MarkerCluster 을 사용해준다
#location=[위도경도],popup=이름 , icon
#marker_cluster = MarkerCluster().add_to(m)
#for i in range(len())
이 코드는 위에 2줄은 그냥 잘 동작하나 써본거고
판매처 정보에서 이름 , 위도 , 경도 를 가져오고
빈 리스트를 만들어서 for 문을 이용해 차례대로 리스트 안에 추가해 주려고 한 코드인데
계에에ㅔㅇ에ㅔ속 1754번째 실행할때 오류가 난다 대체 왜지 !!!??? 파일 안에도 아주 잘 들어가있고 다 멀쩡한데 이상하게 1754번만 저런다
심지어 get_store_name_loc['name'][1754] 이렇게 하면 이것도 오류가난다 !!!!
1753 을 넣으면 7번약국(1755번째) 이 잘 출력되는데 (정상적으로 동작)
1754 를 넣으면 오류가 나고
1755 를 넣으면 푸름약국(1756번째) 가 출력이된다 중간에서 1754번이 없어지는거임 ;; 대체 왜지 ?????
진짜 모르겠다 이거는
그래서 get_store_name_loc 자체가 잘못된건줄 알았는데 또 list() 를 이용해서 list 를 만들면 잘 출력이 된다 왜지 ?
어쨌든 출력이 되기는 하는데 세상에서 제일 찜찜해
import requests
import json
import pandas as pd
import folium
from folium.plugins import MarkerCluster
#데이터들을 csv 형태로 만들어주기
def getMaskStore():
#모든 자료들을 저장해주기 위해
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']
for j in storeInfo:
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 df_maskStoreInfo
mask_store_info = getMaskStore()
print(mask_store_info)
mask_store_info.isnull().sum()
drop_mask_store_info = mask_store_info.dropna(axis=0)
print(drop_mask_store_info.isnull().sum())
drop_mask_store_info.to_csv("mask_store_info.csv",index=False)
seoul = [37.541,126.986]
m=folium.Map(location=seoul,zoom_start=10)
#이름 , 위도, 경도를 가져와주기
get_store_name_loc = drop_mask_store_info.loc[:,['name','lat','lng']]
#.loc[:,['','']] 이름으로 열 가져오기
name=list(get_store_name_loc['name'])
lat =list(get_store_name_loc['lat'])
lng =list(get_store_name_loc['lng'])
#지도에 표시해주기 위해 MarkerCluster 을 사용해준다
#location=[위도경도],popup=이름 , icon
marker_cluster = MarkerCluster().add_to(m)
for i in range(len(name)):
folium.Marker(
location = [lat[i],lng[i]],
popup= name[i],
icon=folium.Icon(color='cadetblue',icon='ok')
).add_to(marker_cluster)
m.save('map.html')
짜잔 이렇게 일단 만들었다 map.html 형태로 만든걸 보면
짜잔 이렇게 나온다
누르면 이렇게 약국이름이 나온다 !
이제 위치정보를 받아서 하는거랑 마스크 재고가 나오는것도 만들어 볼 생각 (될진모름)