おぎろぐはてブロ

なんだかんだエンジニアになって10年以上

郵便番号データのサマライズ

登録系フォームで、郵便番号を入力してもらって、郵便番号データから引っ張った候補住所を選択してもらうというUIがあるのだけれど、「ここの選択してもらう」という作業を無くしたい。郵便番号入れたら、検索した住所が埋められて、あとは番地を入力するだけでいいような感じ。
なぜ「選択してもらう」というステップが必要なのかというと、郵便番号は、一意の住所に紐付く訳ではなくて、複数の住所に紐付くため。たとえば、011-0951だと、

郵便番号 都道府県 市区町村 町域
011-0951 秋田県 秋田市 土崎港相染町
011-0951 秋田県 秋田市 土崎港古川町

と相染町と古川町どちらも同じ郵便番号である。そのため、この中から選択してもらう必要が出てくる。

複数の住所に紐づけられた郵便番号の数

平成19年(2007年)3月30日版の郵便番号データの場合

  • データ数(郵便番号-住所の組み合わせ): 121,882件
  • ユニークな郵便番号の数: 118,181件
  • 2つ以上の住所と紐付けられた郵便番号の数: 1,497件

と1%強の郵便番号がユニークでないものとなる。

これをユニークにしてみたい

これを無理矢理、合致するとこまで削ると、ユニークにできないだろうか。さっきの表の2つを合わせて

郵便番号 都道府県 市区町村 町域
011-0951 秋田県 秋田市 土崎港

と。
一見、よさげに見えるけれど、土崎港という住所区分が存在するわけではなく「土崎港相染町」「土崎港古川町」なので、

郵便番号 都道府県 市区町村 町域
011-0951 秋田県 秋田市

と、ここまで削るのが正しい。(住所の入力補完として考えるのであれば、残すのもありなのかもしれない。)

このような感じで、1つ以上の住所に紐付いている郵便番号(1,497件)について、各郵便番号がユニークとなるまで、削っていった。

実際に作ってみた

grepとかで手作業なのでやってるうちに間違えてるかもしれないけど、

  • 同じ漢字だったので3つ目までになったもの: 6件
  • 「北海道 夕張郡長沼町」と2つ目までになったもの: 1370件
  • 新潟県」と都道府県までしか残らなかったもの: 121件
  • 都道府県すら同一でないもの: 3件

「北海道 夕張郡長沼町」まで補完できればまずまずで、殆どがこのパターンになった。が、都道府県のみが121件、さらには都道府県までユニークでなかったものが3件でてきた。

同じ漢字

なんか、同じ漢字で、複数の読みを割り当てられただけのものもあった。これは普通にマージしてよし。(読み仮名使わないので)

27212,"581  ","5810027","オオサカフ","ヤオシ","ヤオギ","大阪府","八尾市","八尾木",0,0,1,1,0,0
27212,"581  ","5810027","オオサカフ","ヤオシ","ヨオギ","大阪府","八尾市","八尾木",0,0,0,1,0,0
28203,"673  ","6730012","ヒョウゴケン","アカシシ","カニガサカ","兵庫県","明石市","和坂",0,0,0,1,0,0
28203,"673  ","6730012","ヒョウゴケン","アカシシ","ワサカ","兵庫県","明石市","和坂",0,0,1,1,0,0
40109,"807  ","8070811","フクオカケン","キタキュウシュウシヤハタニシク","クキキタマチ","福岡県","北九州市八幡西区","洞北町",0,0,0,1,0,0
40109,"807  ","8070811","フクオカケン","キタキュウシュウシヤハタニシク","ドウホクマチ","福岡県","北九州市八幡西区","洞北町",0,0,0,1,0,0
都道府県すら同一でない

以下の3件が都道府県すら同一でないもの。
データの1列目は全国地方公共団体コード(JIS X0401、X0402)で、これは行政区分で振られるので、ちゃんと違ってる。

23235,"498  ","4980000","アイチケン","ヤトミシ","イカニケイサイガナイバアイ","愛知県","弥富市","以下に掲載がない場合",0,0,0,1,0,0
24303,"498  ","4980000","ミエケン","クワナグンキソサキチョウ","イカニケイサイガナイバアイ","三重県","桑名郡木曽岬町","以下に掲載がない場合",0,0,0,1,0,0

26303,"618  ","6180000","キョウトフ","オトクニグンオオヤマザキチョウ","イカニケイサイガナイバアイ","京都府","乙訓郡大山崎町","以下に掲載がない場合",0,0,0,1,0,0
27301,"618  ","6180000","オオサカフ","ミシマグンシマモトチョウ","イカニケイサイガナイバアイ","大阪府","三島郡島本町","以下に掲載がない場合",0,0,0,1,0,0

40642,"871  ","8710000","フクオカケン","チクジョウグンヨシトミマチ","イカニケイサイガナイバアイ","福岡県","築上郡吉富町","以下に掲載がない場合",0,0,0,1,0,0
44203,"871  ","8710000","オオイタケン","ナカツシ","イカニケイサイガナイバアイ","大分県","中津市","以下に掲載がない場合",0,0,0,1,0,0

「以下に掲載がない場合」って、実際にどのくらい利用されいるのか分からないけど、またいでしまっていて、また、871-xxxxの下にも2つの都道府県が混在している状態となっている。

まとめ

なんともいえないけど、日本も広いってことです。