feat(explorer): add load_party_axis_scores helper
docs/superpowers/plans/2026-03-24-svd-tab-redesign.md
This commit is contained in:
+29
@@ -179,6 +179,35 @@ def load_party_map(db_path: str) -> Dict[str, str]:
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
@st.cache_data(show_spinner="Partijposities op SVD-assen laden…")
|
||||||
|
def load_party_axis_scores(db_path: str) -> Dict[str, List[float]]:
|
||||||
|
"""Return per-party SVD vectors for window='2025'.
|
||||||
|
|
||||||
|
Queries svd_vectors WHERE entity_type='mp' AND window_id='2025'
|
||||||
|
AND entity_id is a known current-parliament party.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
{party_name: [float * k]} — k = 50 for the canonical 2025 window
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
con = duckdb.connect(database=db_path, read_only=True)
|
||||||
|
placeholders = ", ".join("?" for _ in CURRENT_PARLIAMENT_PARTIES)
|
||||||
|
rows = con.execute(
|
||||||
|
f"SELECT entity_id, vector FROM svd_vectors "
|
||||||
|
f"WHERE entity_type='mp' AND window_id='2025' "
|
||||||
|
f"AND entity_id IN ({placeholders})",
|
||||||
|
list(CURRENT_PARLIAMENT_PARTIES),
|
||||||
|
).fetchall()
|
||||||
|
con.close()
|
||||||
|
return {
|
||||||
|
row[0]: json.loads(row[1]) if isinstance(row[1], str) else list(row[1])
|
||||||
|
for row in rows
|
||||||
|
}
|
||||||
|
except Exception:
|
||||||
|
logger.exception("Failed to load party axis scores")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
@st.cache_data(show_spinner="Moties laden…")
|
@st.cache_data(show_spinner="Moties laden…")
|
||||||
def load_motions_df(db_path: str) -> pd.DataFrame:
|
def load_motions_df(db_path: str) -> pd.DataFrame:
|
||||||
"""Load the full motions table as a pandas DataFrame (read-only)."""
|
"""Load the full motions table as a pandas DataFrame (read-only)."""
|
||||||
|
|||||||
Reference in New Issue
Block a user