Data Stories — archivo local (datastori-es)
Proyecto en ~//Downloads/datastori-es: scrape del feed público
de Data Stories (podcast de dataviz de Enrico Bertini & Moritz Stefaner) a un
archivo local navegable. Sin dependencias (Python stdlib + HTML/CSS/JS vanilla,
funciona abriendo index.html sin servidor).
Cómo funciona / regenerar
cd ~/Downloads/datastori-es
python3 scrape.py # baja https://datastori.es/feed/mp3/ → data/episodes.json + episodes.js
open index.html # o python3 -m http.server (no hace falta para verlo)- 170 episodios (2012–2023), 143 invitados extraídos.
- Invitados: título primero (
with/w/feat/(with/With/A Tribute to), capítulos “Our guest:” como respaldo, + mapa manualOVERRIDESenscrape.py. - El audio se transmite desde datastori.es (no se descarga en esta v1).
Features añadidas (v2)
- “Lo esencial” por episodio (en
app.js): los capítulos como mini-viz — barra segmentada (ancho = duración, naranja = contenido, gris = intro/cierre) en cada tarjeta + en el detalle una timeline clicable (seek al audio) y los 3 “momentos clave” = capítulos de contenido más largos. Clasificación por regexHOUSEKEEPING_RE. Sin cambios en el scraper: se calcula en JS desde chapters. - Grafo de la comunidad (
grafo.html+grafo.js): red de 145 nodos (2 hosts + 143 invitados), edges host-invitado (286) + co-apariciones (41). Force-directed en canvas vanilla (sin deps), drag + hover tooltip. Color = año de primera aparición (2012 azul → 2023 naranja), tamaño = nº apariciones. Top repetidos: Kosara 11x, Andy Kirk 7x, Hullman 6x. - Capa de conceptos en el grafo (
scrape.py→match_concepts+grafo.js): taxonomía curada de 20 temas (storytelling, incertidumbre, color, a11y, sonif, clima, ML, NLP, mapas, data art, periodismo, dashboards, estadística, design systems, interacción, historia, ética, percepción, educación, academia) matcheada contra títulos de capítulos de contenido (se filtran los de housekeeping — ojo: “touch” matcheaba “Get in touch…” en los 170). Conceptos = nodos-diamante violeta en anillo exterior, posicionados por ángulo del centroide de sus invitados. Hover → resalta las conexiones concepto↔invitado. Reusable para la timeline temática. - Términos clave (
terminos.html+terminos.js,scrape.py→TERMS/match_terms): grafo de co-ocurrencia de ~49 términos específicos (bayes, anscombe, confidence interval, d3, vega, tableau, treemap, sankey, annotation, scrollytelling…), coloreado por concepto padre, con sparkline de menciones/año (2012–2023) sobre cada nodo, y panel lateral que cruza cada término con sus episodios (link aindex.html#N). Clic en un nodo abre el panel. - Rutas de aprendizaje (
rutas.html+rutas.js): 4 tracks por audiencia (Data Artist, Data Scientist, Visualizer, ML Researcher). Cada track = focus de conceptos + términos + invitados; se scorea cada episodio (+2 concepto, +1 término, +2 invitado clave), top 14 ordenado cronológico. Tags naranja (concepto) y gris (término) justifican cada pick. Scoring validado: visualizer → Jeff Heer, Vega-Lite, recaps VIS/Kosara; ds → Gelman & Hullman, uncertainty, Calling Bullshit.
Hallazgos importantes
- El feed solo trae transcripciones para 3 episodios (168–170); el resto no tiene transcripción publicada. Esto es lo que bloquea la búsqueda semántica/RAG.
- “linear regression”/“logistic regression”/“regression” = 0 apariciones en todo el corpus (títulos+descripciones+capítulos): Data Stories es diseño/comunicación, no stats. Los términos específicos que SÍ existen son de viz (d3, vega, treemap…) y unos pocos de stats (bayes, anscombe, correlation, confidence interval).
- Cuidado con keywords que matchean secciones fijas: “link” → la sección “Links” de cada descripción (146/170); “touch” → “Get in touch…”; “pan” → “panels/span”. Siempre matchear contra capítulos de contenido (filtrar housekeeping).
Ideas de proyectos sobre los pioneros (para retomar)
- Archivo local navegable — HECHO (base de las demás).
- Grafo de la comunidad: invitados + co-apariciones (related episodes) → red de quién apareció con quién. Hubs: Bertini/Stefaner; repetidos Munzner, Hullman, Kosara.
- Línea de tiempo temática: cluster de capítulos por tema para ver la evolución 2012→2023 (storytelling, uncertainty, ML fairness, accessibility).
- Índice de pioneros (“escuela de dataviz”): página por persona, sound-bites con timestamp + links a papers/libros.
- Buscador semántico local: embeddings de las transcripciones (el feed trae VTT/JSON).
- Podcast offline: bajar los 170 mp3s + reproductor local.
Roadmap: podcast como fuente de capacitación
El objetivo: Data Stories como base de conocimiento/entrenamiento para data-artists, DS, visualizers y ML researchers. Orden propuesto:
- Rutas de aprendizaje — HECHO (
rutas.html). - Transcripciones — HECHO (no whisper): dataset público de Moritz Stefaner en
archive.datastori.es. Endpointhttps://archive.datastori.es/data/{N}/transcript.json(AssemblyAI, diarizado, utterances con speaker+start/end ms+texto) para los 170.fetch_transcripts.pybaja todo →data/transcripts.json+transcripts.js(8.3 MB, 27,059 utterances, 184 hablantes). Ojo: el feed solo lista transcripciones para 168–170 y?podlove_transcript=webvttdevuelve header vacío para el resto; la fuente real es archive.datastori.es. - Búsqueda full-text — HECHO (
buscar.html+buscar.js): busca en las transcripciones completas + filtro por hablante, agrupa por episodio y enlaza aindex.html#N@ms(deep-link con seek). “linear regression” (3), “logistic regression” (5), “bayes” (22), “uncertainty” (132) ya son encontrables. - RAG semántico — HECHO (
rag.html+rag.js): recuperación BM25 determinista (chunks de ~180 palabras, stopwords EN/ES incl. fillers conversacionales: “say”, “yeah”, “think”), + generación vía Ollama/api/chat(qwen3.6/gemma4) con prompt estricto de grounding y citas [n]. TRANSPARENCIA: muestra los chunks recuperados con score + términos matcheados, y un<details>con el prompt exacto enviado. Generación optativa (sin Ollama, la recuperación funciona igual). Detección de Ollama vía/api/tags; CORS puede requerirOLLAMA_ORIGINS=*. 5,412 chunks. Modelos del user: qwen3.6 (23GB) + gemma4 (9.6GB); NO tiene modelo de embeddings. - Fichas de pioneros — pendiente: página por invitado con sound-bites + papers/libros.
- Línea de tiempo temática — pendiente: evolución 2012→2023 de concepts/terms.
Bloqueante resuelto: ya hay texto completo de los 170 episodios.