← 地図へ戻る

設計図 — どう作り、何を確かめたか

1. 何を測ったら作れると判断したか

実装仕様書は、漁港の位置を「海しる API」から、漁業統計を「e-Stat API」から取る前提だった。 どちらも認証キーが要る。キー無しで実際に叩いたところ、海しるは 404、e-Stat は 「認証に失敗しました」を返した。そこで仕様書の前提を実測で置き換えている。

2. PDF をどう読んだか

明細 PDF は横罫の無い表である。表抽出にかけると、列ごとに全行を改行で連結した 「1 行の表」が返り、疎な列(分区・海岸保全区域)は空セルが落ちて行と対応しなくなる。 そこで表抽出は使わず、罫線の座標から列境界を取り、文字を 1 字ずつ列へ割り当てた

語単位ではうまくいかない。隣り合う列のあいだに空白が無いので、1110050斜内 のように列をまたいだ 1 語ができる (秋田県の PDF で漁港番号が 1 件も取れなかった)。文字単位なら、各文字の x で列が一意に決まる。

行高も一定ではなかった。北海道の「内路」は漁協が 2 つ(香深・船泊)で 2 行になり、 漁港番号はその 2 行のあいだに置かれている。等間隔でバンドを切ると 番号が 2 つ入る行ができる。隣り合う番号行の中点を境界にして解決した。

3. 何を正解として突き合わせたか

明細から作った表を、明細を数えた値で検査しても何も分からない。明細とは別の 2 枚の文書を正解に使っている。

照合したのは 4 系統で、すべて一致した。

  1. 総数 2,768
  2. 種別内訳(第1種 2,031 ほか)
  3. 都道府県 40 件それぞれの港数・種別内訳・管理者内訳
  4. 特定第3種の港名の集合

3 番目は、明細の「漁港管理者」欄の文字列から 「都道府県が管理者か市町村か」を導いて突き合わせている。導出規則そのものを 外部の数が検算している形になる。

4. 通説がひとつ壊れた

都道府県別集計の「第3種」列は 114 で、総括表の第3種 101 と合わない。 実測すると 101 + 特定第3種 13 = 114 で、都道府県別表の第3種は特定第3種を含んでいる。 実装仕様書の種別表にはこの注意が無い。照合を書くときに気づいた。

5. 座標をどこまで信じるか

マスタは令和8年、座標は平成18年である。番号が一致しても、20 年のあいだに 統廃合・改称で別の港に振り替わっていることがある。実測すると、番号が一致した 2,676 港のうち 68 港は港名が違った。そこで突合を段階に分け、 港ごとにどの段階で座標が付いたかを残している(詳細画面の「座標」欄)。

国土数値情報の側も内側で整合していない。漁港番号が重複する 30 コードがあり、 重複行では港名・管理者・指定年月日が別の港のものに置き換わっている (1410690「宇島」が福岡県豊前市と宮城県石巻市の 2 点を持つ)。 重複コードは、市区町村コードの上 2 桁が都道府県と一致する候補が ちょうど 1 つのときだけ採っている。

区域線から重心を取る最後の段階には、同じ県の既知座標の外接矩形という ガードを置いた。飾りではない —— 石川県「中島」(2410125)の区域線が 35.611N/134.467E(石川県の外ではるか西)を指しており、このガードが実際に落とした。

結果、座標が付いたのは 2,721 港 (98.30%)である。残りは座標なしと明示して一覧から辿れるようにした。 うち 20 港は滋賀県で、国土数値情報の平成18年度版は滋賀県の漁港を 1 件も含まない。

6. 欠損を 0 で埋めない

値が無い欄は null にし、なぜ無いかをobserved / estimated / suppressed /not_available / not_applicable /missing_source の語彙で区別している。 画面では「データなし」「対象外」「未取得」と出し分ける。 0 と書けば、読み手はそこに 0 があったと受け取る。

7. その後に足したもの

実装仕様書が想定した AI(魚種構成や水揚げ時系列の Autoencoder・予測)は、 港別の水揚げ・魚種が公開されていないので作っていない。