--- name: render_automatic_eda kind: pipeline lang: py domain: pipelines purity: impure version: "1.0.0" signature: "def render_automatic_eda(db_path: str, table: str, backend: str = \"duckdb\", sample: int = 5000, run_models: bool = True, run_series: bool = True, run_llm: bool = False, out_dir: str = \"reports\", basename: str = None, ctx_extra: dict = None) -> dict" description: "Informe AutomaticEDA COMPLETO one-shot de una tabla DuckDB/PostgreSQL: perfila con profile_table, construye el ctx con los datos crudos (build_eda_render_ctx: raw_numeric para modelos/geo, timeseries_raw para series, geo_points para el mapa, db_path/table para la agregacion push-down) y emite PDF (A5 movil) Y PPTX (16:9) del mismo documento por capitulos, con los 11 capitulos POBLADOS de verdad (clusters pintados sobre el PCA, evolucion temporal, mapa geografico y tablas de agregacion), no degradados. Devuelve las rutas de PDF/PPTX y el manifiesto de versiones por capitulo." tags: [eda, duckdb, postgres, profiling, pipeline, dataops, report, pdf, pptx] uses_functions: - profile_table_py_pipelines - build_eda_render_ctx_py_datascience - render_automatic_eda_pdf_py_datascience - render_automatic_eda_pptx_py_datascience uses_types: [] returns: [] returns_optional: false error_type: error_go_core imports: [] tested: true tests: - "render end-to-end sobre DuckDB sintetico con categoricas + fecha + lat/lon emite PDF y PPTX con paginas/slides" test_file_path: "python/functions/pipelines/render_automatic_eda_test.py" file_path: "python/functions/pipelines/render_automatic_eda.py" params: - name: db_path desc: "Ruta al archivo DuckDB (read-only, debe existir) o DSN PostgreSQL si backend='postgres'." - name: table desc: "Nombre de la tabla a perfilar e informar." - name: backend desc: "'duckdb' (default) o 'postgres'. Selecciona el motor de perfilado y muestreo." - name: sample desc: "Maximo de filas/valores muestreados por columna para el perfil y para los datos crudos del ctx (LIMIT). Default 5000." - name: run_models desc: "Si True (default) corre los modelos baratos (PCA/KMeans/IsolationForest/normalidad); necesario para que el capitulo modelos pinte los clusters sobre el plano PCA." - name: run_series desc: "Si True (default) calcula el analisis de serie temporal por columna numerica; necesario para el analisis del capitulo timeseries (la grafica de evolucion sale de los datos crudos del ctx aunque sea False)." - name: run_llm desc: "Si True (default False) hace la interpretacion LLM del perfil y ACTIVA la narrativa LLM de los capitulos modelos/geospatial/agregacion (titulos de segmento, descripcion de zona, seleccion de agregaciones). Con False usan su derivacion cuantitativa sin red." - name: out_dir desc: "Directorio de salida (se crea si no existe). Default 'reports'." - name: basename desc: "Nombre base de los archivos sin extension. Default 'aeda__'." - name: ctx_extra desc: "Dict opcional con claves de presentacion/contexto extra que se mezclan en el ctx (dataset_name, description, source_origin, ...); no pisan las claves de datos calculadas por build_eda_render_ctx." output: "dict {status:'ok', pdf_path:str, pptx_path:str, manifest_path:str|None, n_pages:int, n_slides:int, pdf_note:str, pptx_note:str, profile:} o {status:'error', error:str} (dict-no-throw)." --- ## Ejemplo ```python from pipelines.render_automatic_eda import render_automatic_eda # Tabla DuckDB con categoricas + fecha + numericas: informe completo a reports/. r = render_automatic_eda("/tmp/ventas.duckdb", "ventas", run_models=True, run_series=True, out_dir="reports") print(r["status"], r["pdf_path"], r["pptx_path"], r["n_pages"], r["n_slides"]) # ok reports/aeda_ventas_20260630-120500.pdf reports/aeda_ventas_20260630-120500.pptx 14 16 # Con narrativa LLM (titulos de segmento, descripcion geografica, etc.): r = render_automatic_eda("/tmp/ventas.duckdb", "ventas", run_llm=True) ``` ## Cuando usarla Cuando quieras el informe AutomaticEDA COMPLETO (PDF + PPTX) de una tabla en una sola llamada, con los capitulos de modelos, series, geoespacial y agregacion ya poblados (no degradados). Es el reemplazo de "perfila + monta el ctx a mano + llama a los dos renderers": este pipeline orquesta `profile_table` -> `build_eda_render_ctx` -> `render_automatic_eda_pdf`/`_pptx`. Usalo como entregable para compartir un EDA, o como el motor detras de `profile_table( emit_automatic=True)` y del skill `/eda`. ## Gotchas - Impura: ESCRIBE el PDF, el PPTX y `automatic_eda_manifest.json` en `out_dir`. - `db_path` debe existir: DuckDB read-only no crea la base. - `run_models=True` y `run_series=True` por defecto encarecen el perfil (PCA/ KMeans/IsolationForest + ADF/KPSS/STL por columna). Para un informe mas barato ponlos a False: los capitulos modelos/timeseries se omiten o se reducen, pero el resto del informe sale igual. - `run_llm=True` hace llamadas de red (interpretacion del perfil + narrativa por capitulo). Sin red, dejalo en False: los capitulos siguen completos con su derivacion cuantitativa (titulos de segmento derivados, nota geografica derivada, seleccion de agregaciones cuantitativa). - El PPTX requiere `python-pptx`; si no esta instalado, `pptx_path` sera None y `pptx_note` lo explica (el PDF se emite igual). - Los datos crudos del ctx se muestrean con `sample` (LIMIT), no se trae la tabla entera a RAM; con tablas enormes sube `sample` si quieres mas representatividad (coste: mas memoria).