郵便番号から住所を補完するライブラリ「yubinbango」を継続的に利用するにあたり、当該ライブラリが参照している郵便データ「yubinbango-data」を自前でメンテナンスできるか確認します。
というわけで、yubinbango-dataの中身であるken_all.csvとjigyosyo.csvを安定して変換する方法を確認します。
yubinbango-dataのken_all.csvの部分はアイビスが提供しているzipcloudを参照しているようなので、そちらに合わせて利用します。
sudo apt install nkf
{
curl -sSL "http://zipcloud.ibsnet.co.jp/zipcodedata/download?di=1625040649647" -o ./x_ken_all.zip;
unzip -p x_ken_all.zip | nkf -w;
rm x_ken_all.zip
} >ken_all.csv
zipcloudを使うことに抵抗がある場合はgokenallもありますが、正規化によって一つの郵便番号に複数の町名番地が存在するため郵便番号をキーとするyubinbango-dataに変換する際には工夫が必要です。
go get github.com/oirik/gokenall/cmd/kenall
{ kenall download -x | kenall normalize } >ken_all.csv
jigyosyo.csvは特に正規化は必要ないです。
{
curl -sSL https://www.post.japanpost.jp/zipcode/dl/jigyosyo/zip/jigyosyo.zip -o ./jigyosyo.zip;
unzip -p jigyosyo.zip | nkf -w;
rm jigyosyo.zip
} >jigyosyo.csv
ken_all.csvとjigyosyo.csvをUNIONしてjqで郵便番号をキーとしたオブジェクトに変換します。一部buildingカラムがnullを持っておりyubinbango-dataと異なる部分はありますが、大凡同等の状態にまで持っていくことが出来ました。
brew install noborus/tap/trdsql
for i in {001..999}; do
trdsql -ojson "
SELECT *
FROM (
SELECT c3 zip, c8 city, c9 town, NULL building FROM ken_all.csv
UNION SELECT c8 zip, c5 city, c6 town, c7 building FROM jigyosyo.csv
)
WHERE SUBSTRING(zip,0,4) = '$i'
ORDER BY zip ASC
" \
| jq --compact-output '
.
| to_entries
| map({ (.value.zip): [1, .value.city, .value.town, .value.building] })
| add
' \
| sed -E 's/(.+?)/$yubin(\1);/g' \
>$i.js;
done
昔から何かと話題に上がるken_all.csvですが、正規化のサービスに加えCSV用SQLクライアントとjqの登場により思った以上に簡単に変換することができました。
テクノロジーの進化は、絶え間ない変化の中で私たちの日常を塗り替えてきました。時には経済的な危機が、新たな可能性を切り拓く契機となることもあります。そこで、過去のリセッション期に生まれたテクノロジーの足
ATKerneyの課題解決パターン は、課題の本質を見極め、効果的な戦略的構造化を通じて解決策を導き出す手法にフォーカスしています。この冒険の旅は、解決者と協力者たちが心を一つにし、課題に立ち向かう様
私はいわゆる就職氷河期世代です。周囲から時折漏れ聞こえる不平のような言葉がありますが、それを単なる不平として片付けるのはもったいない気がします。できれば、その中に新しい視点を見つけ、次のチャンスへ繋げ