郵便番号 CSV データを SQLite 3 にインポート(SQLite 3 を使用)

このページでは,日本郵便の郵便番号データダウンロードページで公開されている 2種類の郵便番号データの CSV(カンマ区切り値)形式ファイルを活用する.
  1. 住所の郵便番号(CSV形式)(ken_all.csv)
  2. 事業所の個別郵便番号(CSV形式)(jigyosyo.csv)

これらのファイルを,リレーショナルデータベース管理システム SQLite 3 のテーブルへ効率的に格納する.

SQLite 3 の詳細情報: 別ページ »にまとめ

謝辞:

・郵便番号データの提供に関して,日本郵便に深く感謝申し上げます

1. 前準備

Python 3.12 のインストール

以下のいずれかの方法で Python 3.12 をインストールする。

方法1:winget によるインストール

Python がインストール済みの場合、この手順は不要である。管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install -e --id Python.Python.3.12 --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 AssociateFiles=1 InstallLauncherAllUsers=1"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

方法2:インストーラーによるインストール

  1. Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

AIエディタ Windsurf のインストール

Pythonプログラムの編集・実行には、AIエディタの利用を推奨する。ここでは、Windsurfのインストールを説明する。

Windsurf がインストール済みの場合、この手順は不要である。管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install -e --id Codeium.Windsurf --scope machine --accept-source-agreements --accept-package-agreements --override "/VERYSILENT /NORESTART /MERGETASKS=!runcode,addtopath,associatewithfiles,!desktopicon"
powershell -Command "$env:Path=[System.Environment]::GetEnvironmentVariable('Path','Machine')+';'+[System.Environment]::GetEnvironmentVariable('Path','User'); windsurf --install-extension MS-CEINTL.vscode-language-pack-ja --force; windsurf --install-extension ms-python.python --force"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

関連する外部ページ

Windsurf の公式ページ: https://windsurf.com/

csvkit のインストール(Windows,Ubuntu 上)

SQLite 3 のインストール

SQLite 3は,軽量なリレーショナルデータベース管理システムである.

郵便番号 CSV データの準備

2. 郵便番号 CSV データから,SQLite 3 データベースを生成 (csvsql, sqlite3 を使用)

  1. 最初に,2つのファイルの文字コードを,UTF-8 形式に変換する
  2. SQLite 3 データベースの生成手順
    • Windows 環境での実行手順
      del zip.db
      echo a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 > k.csv
      type ken_all.csv >> k.csv
      csvsql --db sqlite:///zip.db --insert k.csv
      echo a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12 > j.csv
      type jigyosyo.csv >> j.csv
      csvsql --db sqlite:///zip.db --insert j.csv
      echo alter table k rename to ken_all; | sqlite3 zip.db
      echo alter table j rename to jigyosyo; | sqlite3 zip.db
      echo select * from ken_all limit 20; | sqlite3 zip.db
      echo select * from jigyosyo limit 20; | sqlite3 zip.db
      

      正常に処理できたことを確認するため,データを表示する.

    • Ubuntu 環境での実行手順
      rm -f zip.db
      echo "a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14" > k.csv
      cat KEN_ALL.CSV >> k.csv
      csvsql --db sqlite:///zip.db --insert k.csv
      echo "a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12" > j.csv
      cat JIGYOSYO.CSV >> j.csv
      csvsql --db sqlite:///zip.db --insert j.csv
      echo "alter table k rename to ken_all;" | sqlite3 zip.db
      echo "alter table j rename to jigyosyo;" | sqlite3 zip.db
      echo "select * from ken_all limit 20;" | sqlite3 zip.db
      echo "select * from jigyosyo limit 20;" | sqlite3 zip.db
      

      正常に処理できたことを確認するため,先頭部分のデータを表示する.

3. データベースの整合性確認

  1. SQLite 3 の起動方法
    sqlite3 zip.db
    
  2. テーブル JIGYOSYO の属性 a0, a3, a4 の整合性確認

    JIGYOSYO テーブルにおいて,同一の a0(JISコード)に対して a3(都道府県名)と a4(市区町村名)の組み合わせが複数存在しないことを確認する.

    以下の SQL クエリで検証する.結果が空の場合,整合性が保たれている.

    create table T as select distinct a0, a3, a4 from JIGYOSYO;
    SELECT * FROM T WHERE a0 IN ( SELECT a0 FROM T group by a0 HAVING COUNT(*) > 1 );
    
  3. テーブル KEN_ALL の属性 a0, a6, a7 の整合性確認

    KEN_ALL テーブルにおいて,同一の a0(全国地方公共団体コード)に対して a6(都道府県名)と a7(市区町村名)の組み合わせが複数存在しないことを確認する.

    以下の SQL クエリで検証する.結果が空の場合,整合性が保たれている.

    drop table T;
    create table T as select distinct a0, a6, a7 from KEN_ALL;
    SELECT * FROM T WHERE a0 IN ( SELECT a0 FROM T group by a0 HAVING COUNT(*) > 1 );
    
  4. テーブル JIGYOSYO における読みがなデータの完全性確認

    以下の SQL クエリで検証する.結果が空の場合,すべての読みがなが正しく格納されている.

    select * from JIGYOSYO where a1 = '""';
    
  5. テーブル KEN_ALL における読みがなデータの完全性確認

    以下の SQL クエリで検証する.結果が空の場合,すべての読みがなが正しく格納されている.

    select * from KEN_ALL where a3 = '""';
    select * from KEN_ALL where a4 = '""';
    select * from KEN_ALL where a5 = '""';