import folium
import pandas as pd
# 仮の人口移動データ
data = {
"都道府県": ["東京都", "埼玉県", "神奈川県", "千葉県", "栃木県"],
"移動人数": [5000, 3000, 2000, 1500, 1000]
}
df = pd.DataFrame(data)
# 群馬県と各都道府県の座標(簡易的に都道府県庁所在地を使用)
coords = {
"群馬県": [36.3907, 139.0604], # 前橋市(群馬県庁)
"東京都": [35.6895, 139.6917], # 東京都庁
"埼玉県": [35.8570, 139.6489], # さいたま市(埼玉県庁)
"神奈川県": [35.4475, 139.6423], # 横浜市(神奈川県庁)
"千葉県": [35.6051, 140.1233], # 千葉市(千葉県庁)
"栃木県": [36.5657, 139.8836] # 宇都宮市(栃木県庁)
}
# 群馬県の座標
gunma_coords = coords["群馬県"]
# Foliumマップの初期化(群馬県を中心)
m = folium.Map(location=gunma_coords, zoom_start=7, tiles="cartodbpositron")
# 群馬県にマーカーを追加
folium.Marker(
gunma_coords,
popup="群馬県",
icon=folium.Icon(color="red")
).add_to(m)
# 流線図の描画
max_flow = df["移動人数"].max() # 線の太さの基準
for index, row in df.iterrows():
dest_coords = coords[row["都道府県"]]
# 移動人数に応じた線の太さ(正規化)
weight = (row["移動人数"] / max_flow) * 10 # 最大10px
# 流線を描画
folium.PolyLine(
locations=[gunma_coords, dest_coords],
weight=weight,
color="blue",
opacity=0.6,
popup=f"{row['都道府県']}: {row['移動人数']}人"
).add_to(m)
# 移動先のマーカーを追加
folium.Marker(
dest_coords,
popup=row["都道府県"]
).add_to(m)
# マップをHTMLファイルとして保存
m.save("gunma_population_flow_2024_sample.html")
print("地図が 'gunma_population_flow_2024_sample.html' として保存されました。")