サイトアイコン アマチュア無線局JS2IIU

【Streamlit】地図上にデータをプロット:st.mapの基本

こんにちは、JS2IIUです。
地図を表示し、その上に何かの情報、例えばある地域の小学校の分布、交通事故の多い交差点の分布など簡単にを表示できるのがst.mapです。基本的な使い方を見ていきます。今回もよろしくお願いします。

1. はじめに

この記事では、Streamlitを使って、緯度・経度のデータを地図上に簡単に表示する方法を紹介します。
特別な地図ライブラリを使わなくても、st.mapだけで直感的にマッピングができるので、初心者にもおすすめです。

「地図上にお店の位置を表示したい」「観光地マップを作りたい」と思ったことがある方は、ぜひ参考にしてみてください!

2. st.mapとは?

st.mapは、Streamlitに用意されている地図表示用の関数です。
緯度(latitude)と経度(longitude)の情報を持ったデータを与えると、インタラクティブな地図上にポイントをプロットしてくれます。

特別な設定は必要なく、PandasのDataFrameをそのまま渡すだけでOKです!

3. 最小限のサンプルコード

まずは、最もシンプルなコードで地図を表示してみましょう。
たった数行で地図表示ができてしまいます!

Python
import streamlit as st
import pandas as pd

# 緯度・経度データを作成
data = pd.DataFrame({
    'lat': [35.6895],
    'lon': [139.6917]
})

# 地図上にデータをプロット
st.map(data)

このコードのポイント

これをStreamlitアプリとして実行すると、東京(新宿付近)が地図上にプロットされます。

4. データを複数追加してみよう

今度は、複数の地点を地図に表示してみましょう。
次のコードでは、東京・大阪・札幌の3都市をプロットします。

Python
import streamlit as st
import pandas as pd

# 複数地点のデータ
data = pd.DataFrame({
    'lat': [35.6895, 34.6937, 43.0667],
    'lon': [139.6917, 135.5023, 141.3500]
})

# 地図上にデータをプロット
st.map(data)

これを実行すると、日本全国をまたいだ複数の点が地図上に表示されます。
拡大・縮小やドラッグで、自由に地図を動かして確認することができます。

5. 自分のデータを地図に表示する

「自分で持っているCSVデータを地図に表示したい!」という場合も、Streamlitならとても簡単です。
ここでは、CSVファイルをアップロードして表示するサンプルを紹介します。

Python
import streamlit as st
import pandas as pd

# ファイルアップロード
uploaded_file = st.file_uploader("CSVファイルをアップロードしてください", type="csv")

if uploaded_file is not None:
    # CSVを読み込み
    df = pd.read_csv(uploaded_file)

    # 地図にプロット
    st.map(df)
https://js2iiu.com/wp-content/uploads/2025/04/25_03.mov

注意点

例:正しいCSVの中身

latlon
35.6895139.6917
34.6937135.5023
43.0667141.3500
Plaintext
lat,lon
35.6895,139.6917
34.6937,135.5023
43.0667,141.3500

6. 注意点・よくあるエラー

実際に使ってみると、次のようなポイントでエラーが出ることがあります。
事前にチェックしておきましょう!

7. まとめ

st.mapを使えば、たった数行でインタラクティブな地図プロットが実現できます!

まずはこの記事のサンプルを動かして、楽しく地図表示を体験してみてください!

8. 参考リンク

最後に書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。Poetryについても詳しく説明されています。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございます。

モバイルバージョンを終了