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",
|
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 = {
|
_STRATEGY_LABELS = {
|
||||||
"LOWEST_COST_WITHOUT_CAP": "Menor coste",
|
"LOWEST_COST_WITHOUT_CAP": "Menor coste",
|
||||||
"LOWEST_COST_WITH_BID_CAP": "Cap. puja",
|
"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["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))
|
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 ───────────────────────────────────────────────────────────────
|
# ── 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)
|
dates_available = sorted(df_all["created_at"].dropna().unique(), reverse=True)
|
||||||
sel_date = f1.selectbox("Fecha análisis", dates_available)
|
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 []
|
verts_available = sorted(df_all["vertical"].dropna().unique().tolist())
|
||||||
sel_camp = f2.selectbox("Campaña", ["Todas"] + camp_ids)
|
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
|
# Apply filters
|
||||||
df = df_all.copy()
|
df = df_all.copy()
|
||||||
if sel_date:
|
if sel_date:
|
||||||
df = df[df["created_at"] == sel_date]
|
df = df[df["created_at"] == sel_date]
|
||||||
if sel_camp != "Todas" and "campaign_id" in df.columns:
|
if sel_vert_cr != "Todas":
|
||||||
df = df[df["campaign_id"] == sel_camp]
|
df = df[df["vertical"] == sel_vert_cr]
|
||||||
|
if sel_camp != "Todas":
|
||||||
|
df = df[df["campaign_name"] == sel_camp]
|
||||||
if score_min > 0:
|
if score_min > 0:
|
||||||
df = df[df["score"] >= score_min]
|
df = df[df["score"] >= score_min]
|
||||||
|
|
||||||
@ -540,12 +562,11 @@ with tab5:
|
|||||||
|
|
||||||
# ── Table + Detail panel ──────────────────────────────────────────────────
|
# ── Table + Detail panel ──────────────────────────────────────────────────
|
||||||
rename_map = {
|
rename_map = {
|
||||||
"campaign_id": "Campaña ID",
|
"campaign_name": "Campaña",
|
||||||
|
"vertical": "Vertical",
|
||||||
"ad_name": "Anuncio",
|
"ad_name": "Anuncio",
|
||||||
"score": "Score",
|
"score": "Score",
|
||||||
"created_at": "Fecha",
|
"created_at": "Fecha",
|
||||||
"analysis": "Análisis",
|
|
||||||
"recommendations": "Recomendaciones",
|
|
||||||
}
|
}
|
||||||
display_cols = [c for c in rename_map if c in df.columns]
|
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)
|
df_display = df[display_cols].rename(columns=rename_map).reset_index(drop=True)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user