docs(eda): el skill /eda emite SIEMPRE PDF + PPTX con AutomaticEDA
Actualiza el flujo del comando para que un EDA completo emita el informe AutomaticEDA en sus dos formatos (PDF A5 móvil + PPTX 16:9) con los 11 capítulos poblados, vía render_automatic_eda (o profile_table(emit_automatic=True)). El PDF legacy (emit_pdf/render_eda_pdf) queda como salida independiente opcional. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+20
-10
@@ -25,9 +25,10 @@ Página madre del grupo: `docs/capabilities/eda.md` (léela primero para cargar
|
|||||||
- `--models` → `run_models=True` (PCA/KMeans/IsolationForest/normalidad).
|
- `--models` → `run_models=True` (PCA/KMeans/IsolationForest/normalidad).
|
||||||
- `--llm` → `run_llm=True` (1 call LLM sobre el perfil agregado).
|
- `--llm` → `run_llm=True` (1 call LLM sobre el perfil agregado).
|
||||||
- `--series` → `run_series=True` (estacionariedad ADF+KPSS, ACF/PACF, STL, retornos por columna numérica).
|
- `--series` → `run_series=True` (estacionariedad ADF+KPSS, ACF/PACF, STL, retornos por columna numérica).
|
||||||
- `--pdf` → `emit_pdf=True` (PDF A5 vertical legible en móvil).
|
- `--pdf` → `emit_pdf=True` (PDF A5 legacy de `render_eda_pdf`, legible en móvil).
|
||||||
|
- `--legacy-only` → emite SOLO el PDF legacy (sin AutomaticEDA), para casos en que solo se quiera el PDF rápido.
|
||||||
|
|
||||||
Por defecto, para un EDA "completo" cuando el usuario no especifica, activa `run_models`, `run_series` y `emit_pdf`; deja `run_llm` para cuando lo pida o cuando interese la interpretación semántica (es la única parte que gasta tokens del modelo).
|
Por defecto, **un EDA completo emite SIEMPRE el informe AutomaticEDA en sus dos formatos: PDF (A5 móvil) Y PPTX (16:9 para compartir)** con los 11 capítulos poblados (portada, overview, distribuciones, calidad, correlaciones, modelos, series, geoespacial, agregación, interpretación LLM). Usa el pipeline `render_automatic_eda` (o `profile_table(emit_automatic=True)`), que activa `run_models` y `run_series` para que los capítulos de modelos/series/geoespacial/agregación salgan poblados. Deja `run_llm` para cuando el usuario lo pida o interese la interpretación semántica + narrativa por capítulo (es la única parte que gasta tokens del modelo).
|
||||||
|
|
||||||
## Reglas duras
|
## Reglas duras
|
||||||
|
|
||||||
@@ -35,7 +36,7 @@ Por defecto, para un EDA "completo" cuando el usuario no especifica, activa `run
|
|||||||
2. **CSV/Parquet/Excel** entran cargándolos antes a DuckDB (`read_csv_auto`/`read_parquet`/`read_xlsx`) — DuckDB es el motor por defecto. No traigas la tabla entera a RAM.
|
2. **CSV/Parquet/Excel** entran cargándolos antes a DuckDB (`read_csv_auto`/`read_parquet`/`read_xlsx`) — DuckDB es el motor por defecto. No traigas la tabla entera a RAM.
|
||||||
3. **Secretos**: si la fuente es un DSN PostgreSQL con credenciales, NO las imprimas en los reports ni en el notebook; resuélvelas vía `resolve_pg_dsn`/`pass` cuando aplique.
|
3. **Secretos**: si la fuente es un DSN PostgreSQL con credenciales, NO las imprimas en los reports ni en el notebook; resuélvelas vía `resolve_pg_dsn`/`pass` cuando aplique.
|
||||||
4. **El report es un artefacto local**: vive en `reports/` (gitignored), no se sube a Gitea ni se versiona. Compartir = pasar la ruta (regla `reports.md`).
|
4. **El report es un artefacto local**: vive en `reports/` (gitignored), no se sube a Gitea ni se versiona. Compartir = pasar la ruta (regla `reports.md`).
|
||||||
5. **Entrega las 4 salidas**: JSON sidecar + Markdown + **PDF móvil** + **notebook Jupyter colaborativo ejecutado en vivo**.
|
5. **Entrega las salidas**: el informe **AutomaticEDA PDF + PPTX** (siempre, con `render_automatic_eda` / `emit_automatic=True`) + (opcional) JSON sidecar + Markdown + PDF legacy + **notebook Jupyter colaborativo ejecutado en vivo**. Comparte las rutas de PDF y PPTX.
|
||||||
|
|
||||||
## Paso 1 — Perfilar y escribir los reports
|
## Paso 1 — Perfilar y escribir los reports
|
||||||
|
|
||||||
@@ -43,18 +44,26 @@ Una tabla (caso normal):
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
PYTHONPATH=python/functions python/.venv/bin/python3 - <<'PYEOF'
|
PYTHONPATH=python/functions python/.venv/bin/python3 - <<'PYEOF'
|
||||||
from pipelines.profile_table import profile_table
|
from pipelines.render_automatic_eda import render_automatic_eda
|
||||||
r = profile_table(
|
# Informe AutomaticEDA COMPLETO one-shot: perfil + ctx (datos crudos) + PDF + PPTX
|
||||||
|
# con los 11 capítulos poblados (clusters pintados, evolución temporal, mapa,
|
||||||
|
# tablas de agregación). run_llm=True añade la narrativa LLM por capítulo.
|
||||||
|
r = render_automatic_eda(
|
||||||
"/ruta/datos.duckdb", "ventas",
|
"/ruta/datos.duckdb", "ventas",
|
||||||
run_models=True, run_series=True, emit_pdf=True, run_llm=False,
|
run_models=True, run_series=True, run_llm=False, out_dir="reports",
|
||||||
)
|
)
|
||||||
print("status:", r["status"])
|
print("status:", r["status"])
|
||||||
print("md: ", r["report_md_path"])
|
print("pdf: ", r["pdf_path"], "(", r["n_pages"], "págs )")
|
||||||
print("json: ", r["report_json_path"])
|
print("pptx: ", r["pptx_path"], "(", r["n_slides"], "slides )")
|
||||||
print("pdf: ", r["pdf_path"])
|
print("manifest:", r["manifest_path"])
|
||||||
PYEOF
|
PYEOF
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Si además quieres el report Markdown + JSON sidecar y/o el PDF legacy junto al
|
||||||
|
AutomaticEDA, usa `profile_table(emit_automatic=True, emit_pdf=True, write_report=True)`:
|
||||||
|
emite todo a la vez (`report_md_path`, `report_json_path`, `pdf_path` legacy,
|
||||||
|
`aeda_pdf_path`, `aeda_pptx_path`, `aeda_manifest_path`).
|
||||||
|
|
||||||
Una base entera (todas las tablas + relaciones FK):
|
Una base entera (todas las tablas + relaciones FK):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -90,6 +99,7 @@ Sigue la memoria `eda-workflow-registry` y la regla `notebook_collaboration.md`:
|
|||||||
## Notas
|
## Notas
|
||||||
|
|
||||||
- El `TableProfile` lleva ahora, además del perfilado base y las correlaciones con FDR: `series` (por columna numérica, con `run_series`), `reexpression` por columna numérica (escalera de Tukey) y `caveats` (siempre, avisos exploratorios). El Markdown y el PDF renderizan estas secciones automáticamente cuando están presentes.
|
- El `TableProfile` lleva ahora, además del perfilado base y las correlaciones con FDR: `series` (por columna numérica, con `run_series`), `reexpression` por columna numérica (escalera de Tukey) y `caveats` (siempre, avisos exploratorios). El Markdown y el PDF renderizan estas secciones automáticamente cuando están presentes.
|
||||||
- El PDF (`emit_pdf`) está pensado para leerse en el móvil (A5 vertical, tipografía grande, gráficos Tufte). Se escribe junto al Markdown en `reports/`.
|
- El informe **AutomaticEDA** (`render_automatic_eda` / `emit_automatic=True`) emite el MISMO documento por capítulos a **PDF (A5 móvil)** y **PPTX (16:9)** con garantía de no-corte (texto envuelto, tablas partidas repitiendo cabecera, figuras escaladas) y negrita real (`**texto**`). Escribe `automatic_eda_manifest.json` con la versión de cada capítulo. Los capítulos modelos/series/geoespacial/agregación se pueblan con los datos crudos que `build_eda_render_ctx` muestrea de la base (no se traen tablas enteras a RAM).
|
||||||
|
- El PDF legacy (`emit_pdf`, `render_eda_pdf`) sigue disponible y es independiente del AutomaticEDA (A5 vertical, gráficos Tufte). Se escribe junto al Markdown en `reports/`.
|
||||||
- `run_series` ordena por la primera columna datetime si existe; si no, por el orden físico de filas. Necesita ≥8 puntos válidos por columna.
|
- `run_series` ordena por la primera columna datetime si existe; si no, por el orden físico de filas. Necesita ≥8 puntos válidos por columna.
|
||||||
- Fuentes: DuckDB (CSV/Parquet/Excel cargados antes) y PostgreSQL (`backend="postgres"`). `profile_database` (multi-tabla + FK) es solo DuckDB por ahora.
|
- Fuentes: DuckDB (CSV/Parquet/Excel cargados antes) y PostgreSQL (`backend="postgres"`). `profile_database` (multi-tabla + FK) es solo DuckDB por ahora.
|
||||||
|
|||||||
Reference in New Issue
Block a user