郵便番号データのサマライズ
登録系フォームで、郵便番号を入力してもらって、郵便番号データから引っ張った候補住所を選択してもらうという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つの都道府県が混在している状態となっている。
まとめ
なんともいえないけど、日本も広いってことです。