LoginSignup
0
0

More than 1 year has passed since last update.

郵便番号・都道府県別データをデータベースに保存する(Sqlite3)

Last updated at Posted at 2022-09-28

データの取得

今回は郵便局のサイトからデータをダウンロードします。

  • 都道府県一覧 > 全国一括(1,691,560Byte)

日本郵便:郵便番号データダウンロード

全角となっている町域部分の文字数が38文字を越える場合、また半角となっているフリガナ部分の文字数が76文字を越える場合は、複数レコードに分割しています。
この郵便番号データファイルでは、以下の順に配列しています。

  1. 全国地方公共団体コード(JIS X0401、X0402)……… 半角数字
  2. (旧)郵便番号(5桁)……………………………………… 半角数字
  3. 郵便番号(7桁)……………………………………… 半角数字
  4. 都道府県名 ………… 半角カタカナ(コード順に掲載) (注1)
  5. 市区町村名 ………… 半角カタカナ(コード順に掲載) (注1)
  6. 町域名 ……………… 半角カタカナ(五十音順に掲載) (注1)
  7. 都道府県名 ………… 漢字(コード順に掲載) (注1,2)
  8. 市区町村名 ………… 漢字(コード順に掲載) (注1,2)
  9. 町域名……………… 漢字(五十音順に掲載) (注1,2)

※1 文字コードには、MS漢字コード(SHIFT JIS)を使用しています。
※2 文字セットとして、JIS X0208-1983を使用し、規定されていない文字はひらがなで表記しています。

今回は1,3,4,5,6,7,8,9のみ扱います。

テーブルの作成〜

流れとしてはcsvのデータを必要な項目に加工し、そのままsqliteでインポートしていきます。

データの整形
% nkf -g KEN_ALL.CSV
=> Shift_JIS

# utf-8に変換
% nkf -w --overwrite KEN_ALL.CSV
% nkf -g KEN_ALL.CSV
=> UTF-8

# 必要な項目のみ切り出し
% cut -d ',' -f 1,3,4,5,6,7,8,9 KEN_ALL.CSV > ken_all.csv

# 先頭に行番号を付与
% nl -s ',' db/ken_all.csv | tr -d ' ' > ken_data.csv
sqlite
# テーブルの作成
% sqlite3
sqlite> create table ken_all(id integer primary key autoincrement, code integer, post_code text, prefecture_kana text, address_1_kana text, address_2_kana text, prefecture_name text, address_1_name text, address_2_name text);
sqlite> .tables
=> ken_all

# データのインポート 🍺
sqlite> .mode csv
sqlite> .import ken_data.csv ken_all
sqlite> SELECT count(*) FROM ken_all;
=> count(*)
=> 124553

sqlite> CREATE INDEX post_code_index on ken_all(post_code);
sqlite> CREATE INDEX prefecture_name_index on ken_all(prefecture_name);
sqlite> .indices
=> post_code_index        prefecture_name_index

sqlite> .headers ON
sqlite> SELECT * FROM ken_all LIMIT 5;
id,code,post_code,prefecture_kana,address_1_kana,address_2_kana,prefecture_name,address_1_name,address_2_name
1,1101,0600000,"ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合"
2,1101,0640941,"ホッカイドウ","サッポロシチュウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘"
3,1101,0600041,"ホッカイドウ","サッポロシチュウオウク","オオドオリヒガシ","北海道","札幌市中央区","大通東"
4,1101,0600042,"ホッカイドウ","サッポロシチュウオウク","オオドオリニシ(1-19チョウメ)","北海道","札幌市中央区","大通西(1〜19丁目)"
5,1101,0640820,"ホッカイドウ","サッポロシチュウオウク","オオドオリニシ(20-28チョウメ)","北海道","札幌市中央区","大通西(20〜28丁目)"

DONE!⭐︎
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0