정구리의 우주정복

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

PYTHON/PROJECT

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 형태로 만든걸 보면

 

짜잔 이렇게 나온다

 

누르면 이렇게 약국이름이 나온다 !

 

이제 위치정보를 받아서 하는거랑 마스크 재고가 나오는것도 만들어 볼 생각 (될진모름)

반응형
Comments