🚉

山手線は本当に「円」で繋がっているのか?GeoPandasで路線図を可視化してみた

2024/10/28に公開

山手線は実は品川から田端まで!?

都内を訪れる多くの方に馴染み深い山手線ですが、実は「環状線」としてお馴染みの山手線は、複数の路線が繋がって「円」を形成しているのです。意外なことに、山手線の正式な起点は品川駅で、終点は田端駅になっています。

どの駅がどの路線か可視化してみよう!

今回は、GeoPandasとFoliumを使って、山手線、東北線、東海道線を含む鉄道データを地図上にマッピングしてみました。

路線ごとに色分けされており、黄緑が山手線、水色が東北線、オレンジが東海道線です。このように、3つの路線が繋がって環状運転を実現しているのです!

詳しく見たい方は、こちらのリンクから地図をご覧いただけます。

山手線の環状路線地図

コード

環境構築はこちらの記事を参照してください。
https://zenn.dev/yamadamadamada/articles/1ad8a918c9466f

import folium
import geopandas as gpd

# ファイルの読み込み
gdf_route = gpd.read_file('./data/N02-20_RailroadSection.shp', encoding='shift-jis')
gdf_station = gpd.read_file('./data/N02-20_Station.geojson', encoding='shift-jis')

# フィルタリング
gdf_route = gdf_route[
    ((gdf_route['N02_003'] == '山手線') | (gdf_route['N02_003'] == '東北線') | (gdf_route['N02_003'] == '東海道線')) & 
    (gdf_route['N02_004'] == '東日本旅客鉄道')
]
gdf_station = gdf_station[
    ((gdf_station['N02_003'] == '山手線') | 
     (gdf_station['N02_003'] == '東北線') | 
     (gdf_station['N02_003'] == '東海道線')) & 
    (gdf_station['N02_004'] == '東日本旅客鉄道')
]
# 駅名の重複を除去(最初のデータを保持)
gdf_station = gdf_station.loc[~gdf_station['N02_005'].duplicated(keep='first')]


# 地図情報
m = folium.Map(location=[35.689, 139.692], tiles="cartodb positron", zoom_start=11)

def get_line_color(line_name):
    if line_name == '山手線':
        return '#80C342'# 黄緑
    elif line_name == '東北線':
        return '#00B2E5'# 水色
    return '#F68B1E'# 東海道線はオレンジ

# 路線の描画
for i, row in gdf_route.iterrows():
    line_color = get_line_color(row['N02_003'])
    sim_geo = gpd.GeoSeries(row['geometry']).simplify(tolerance=0.1)
    geo_j = folium.GeoJson(
        data=sim_geo.__geo_interface__,
        style_function=lambda x, color=line_color: {
            'color': color,
            'weight': 8,
            'opacity': 0.8
        }
    )
    geo_j.add_to(m)

def get_fill_color(line_name):
    if line_name == '山手線':
        return 'green'
    elif line_name == '東北線':
        return 'lightblue'
    return 'yellow' 


# 駅をプロット
for idx, row in gdf_station.iterrows():
    point = row.geometry.centroid
    fill_color = get_fill_color(row['N02_003'])
    folium.CircleMarker(
        location=[point.y, point.x],
        radius=6,
        tooltip=row['N02_005'],# 駅名
        color='white',  # 円の枠線の色
        fill=True,
        fill_color=fill_color,
        fill_opacity=0.7,
        weight=1
    ).add_to(m)

m
# HTMLファイルとして保存
# m.save('yamanote_stations_map.html')

【おまけ】乗車人数ベスト100を可視化

山手線、東北線、東海道線の乗車人数トップ100の駅も地図上に可視化しました。

やはり山手線の駅がランキング上位に集中していることがわかります。一位の新宿駅は1日で65万人もの利用者がいるそうです。驚きですね!

さらに詳しく確認したい方は、以下のリンクからご覧ください。
乗車人数トップ100地図リンク

使用データ

路線と駅の情報
https://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html

各駅乗車人数ベスト100
https://www.jreast.co.jp/passenger/

Discussion