政党・会派データ
対象: 国会 / 地方議会
👀 ざっくり言うと
政党は全国的な政治団体、会派は議会内で投票行動を共にする議員グループです(多くの場合政党と重なりますが、必ずしも一致しません)。 sage-baseでは、政党データを公式サイトから、会派データを議会公式サイトの名簿やLLMによる会議録からの抽出で収集しています。 政治家ごとの「いつからいつまでどの政党・会派に所属していたか」も履歴として記録します。
🔄 データの流れ
graph TD
A["政党公式サイト
所属議員一覧"]:::source
B["議会公式サイト
会派名簿ページ"]:::source
C["議会会議録
会派情報の追加ソース"]:::source
M["管理画面からの手動入力
Streamlit 政党・会派管理"]:::source
P1["議員一覧取得
Playwrightで各党の所属一覧を取得"]:::process
P2["会派メンバー抽出
BAMLで名簿から議員名・役職を構造化抽出"]:::process
P3["政党-会派マッピング
対応表に登録"]:::process
P4["議員 ↔ 会派 紐付け
選挙当選者を政党ルールで会派に登録"]:::process
P5["所属履歴の時系列記録
開始日・終了日つきで履歴化"]:::process
P6["政党・会派の手動登録・編集
抽出メンバーのレビューと所属の手動追加"]:::process
T_PP["political_parties
テーブル(政党)"]:::table
T_PG["parliamentary_groups
テーブル(会派)"]:::table
T_PGP["parliamentary_group_parties
テーブル(会派×政党 対応)"]:::table
T_PGM["parliamentary_group_memberships
テーブル(会派所属)"]:::table
T_PMH["party_membership_history
テーブル(政党所属履歴)"]:::table
V["dbt Data Vault層
hub / sat / link モデル"]:::process
H["BigQuery公開
sagebase スキーマ"]:::public
A --> P1
B --> P2
C --> P2
P1 --> T_PP
P2 --> T_PG
P2 --> T_PGM
P2 --> P3
P3 --> T_PGP
P3 --> P4
P4 --> T_PGM
P4 --> P5
P5 --> T_PGM
P5 --> T_PMH
M --> P6
P6 --> T_PP
P6 --> T_PG
P6 --> T_PGM
P6 --> T_PMH
T_PP --> V
T_PG --> V
T_PGP --> V
T_PGM --> V
T_PMH --> V
V --> H
classDef source fill:#ffffff,stroke:#1a1a1a,stroke-width:2.5px,color:#1a1a1a
classDef process fill:#ffffff,stroke:#737373,stroke-width:1px,color:#1a1a1a
classDef table fill:#ffffff,stroke:#1a1a1a,stroke-width:1.5px,stroke-dasharray: 6 3,color:#1a1a1a
classDef public fill:#1a1a1a,stroke:#1a1a1a,stroke-width:2.5px,color:#ffffff
元データ
加工
DB
公開
📂 技術的な詳細(開発者向け)
スクレイパー・インポーター
| データソース | スクリプト | 主要ロジック |
|---|---|---|
| 各政党公式サイト | src/infrastructure/external/web_scraper_service.py | Playwrightで政党サイトの議員一覧を取得し、BAMLで氏名・選挙区・所属情報を構造化抽出 |
| 議会公式サイト(会派名簿) | src/interfaces/cli/commands/parliamentary_group_commands.py | 名簿テキストに対しBAML(会派メンバー抽出エージェント)で議員名・役職を抽出。信頼度0.9以上はルールで自動採用 |
| 政党 ↔ 会派 の対応表メンテナンス | scripts/link_parliamentary_groups.py / link_parliamentary_groups_bulk.py | parliamentary_group_partiesの対応表に基づき、国政選挙の政党所属議員を会派memberships に一括登録 |
| 管理画面からの手動入力(Streamlit) | src/interfaces/web/streamlit/views/political_parties_view.py / parliamentary_groups/tabs/{new_tab, edit_delete_tab, member_extraction_tab, member_review_tab}.py + subtabs/create_memberships_subtab.py | 政党・会派の新規登録・編集、会派メンバー抽出の起動とレビュー、所属レコードの手動追加・訂正を提供 |
DBテーブル(PostgreSQL)
| テーブル | 説明 |
|---|---|
political_parties | 政党マスタ |
parliamentary_groups | 議会内会派(chamber・有効期間つき) |
parliamentary_group_parties | 会派と政党の対応(M:N) |
parliamentary_group_memberships | 政治家の会派所属履歴 |
party_membership_history | 政治家の政党所属履歴 |
dbtモデル(Data Vault層)
| モデル | 役割 |
|---|---|
hub_political_party | 政党のハブ |
sat_political_party | 政党の属性サテライト |
hub_parliamentary_group | 会派のハブ |
sat_parliamentary_group | 会派の属性サテライト |
link_pg_party | 会派 ↔ 政党 のリンク |
link_pg_membership | 政治家 ↔ 会派 の所属履歴リンク |
sat_pg_membership | 所属履歴の属性サテライト |
BigQuery公開テーブル
| テーブル | データセット |
|---|---|
political_parties | sagebase |
parliamentary_groups | sagebase |
parliamentary_group_memberships | sagebase |
parliamentary_group_parties | sagebase |