はじめに
私は旅行が大好きなのでよくGoogleMapを見ます。Mapに写真もたくさん投稿しています。StreamlitにMap機能があるので何かできないかと考えてみました。とりあえず簡単な都道府県庁の位置をプロットするプログラムを作ってみました。
なにができるの?
Streamlitを使って、地図上に簡単にスポットをプロットすることができます。
ドキュメントには pydeck_chart
のラッパーと書かれているので、散布図なども書けるようです。
まずは設定(データの準備)
「都道府県庁所在地 緯度経度データ10進数/60進数での座標」から都道府県庁所在地の緯度・経度のデータを取得します。列名は「lat(latitude)」と「lon(longitude)」とする必要があります。緯度と経度以外のデータが含まれていても無視されます。緯度と経度は10進数で指定します。
60進数(例えば北緯43度03分51秒)の場合は、43 + 3/60 + 51/60/60 → で 43.0641666666となります。割り切れない場合は、小数点第5位まででいいのではないかと思います。
lat | lon | |
沖縄県 | 26.2125 | 127.68111 |
鹿児島県 | 31.56028 | 130.55806 |
宮崎県 | 31.91111 | 131.42389 |
長崎県 | 32.74472 | 129.87361 |
熊本県 | 32.78972 | 130.74167 |
大分県 | 33.23806 | 131.6125 |
佐賀県 | 33.24944 | 130.29889 |
高知県 | 33.55972 | 133.53111 |
福岡県 | 33.60639 | 130.41806 |
愛媛県 | 33.84167 | 132.76611 |
徳島県 | 34.06583 | 134.55944 |
山口県 | 34.18583 | 131.47139 |
和歌山県 | 34.22611 | 135.1675 |
香川県 | 34.34028 | 134.04333 |
広島県 | 34.39639 | 132.45944 |
岡山県 | 34.66167 | 133.935 |
奈良県 | 34.68528 | 135.83278 |
大阪府 | 34.68639 | 135.52 |
兵庫県 | 34.69139 | 135.18306 |
三重県 | 34.73028 | 136.50861 |
静岡県 | 34.97694 | 138.38306 |
滋賀県 | 35.00444 | 135.86833 |
京都府 | 35.02139 | 135.75556 |
愛知県 | 35.18028 | 136.90667 |
岐阜県 | 35.39111 | 136.72222 |
神奈川県 | 35.44778 | 139.6425 |
島根県 | 35.47222 | 133.05056 |
鳥取県 | 35.50361 | 134.23833 |
千葉県 | 35.60472 | 140.12333 |
山梨県 | 35.66389 | 138.56833 |
東京都 | 35.68944 | 139.69167 |
埼玉県 | 35.85694 | 139.64889 |
福井県 | 36.06528 | 136.22194 |
茨城県 | 36.34139 | 140.44667 |
群馬県 | 36.39111 | 139.06083 |
栃木県 | 36.56583 | 139.88361 |
石川県 | 36.59444 | 136.62556 |
長野県 | 36.65139 | 138.18111 |
富山県 | 36.69528 | 137.21139 |
福島県 | 37.75 | 140.46778 |
新潟県 | 37.90222 | 139.02361 |
山形県 | 38.24056 | 140.36333 |
宮城県 | 38.26889 | 140.87194 |
岩手県 | 39.70361 | 141.1525 |
秋田県 | 39.71861 | 140.1025 |
青森県 | 40.82444 | 140.74 |
北海道 | 43.06417 | 141.34694 |
サンプルプログラムを作成してみる(地図に場所を表示)
データが準備出来れば、あとは簡単です。これだけです。
コードサンプル
import streamit as st
st.title('都道府県庁所在地')
df = pd.read_csv('pref.csv')
st.map(df, use_container_width=True)
パラメータ
パラメータ | 値、意味 |
データ | データフレーム、ndarray、Iterable、ディクショナリが対応可能です。 |
zoom | 地図の表示範囲。指定なしの場合プロットが入る範囲だと思われます。1だと世界地図になります。 |
use_container_width | 初期値:True。グラフの幅を列の幅に設定するかどうか |
画面サンプル
都道府県庁所在地が赤の点でプロットされます。
おわりに
簡単に場所をプロットすることができるので、画面上で建物や観光地、お店などを選ぶと地図にその場所を表示するなど、工夫次第で応用が効きそうです。
GoogleMapで出来るので問題はないのですが、将来的に、地図から多種多様の情報に飛べたら便利だと思っています。
地理の勉強など視覚的にできれば、より楽しく分かりやすくなるような気がします。
st.mapはpydeck_chartのラッパーのようです。マップ上に散布図チャートを作成できるようです。streamlit hello
で起動するサンプルにもありますので確認してみてください。
streamlit-foliumというライブラリがあるようなので、そちらも調べてみたいと思います。
コメント