郵便番号データをインポートする 2016/11
日本郵便のHPより郵便データをダウンロードする。
ダウンロードしたファイルを解凍し、CSVファイルの文字コードを確認する。
CSVファイルの文字コードをSJISからUTF-8へ変換する。
使用する用途に応じて必要なカラムだけを抜き出す。
半角カナを全角カナに変換する。
ダブルクォーテーションを取り除く。
不要なデータを取り除く
データ受け入れテーブルを作成
psqlからCSVデータをテーブルへインポート
郵便番号に主キーが張れないのでインデックスを作成する。
日本郵便のHPより郵便データをダウンロードする。
$ wget http://www.post.japanpost.zipcode/dl/kogaki/zip/ken_all.zip
ダウンロードしたファイルを解凍し、CSVファイルの文字コードを確認する。
$ unzip ken_all.zip $ file -i KEN_ALL.CSV KEN_ALL.CSV: text/plain; charset=unknown-8bit※ charset = unknown-8bit -> ファイルの文字コードがShift_JISであることを表している。
CSVファイルの文字コードをSJISからUTF-8へ変換する。
$ iconv -f Shift_JIS KEN_ALL.CSV > KEN_ALL.utf-8.csv
使用する用途に応じて必要なカラムだけを抜き出す。
$ cut -d, -f3,4,5,6,7,8,9 KEN_ALL.utf-8.csv > KEN_ALL.utf-8.cut.csv※ ここでは、郵便番号, 都道府県名(半角カタカナ), 市区町村名(半角カタカナ), 町域名(半角カタカナ), 都道府県名(漢字), 市区町村名(漢字), 町域名(漢字)を使用する。
半角カナを全角カナに変換する。
$ nkf -X KEN_ALL.utf-8.cut.csv > KEN_ALL.utf-8.cut.zenkaku.csv※ nkfは2.1.3以上で
ダブルクォーテーションを取り除く。
$ sed -i 's/"//g' KEN_ALL.utf-8.cut.zenkaku.csv
不要なデータを取り除く
$ sed -i 's/イカニケイサイガナイバアイ/ /g' KEN_ALL.utf-8.cut.zenkaku.csv $ sed -i 's/以下に掲載がない場合/ /g' KEN_ALL.utf-8.cut.zenkaku.csv※ ここでは半角スペースに変換する。
データ受け入れテーブルを作成
CREATE TABLE t_yubin_bango ( yubin_bango TEXT NOT NULL, -- 郵便番号 todofuken_kana TEXT NOT NULL, -- 都道府県名(半角カタカナ) shikuchoson_kana TEXT NOT NULL, -- 市区町村名(半角カタカナ) choikimei_kana TEXT NOT NULL, -- 町域名(半角カタカナ) todofuken TEXT NOT NULL, -- 都道府県名(漢字) shikuchoson TEXT NOT NULL, -- 市区町村名(漢字) choikimei TEXT NOT NULL -- 町域名(漢字) );
psqlからCSVデータをテーブルへインポート
psql=> \copy t_yubin_bango FROM '/path/to/csv/KEN_ALL.utf-8.cut.zenkaku.csv' with csv;
郵便番号に主キーが張れないのでインデックスを作成する。
psql=> CREATE INDEX i_yubin_bango ON t_yubin_bango(yubin_bango);