LoginSignup
1
3

【Geopandas】国土交通省の鉄道データを解析する

Last updated at Posted at 2023-11-03

はじめに

友人たちとの新宿集まりが千葉県民には遠い...
そこで、鉄道データの解析に着手しました。国土地理院のオープンデータを活用し、全員の最寄駅から等距離の駅を探すために、GeoPandasの学習を進めています。

現在、中間駅の最適な算出方法はまだ見つかっていませんが、しばらく時間が取れなくなりそうなので一旦途中経過を共有させていただきます。

また、紹介するコードは以下のサイトを参考にさせていただきました。

本記事からわかること

  • gisデータの簡単な扱い方がわかる
  • 駅と路線を日本地図上に描画することができる。

環境

  • google colab

今回使ったデータ

ライブラリインストール

!pip install -U japanmap

インポート

import geopandas as gpd
import matplotlib.pyplot as plt
from shapely.geometry import Point, Polygon
from japanmap import pref_names, get_data, pref_points

shpファイルを読み込む

あらかじめ、国土交通省の鉄道データをダウンロードしてください。
国土交通省の鉄道データをどこに配置するかや各ファイルをどのように管理するかはお任せします。

root_dir_path = {YOUR_DEVELOPEMENT_PATH}

# 入力ファイル
# 対象のshpファイルはエンコードがshiftjisの物を使用
LINESECTION_PATH = f"{root_dir_path}/linesection_geodata_shiftjis/N02-22_RailroadSection.shp"
STATION_PATH = f"{root_dir_path}/station_geodata_shiftjis/N02-22_Station.shp"
    
# shpファイル読込
gdf_linesection = gpd.read_file(LINESECTION_PATH, encoding="cp932")
gdf_station = gpd.read_file(STATION_PATH, encoding="cp932")

取得したデータはこんな感じ

  • 路線データ
gdf_linesection.head()

スクリーンショット 2023-11-02 17.37.41.png

  • 駅データ
gdf_station.head()

スクリーンショット 2023-11-02 17.38.18.png

路線データのプロット

fig, ax = plt.subplots(1, 1, figsize=(8, 8))

pref_poly = [Polygon(points) for points in pref_points(get_data())]
gdf_pref = gpd.GeoDataFrame(crs = 'epsg:4612', geometry=pref_poly)
gdf_pref['prefecture'] = pref_names[1:]

gdf_pref.plot(ax = ax, color = 'gray')

gdf_linesection_trans = gdf_linesection[["N02_001", "N02_003", "geometry"]]
gdf_linesection_trans = gdf_linesection_trans.rename(columns={"N02_001": "路線コード", "N02_003": "路線名"})
gdf_linesection_trans.plot(ax = ax, color = 'blue')

スクリーンショット 2023-11-03 10.57.22.png

駅データのプロット

fig, ax = plt.subplots(1, 1, figsize=(8, 8))

pref_poly = [Polygon(points) for points in pref_points(get_data())]
gdf_pref = gpd.GeoDataFrame(crs = 'epsg:4612', geometry=pref_poly)
gdf_pref['prefecture'] = pref_names[1:]

gdf_pref.plot(ax = ax, color = 'gray')

gdf_station_trans = gdf_station[["N02_005", "N02_005g", "geometry"]]
gdf_station_trans = gdf_station_trans.rename(columns={"N02_005": "駅名", "N02_005g": "駅コード"})
gdf_station_trans.plot(ax = ax, color = 'blue')

スクリーンショット 2023-11-03 10.57.51.png

まとめ

参考サイトをもとにとりあえずデータを日本地図にプロットするところまではできました。
目標である、等距離の中間駅を算出するために全ての駅間の距離を算出できたらいいなと思ったんですが、なかなか手こずっています。

案としては、路線が通る座標から隣接する2駅の座標を特定し、その2駅間の座標から距離を算出。。。とかできたらいいなとは思っています。

今後進捗があれば更新します。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3