リレーショナルデータベース ── 関係モデルに基づくDB
JOIN で結合する伝統的DB「数字を1円もずらしてはいけない」業務システムの裏には必ずRDB。 統計分析でも複数表の結合や複雑な集計はSQLが最速の場合が多く、 pandasと併用する場面が頻出します。
「Excelシートの複数枚+関係」が直感的:
SELECT 列, SUM(金額)FROM 注文 JOIN 顧客 ON 注文.cid = 顧客.idWHERE 年 = 2023GROUP BY 列ORDER BY SUM(金額) DESC
SSDSE-B の都道府県データをSQL風に集計するなら:
1 2 3 4 5 | SELECT 地域コード, AVG(高齢化率) AS 平均高齢化率 FROM SSDSE_B WHERE 年 = 2023 GROUP BY 地域コード ORDER BY 平均高齢化率 DESC; |
pandas なら df.query("年==2023").groupby("地域コード")["高齢化率"].mean() 相当。
最小限のスニペットで動作確認できる例。 公的データ(SSDSE 等)を想定しています。
1 2 3 4 5 6 7 8 9 10 11 12 | import sqlite3 import pandas as pd # SQLite に DataFrame を保存 df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1) conn = sqlite3.connect(':memory:') df.to_sql('ssdse', conn, index=False) # SQL クエリで集計 query = "SELECT * FROM ssdse WHERE 都道府県='秋田県'" result = pd.read_sql(query, conn) print(result) |
= NULL は常に偽、 IS NULL を使う| 種別 | 用途 |
|---|---|
| B-tree | 標準。 等値・範囲検索 |
| Hash | 等値検索のみ高速 |
| GIN/GiST | 全文検索、 JSON、 配列 |
| Bitmap | 低カーディナリティ列に |
| Composite | 複数列の組合せ |
| 種別 | 用途 |
|---|---|
| B-tree | 標準。 等値・範囲検索 |
| Hash | 等値検索のみ高速 |
| GIN/GiST | 全文検索、 JSON、 配列 |
| Bitmap | 低カーディナリティ列に |
| Composite | 複数列の組合せ |