Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【乗り鉄】元駅員が運賃計算プログラムを作ってみた話
Search
MIERUNE
PRO
October 31, 2023
0
1.9k
【乗り鉄】元駅員が運賃計算プログラムを作ってみた話
MIERUNE
PRO
October 31, 2023
Tweet
Share
More Decks by MIERUNE
See All by MIERUNE
連続的な到達圏を表示する QGISプラグインを作ってみた
mierune
PRO
0
720
Facade Patternで磨く、コードの可読性と分解力 / MIERUNE BBQ #13
mierune
PRO
0
510
ハザードマップゲームの作り方〜ハザード情報をゲームのパラメーターに落とし込む〜 / FOSS4G 2024 Japan
mierune
PRO
0
790
MIERUNEとQGIS、そしてQGIS事業のご紹介 / FOSS4G 2024 Japan
mierune
PRO
0
740
QGISで実現するもっと分かりやすい森林ゾーニング / FOSS4G 2024 Japan
mierune
PRO
0
840
君はこの色の違いを見ることができるか / MIERUNE BBQ #12
mierune
PRO
0
610
クーダでハニワ / MIERUNE BBQ #12
mierune
PRO
0
560
位置情報とオープンソースがやりたくてMIERUNEに転職した話 〜経歴、事例紹介、GISへのいざない〜 / MIERUNE JCT - Tokyo 2024
mierune
PRO
0
1.7k
クロージング / MIERUNE JCT - Tokyo 2024
mierune
PRO
0
1.3k
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
250
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
60
37k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
190
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
340
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
510
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
65
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
850
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Paper Plane (Part 1)
katiecoart
PRO
0
1.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
980
Transcript
【乗り鉄】元駅員が運賃計算 プログラムを作ってみた話 Yuen
©OpenStreetMap contributors 01 使った技術 02 JRの運賃制度 03 今回使ったコード 04 今後の予定 目次
©OpenStreetMap contributors 01 使った技術
© 地理院地図 全国最新写真(シームレス) 位置情報の会社ですが、 今回は位置情報を使いません
©Project PLATEAU / MLIT Japan 技術 •Python •networkx •運賃と営業距離についてはデータがないので、昔お下がりでいただい た時刻表を元に手入力しました
使った技術
©OpenStreetMap contributors 02 JRの運賃制度について
©Project PLATEAU / MLIT Japan 運賃制度 •当たり前ですが、距離に応じて、長く乗れば長く乗るほど高いです JRの運賃制度について 都会は駅が多いから適当でいいや
©Project PLATEAU / MLIT Japan 運賃制度 JRの運賃制度について 田舎の電車は誰も乗ってな いから、運賃を高くしたい 北海道は除雪費用がかかるから、
運賃を高くしたい
©Project PLATEAU / MLIT Japan 運賃制度 JRの運賃制度について •稚内-豊富(43.5km) 1,130円 •室蘭-白老(43.4km) 970円 •大阪-山科(48.3km) 860円
©OpenStreetMap contributors 03 運賃計算のプログラム化
©Project PLATEAU / MLIT Japan 運賃制度 •経路の計算もかなり複雑です 経路計算は複雑です
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算 •経路計算のロジックとネットワークをシステムに導入する方法 ◦ 経路をシステムに導入する際に使ったのはネットワーク解析用ラ
イブラリのnetworkx
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算 •networkxというライブラリでは点(Node)を線(Edge)で繋ぐこと で多数の点と線で構成されたネットワークを作成している
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算 •Nodeではメタデータ(例:山手線内、札幌市内など)を持たせており、 Edgeにはメタデータ(例:路線名)と重みつけ(今回では距離)の属性 を付与しました
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算 •路線の読み込みではひたすら紙の時刻表から駅名・路線名と駅間距離 をCSVファイルに移し、その後Networkxで駅の情報をNode、路線 情報をEdge形式で読み込みました
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算 •そしてNetworkxでは読み込んだ駅と営業距離でひたすら最短距離 を計算しようとしていた dist
= nx.shortest_path_length(G, source=start, target=dest, weight="weight")
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算 •駅と駅の間の最短距離を取得して、それとJRの運賃表と照合すること で、「駅と駅の距離を単純に計算した場合の運賃」を取得できました
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算 •ネックになった「品川 - 熱海」
©Project PLATEAU / MLIT Japan 運賃制度 経路の計算 •結果的には条件分岐を改める形になってしまいました •具体的にはまずは「特定都区市内」の駅に入っているか判断し →
基準 駅で距離を計算 → 距離が200km (100km)を超えていない場合、 再度入力された駅で計算することに
©OpenStreetMap contributors 04 今後の予定
©Project PLATEAU / MLIT Japan 今後 今後の予定 •networkxがデフォルトで提供している方法を使えば、経路を指定し ての検索もできます •しかし、時間が足りないので、大都市近郊区間についての開発ができ
ませんでした •そして、実は今対応しているのは東海道本線と山陽本線だけです、、、
©Project PLATEAU / MLIT Japan 今後 今後の予定 •今後はいつか時間があれば対応している路線数を増やしてAPI化した いと思っています(やるとは言ってない) •JR北海道・四国・九州の路線の割増運賃制度なども今後は駅(路線)に
メタデータを実装させて持たせたいです
© 地理院地図 全国最新写真(シームレス) 乞うご期待