弊社では、地理空間データの分析および可視化のためのサービスとしてLLocoを提供しています。
私はこのサービスの中で、「郵便番号」と「町丁目境界データ」を住所でマッチングさせたデータセットの開発を主に担当しています。
本記事ではその中で特に大変だった、住所の「名寄せ」について前中後編に分けて紹介します。
中編では、実際に名寄せが必要となった中でもまだ自動処理に対応できる「部分一致」のパターンを紹介します。住所データを扱うエンジニアの参考になれば幸いです。
名寄せの分類1: 部分一致
郵便番号単位の住所とe-Stat境界データの住所における名寄せには大きな分類として2種類あり、こちらで手を加えることで共通の住所として自動処理可能な「部分一致」と、明示的にマッチングを指定し手動で結びつける「特例処理」に分けられます。今回はその前者であり、[前編]で示したパターンの多くは、こちらに該当します。
「部分一致」の中身としては、「丁目、大字がつくもの」、および「前方一致となるもの」が含まれますが、それらにもさらに細かい分類ができるため、今回は5つの小分類として説明していきます。
①「丁目」-1
郵便番号 | 郵便番号での地名 | 境界データでの地名 |
---|---|---|
169-0072 | 東京都新宿区大久保 | 東京都新宿区大久保一丁目 |
東京都新宿区大久保二丁目 | ||
東京都新宿区大久保三丁目 |
境界データではついている「丁目」が郵便番号にはなく、複数該当している例です。境界データの「○丁目」を取り除けば郵便番号と一致し、名寄せが達成されます。しかし、全部の地名に対してこれを適用すると下記の例に引っ掛かります
②「丁目」-2
郵便番号 | 郵便番号での地名 | 境界データでの地名 |
---|---|---|
105-0014 | 東京都港区芝(1〜3丁目) | 東京都港区芝一丁目 |
東京都港区芝二丁目 | ||
東京都港区芝三丁目 | ||
108-0014 | 東京都港区芝(4、5丁目) | 東京都港区芝四丁目 |
東京都港区芝五丁目 |
郵便番号が複数の丁目で分けられている例です。ここで境界データの丁目を省くと郵便番号のどちらとマッチさせれば良いかわからなくなるため、郵便番号の(1〜3丁目)の方を「1丁目」「2丁目」「3丁目」のように分解する必要があります。
また、e-Statで公開されている境界データ内の住所は、2015年版では「1丁目」と全角数字表記ですが、2020年国勢調査版では「一丁目」のように漢数字表記になっているためそちらにも注意が必要です。
上記の例では、郵便番号と境界データのマッチング実現のために、漢数字と全角数字の対応表を用いる必要があります。
③「大字」-1
郵便番号 | 郵便番号での地名 | 境界データでの地名 |
---|---|---|
351-0004 | 埼玉県朝霞市根岸 | 埼玉県朝霞市大字根岸 |
郵便番号 | 郵便番号での地名 | 境界データでの地名 |
---|---|---|
031-0114 | 青森県八戸市南郷中野 | 青森県八戸市南郷大字中野 |
郵便番号での地名にはない「大字」が境界データの最初あるいは途中に存在する例です。境界データ中の「大字」を事前に消してしまえばうまくマッチできそうですが……?
④「丁目」-3、「大字」-2
郵便番号 | 郵便番号での地名 | 境界データでの地名 |
---|---|---|
191-0053 | 東京都日野市豊田(丁目) | 東京都日野市豊田一丁目 |
東京都日野市豊田二丁目 | ||
東京都日野市豊田三丁目 | ||
東京都日野市豊田四丁目 | ||
191-0051
|
東京都日野市豊田(大字) |
東京都日野市大字豊田
|
このような「丁目」と「大字」の混在パターンも極稀に存在するため、「大字」や「丁目」を消す前にこちらの対処を先にしてからでないと、どちらの郵便番号に結びつけるかが正しくできなくなってしまいます。
また、郵便番号での地名には上記のような「(丁目)」と「(大字)」以外にも
- 「(丁目)」と「(その他)」
- 「(丁目)」と「(番地)」
- 「(字〇〇)」と「(その他)」
のように無数のバリエーションがあり、置き換えも一筋縄では行かず注意が必要です。
⑤ 前方一致(+「大字」、「丁目」)
郵便番号 | 郵便番号での地名 | 境界データでの地名 |
---|---|---|
100-0101 | 東京都大島町元町 | 東京都大島町元町字みたき堂 |
東京都大島町元町字アイノウ | ||
… |
「大字」「丁目」以外で境界データでの地名についているもの(分類上は「字」「小字」)を処理します。
上記の例のように、基本的には「郵便番号の地名が境界データでの地名に前方一致しているか」で対処が可能ですが、境界データに③の「大字」が途中で入ってくるなど、単純な前方一致ではマッチしないパターンも存在するため、①~④が全て終わった後にすべき処理といえます。
部分一致での名寄せ手順
部分一致に以上のパターンがあることを踏まえると、名寄せの手順としては
④ に該当する「丁目」「大字」混在パターンの対処
→ ② の丁目単位での郵便番号の対処
→ 境界データの「○丁目」「大字」を取り除き①、③の対処
→ 「丁目」「大字」の処理が終わった状態で⑤の対処
がベストと考えられます。特に最初の2つでは該当パターンの網羅や正規表現での取り出しが複雑になってしまったので、同じような作業をする方がいれば注意してもらえればと思います。
そして次回は後編、さらに複雑な「特例処理」のパターンについてです。