日本郵便株式会社から提供されている郵便番号データそのままDB化しても使い勝手が悪く、ひと手間加えることが必要です。すでにいくつかのベンダーが改変したデータを提供していますが、改めて何をすべきかを記載させていただきます。
なお、改変したデータもしくは改変したデータによるAPIを提供については
https://qiita.com/megane_/items/c8e4062697eaa785a103
で紹介されています。
郵便番号データを利用する目的
郵便番号データは郵便番号によって、住所の都道府県、市区町村、町域名を取得する、もしくは逆に都道府県、市区町村、町域名から郵便番号を取得するために利用します。このため、町域名が実際の町域名と一致することが重要なポイントとなります。
ところが日本郵便から提供されている郵便番号データは町域名をデータを柔軟に表現するための表現するためのカラムとして利用しており、そのままデータベース化しても正確な町域名が得られない場合が多く存在します。
何を改変する必要があるのか?
一番大きな問題は1つのデータが複数行で記述される場合があることでしたが、これについては2023年6月より1レコード1行のデータが提供されることとなり、問題はなくなりました。
それ以外で実施すべきことを以下に記述します。
- 町域名が「以下に掲載がない場合」「次のビルを除く」「XXの次に番地がくる場合」「〇〇一円」などと記述されており、実際の町域名ではないレコード
- 町域名に複数の選択肢が「、」区切りで提示されている場合
- 町域名に()で複数の選択肢が提示されている場合(「、」と併用もある)
- 町域名が町域名、建物名、階数で構成されている場合
- 〇〇地割、第〇〇地割が町域に含まれる場合
また1つの郵便番号が複数の町域に割り当てられている場合、データをどのようにすべきかも考慮する必要があります。
郵便番号データの誤り?
以下の3つのデータは正しくないと思います。
郵便番号 | 郵便番号データ | あるべきデータ |
---|---|---|
4400833 | 飯村町西山、高山 | 飯村町(西山、高山) |
4400032 | 岩田町居村、北郷中 | 岩田町(居村、北郷中) |
4400041 | 岩田町宮下、道合 | 岩田町(宮下、道合) |
2024/11/27 追記)
日本郵便株式会社から連絡があり、2024/12配信分で修正いただけるとのことです。
データの改変処理
上記のような処理を行うpython scriptを作ってみました。日本郵便株式会社から提供されているUTF-8型式のcsvファイルを入力すると、sqlite3のDBに結果を出力します。ただ、sqlite3でのサロゲートペア文字の扱いがわからなかったのでもそれについては文字化けしているかもしれません。
ご興味ある方がいらっしゃれば個別に提供させていただきます。
最後に
実際には事業所個別データにも対応しないと、住所入力でのアシストに使うには不十分です。これについては別途記事を書きたいと思います。