Biblioteca de exploración visual por dataset

Fecha: 2026-09-11. Pide: viz en cada dataset, como bost.ocks.org/mike.

Decisión: Bostock a mano, sin D3 ni dependencias

scripts/build_viz.py genera datasets/<slug>/explore.html con SVG+JS vanilla (datos embebidos como JSON). Homenajes directos al canon Bostock:

  • Actividad: barras apiladas/agrupadas con toggle interpolado (constancia de objeto).
  • Temas × eras: matriz de co-ocurrencia (Les Misérables).
  • Mapa de clusters: layout de fuerza arrastrable (Use the Force); click abre su muestra.
  • Barras ordenables con transición + tooltip propio en todo.

JS verificado con node --check (se extraen los bloques y se chequean en el build). Sin CDN: funciona en Vercel, file:// y como link desde CKAN.

Segunda pata: matplotlib estático (thumbs)

scripts/build_charts_mpl.py → datasets/<slug>/thumb.png (~19KB): lógica = barras apiladas actividad; clusters = top 12. Usos: tarjeta del index, fallback <noscript> en explore.html, recurso vista-previa PNG en CKAN (preview vía image_view).

Lección Vercel: instala requirements.txt solo (PEP 668 rompe pip install explícito) y su numpy 2.5.3 trae ABI rota en py3.14 → el build corre charts tolerante (|| echo skip) y usa los thumbs generados en local. Regla: thumbs se regeneran en local con npm run charts y se suben como archivos.

Cableado

  • build_site.py → build_viz.py (en ese orden; package.json vercel-build/build). build_viz inyecta explorar → en las tarjetas del index.
  • CKAN local: extra viz_url por dataset (package_patch) → apunta al explore en Vercel.

Regla

explore.html es generado, no se edita a mano. Nuevo dataset = añadir función viz_<slug> en build_viz.py.