同人時刻表発行の省力化

2024年06月14日
文責: 坐(Twitter: @Kaiz_JP)
Tweet

こんにちは。名古屋市営交通時刻表 Vol.2のデータ処理を担当している、大曽根層研の坐です。 この記事では、時刻表発行に当たって行っている自動化について解説します。

自動化の必要性

従来、時刻表の発行には時刻の手打ちや行路統合など人的リソースや時間の消費が激しい作業が多く、迅速な発行の障害点となっていました。 また、人が介入することで誤植が生まれることが多々あり、精度の向上が課題となっていました。

大曽根層研では、これらの問題を解決するために、データ処理のほとんどを自動化しており、人の介入を最小限に抑えることで迅速で正確な同人時刻表発行を実現しています。

データ処理

時刻表の作成には、まず元となるデータが必要です。 例えば東京都交通局の場合、GTFS形式で非常に加工のしやすいデータが提供されています。 しかし、名古屋市交通局のデータはGTFS形式では提供されておらず、各バス停の標柱時刻表が神エクセルで提供されています。 幸い、系統・行路の一覧やその停留所並び順および各標柱の一覧に関してはCSVで提供されています。
(本音を言えば、GTFS形式なりAPIなりで提供されているとデータベース化も楽なのですが...)
と言ってもこれ以外にデータはないためこれらデータを元に、時刻表を作成していきます。

製作の主な流れは、標柱時刻のデータベース化→行路での時刻並べ→同一系統行路/併載系統行路結合→時刻表出力です。

同人時刻表の作成

標柱時刻のデータベース化

標柱時刻データは名古屋市交通局でオープンデータとして停留所名五十音順にzipファイルに梱包されたもの公開されています。 これを解凍すると、各停留所の標柱時刻表がエクセル形式で含まれています。 ファイル名の先頭に、停留所+乗降場所コードがついており、キーとして利用できます。
時刻データの読み取りは案外簡単で、Apache POIなどのライブラリを使いデータベースに保存します。 このとき、注釈の部分も保存しておくと分岐系統での時刻表作成時に便利です。

行路での時刻並べ

次に、行路での時刻並べです。 標柱の時刻表では、系統ごとに時刻が並べられています。

しかし、例えば基幹2上りであれば、引山→栄(2002), 猪高車庫→名古屋駅(2012), 四軒家→栄(2022)と3行路が含まれており、このうち引山→栄と四軒家→栄は同一の行先であり、時刻表上では判別が不可能です。

そこで、まず行先に対して行路が1つの行路に対して時刻並べを行います。 基幹2上りの場合、猪高車庫→名古屋駅の系統コード2012の行路の停留所並び順を参照し、名古屋駅行の時刻に2012というフラグを付与します。

その後、行先に対して複数行路がある系統の停留所並び順を参照し、完全内包の場合はより外方の系統から順に時刻を並べていきます。 対して基幹1のような合流系統であればまず合流手前までの時刻並べを行い、合流後は合流時刻を基準に時刻を並べていきます。 基幹2であれば、引山東→引山間の所要時間で引山→栄と四軒家→栄の判別を行います。

この判別には簡易的な推論を使用し、簡単に表現すると時間帯別に所要時間を調整し四軒家→栄の引山東の時刻数と四軒家→栄の引山の時刻数が同一になることを目標に自動調整を行っています。

これら操作で完成した引山→栄(2002)と四軒家→栄(2022)の時刻表が以下となります。
ちなみに行路別表は改正データが掲載された翌日の3/20にすべて完成するという圧倒的なスピードで処理を行っています。

同一系統行路/併載系統行路結合

行路での時刻表が作成できたらその後は行路を結合し、同一系統行路や併載系統行路を結合します。
この同一系統行路とは、例えば基幹2であれば上りの引山→栄(2002), 猪高車庫→名古屋駅(2012), 四軒家→栄(2022)のことで、 併載系統行路とは、例えば名駅24・中村14であれば、名古屋駅→大治西条(1024001), 中村公園→大治西条(2014001)のことです。

行路統合は、単純な2系統統合であるなら単純な上下の問題で簡単ですが、原12・徳重13や幹一社1のような複雑な系統だと自動で上下を決定するのは困難を極めます。 そのため、プリセット作成のための専用アプリケーションを作成し、出力する時刻表の停留所並び順を人の手で操作しています。


しかし、金山22のようなラケット型巡回と十の字型経路が重なる系統であると、現在のところ自動生成は不可能なので、手動での行路結合作業がまだ残っており次回発行までの課題となっています。

このアプリケーションでは罫線設定なども行えるようになっており、出力がほぼ完成形の時刻表となります。
かなり強引な合流でも処理が可能なため、実際に使われるかは不明ですが空港線を通る系統を全部一枚に表現することもできます。


プリセットを作成することの副次的な効果として、改正があった場合にマウスでの操作で簡単に対応できるという利点もあります。

時刻表出力

この時点で表が完成し出力が可能となります。

ラケット型巡回を行わない系統や、併載がない系統はほとんどこの時点で完成となります。 その後、ワイルドフラワーガーデンのような異様に長い名前停留所の割付や併載系統の調整などの編集や校正が行われ発行に至っています。

おわりに

同人時刻表の作成におけるデータ処理についてを紹介いたしました。

大曽根層研で発行する名古屋市営交通時刻表では、今号より行路結合を半自動化したことで時刻表の作成にかかる時間を大幅に短縮することができ、人の手による介入を極力排除したことで誤植の発生を抑えることができました。 また、これによる時刻部分の大幅な省力化によって余ったリソースを他に振り分けたことで、地下鉄・あおなみ線の掲載や正確な盛り時刻を含めた時刻の掲載も可能となりました。

今後は、組版・割付までの自動化を目指しLuaLaTeXの導入や、金山22をはじめとした未だ手動での処理が残っている行路の結合自動化、及びウェブでの縦型時刻表の公開を目標にしています。


名古屋市営交通時刻表 Vol.2はコミックマーケット104 2日目月曜 東5 パ06a 大曽根層研にて頒布予定です。皆様のご来場をお待ちしております!

名古屋市営交通時刻表 Vol.2 
令和6年3月改正版 
A5版 672ページ 
2024年7月発行 
2000円 
Tweet