On Blahfe

yubinbango-dataをどうやって生成するか

blog/backendyubinbangoken_all.csvjqtrdsql

郵便番号から住所を補完するライブラリ「yubinbango」を継続的に利用するにあたり、当該ライブラリが参照している郵便データ「yubinbango-data」を自前でメンテナンスできるか確認します。

thumbnail

PROBLEM

  • yubinbango/yubinbango」を利用するにあたり「yubinbango/yubinbango-data」の更新が継続的に行われるかサービス継続性の懸念がある
    • そこで自前でメンテナンスをする場合の対処方法を事前に知っておきたい

SOLUTION

というわけで、yubinbango-dataの中身であるken_all.csvとjigyosyo.csvを安定して変換する方法を確認します。

ken_all.csvを正規化する

yubinbango-dataのken_all.csvの部分はアイビスが提供しているzipcloudを参照しているようなので、そちらに合わせて利用します。

sh
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に変換する際には工夫が必要です。

sh
go get github.com/oirik/gokenall/cmd/kenall
{ kenall download -x | kenall normalize } >ken_all.csv

jigyosyo.csvを取得する

jigyosyo.csvは特に正規化は必要ないです。

sh
{ 
  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

yubinbango-dataを生成する

ken_all.csvとjigyosyo.csvをUNIONしてjqで郵便番号をキーとしたオブジェクトに変換します。一部buildingカラムがnullを持っておりyubinbango-dataと異なる部分はありますが、大凡同等の状態にまで持っていくことが出来ました。

sh
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

WRAPUP

昔から何かと話題に上がるken_all.csvですが、正規化のサービスに加えCSV用SQLクライアントとjqの登場により思った以上に簡単に変換することができました。

nabinno
Emacsianでアート好き、ランニング好きな@nabinnoが書いています
GitHub / X / LinkedIn / ネクイノ
blog/market

今後の成長分野:新たなテクノロジーの展望

テクノロジーの進化は、絶え間ない変化の中で私たちの日常を塗り替えてきました。時には経済的な危機が、新たな可能性を切り拓く契機となることもあります。そこで、過去のリセッション期に生まれたテクノロジーの足

market-trendrecession
blog/organization

ATKerneyの課題解決パターンの魅力的な探求

ATKerneyの課題解決パターン は、課題の本質を見極め、効果的な戦略的構造化を通じて解決策を導き出す手法にフォーカスしています。この冒険の旅は、解決者と協力者たちが心を一つにし、課題に立ち向かう様

problem-solvingatkerney
blog/market

就職氷河期とは何だったのか

私はいわゆる就職氷河期世代です。周囲から時折漏れ聞こえる不平のような言葉がありますが、それを単なる不平として片付けるのはもったいない気がします。できれば、その中に新しい視点を見つけ、次のチャンスへ繋げ

labor-economicsrecessionemployment-ice-age