コンテンツにスキップ

第4章 地図の表示

熊本の医療機関を種類毎に地図に表示します。 foliumをstreamlitで使用するにはstreamlit-foliumを使用します。

まず、st_map.py ファイルにタイトルとセレクトボックスを配置します。

import streamlit as st
import folium
from folium.plugins import MarkerCluster
from streamlit_folium import folium_static

st.title('熊本医療機関')

sel = st.selectbox("種類", ["内科", "外科", "小児科"])

地図をmapオブジェクトに作ります。

map = folium.Map(location=[32.8032, 130.7080],zoom_start = 15) 

pandasでデータを読み込みます。

import pandas as pd
df = pd.read_csv("122542.csv")

dfから一行ずつ取り出して処理します。診療科目は ; で区切られているので分割し、選択された種類があるかどうかを調べ、あるようならマーカーを配置しています。

marker_cluster = MarkerCluster()

for index, row in df.iterrows():
    types = str(row['診療科目']).split(';')

    if sel in types:
        lat = row['緯度']
        lng = row['経度']
        width = len(row['名称'])
        popup = f'<div style="width:{width}em">{row["名称"]}</div>'
        marker = folium.Marker([lat, lng], popup=popup)
        marker.add_to(marker_cluster)

marker_cluster.add_to(map)

最後にfolium_static関数で地図を表示してみます。

folium_static(map)