抽出→変換→ロードのデータ統合プロセス
データを「分析・モデリングに使える形に整える」工程。 分析の質はここで 8 割決まります。
本ページでは ETL を、 定義・前提条件・使い方・落とし穴の順に整理して解説します。 厳密な定義より、 まず何を、 いつ、 どう使うかを理解することを優先してください。
抽出→変換→ロードのデータ統合プロセス
英語名 Extract-Transform-Load。
この用語を理解・使用するときは、 次のような前提を意識してください:
SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:
1 2 3 4 5 6 7 8 9 10 11 12 | import pandas as pd import numpy as np # データ読み込み df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1) print(df.shape) print(df.dtypes) print(df.describe()) # 「ETL」の文脈で扱う場合の例: # 分野: データエンジニアリング # 関連手法は同カテゴリの他用語を参照してください。 |
具体的なコードは データエンジニアリング を参照してください。
分析結果を報告するときに含めるべき情報:
SSDSE-B-2026 はcp932 エンコード・1 行目に英字列名・2 行目に日本語見出しという独特の構造。 これをそのまま BI ツールに渡せないため、 ETL の流れを必ず通す必要がある。
| 工程 | SSDSE-B での具体作業 | 典型ツール |
|---|---|---|
| Extract(抽出) | data/raw/SSDSE-B-2026.csv を cp932 で読み込み、 1 行目を skip | pandas, requests, e-Stat API |
| Transform(変換) | 年度フィルタ、 都道府県コード正規化、 人口比率の計算、 欠損除去 | pandas, Spark, dbt |
| Load(格納) | SQLite/PostgreSQL/BigQuery にテーブル作成して挿入 | SQLAlchemy, gcloud, AWS CLI |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # SSDSE-B-2026 を ETL する完全例
import pandas as pd
import sqlite3
# === Extract ===
df_raw = pd.read_csv('data/raw/SSDSE-B-2026.csv',
encoding='cp932', skiprows=1)
print('Extract done:', df_raw.shape)
# === Transform ===
# 1. 年度を最新のみに絞る
df = df_raw[df_raw['年度']==2023].copy()
# 2. 派生指標を計算 (高齢化率)
df['高齢化率'] = df['65歳以上人口'] / df['総人口'] * 100
# 3. 列名を英字に統一
df = df.rename(columns={
'都道府県':'prefecture', '総人口':'population',
'65歳以上人口':'aged_pop','高齢化率':'aged_ratio',
})
# 4. 欠損行を除去
df = df.dropna(subset=['population','aged_pop'])
# === Load ===
con = sqlite3.connect('ssdse_b.db')
df[['prefecture','population','aged_pop','aged_ratio']
].to_sql('ssdse_b_2023', con, if_exists='replace', index=False)
con.close()
print('Loaded', len(df), 'rows into ssdse_b.db')
|
かつては Transform を専用サーバで行う ETL が主流だったが、 DWH の計算能力向上で ELT(生データを先に Load し、 DWH 内で Transform)が増えてきた。
| 観点 | ETL(古典的) | ELT(クラウドDWH時代) |
|---|---|---|
| 変換場所 | ETL専用サーバ | DWH(BigQuery/Snowflake) |
| 生データ保管 | 捨てる | 残す(再計算可) |
| 代表ツール | Informatica, Talend | dbt, Fivetran, Airbyte |
| 拡張性 | スケールアウト難 | DWH依存で容易 |
| コスト | オンプレ固定 | 従量課金 |
同じ ETL ジョブを 2 回実行しても結果が変わらないこと。 SSDSE-B-2026 の場合、 Load 時に if_exists='replace' や upsert(MERGE)を使うと冪等になる。