時刻表を手入力するのか
したくない。
交通新聞社が発行している「東京時刻表2023」が手元にあるが、これを全て人力で入力するとは、想像するだけで恐ろしい。
スキャンができないかと色々試したが、精度や効率の点でどれも今一つだった。特に時刻表の紙は辞書などと同じような質感で薄い。薄いから手荒にはスキャンを掛けられないし、裏写り(裏移り)が激しい。もちろん人間がそれを読む分には問題ないのだが、機械は上手く読み取らなかった。
諦めて部員を総動員させる手もあるが、地理倶楽部はあくまで楽しくやるサークルだ。だから設立時には「地理学+研究会」ではなく「地理+倶楽部」にした。部費も徴収していない。金銭が一切生じていないサークルではその作戦は不可能だ。
作業軽量案1:時と分を分けて手入力
駅ごとの時刻表をみると、表の左端に「5,6,7, …」と時(hour)が記されていて、その右に分(minute)が記されている。行の共通部分である時の単位を省略できれば、かなり作業量は減る。最後に関数で「=$A$3&B1」と書いて、オートフィルしてしまえば良い。下図は銀座線浅草方面の渋谷駅の時刻表で試したものだ。
![](https://assets.st-note.com/img/1701612871690-PxaUmhbSle.png?width=1200)
却下。
作業軽量案2:ウェブスクレイピング
これは最強だが、前回の記事に書いた通り、グレーな部分がある。また、バーチカルな時刻表を掲載してくれているのはJRくらいなので、仮に他の路線会社のサイトをウェブスクレイピングしても、最後には時と分を繋げる作業が必要になる。
作業軽量案3:コピペ
これが一番ダサい。しかし、速い。もちろんコピペだけだと問題がある。
![](https://assets.st-note.com/img/1701614226236-N8zTKOZGoQ.png?width=1200)
(https://www.tokyometro.jp/station/shibuya/timetable/ginza/b/index.html 参照)
先ほどと同様に銀座線浅草方面 渋谷駅を例に挙げるが、所により「▲」「上」などの記号が付いている。画像下部の凡例からも分かるが、前者は浅草1番線着を、後者は浅草より手前の上野が終点である(上野行である)ことを表している。
コピペすれば当然そうした情報も付いてしまうが、逆に無くても困る。例えば東京都港区の白金高輪駅では、東京メトロ南北線と都営三田線が乗り入れているから、同じ白金高輪駅発でも目的地がバラバラだ。
![](https://assets.st-note.com/img/1701614089734-q8Rz2GOifh.png?width=1200)
(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関数は上手くいく場合と文字列として認識される場合とがあった。成功したセルからコピー&ペーストすれば大概治る。
この記事が気に入ったらサポートをしてみませんか?