時刻表を手入力するのか

 したくない。

 交通新聞社が発行している「東京時刻表2023」が手元にあるが、これを全て人力で入力するとは、想像するだけで恐ろしい。
 スキャンができないかと色々試したが、精度や効率の点でどれも今一つだった。特に時刻表の紙は辞書などと同じような質感で薄い。薄いから手荒にはスキャンを掛けられないし、裏写り(裏移り)が激しい。もちろん人間がそれを読む分には問題ないのだが、機械は上手く読み取らなかった。
 諦めて部員を総動員させる手もあるが、地理倶楽部はあくまで楽しくやるサークルだ。だから設立時には「地理学+研究会」ではなく「地理+倶楽部」にした。部費も徴収していない。金銭が一切生じていないサークルではその作戦は不可能だ。

作業軽量案1:時と分を分けて手入力

 駅ごとの時刻表をみると、表の左端に「5,6,7, …」と時(hour)が記されていて、その右に分(minute)が記されている。行の共通部分である時の単位を省略できれば、かなり作業量は減る。最後に関数で「=$A$3&B1」と書いて、オートフィルしてしまえば良い。下図は銀座線浅草方面の渋谷駅の時刻表で試したものだ。

これだけでも十分に体力を消耗した

却下。

作業軽量案2:ウェブスクレイピング

 これは最強だが、前回の記事に書いた通り、グレーな部分がある。また、バーチカルな時刻表を掲載してくれているのはJRくらいなので、仮に他の路線会社のサイトをウェブスクレイピングしても、最後には時と分を繋げる作業が必要になる。

作業軽量案3:コピペ

 これが一番ダサい。しかし、速い。もちろんコピペだけだと問題がある。

銀座線 浅草方面 渋谷駅の時刻表
(https://www.tokyometro.jp/station/shibuya/timetable/ginza/b/index.html 参照)

 先ほどと同様に銀座線浅草方面 渋谷駅を例に挙げるが、所により「▲」「上」などの記号が付いている。画像下部の凡例からも分かるが、前者は浅草1番線着を、後者は浅草より手前の上野が終点である(上野行である)ことを表している。
 コピペすれば当然そうした情報も付いてしまうが、逆に無くても困る。例えば東京都港区の白金高輪駅では、東京メトロ南北線と都営三田線が乗り入れているから、同じ白金高輪駅発でも目的地がバラバラだ。

南北線 赤羽岩淵・浦和美園方面 白金高輪駅の時刻表
https://www.tokyometro.jp/station/shirokane-takanawa/timetable/namboku/a/index.html 参照)

 つまり、時刻のセルと、方面のセルと、分ければいい。最終的に今日完成したのが以下のやり方だ。なお貼付けはすべて「プレーンテキストとして」。また過程に記した関数はChatGPTから得た。

1)サイト上からコピー&ペースト
2)右の列で「=IF(ISNUMBER(SEARCH("終", B3)), "F", "")」などと関数を入力。ここでいうB3は対象となるセルであり、"終"と"F"は任意となる。
3)表全体を隣の列へコピー&ペースト。
4)特定の記号を置換。「検索語の文字列」に「終」、「置換後の文字列」を空欄にすると「終」の文字は消える。消したいセルの範囲を選択しておくことを勧める。

上記手順の諸注意

 置換した結果、「02」などを文字列として扱っていたセルは「2」となってしまった。これについてもChatGPTに聞いてみたところ、書式設定を「ユーザー定義」で「00」にすれば良いそう。私の場合、初期設定で「[<=999]000;[<=9999]000-00;000-0000」と設定があったが、それを消して「00」とした。今のところトラブルは起きていない。

今日はフォーマットだけ完成。

 これを駅ごとに繰り返して、データを並べる。最後に急行や行先などを参考に整列させれば完成するだろう。

 今日中には終わらなかったが、メソッドが決まれば作業は割と楽だ。私の不手際か、if関数は上手くいく場合と文字列として認識される場合とがあった。成功したセルからコピー&ペーストすれば大概治る。

この記事が気に入ったらサポートをしてみませんか?