e-Stat でホスティングしている統計情報や地理情報をSQLデータベースに取り込むツール
GISデータについては、e-Statのデータ注意情報 を留意ください。
このツールは、e-Stat(政府統計の総合窓口)から統計データと地理情報をダウンロードし、PostgreSQLデータベースに取り込むためのコマンドラインツールです。
cargo install --path .jp-estat-to-sql [OPTIONS] <POSTGRES_URL> <COMMAND>--tmp-dir <PATH>: 中間ファイルの保存先(デフォルト:./tmp)--help: ヘルプを表示--version: バージョンを表示
POSTGRES_URL は PostgreSQL への接続文字列です。ogr2ogr に渡される形式で、冒頭の PG: は省略してください。
例:
"host=127.0.0.1 dbname=jp-estat user=postgres password=mypassword"国勢調査の小地域境界データをダウンロードし、PostGISに取り込みます。
- データソース: e-Stat 小地域境界データ
 - 対象年度: 2000, 2005, 2010, 2015, 2020年
 - 座標系: JGD2011(優先)、JGD2000(フォールバック)
 - データ形式: 緯度経度データ(平面直角座標系は非対応)
 
jp-estat-to-sql "host=127.0.0.1 dbname=jp-estat" areamap- データダウンロード: 47都道府県 × 5年度 = 235ファイルを並行ダウンロード
 - ファイル展開: ZIPファイルからShapefileを抽出
 - PostGIS取り込み: VRTファイルを作成してPostGISに一括取り込み
 - データ後処理:
- 水面調査区(hcode=8154)の削除
 - メタデータの登録
 - 座標系の設定(JGD2011: SRID 6668, JGD2000: SRID 4621)
 
 
jp_estat_areamap_2000- 2000年国勢調査小地域境界データjp_estat_areamap_2005- 2005年国勢調査小地域境界データjp_estat_areamap_2010- 2010年国勢調査小地域境界データjp_estat_areamap_2015- 2015年国勢調査小地域境界データjp_estat_areamap_2020- 2020年国勢調査小地域境界データ
| カラム名 | データ型 | 説明 | 
|---|---|---|
ogc_fid | 
integer | 主キー | 
geom | 
geometry(polygon, SRID) | 境界ポリゴン | 
key_code | 
varchar(255) | 小地域コード | 
pref_name | 
varchar(255) | 都道府県名 | 
city_name | 
varchar(255) | 市区町村名 | 
s_name | 
varchar(255) | 小地域名 | 
jinko | 
int | 人口 | 
setai | 
int | 世帯数 | 
- 処理時間はインターネット接続、メモリ、SSD転送速度に依存
 - 途中からの再開機能あり(
--helpで詳細確認) - ダウンロードしたZIPファイルとShapefileは 
./tmpに保存 
国勢調査のメッシュ統計データをダウンロードし、PostgreSQLに取り込みます。
- データソース: e-Stat メッシュ統計データ
 - メッシュレベル: 3次メッシュ(約1km)、4次メッシュ(約500m)、5次メッシュ(約250m)
 - 対象年度: 2020年(現在対応)
 - データ形式: CSV(Shift_JISエンコーディング)
 
jp-estat-to-sql "host=127.0.0.1 dbname=jp-estat" mesh --level 3 --year 2020 --survey "人口及び世帯"--level <LEVEL>: メッシュレベル(3, 4, または 5)--year <YEAR>: 調査年度(例: 2020)--survey <SURVEY>: 調査名
2020年データ:
| レベル | 調査名 | 統計ID | 説明 | 
|---|---|---|---|
| 3 | 人口及び世帯 | T001140 | 約1kmメッシュの人口・世帯データ | 
| 3 | 人口移動、就業状態等及び従業地・通学地 | T001143 | 約1kmメッシュの移動・就業データ | 
| 4 | 人口及び世帯 | T001141 | 約500mメッシュの人口・世帯データ | 
| 4 | 人口移動、就業状態等及び従業地・通学地 | T001144 | 約500mメッシュの移動・就業データ | 
| 5 | 人口及び世帯 | T001142 | 約250mメッシュの人口・世帯データ | 
| 5 | 人口移動、就業状態等及び従業地・通学地 | T001145 | 約250mメッシュの移動・就業データ | 
- データ検証: 指定されたレベル・年度・調査名の組み合わせが利用可能かチェック
 - データダウンロード: 全国のメッシュコード(約8,000個)に対応するCSVファイルを並行ダウンロード
 - スキーマ作成: CSVヘッダーを解析してテーブルスキーマを自動生成
 - データ取り込み: 全CSVファイルをPostgreSQLに取り込み
 
テーブル名形式: jp_estat_mesh_{YEAR}_{STATS_ID}_{LEVEL}
例:
jp_estat_mesh_2020_T001140_3- 2020年3次メッシュ人口・世帯データ
| カラム名 | データ型 | 説明 | 
|---|---|---|
KEY_CODE | 
BIGINT | メッシュコード | 
HTKSAKI | 
BIGINT | 集計値 | 
GASSAN | 
BIGINT[] | 合算値(配列) | 
HTKSYORI | 
SMALLINT | 処理区分 | 
| その他 | INTEGER | 統計値 | 
KEY_CODE フィールドには JIS X 0410 地域メッシュコードが格納されています。このメッシュコードを地理的なジオメトリに変換するには、jismesh-plpgsql ライブラリを使用できます。
このライブラリは、メッシュコードから動的にジオメトリを生成する PL/pgSQL 関数を提供しており、以下のような使い方ができます:
-- メッシュデータとジオメトリを結合
SELECT
    m."KEY_CODE",
    m."人口(総数)",
    mesh.geom
FROM jp_estat_mesh_2020_T001140_3 m
JOIN jismesh.to_meshcodes(
    ST_SetSRID(ST_MakeBox2D(
        ST_MakePoint(139.7, 35.7),
        ST_MakePoint(135.7, 34.7)
    ), 4326),
    'Lv3'::jismesh.mesh_level
) mesh ON m."KEY_CODE" = mesh.meshcode;# 3次メッシュの人口・世帯データを取得
jp-estat-to-sql "host=127.0.0.1 dbname=jp-estat" mesh \
  --level 3 \
  --year 2020 \
  --survey "人口及び世帯"
# 4次メッシュの移動・就業データを取得
jp-estat-to-sql "host=127.0.0.1 dbname=jp-estat" mesh \
  --level 4 \
  --year 2020 \
  --survey "人口移動、就業状態等及び従業地・通学地"- メッシュレベルが大きいほどデータ量が増加(5次メッシュは約8,000ファイル)
 - CSVファイルはShift_JISエンコーディングで処理
 - 空値や 
*はNULLとして扱われる GASSANカラムはセミコロン区切りの配列として保存
- 
データベース接続エラー
- PostgreSQLが起動していることを確認
 - 接続文字列の形式を確認
 
 - 
ダウンロードエラー
- インターネット接続を確認
 - e-Statのサーバー状況を確認
 
 - 
メモリ不足
--tmp-dirでSSD上のディレクトリを指定- 並行処理数を調整(コード修正が必要)
 
 
- 進捗バーで処理状況を確認
 ./tmpディレクトリでダウンロード状況を確認- エラーメッセージで具体的な問題を特定
 
このツールはMITライセンスの下で公開されています。
e-Statのデータ利用については、e-Stat利用規約に従ってください。