Creatividades tab: vertical filter inside tab, campaign filter by name
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
4d67c25578
commit
2c12a48407
39
dashboard.py
39
dashboard.py
@ -26,6 +26,16 @@ st.set_page_config(
|
||||
initial_sidebar_state="expanded",
|
||||
)
|
||||
|
||||
import streamlit.components.v1 as components
|
||||
components.html("""
|
||||
<script>
|
||||
// Ping cada 30s para mantener el WebSocket activo y evitar el error 401 por inactividad
|
||||
setInterval(function() {
|
||||
fetch('/_stcore/health').catch(function() {});
|
||||
}, 30000);
|
||||
</script>
|
||||
""", height=0)
|
||||
|
||||
_STRATEGY_LABELS = {
|
||||
"LOWEST_COST_WITHOUT_CAP": "Menor coste",
|
||||
"LOWEST_COST_WITH_BID_CAP": "Cap. puja",
|
||||
@ -497,23 +507,35 @@ with tab5:
|
||||
df_all["score"] = pd.to_numeric(df_all.get("score", 0), errors="coerce").fillna(0)
|
||||
df_all["created_at"] = df_all.get("created_at", pd.Series(dtype=str))
|
||||
|
||||
# Map campaign_id → campaign_name using already-loaded Meta data
|
||||
camp_id_to_name = {cid: m["name"] for cid, m in campaign_metrics.items()}
|
||||
df_all["campaign_name"] = df_all["campaign_id"].map(
|
||||
lambda cid: camp_id_to_name.get(str(cid), str(cid))
|
||||
)
|
||||
df_all["vertical"] = df_all["campaign_name"].map(_extract_vertical)
|
||||
|
||||
# ── Filters ───────────────────────────────────────────────────────────────
|
||||
f1, f2, f3 = st.columns([2, 2, 2])
|
||||
f1, f2, f3, f4 = st.columns([2, 2, 2, 2])
|
||||
|
||||
dates_available = sorted(df_all["created_at"].dropna().unique(), reverse=True)
|
||||
sel_date = f1.selectbox("Fecha análisis", dates_available)
|
||||
|
||||
camp_ids = sorted(df_all["campaign_id"].dropna().unique().tolist()) if "campaign_id" in df_all.columns else []
|
||||
sel_camp = f2.selectbox("Campaña", ["Todas"] + camp_ids)
|
||||
verts_available = sorted(df_all["vertical"].dropna().unique().tolist())
|
||||
sel_vert_cr = f2.selectbox("Vertical", ["Todas"] + verts_available, key="cr_vert")
|
||||
|
||||
score_min = f3.slider("Score mínimo", 0.0, 10.0, 0.0, step=0.5)
|
||||
camp_names = sorted(df_all["campaign_name"].dropna().unique().tolist())
|
||||
sel_camp = f3.selectbox("Campaña", ["Todas"] + camp_names, key="cr_camp")
|
||||
|
||||
score_min = f4.slider("Score mínimo", 0.0, 10.0, 0.0, step=0.5)
|
||||
|
||||
# Apply filters
|
||||
df = df_all.copy()
|
||||
if sel_date:
|
||||
df = df[df["created_at"] == sel_date]
|
||||
if sel_camp != "Todas" and "campaign_id" in df.columns:
|
||||
df = df[df["campaign_id"] == sel_camp]
|
||||
if sel_vert_cr != "Todas":
|
||||
df = df[df["vertical"] == sel_vert_cr]
|
||||
if sel_camp != "Todas":
|
||||
df = df[df["campaign_name"] == sel_camp]
|
||||
if score_min > 0:
|
||||
df = df[df["score"] >= score_min]
|
||||
|
||||
@ -540,12 +562,11 @@ with tab5:
|
||||
|
||||
# ── Table + Detail panel ──────────────────────────────────────────────────
|
||||
rename_map = {
|
||||
"campaign_id": "Campaña ID",
|
||||
"campaign_name": "Campaña",
|
||||
"vertical": "Vertical",
|
||||
"ad_name": "Anuncio",
|
||||
"score": "Score",
|
||||
"created_at": "Fecha",
|
||||
"analysis": "Análisis",
|
||||
"recommendations": "Recomendaciones",
|
||||
}
|
||||
display_cols = [c for c in rename_map if c in df.columns]
|
||||
df_display = df[display_cols].rename(columns=rename_map).reset_index(drop=True)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user