Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.4 KiB
name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | params | output | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| render_eda_markdown | function | py | datascience | 1.0.0 | pure | def render_eda_markdown(profile: dict) -> str | Convierte un TableProfile (dict del grupo eda) en un report markdown legible y autosuficiente. Render puro: dict de entrada -> string markdown de salida. Lee todo defensivamente con .get(...) porque muchas claves del perfil pueden venir None. Genera secciones Overview, Columnas, Numéricas (con sparkline ASCII del histograma), Categóricas, Calidad, Correlaciones y Análisis LLM, omitiendo limpiamente lo que esté vacío. |
|
|
String markdown con el report EDA. Empieza por '# EDA — <table>' y contiene las secciones disponibles (Overview, Columnas, Numéricas, Categóricas, Calidad, Correlaciones, Análisis LLM). Las secciones sin datos se omiten. | false | true |
|
python/functions/datascience/render_eda_markdown_test.py | python/functions/datascience/render_eda_markdown.py |
Ejemplo
from datascience import render_eda_markdown
profile = {
"table": "sales",
"source": "data/sales.csv",
"n_rows": 1000,
"n_cols": 1,
"null_cell_pct": 0.015,
"type_breakdown": {"numeric": 1},
"columns": [
{
"name": "price",
"inferred_type": "float",
"semantic_type": "currency",
"null_pct": 0.0,
"distinct_count": 850,
"unique_pct": 0.85,
"quality_score": 0.95,
"flags": [],
"numeric": {
"min": 1.0, "median": 40.0, "mean": 42.5, "std": 12.3,
"p25": 30.0, "p75": 55.0, "p95": 80.0, "p99": 95.0,
"skew": 0.4, "outlier_pct": 0.012, "distribution_type": "right-skewed",
"histogram": [
{"lo": 0, "hi": 25, "count": 100},
{"lo": 25, "hi": 50, "count": 500},
{"lo": 50, "hi": 75, "count": 300},
{"lo": 75, "hi": 100, "count": 50},
],
},
"categorical": None,
},
],
"correlations": None,
"llm": None,
}
md = render_eda_markdown(profile)
print(md)
Salida (extracto):
# EDA — sales
source: `data/sales.csv` · 1000 rows × 1 cols
...
### price
...
histogram: `▂█▅▁`
Cuando usarla
Úsala como paso final de un pipeline EDA: tras construir el TableProfile (con las
funciones del grupo eda que perfilan columnas, calidad e histogramas), pásaselo a
esta función para obtener un report markdown listo para volcar a un .md, una celda
de notebook, una nota de vault o un mensaje. Es render puro: no escribe a disco,
solo devuelve el string, así que tú decides dónde guardarlo. Tolera perfiles
parciales (correlaciones o LLM aún no calculados) sin fallar.
Gotchas
Función pura sin efectos. El sparkline del histograma escala los count de cada bin
linealmente sobre la rampa de bloques ▁▂▃▄▅▆▇█; si todos los counts son iguales, se
dibuja el bloque más bajo para todos. No escribe el report a ningún archivo — el
caller es responsable de persistirlo.
Convención de porcentajes: TODOS los campos *_pct (null_pct, empty_pct,
unique_pct, outlier_pct, zero_pct, negative_pct, null_cell_pct,
duplicate_pct, y el pct/mode_pct del sub-dict categorical) se esperan como
fracción 0-1 (p.ej. unique_pct=0.857 = 85.7%). El render los multiplica por 100
al formatear, mostrando 85.70%. No pases valores ya en escala 0-100 o saldrán inflados.