選挙結果データ
対象: 国政選挙 / 統一地方選挙(準備中)
👀 ざっくり言うと
衆議院・参議院選挙(小選挙区・比例代表)の結果を、総務省の公式発表やWikipediaから自動収集しています。 候補者・得票数・当選有無を政治家データと紐付けて記録しており、議員の選挙での歩みを追跡できます。 地方統一選挙については順次データセットを拡充していく予定です。
🔄 データの流れ
graph TD
A["総務省 選挙結果発表
Excel / PDF"]:::source
B["Wikipedia
歴代選挙記事(第1〜44回)"]:::source
M["管理画面からの手動入力
Streamlit 当選者管理"]:::source
P1["XLSダウンロード
選挙回ごとの発表ファイルを取得"]:::process
P2["XLS/PDFパース
シート構造を解析し候補者行を抽出"]:::process
P3["Wikitextパース
選挙テーブル/テンプレートから当選者を抽出"]:::process
P4["候補者正規化
氏名・選挙区・政党を正規化"]:::process
P5["政治家とのマッチング
既存Politicianに紐付け(新規なら作成)"]:::process
P6["ElectionMember投入
得票数・順位・結果を記録"]:::process
P7["当選者の手動編集
結果・所属の訂正と追加登録"]:::process
T_EL["elections
テーブル(選挙)"]:::table
T_EM["election_members
テーブル(当選者)"]:::table
V["dbt Data Vault層
hub / sat / link モデル"]:::process
H["BigQuery公開
sagebase スキーマ"]:::public
A --> P1
P1 --> P2
B --> P3
P2 --> P4
P3 --> P4
P4 --> P5
P5 --> P6
P6 --> T_EL
P6 --> T_EM
M --> P7
P7 --> T_EL
P7 --> T_EM
T_EL --> V
T_EM --> 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
公開
📂 技術的な詳細(開発者向け)
スクレイパー・インポーター
| データソース | スクリプト | 主要ロジック |
|---|---|---|
| 総務省(衆院小選挙区) https://www.soumu.go.jp/senkyo/senkyo_s/data/ | scripts/import_soumu_election.py + soumu_election_scraper / soumu_xls_parser | 総務省の市区町村別得票数XLSをダウンロードし、シート構造を解析して候補者・得票数を抽出。既存Politicianとマッチングして当選情報を記録 |
| 総務省(衆院比例代表) | scripts/import_soumu_proportional.py + soumu_proportional_pdf_extractor | 比例代表名簿PDFからブロック・名簿順位を抽出し、候補者をPolitician・ElectionMemberに登録 |
| 総務省(参院選挙区・比例代表) | scripts/import_soumu_sangiin_election.py / import_soumu_sangiin_proportional.py | 参議院の選挙区・比例代表それぞれのXLSを解析し候補者と結果を投入 |
| Wikipedia(歴代選挙) | scripts/import_wikipedia_election.py / import_wikipedia_sangiin_election.py / import_wikipedia_local_election.py | 第1〜44回衆院選など総務省に無い古い選挙について、Wikitextの当選者テーブル/テンプレートから候補者情報を抽出 |
| 管理画面からの手動入力(Streamlit) | src/interfaces/web/streamlit/views/election_members_view.py | スクレイプで取り切れない候補者や結果の訂正を手動で行う。当選者一覧から個別レコードを編集・追加 |
DBテーブル(PostgreSQL)
| テーブル | 説明 |
|---|---|
elections | 選挙イベント(選挙日・選挙種別) |
election_members | 選挙ごとの候補者・結果・得票数 |
dbtモデル(Data Vault層)
| モデル | 役割 |
|---|---|
hub_election | 選挙のハブ |
sat_election | 選挙の属性サテライト |
link_election_member | 選挙 ↔ 政治家 のリンク |
sat_election_member | 候補者結果(得票数・当落)のサテライト |
BigQuery公開テーブル
| テーブル | データセット |
|---|---|
elections | sagebase |
election_members | sagebase |