From 6f9b17bef9cfcaf04d43e59932d12ba515454001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Acu=C3=B1a?= Date: Sun, 17 May 2026 18:58:00 -0400 Subject: [PATCH 1/4] =?UTF-8?q?docs:=20alinear=20toda=20la=20documentaci?= =?UTF-8?q?=C3=B3n=20al=20curr=C3=ADculo=20actual=20(197=20clases=20/=209?= =?UTF-8?q?=20partes)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remueve referencias a v1, currículo anterior, "31 clases", "13 módulos" e historicos/ de la documentación activa. La fuente de verdad del producto es la carpeta classes/ con 197 clases en 9 partes. - README, ROADMAP, RECRUITER, CONTRIBUTING, SECURITY: estado neutro sin v1/v2 - docs/syllabus, INDEX, GUIA_EVALUACION, cronograma, ARQUITECTURA, CATALOGO: filas y secciones sobre v1 archivado eliminadas - docs/student-guide, instructor-guide, metodologia, plan-evaluacion, perfil-estudiantes, portal-estudiante, herramientas, aula-ia, entorno-interactivo: banner "v1 → v2" removido - datasets/README: mapeo dataset→clase v1 reemplazado por descripción - classes/README, mobile/README: títulos y notas sin sufijo v2 Co-Authored-By: Claude Opus 4.7 --- CONTRIBUTING.md | 8 +-- README.md | 87 ++++++------------------ RECRUITER.md | 19 +++--- ROADMAP.md | 34 ++++----- SECURITY.md | 3 +- classes/README.md | 2 +- datasets/README.md | 8 +-- docs/ARQUITECTURA_PRODUCTO.md | 49 ++++++------- docs/CATALOGO_PRODUCTO.md | 40 +++++------ docs/GUIA_EVALUACION.md | 38 ++++------- docs/INDEX.md | 26 ++----- docs/aula-ia-y-problemas-frecuentes.md | 2 - docs/cronograma-referencial.md | 16 ++--- docs/entorno-interactivo.md | 2 - docs/herramientas-pedagogicas-de-aula.md | 2 - docs/instructor-guide.md | 2 - docs/metodologia-docente.md | 2 - docs/perfil-estudiantes.md | 2 - docs/plan-evaluacion.md | 2 - docs/portal-estudiante-y-app-movil.md | 2 - docs/student-guide.md | 2 - docs/syllabus.md | 6 +- mobile/README.md | 6 +- 23 files changed, 125 insertions(+), 235 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 55d49cac..41dfb7d9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -76,9 +76,9 @@ curl http://127.0.0.1:8000/health --- -## Estructura del currículo v2 +## Estructura del currículo -El currículo vigente vive en `classes/parte-N-slug/NNN-tema-slug/` (anidado por parte). Cada clase v2 es un stub generado con la estructura mínima: +El currículo vive en `classes/parte-N-slug/NNN-tema-slug/` (anidado por parte). Cada clase es un stub generado con la estructura mínima: ``` classes/parte-N-slug/NNN-tema-slug/ @@ -86,9 +86,9 @@ classes/parte-N-slug/NNN-tema-slug/ └── notebook.ipynb # cuaderno guía (hoy stub de 8 celdas) ``` -Los materiales adicionales (`teoria.md`, `slides.md`, `ejercicios.md`, `homework.md`, `soluciones.ipynb`, `quiz.json`) se incorporan cuando una clase concreta se desarrolla, replicando el estándar visible en `historicos/classes-v1/` (currículo anterior, 31 clases con contenido completo, congelado como referencia). +Los materiales adicionales (`teoria.md`, `slides.md`, `ejercicios.md`, `homework.md`, `soluciones.ipynb`, `quiz.json`) se incorporan cuando una clase concreta se desarrolla. -El generador idempotente está en `scripts/generate_v2_curriculum.py`. +El generador idempotente de la estructura está en `scripts/generate_v2_curriculum.py`. --- diff --git a/README.md b/README.md index f46c31ab..d9825a02 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,11 @@ Curso completo de Python y Data Science — desde fundamentos hasta despliegue de modelos en producción. -> **Currículo v2 — 197 clases · 9 partes · pauta avanzada y completa** +> **197 clases · 9 partes · pauta avanzada y completa** > > Índice navegable: [classes/README.md](classes/README.md) · Syllabus: [docs/syllabus.md](docs/syllabus.md) -Integra currículo modular extenso, laboratorio interactivo local, portal del alumno, app de escritorio nativa para Windows y app Android. La pauta v2 se deriva de *Hands-On Machine Learning* (Géron, 3ª ed.), *Python Data Science Handbook* (VanderPlas), *Designing ML Systems* (Huyen), *ISLP* (James et al) y *Fairness and ML* (Barocas/Hardt/Narayanan). +Integra currículo modular extenso, laboratorio interactivo local, portal del alumno, app de escritorio nativa para Windows y app Android. La pauta se deriva de *Hands-On Machine Learning* (Géron, 3ª ed.), *Python Data Science Handbook* (VanderPlas), *Designing ML Systems* (Huyen), *ISLP* (James et al) y *Fairness and ML* (Barocas/Hardt/Narayanan). > **Origen y orientación del proyecto:** este repositorio nació como **muestra de habilidades técnicas y pedagógicas**, y hoy se desarrolla como **recurso personal de aprendizaje, enseñanza y mejora continua del propio producto**. Es público y abierto a cualquier persona que quiera aprender, enseñar o contribuir. @@ -24,19 +24,17 @@ Integra currículo modular extenso, laboratorio interactivo local, portal del al > **Versión:** v2.0.0-scaffold > **Clases:** 197 en 9 partes (Prerrequisitos, ML clásico, Deep Learning, Estadística inferencial, MLOps, Ingeniería de datos, Recomendadores, Ética, Capstones) > **Estructura:** carpetas y stubs de `README.md` + `notebook.ipynb` generados para las 197 clases -> **Contenido pedagógico:** ⏳ en desarrollo — los stubs deben rellenarse al estándar de la antigua clase 14 (ver [historicos/classes-v1/14-numpy-arrays-y-calculo](historicos/classes-v1/14-numpy-arrays-y-calculo) como referencia de calidad mínima) -> **Currículo anterior (v1, 31 clases):** preservado en [historicos/classes-v1/](historicos/classes-v1) como fuente de material reutilizable +> **Contenido pedagógico:** ⏳ en desarrollo — los stubs se rellenan por bloques siguiendo el orden de `docs/syllabus.md` > **Laboratorio:** Flask local con ejecución Python en tiempo real, captura de gráficos y guardado de notebooks > **Distribución:** app de escritorio Windows (Edge WebView2, sin navegador) + app Android (Expo/React Native) > **Postura:** local-first — no internet abierta sin capas adicionales -### Migración v1 → v2 — qué quedó pendiente +### Trabajo pendiente - Rellenar contenido pedagógico de las 197 clases (orden recomendado en `docs/syllabus.md` y `ROADMAP.md`) -- Mobile (`mobile/src/data/classes.js`) sigue apuntando a v1 -- Portal `site/` sigue apuntando a v1 -- PDFs y PPTX en `docs/pdfs/` y `docs/presentaciones/` son de v1 — se regenerarán por bloques al desarrollar contenido v2 -- Tests `test_download_class_pdf/pptx` están en `skip` hasta regenerar assets v2 +- Migrar el contenido embebido del mobile (`mobile/src/data/classes.js`) a la estructura actual +- Migrar el portal `site/` al índice actual +- Generar PDFs y PPTX por bloque al madurar el contenido de cada parte --- @@ -76,12 +74,11 @@ La documentación está pensada como sistema, no como inventario de archivos. | Laboratorio interactivo (`app/`) | entorno local de clase — notebooks, runner, ejecución Python | operativo | | Portal del alumno (`site/`) | punto de entrada oficial para estudiantes | operativo | | Vista institucional (`site/product/`) | presentación visual del producto | operativa | -| Currículo modular v2 (`classes/`) | 197 clases en 9 partes: Prerrequisitos, ML clásico, Deep Learning, Estadística inferencial, MLOps, Ingeniería de datos, Recomendadores, Ética, Capstones | scaffold operativo · contenido en desarrollo | -| Currículo v1 archivado (`historicos/classes-v1/`) | 31 clases con contenido completo (teoría, ejercicios, soluciones, PDF, PPTX) | referencia y fuente de material reutilizable | -| App de escritorio Windows (`launcher.py` + `program.spec` + `installer/`) | ventana nativa con Edge WebView2 — sin navegador, sin Python en el PC del alumno | código operativo · binario v2 pendiente de build | -| App Android (`mobile/`) | Expo/React Native con integración Google Colab | código operativo · contenido pendiente de migrar a v2 | -| PDFs (`docs/pdfs/`) | guías v1 vigentes; v2 se regenera por bloques al madurar el contenido | operativo | -| Presentaciones (`docs/presentaciones/`) | decks `.pptx` v1 vigentes; v2 mismo plan | operativo | +| Currículo modular (`classes/`) | 197 clases en 9 partes: Prerrequisitos, ML clásico, Deep Learning, Estadística inferencial, MLOps, Ingeniería de datos, Recomendadores, Ética, Capstones | scaffold operativo · contenido en desarrollo | +| App de escritorio Windows (`launcher.py` + `program.spec` + `installer/`) | ventana nativa con Edge WebView2 — sin navegador, sin Python en el PC del alumno | código operativo · binario pendiente de build | +| App Android (`mobile/`) | Expo/React Native con integración Google Colab | código operativo · contenido pendiente de migración al índice actual | +| PDFs (`docs/pdfs/`) | guías por clase | se regeneran por bloques al madurar el contenido | +| Presentaciones (`docs/presentaciones/`) | decks `.pptx` por clase | se regeneran por bloques al madurar el contenido | La fuente de verdad de esta taxonomía vive en [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md). @@ -89,49 +86,12 @@ La fuente de verdad de esta taxonomía vive en [docs/CATALOGO_PRODUCTO.md](docs/ ## Materiales listos para usar -### Currículo v2 (197 clases) +### Currículo (197 clases) - Índice navegable: [classes/README.md](classes/README.md) - Pauta completa: [docs/syllabus.md](docs/syllabus.md) -- Cada clase v2: `README.md` (ficha) + `notebook.ipynb` (stub). Los materiales PDF/PPTX se regeneran por bloque al madurar el contenido. +- Cada clase: `README.md` (ficha) + `notebook.ipynb` (stub). Los materiales PDF/PPTX se regeneran por bloque al madurar el contenido. -### Currículo v1 archivado (31 clases con contenido completo) - -Las 31 guías PDF y 31 presentaciones PPTX del currículo v1 siguen accesibles para uso inmediato en aula: - -| Clase | Guía PDF | Presentación PPTX | -|---|---|---| -| Clase 00 | [historicos/classes-v1/00-diagnostico-inicial/clase-00-diagnostico-inicial-guia-explicativa.pdf](historicos/classes-v1/00-diagnostico-inicial/clase-00-diagnostico-inicial-guia-explicativa.pdf) | [historicos/classes-v1/00-diagnostico-inicial/clase-00-diagnostico-inicial-presentacion.pptx](historicos/classes-v1/00-diagnostico-inicial/clase-00-diagnostico-inicial-presentacion.pptx) | -| Clase 01 | [historicos/classes-v1/01-python-fundamentos/clase-01-python-fundamentos-guia-explicativa.pdf](historicos/classes-v1/01-python-fundamentos/clase-01-python-fundamentos-guia-explicativa.pdf) | [historicos/classes-v1/01-python-fundamentos/clase-01-python-fundamentos-presentacion.pptx](historicos/classes-v1/01-python-fundamentos/clase-01-python-fundamentos-presentacion.pptx) | -| Clase 02 | [historicos/classes-v1/02-pandas-limpieza-datos/clase-02-pandas-limpieza-datos-guia-explicativa.pdf](historicos/classes-v1/02-pandas-limpieza-datos/clase-02-pandas-limpieza-datos-guia-explicativa.pdf) | [historicos/classes-v1/02-pandas-limpieza-datos/clase-02-pandas-limpieza-datos-presentacion.pptx](historicos/classes-v1/02-pandas-limpieza-datos/clase-02-pandas-limpieza-datos-presentacion.pptx) | -| Clase 03 | [historicos/classes-v1/03-visualizacion-exploratoria/clase-03-visualizacion-exploratoria-guia-explicativa.pdf](historicos/classes-v1/03-visualizacion-exploratoria/clase-03-visualizacion-exploratoria-guia-explicativa.pdf) | [historicos/classes-v1/03-visualizacion-exploratoria/clase-03-visualizacion-exploratoria-presentacion.pptx](historicos/classes-v1/03-visualizacion-exploratoria/clase-03-visualizacion-exploratoria-presentacion.pptx) | -| Clase 04 | [historicos/classes-v1/04-estadistica-descriptiva/clase-04-estadistica-descriptiva-guia-explicativa.pdf](historicos/classes-v1/04-estadistica-descriptiva/clase-04-estadistica-descriptiva-guia-explicativa.pdf) | [historicos/classes-v1/04-estadistica-descriptiva/clase-04-estadistica-descriptiva-presentacion.pptx](historicos/classes-v1/04-estadistica-descriptiva/clase-04-estadistica-descriptiva-presentacion.pptx) | -| Clase 05 | [historicos/classes-v1/05-visualizacion-con-matplotlib/clase-05-visualizacion-con-matplotlib-guia-explicativa.pdf](historicos/classes-v1/05-visualizacion-con-matplotlib/clase-05-visualizacion-con-matplotlib-guia-explicativa.pdf) | [historicos/classes-v1/05-visualizacion-con-matplotlib/clase-05-visualizacion-con-matplotlib-presentacion.pptx](historicos/classes-v1/05-visualizacion-con-matplotlib/clase-05-visualizacion-con-matplotlib-presentacion.pptx) | -| Clase 06 | [historicos/classes-v1/06-texto-fechas-y-transformaciones/clase-06-texto-fechas-y-transformaciones-guia-explicativa.pdf](historicos/classes-v1/06-texto-fechas-y-transformaciones/clase-06-texto-fechas-y-transformaciones-guia-explicativa.pdf) | [historicos/classes-v1/06-texto-fechas-y-transformaciones/clase-06-texto-fechas-y-transformaciones-presentacion.pptx](historicos/classes-v1/06-texto-fechas-y-transformaciones/clase-06-texto-fechas-y-transformaciones-presentacion.pptx) | -| Clase 07 | [historicos/classes-v1/07-mini-proyecto-guiado/clase-07-mini-proyecto-guiado-guia-explicativa.pdf](historicos/classes-v1/07-mini-proyecto-guiado/clase-07-mini-proyecto-guiado-guia-explicativa.pdf) | [historicos/classes-v1/07-mini-proyecto-guiado/clase-07-mini-proyecto-guiado-presentacion.pptx](historicos/classes-v1/07-mini-proyecto-guiado/clase-07-mini-proyecto-guiado-presentacion.pptx) | -| Clase 08 | [historicos/classes-v1/08-presentacion-de-hallazgos/clase-08-presentacion-de-hallazgos-guia-explicativa.pdf](historicos/classes-v1/08-presentacion-de-hallazgos/clase-08-presentacion-de-hallazgos-guia-explicativa.pdf) | [historicos/classes-v1/08-presentacion-de-hallazgos/clase-08-presentacion-de-hallazgos-presentacion.pptx](historicos/classes-v1/08-presentacion-de-hallazgos/clase-08-presentacion-de-hallazgos-presentacion.pptx) | -| Clase 09 | [historicos/classes-v1/09-machine-learning-intro/clase-09-machine-learning-intro-guia-explicativa.pdf](historicos/classes-v1/09-machine-learning-intro/clase-09-machine-learning-intro-guia-explicativa.pdf) | [historicos/classes-v1/09-machine-learning-intro/clase-09-machine-learning-intro-presentacion.pptx](historicos/classes-v1/09-machine-learning-intro/clase-09-machine-learning-intro-presentacion.pptx) | -| Clase 10 | [historicos/classes-v1/10-modelos-supervisados/clase-10-modelos-supervisados-guia-explicativa.pdf](historicos/classes-v1/10-modelos-supervisados/clase-10-modelos-supervisados-guia-explicativa.pdf) | [historicos/classes-v1/10-modelos-supervisados/clase-10-modelos-supervisados-presentacion.pptx](historicos/classes-v1/10-modelos-supervisados/clase-10-modelos-supervisados-presentacion.pptx) | -| Clase 11 | [historicos/classes-v1/11-evaluacion-y-pipelines/clase-11-evaluacion-y-pipelines-guia-explicativa.pdf](historicos/classes-v1/11-evaluacion-y-pipelines/clase-11-evaluacion-y-pipelines-guia-explicativa.pdf) | [historicos/classes-v1/11-evaluacion-y-pipelines/clase-11-evaluacion-y-pipelines-presentacion.pptx](historicos/classes-v1/11-evaluacion-y-pipelines/clase-11-evaluacion-y-pipelines-presentacion.pptx) | -| Clase 12 | [historicos/classes-v1/12-proyecto-final-y-cierre/clase-12-proyecto-final-y-cierre-guia-explicativa.pdf](historicos/classes-v1/12-proyecto-final-y-cierre/clase-12-proyecto-final-y-cierre-guia-explicativa.pdf) | [historicos/classes-v1/12-proyecto-final-y-cierre/clase-12-proyecto-final-y-cierre-presentacion.pptx](historicos/classes-v1/12-proyecto-final-y-cierre/clase-12-proyecto-final-y-cierre-presentacion.pptx) | -| Clase 13 | [historicos/classes-v1/13-que-es-la-ciencia-de-datos/clase-13-que-es-la-ciencia-de-datos-guia-explicativa.pdf](historicos/classes-v1/13-que-es-la-ciencia-de-datos/clase-13-que-es-la-ciencia-de-datos-guia-explicativa.pdf) | [historicos/classes-v1/13-que-es-la-ciencia-de-datos/clase-13-que-es-la-ciencia-de-datos-presentacion.pptx](historicos/classes-v1/13-que-es-la-ciencia-de-datos/clase-13-que-es-la-ciencia-de-datos-presentacion.pptx) | -| Clase 14 | [historicos/classes-v1/14-numpy-arrays-y-calculo/clase-14-numpy-arrays-y-calculo-guia-explicativa.pdf](historicos/classes-v1/14-numpy-arrays-y-calculo/clase-14-numpy-arrays-y-calculo-guia-explicativa.pdf) | [historicos/classes-v1/14-numpy-arrays-y-calculo/clase-14-numpy-arrays-y-calculo-presentacion.pptx](historicos/classes-v1/14-numpy-arrays-y-calculo/clase-14-numpy-arrays-y-calculo-presentacion.pptx) | -| Clase 15 | [historicos/classes-v1/15-sql-basico-con-python/clase-15-sql-basico-con-python-guia-explicativa.pdf](historicos/classes-v1/15-sql-basico-con-python/clase-15-sql-basico-con-python-guia-explicativa.pdf) | [historicos/classes-v1/15-sql-basico-con-python/clase-15-sql-basico-con-python-presentacion.pptx](historicos/classes-v1/15-sql-basico-con-python/clase-15-sql-basico-con-python-presentacion.pptx) | -| Clase 16 | [historicos/classes-v1/16-seaborn-visualizacion-estadistica/clase-16-seaborn-visualizacion-estadistica-guia-explicativa.pdf](historicos/classes-v1/16-seaborn-visualizacion-estadistica/clase-16-seaborn-visualizacion-estadistica-guia-explicativa.pdf) | [historicos/classes-v1/16-seaborn-visualizacion-estadistica/clase-16-seaborn-visualizacion-estadistica-presentacion.pptx](historicos/classes-v1/16-seaborn-visualizacion-estadistica/clase-16-seaborn-visualizacion-estadistica-presentacion.pptx) | -| Clase 17 | [historicos/classes-v1/17-estadistica-inferencial/clase-17-estadistica-inferencial-guia-explicativa.pdf](historicos/classes-v1/17-estadistica-inferencial/clase-17-estadistica-inferencial-guia-explicativa.pdf) | [historicos/classes-v1/17-estadistica-inferencial/clase-17-estadistica-inferencial-presentacion.pptx](historicos/classes-v1/17-estadistica-inferencial/clase-17-estadistica-inferencial-presentacion.pptx) | -| Clase 18 | [historicos/classes-v1/18-feature-engineering/clase-18-feature-engineering-guia-explicativa.pdf](historicos/classes-v1/18-feature-engineering/clase-18-feature-engineering-guia-explicativa.pdf) | [historicos/classes-v1/18-feature-engineering/clase-18-feature-engineering-presentacion.pptx](historicos/classes-v1/18-feature-engineering/clase-18-feature-engineering-presentacion.pptx) | -| Clase 19 | [historicos/classes-v1/19-regresion-lineal-y-multiple/clase-19-regresion-lineal-y-multiple-guia-explicativa.pdf](historicos/classes-v1/19-regresion-lineal-y-multiple/clase-19-regresion-lineal-y-multiple-guia-explicativa.pdf) | [historicos/classes-v1/19-regresion-lineal-y-multiple/clase-19-regresion-lineal-y-multiple-presentacion.pptx](historicos/classes-v1/19-regresion-lineal-y-multiple/clase-19-regresion-lineal-y-multiple-presentacion.pptx) | -| Clase 20 | [historicos/classes-v1/20-arboles-y-random-forest/clase-20-arboles-y-random-forest-guia-explicativa.pdf](historicos/classes-v1/20-arboles-y-random-forest/clase-20-arboles-y-random-forest-guia-explicativa.pdf) | [historicos/classes-v1/20-arboles-y-random-forest/clase-20-arboles-y-random-forest-presentacion.pptx](historicos/classes-v1/20-arboles-y-random-forest/clase-20-arboles-y-random-forest-presentacion.pptx) | -| Clase 21 | [historicos/classes-v1/21-gradient-boosting/clase-21-gradient-boosting-guia-explicativa.pdf](historicos/classes-v1/21-gradient-boosting/clase-21-gradient-boosting-guia-explicativa.pdf) | [historicos/classes-v1/21-gradient-boosting/clase-21-gradient-boosting-presentacion.pptx](historicos/classes-v1/21-gradient-boosting/clase-21-gradient-boosting-presentacion.pptx) | -| Clase 22 | [historicos/classes-v1/22-clustering-y-segmentacion/clase-22-clustering-y-segmentacion-guia-explicativa.pdf](historicos/classes-v1/22-clustering-y-segmentacion/clase-22-clustering-y-segmentacion-guia-explicativa.pdf) | [historicos/classes-v1/22-clustering-y-segmentacion/clase-22-clustering-y-segmentacion-presentacion.pptx](historicos/classes-v1/22-clustering-y-segmentacion/clase-22-clustering-y-segmentacion-presentacion.pptx) | -| Clase 23 | [historicos/classes-v1/23-reduccion-dimensionalidad-pca/clase-23-reduccion-dimensionalidad-pca-guia-explicativa.pdf](historicos/classes-v1/23-reduccion-dimensionalidad-pca/clase-23-reduccion-dimensionalidad-pca-guia-explicativa.pdf) | [historicos/classes-v1/23-reduccion-dimensionalidad-pca/clase-23-reduccion-dimensionalidad-pca-presentacion.pptx](historicos/classes-v1/23-reduccion-dimensionalidad-pca/clase-23-reduccion-dimensionalidad-pca-presentacion.pptx) | -| Clase 24 | [historicos/classes-v1/24-series-de-tiempo/clase-24-series-de-tiempo-guia-explicativa.pdf](historicos/classes-v1/24-series-de-tiempo/clase-24-series-de-tiempo-guia-explicativa.pdf) | [historicos/classes-v1/24-series-de-tiempo/clase-24-series-de-tiempo-presentacion.pptx](historicos/classes-v1/24-series-de-tiempo/clase-24-series-de-tiempo-presentacion.pptx) | -| Clase 25 | [historicos/classes-v1/25-ajuste-de-hiperparametros/clase-25-ajuste-de-hiperparametros-guia-explicativa.pdf](historicos/classes-v1/25-ajuste-de-hiperparametros/clase-25-ajuste-de-hiperparametros-guia-explicativa.pdf) | [historicos/classes-v1/25-ajuste-de-hiperparametros/clase-25-ajuste-de-hiperparametros-presentacion.pptx](historicos/classes-v1/25-ajuste-de-hiperparametros/clase-25-ajuste-de-hiperparametros-presentacion.pptx) | -| Clase 26 | [historicos/classes-v1/26-nlp-texto-como-datos/clase-26-nlp-texto-como-datos-guia-explicativa.pdf](historicos/classes-v1/26-nlp-texto-como-datos/clase-26-nlp-texto-como-datos-guia-explicativa.pdf) | [historicos/classes-v1/26-nlp-texto-como-datos/clase-26-nlp-texto-como-datos-presentacion.pptx](historicos/classes-v1/26-nlp-texto-como-datos/clase-26-nlp-texto-como-datos-presentacion.pptx) | -| Clase 27 | [historicos/classes-v1/27-deteccion-de-anomalias/clase-27-deteccion-de-anomalias-guia-explicativa.pdf](historicos/classes-v1/27-deteccion-de-anomalias/clase-27-deteccion-de-anomalias-guia-explicativa.pdf) | [historicos/classes-v1/27-deteccion-de-anomalias/clase-27-deteccion-de-anomalias-presentacion.pptx](historicos/classes-v1/27-deteccion-de-anomalias/clase-27-deteccion-de-anomalias-presentacion.pptx) | -| Clase 28 | [historicos/classes-v1/28-etica-sesgo-y-privacidad/clase-28-etica-sesgo-y-privacidad-guia-explicativa.pdf](historicos/classes-v1/28-etica-sesgo-y-privacidad/clase-28-etica-sesgo-y-privacidad-guia-explicativa.pdf) | [historicos/classes-v1/28-etica-sesgo-y-privacidad/clase-28-etica-sesgo-y-privacidad-presentacion.pptx](historicos/classes-v1/28-etica-sesgo-y-privacidad/clase-28-etica-sesgo-y-privacidad-presentacion.pptx) | -| Clase 29 | [historicos/classes-v1/29-redes-neuronales-intro/clase-29-redes-neuronales-intro-guia-explicativa.pdf](historicos/classes-v1/29-redes-neuronales-intro/clase-29-redes-neuronales-intro-guia-explicativa.pdf) | [historicos/classes-v1/29-redes-neuronales-intro/clase-29-redes-neuronales-intro-presentacion.pptx](historicos/classes-v1/29-redes-neuronales-intro/clase-29-redes-neuronales-intro-presentacion.pptx) | -| Clase 30 | [historicos/classes-v1/30-despliegue-basico-de-modelos/clase-30-despliegue-basico-de-modelos-guia-explicativa.pdf](historicos/classes-v1/30-despliegue-basico-de-modelos/clase-30-despliegue-basico-de-modelos-guia-explicativa.pdf) | [historicos/classes-v1/30-despliegue-basico-de-modelos/clase-30-despliegue-basico-de-modelos-presentacion.pptx](historicos/classes-v1/30-despliegue-basico-de-modelos/clase-30-despliegue-basico-de-modelos-presentacion.pptx) | ### 📄 PDFs de estudio adicionales @@ -156,7 +116,7 @@ graph LR PRODUCT --> DOCS["docs/\nDocumentación canónica"] PORTAL --> DOCS - MOBILE --> CLASSES["classes/\n197 clases v2 · 9 partes"] + MOBILE --> CLASSES["classes/\n197 clases · 9 partes"] MOBILE --> COLAB["Google Colab\n(ejecución de código)"] LAB --> CLASSES LAB --> DATA["datasets/\n6 CSV sintéticos"] @@ -173,16 +133,15 @@ La arquitectura completa, con flujos y fronteras, está en [docs/ARQUITECTURA_PR ### Currículo y pedagogía -- **Currículo v2 (scaffold):** 197 clases en 9 partes — Prerrequisitos (46), ML clásico (43), Deep Learning (56), Estadística inferencial (13), MLOps (14), Ingeniería de datos (8), Recomendadores (7), Ética (6), Capstones (4); +- **Currículo (scaffold):** 197 clases en 9 partes — Prerrequisitos (46), ML clásico (43), Deep Learning (56), Estadística inferencial (13), MLOps (14), Ingeniería de datos (8), Recomendadores (7), Ética (6), Capstones (4); - pauta derivada de **Hands-On ML** (Géron 3ª ed.), **Python Data Science Handbook** (VanderPlas), **Designing ML Systems** (Huyen), **ISLP** (James et al), **Fairness and ML** (Barocas/Hardt/Narayanan); -- cada clase v2: `README.md` (ficha) + `notebook.ipynb` (stub); materiales adicionales se agregan al madurar; -- **Currículo v1 archivado:** 31 clases con contenido completo (teoría, ejercicios, soluciones, PDF, PPTX) en `historicos/classes-v1/` — fuente de material reutilizable; +- cada clase: `README.md` (ficha) + `notebook.ipynb` (stub); materiales adicionales se agregan al madurar; - **6 datasets** sintéticos: ventas_tienda, retencion_clientes, soporte_tickets, transporte, estudiantes, comentarios_productos; - guías de instructor, metodología, criterios de evaluación y ética de datos. ### 🧪 Laboratorio interactivo -- app Flask con acceso a las 197 clases v2 desde interfaz web (descubrimiento automático por anidamiento); +- app Flask con acceso a las 197 clases desde interfaz web (descubrimiento automático por anidamiento); - notebooks interactivos precargados con celdas editables y ejecutables; - ejecución de código Python por celdas con persistencia de sesión; - captura de gráficos matplotlib como PNG inline; @@ -199,16 +158,14 @@ La arquitectura completa, con flujos y fronteras, está en [docs/ARQUITECTURA_PR ### App Android -- Expo/React Native con contenido v1 embebido (pendiente migrar a v2); +- Expo/React Native (pendiente migrar el contenido embebido al índice actual); - integración con Google Colab para ejecución de código sin Python local; - seguimiento de progreso local con AsyncStorage; - APK debug disponible — producción en roadmap. ### 📊 Presentación y distribución de materiales -- **31 PDFs guía-explicativa v1** en `docs/pdfs/classes/` y `historicos/classes-v1/` — vigentes para uso inmediato; -- **31 PPTXs presentación v1** en `docs/presentaciones/classes/` y `historicos/classes-v1/`; -- los assets v2 se regeneran por bloques al madurar el contenido pedagógico; +- PDFs y PPTX por clase se generan en `docs/pdfs/classes/` y `docs/presentaciones/classes/` por bloques al madurar el contenido pedagógico de cada parte; - landing pública para alumnos en GitHub Pages (`site/`); - vista institucional HTML con narrativa de producto (`site/product/`); - PDFs adicionales de estudio en `docs/pdfs/`. @@ -219,7 +176,7 @@ La arquitectura completa, con flujos y fronteras, está en [docs/ARQUITECTURA_PR ### Opción A — app de escritorio Windows (usuarios finales) -El binario distribuible se reconstruye cuando el contenido v2 alcance un primer hito publicable. Mientras tanto, usa el modo desarrollo (Opción B) o la imagen Docker (Opción C/D) para correr el laboratorio local. Ver [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) para construir el `.exe` desde fuente. +El binario distribuible se reconstruye cuando el contenido alcance un primer hito publicable. Mientras tanto, usa el modo desarrollo (Opción B) o la imagen Docker (Opción C/D) para correr el laboratorio local. Ver [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) para construir el `.exe` desde fuente. Requiere (al usar el binario): Edge WebView2 Runtime (preinstalado en Windows 10 v2004+ y Windows 11). @@ -344,7 +301,7 @@ Ver [SECURITY.md](SECURITY.md) para detalle completo. ## Lo que este repo no vende - una plataforma multiusuario endurecida para internet abierta; -- una app móvil ya en producción (el código existe pero el APK distribuible se reconstruye con contenido v2); +- una app móvil ya en producción (el código existe pero el APK distribuible se reconstruye con el contenido actual); - una promesa de personalización infinita antes de cerrar condiciones; - profundidad total en todas las direcciones desde la primera versión. diff --git a/RECRUITER.md b/RECRUITER.md index c688be8b..202378f2 100644 --- a/RECRUITER.md +++ b/RECRUITER.md @@ -8,11 +8,11 @@ Un sistema de capacitación en Python y Data Science que integra: -- **currículo modular v2** (197 clases · 9 partes · pauta derivada de Géron 3ª ed., VanderPlas, Huyen, ISLP, Barocas/Hardt/Narayanan) — estructura scaffold con stubs; contenido pedagógico en desarrollo por bloques. El currículo v1 (31 clases con contenido completo) se conserva en `historicos/classes-v1/`; -- **laboratorio interactivo** (Flask + ejecución Python en tiempo real, matplotlib, pandas) ya migrado a v2; +- **currículo modular** (197 clases · 9 partes · pauta derivada de Géron 3ª ed., VanderPlas, Huyen, ISLP, Barocas/Hardt/Narayanan) — estructura scaffold con stubs; contenido pedagógico en desarrollo por bloques; +- **laboratorio interactivo** (Flask + ejecución Python en tiempo real, matplotlib, pandas); - **app de escritorio nativa para Windows** (pywebview + Edge WebView2, sin navegador); -- **app Android** (Expo/React Native, contenido embebido + Google Colab) — pendiente migración a v2; -- **portal público** (GitHub Pages para alumnos + vista institucional) — pendiente migración a v2; +- **app Android** (Expo/React Native, contenido embebido + Google Colab) — pendiente migrar contenido al índice actual; +- **portal público** (GitHub Pages para alumnos + vista institucional) — pendiente migrar al índice actual; - **documentación de producto** organizada por audiencia. --- @@ -23,13 +23,12 @@ Un sistema de capacitación en Python y Data Science que integra: |---|---|---| | Backend Flask | operativo | 10 rutas, tests automatizados, CI en GitHub Actions | | Ejecución de código Python | operativo | pandas, matplotlib (gráficos), scikit-learn, timeout 30s | -| 197 clases v2 (scaffold) | operativo | `/api/classes` → 197 clases, `/api/class/` → HTML | -| 31 clases v1 con contenido | archivado en `historicos/` | referencia y fuente de material reutilizable | +| 197 clases (scaffold) | operativo | `/api/classes` → 197 clases, `/api/class/` → HTML | | 6 notebooks interactivos | operativo | `/api/notebooks` → 6 templates, ejecución por celda | -| App de escritorio Windows | v1.0.0 (consume v2 tras rebuild) | pywebview 6.1 + PyInstaller 6.19, ZIP portable 92MB | -| Instalador Windows | v1.0.0 | Inno Setup — sin Python requerido en el PC del usuario | -| App Android | v1.0.0 (contenido v1) | APK debug 137MB, Expo/React Native — pendiente migración a v2 | -| Portal del alumno | en vivo (contenido v1) | GitHub Pages — pendiente migración a v2 | +| App de escritorio Windows | código operativo · binario pendiente de rebuild | pywebview 6.1 + PyInstaller 6.19, ZIP portable 92MB | +| Instalador Windows | pendiente de rebuild | Inno Setup — sin Python requerido en el PC del usuario | +| App Android | APK debug | 137MB, Expo/React Native — pendiente migrar contenido embebido al índice actual | +| Portal del alumno | en vivo | GitHub Pages — pendiente migrar al índice actual | | CI/CD | activo | 3 workflows: tests, security scan, deploy-pages | | Análisis de seguridad | limpio | Bandit: 0 High, 0 Medium, 0 Low | diff --git a/ROADMAP.md b/ROADMAP.md index 9a54f5c5..1d9a205d 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -8,43 +8,39 @@ | Superficie | Estado | |---|---| -| Currículo v2 (197 clases, 9 partes) | scaffold operativo; contenido en desarrollo | -| Currículo v1 (31 clases con contenido) | archivado en `historicos/classes-v1/` | -| Laboratorio Flask (consume v2) | operativo | -| App de escritorio Windows (pywebview) | publicada — consume v2 tras rebuild | -| App Android (contenido v1) | APK debug publicado — pendiente migración a v2 | -| Portal del alumno (contenido v1) | en vivo — pendiente migración a v2 | +| Currículo (197 clases, 9 partes) | scaffold operativo; contenido en desarrollo | +| Laboratorio Flask | operativo | +| App de escritorio Windows (pywebview) | código operativo · binario pendiente de rebuild | +| App Android | APK debug publicado — pendiente migrar contenido embebido al índice actual | +| Portal del alumno | en vivo — pendiente migrar al índice actual | | Vista institucional | en vivo | -| Documentación | realineada con v2 | +| Documentación | alineada con el currículo actual | --- -## Trabajo crítico — completar la migración v1 → v2 - -Antes de añadir nuevas capacidades, hay que cerrar la migración iniciada en v2.0.0-scaffold: +## Trabajo crítico — completar el contenido pedagógico ### Contenido pedagógico -- [ ] Desarrollar las 46 clases de la **Parte 0 — Prerrequisitos** al estándar de calidad de la antigua clase 14 (5+ bloques de código documentados, 4–5 ejercicios concretos con dataset, homework verificable) +- [ ] Desarrollar las 46 clases de la **Parte 0 — Prerrequisitos** al estándar de calidad mínimo (5+ bloques de código documentados, 4–5 ejercicios concretos con dataset, homework verificable) - [ ] Desarrollar las 43 clases de la **Parte 1 — ML clásico** - [ ] Desarrollar las 13 clases de la **Parte 3 — Estadística inferencial** (intercaladas con Parte 1) - [ ] Desarrollar las 56 clases de la **Parte 2 — Deep Learning** - [ ] Desarrollar las 14 clases de la **Parte 4 — MLOps** - [ ] Desarrollar las 25 clases restantes (Partes 5, 6, 7, 8) -- [ ] Migrar material reutilizable desde `historicos/classes-v1/` cuando aplique ### Superficies pendientes de migración -- [ ] `mobile/src/data/classes.js` — regenerar contra el currículo v2 -- [ ] `site/` — regenerar portal contra el currículo v2 +- [ ] `mobile/src/data/classes.js` — regenerar contra el currículo actual +- [ ] `site/` — regenerar portal contra el currículo actual - [ ] `docs/pdfs/classes/` y `docs/presentaciones/classes/` — regenerar PDFs y PPTX por bloques al madurar el contenido -- [ ] Adaptar `scripts/generate_class_docs.py` y `scripts/generate_class_assets.py` para que recorran la estructura anidada de v2 +- [ ] Adaptar `scripts/generate_class_docs.py` y `scripts/generate_class_assets.py` para que recorran la estructura anidada del currículo ### Verificación de calidad pedagógica -- [ ] Script de CI que falle si una clase v2 tiene `notebook.ipynb` con menos de N celdas reales +- [ ] Script de CI que falle si una clase tiene `notebook.ipynb` con menos de N celdas reales - [ ] Script de CI que verifique que cada clase referencia un dataset existente -- [ ] Quizzes interactivos pre/post lección como parte del estándar v2 +- [ ] Quizzes interactivos pre/post lección como parte del estándar de cada clase --- @@ -81,7 +77,7 @@ Antes de añadir nuevas capacidades, hay que cerrar la migración iniciada en v2 - [ ] Panel de resumen de progreso por alumno (para el docente) con métricas a nivel de las 9 partes - [ ] Soporte multi-idioma (inglés como segunda lengua de la UI) -### App Android (post-migración v2) +### App Android (post-migración de contenido) - [ ] Publicación en APK release (firmado) para distribución directa - [ ] Seguimiento de progreso con sincronización local @@ -101,7 +97,7 @@ Antes de añadir nuevas capacidades, hay que cerrar la migración iniciada en v2 - [ ] Asistente local de consulta pedagógica (vía Ollama/modelo local) - [ ] Sugerencias automáticas de corrección en ejercicios -- [ ] Generación asistida de nuevos ejercicios por clase a partir del scaffold v2 +- [ ] Generación asistida de nuevos ejercicios por clase a partir del scaffold ### Distribución diff --git a/SECURITY.md b/SECURITY.md index 014a59c1..3ce07991 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -15,9 +15,8 @@ Este repositorio está pensado para uso local, docente y de laboratorio. La app | Versión | Estado | |---|---| | `v2.0.0-scaffold` (rama `main`) | activamente desarrollada | -| versiones anteriores | sin soporte | -> El repositorio fue reiniciado en mayo de 2026 al pasar al currículo v2. Los releases binarios anteriores (v1.0.0) ya no se distribuyen; el siguiente binario se publicará cuando el contenido v2 alcance un hito publicable. +> El próximo binario distribuible se publicará cuando el contenido alcance un hito publicable. --- diff --git a/classes/README.md b/classes/README.md index 22a453b0..36376ce0 100644 --- a/classes/README.md +++ b/classes/README.md @@ -1,4 +1,4 @@ -# Índice del currículo v2 +# Índice del currículo Total: 197 clases en 9 partes. diff --git a/datasets/README.md b/datasets/README.md index a8a05348..76c3c9fc 100644 --- a/datasets/README.md +++ b/datasets/README.md @@ -4,13 +4,12 @@ Este directorio contiene los datasets base usados en las clases. Todos los datos son sinteticos con contexto realista y fueron preparados para practicar lectura, limpieza, análisis, visualización y modelado inicial. -> **Nota v2:** los campos "Clases que lo usan" abajo aún reflejan la numeración del currículo v1 (clases 00-30) que se conserva como referencia en [`historicos/classes-v1/`](../historicos/classes-v1). La asignación de cada dataset a clases concretas del currículo v2 (197 clases en 9 partes) se actualizará por bloque al desarrollar el contenido pedagógico. +> **Nota:** la asignación dataset → clase concreta del currículo (197 clases en 9 partes) se define al desarrollar el contenido pedagógico de cada bloque. Las descripciones por dataset abajo no incluyen ya un mapeo fijo. ## 1. ventas_tienda.csv **Descripcion:** Registro de ventas de una tienda con varias sucursales, categorías y medios de pago. Es el dataset principal del recorrido. -**Clases que lo usan:** 01, 02, 03, 04, 05, 07, 09, 11 | Columna | Tipo | Descripcion | Ejemplo | |---|---|---|---| @@ -37,7 +36,6 @@ Este directorio contiene los datasets base usados en las clases. Todos los datos **Descripcion:** Serie mensual para analizar actividad de clientes, perdidas, altas y valor economico promedio. -**Clases que lo usan:** 03, 08, 10 | Columna | Tipo | Descripcion | Ejemplo | |---|---|---|---| @@ -60,7 +58,6 @@ Este directorio contiene los datasets base usados en las clases. Todos los datos **Descripcion:** Tickets de soporte clasificados por categoría, prioridad, canal y tiempo de resolución. -**Clases que lo usan:** 02, 06 | Columna | Tipo | Descripcion | Ejemplo | |---|---|---|---| @@ -84,7 +81,6 @@ Este directorio contiene los datasets base usados en las clases. Todos los datos **Descripcion:** Registro de viajes con origen, destino, pasajeros, retraso y contexto operativo. -**Clases que lo usan:** 04, 06 | Columna | Tipo | Descripcion | Ejemplo | |---|---|---|---| @@ -111,7 +107,6 @@ Este directorio contiene los datasets base usados en las clases. Todos los datos **Descripcion:** Registro academico sintetico para analizar desempeno, asistencia y estado del alumno. -**Clases que lo usan:** 04, 09, 10 | Columna | Tipo | Descripcion | Ejemplo | |---|---|---|---| @@ -138,7 +133,6 @@ Este directorio contiene los datasets base usados en las clases. Todos los datos **Descripcion:** Reseñas de productos en español con etiqueta de sentimiento. Dataset sintético para practicar procesamiento de texto y clasificación NLP. -**Clases que lo usan:** 26 | Columna | Tipo | Descripcion | Ejemplo | |---|---|---|---| diff --git a/docs/ARQUITECTURA_PRODUCTO.md b/docs/ARQUITECTURA_PRODUCTO.md index 9139f0ad..e061428e 100644 --- a/docs/ARQUITECTURA_PRODUCTO.md +++ b/docs/ARQUITECTURA_PRODUCTO.md @@ -8,7 +8,7 @@ El producto se organiza en tres capas coordinadas: -- una **capa pedagógica reusable** (`classes/`, `datasets/`) — **197 clases en 9 partes** (currículo v2 scaffold); el currículo v1 con 31 clases completas vive en `historicos/classes-v1/`; +- una **capa pedagógica reusable** (`classes/`, `datasets/`) — **197 clases en 9 partes** (scaffold; contenido en desarrollo por bloques); - una **capa operativa local** para el laboratorio (`app/`, `launcher.py`, `mobile/`); - una **capa pública** para alumnos e institución (`site/`, GitHub Pages). @@ -27,15 +27,14 @@ graph LR PRODUCT --> DOCS["📚 Documentación canónica\ndocs/"] PORTAL --> DOCS WIN --> LAB - MOBILE --> CLASSES["📂 Clases y materiales\nclasses/ — 197 clases · 9 partes (v2)"] + MOBILE --> CLASSES["📂 Clases y materiales\nclasses/ — 197 clases · 9 partes"] MOBILE --> COLAB["☁️ Google Colab\n(ejecución externa)"] LAB --> CLASSES LAB --> NOTEBOOKS["📓 Notebooks base\napp/notebooks/"] LAB --> SAVED["💾 Notebooks guardados\napp/saved_notebooks/"] LAB --> DATA["🗃️ Datasets\ndatasets/ — 6 CSV sintéticos"] - LAB --> HIST["🗄️ Currículo v1 archivado\nhistoricos/classes-v1/"] - DOCS --> PDFS["📄 PDFs de apoyo\ndocs/pdfs/ — 31 guías v1 + estudios"] - DOCS --> PPTX["📊 Presentaciones\ndocs/presentaciones/ — 31 PPTXs v1"] + DOCS --> PDFS["📄 PDFs de apoyo\ndocs/pdfs/"] + DOCS --> PPTX["📊 Presentaciones\ndocs/presentaciones/"] ``` --- @@ -52,7 +51,7 @@ graph TD UI --> RESETAPI["POST /api/reset"] CLASSAPI --> LOADER["content_loader.py\n_safe_resolve + markdown"] - LOADER --> CLASSES["classes/\n197 clases v2 (rglob notebook.ipynb)"] + LOADER --> CLASSES["classes/\n197 clases (rglob notebook.ipynb)"] NBAPI --> TEMPLATES["app/notebooks/\ntemplates JSON precargados"] EXECAPI --> ENGINE["execution_engine.py\ntimeout 30s · max 100 sesiones"] ENGINE --> SESSION["Sesión en memoria\nnamespace Python persistente"] @@ -100,7 +99,7 @@ graph LR ### `app/` — Laboratorio Flask -- renderiza la experiencia local de clase con acceso a las **197 clases v2** (descubrimiento por `rglob("notebook.ipynb")`); +- renderiza la experiencia local de clase con acceso a las **197 clases** (descubrimiento por `rglob("notebook.ipynb")`); - sirve endpoints de clases, notebooks y ejecución (`/api/class/`, `/api/notebook/`, `/api/execute`); - agrega headers de seguridad y endpoints de salud (`/health`, `/ready`); - mantiene el motor de ejecución con sesiones, timeout (30 s) y captura de salida. @@ -111,7 +110,7 @@ graph LR - gestiona el ciclo de vida de Flask (arranque, healthcheck, apagado); - elige un puerto libre automáticamente para evitar conflictos. -### `classes/` — Currículo modular (v2) +### `classes/` — Currículo modular Concentra el contenido de las **197 clases** en 9 partes. Pauta derivada de Géron (Hands-On ML 3ª ed.), VanderPlas, Huyen, ISLP y Barocas/Hardt/Narayanan. @@ -129,10 +128,6 @@ Concentra el contenido de las **197 clases** en 9 partes. Pauta derivada de Gér Layout por clase: `classes/parte-N-slug/NNN-tema-slug/` con `README.md` (ficha) + `notebook.ipynb` (stub). Materiales opcionales (`teoria.md`, `slides.md`, `ejercicios.md`, `homework.md`, `soluciones.ipynb`, `quiz.json`, PDF, PPTX) se añaden cuando una clase madura. -### `historicos/classes-v1/` — Currículo v1 archivado - -Las 31 clases del currículo v1 con contenido completo (teoría, ejercicios, soluciones, PDF, PPTX). Congelado, se conserva como referencia y fuente de material reutilizable al rellenar los stubs v2. - ### `app/notebooks/` — Labs interactivos - templates JSON con celdas editables y ejecutables; @@ -141,20 +136,22 @@ Las 31 clases del currículo v1 con contenido completo (teoría, ejercicios, sol ### `mobile/` — App Android -- Expo/React Native con contenido del currículo v1 (31 clases) embebido — **pendiente migración a v2**; +- Expo/React Native — **pendiente migrar el contenido embebido al índice actual**; - integración con Google Colab para ejecución de código; - seguimiento de progreso local con AsyncStorage. ### `datasets/` — Datos sintéticos -| Dataset | Uso principal | +| Dataset | Descripción | |---|---| -| ventas_tienda.csv | clases 01–05 · 07 · 09 · 11 | -| retencion_clientes.csv | clases 03 · 08 · 10 | -| soporte_tickets.csv | clases 02 · 06 | -| transporte.csv | clases 04 · 06 | -| estudiantes.csv | clases 04 · 09 · 10 | -| comentarios_productos.csv | clase 26 (NLP) | +| ventas_tienda.csv | Ventas multitienda con categorías y medios de pago | +| retencion_clientes.csv | Serie mensual de altas, bajas e ingresos | +| soporte_tickets.csv | Tickets por categoría, prioridad y canal | +| transporte.csv | Viajes con origen, destino y retrasos | +| estudiantes.csv | Registro académico con asistencia y evaluaciones | +| comentarios_productos.csv | Reseñas en español con etiqueta de sentimiento | + +La asignación dataset → clase se hace al desarrollar el contenido pedagógico de cada clase. ### `site/` — Portales públicos @@ -166,21 +163,19 @@ Las 31 clases del currículo v1 con contenido completo (teoría, ejercicios, sol - ordena la narrativa de producto por audiencias; - separa operación, seguridad, pedagogía y evaluación; -- **31 PDFs guía-explicativa v1** en `docs/pdfs/classes/` (regenerables por bloques al desarrollar v2); -- **31 PPTXs presentación v1** en `docs/presentaciones/classes/` (mismo plan); +- PDFs y PPTX por clase en `docs/pdfs/classes/` y `docs/presentaciones/classes/` (se regeneran por bloques al madurar el contenido de cada parte); - notas del maintainer en `docs/maintainer/`. ### `scripts/` — Automatización | Script | Función | |---|---| -| `generate_v2_curriculum.py` | **(v2)** genera la estructura de carpetas + stubs de las 197 clases | -| `generate_class_docs.py` | genera PDFs y PPTXs (diseñado para v1, requiere adaptación a v2) | +| `generate_v2_curriculum.py` | genera la estructura de carpetas + stubs de las 197 clases (idempotente) | +| `generate_class_docs.py` | genera PDFs y PPTXs por clase (pendiente adaptar al recorrido anidado) | | `generate_class_assets.py` | genera assets por clase (mismo estado) | -| `generate_interview_pdfs.py` | regenera PDFs de entrevista (histórico) | +| `generate_interview_pdfs.py` | regenera PDFs de entrevista | | `generate_extended_study_pdf.py` | regenera guía ampliada de estudio | | `generar_pdf_documento.py` | generación genérica de PDFs | -| `rebuild_curriculum.py` | reconstruye estructura del curriculum v1 (histórico) | --- @@ -203,7 +198,7 @@ Las 31 clases del currículo v1 con contenido completo (teoría, ejercicios, sol - se privilegia **operación local segura** por sobre exposición rápida a internet; - se privilegia **separación de audiencias** por sobre una sola portada gigantesca; - se usa pywebview (Edge WebView2) en lugar de Electron para mantener bundle liviano; -- se acepta que la ruta móvil tiene APK debug como v1.0.0 — producción es roadmap. +- se acepta que la ruta móvil tiene APK debug — producción es roadmap. --- diff --git a/docs/CATALOGO_PRODUCTO.md b/docs/CATALOGO_PRODUCTO.md index 0e9e4048..62a1a46e 100644 --- a/docs/CATALOGO_PRODUCTO.md +++ b/docs/CATALOGO_PRODUCTO.md @@ -3,7 +3,7 @@ > Fuente de verdad de superficies, artefactos y reglas de comunicación. > Si algún README, landing o presentación contradice este documento, **este tiene prioridad.** -> **Estado:** v2.0.0-scaffold. El currículo creció de 31 a **197 clases en 9 partes**. La estructura de carpetas y stubs está creada; el contenido pedagógico de cada clase se desarrolla por bloques. Pauta completa en [syllabus.md](syllabus.md), índice navegable en [../classes/README.md](../classes/README.md). +> **Estado:** v2.0.0-scaffold. El currículo tiene **197 clases en 9 partes**. La estructura de carpetas y stubs está creada; el contenido pedagógico de cada clase se desarrolla por bloques. Pauta completa en [syllabus.md](syllabus.md), índice navegable en [../classes/README.md](../classes/README.md). --- @@ -24,18 +24,17 @@ |---|---|---|---|---| | Laboratorio interactivo (`app/`) | núcleo operativo | operativo | docente / estudiante guiado | acceso a las 197 clases (stubs), notebooks editables, ejecución Python en tiempo real, captura de gráficos, guardado local | | App de escritorio Windows (`launcher.py` + `installer/`) | distribución de escritorio | listo para build | alumno / docente en aula | ventana nativa Edge WebView2 sin navegador, sin Python instalado en el equipo del usuario, Flask interno transparente | -| App Android (`mobile/`) | distribución móvil | **catálogo vacío** | alumno en movimiento | código operativo, pero `mobile/src/data/classes.js` quedó como stub en la migración; pendiente cargar entradas v2 | -| Portal del alumno (`site/`) | superficie pública | operativo · alineado con v2 | alumno | muestra el resumen de 197 clases en 9 partes con tarjeta por parte | +| App Android (`mobile/`) | distribución móvil | **catálogo vacío** | alumno en movimiento | código operativo, pero `mobile/src/data/classes.js` quedó como stub; pendiente cargar entradas del currículo actual | +| Portal del alumno (`site/`) | superficie pública | operativo | alumno | muestra el resumen de 197 clases en 9 partes con tarjeta por parte | | Vista institucional (`site/product/`) | superficie pública | operativo (mensaje genérico) | institución / evaluador | narrativa del producto, alcance, arquitectura visual | -| Currículo modular (`classes/`) | base pedagógica | scaffold v2 operativo, contenido en desarrollo | docente / alumno | 197 clases organizadas en 9 partes (Prerrequisitos, ML clásico, Deep Learning, Estadística inferencial, MLOps, Ingeniería de datos, Recomendadores, Ética, Capstones) | -| Currículo v1 archivado (`historicos/classes-v1/`) | referencia | congelado | desarrollador de contenido | 31 clases v1 preservadas como fuente de material reutilizable | +| Currículo modular (`classes/`) | base pedagógica | scaffold operativo, contenido en desarrollo | docente / alumno | 197 clases organizadas en 9 partes (Prerrequisitos, ML clásico, Deep Learning, Estadística inferencial, MLOps, Ingeniería de datos, Recomendadores, Ética, Capstones) | | Kit documental (`docs/`) | capa editorial | operativo | docente / stakeholder | metodología, operación, evaluación, seguridad y arquitectura | -| PDFs (`docs/pdfs/`) | artefacto de apoyo | **vigente solo para v1** | docente / alumno / evaluador | 31 guías v1; se regenerarán por bloques al rellenar contenido v2 | -| Presentaciones (`docs/presentaciones/`) | artefacto de apoyo | **vigente solo para v1** | docente | 31 decks v1; mismo plan de regeneración | +| PDFs (`docs/pdfs/`) | artefacto de apoyo | se regenera por bloque | docente / alumno / evaluador | guías PDF por clase al madurar el contenido | +| Presentaciones (`docs/presentaciones/`) | artefacto de apoyo | se regenera por bloque | docente | decks `.pptx` por clase al madurar el contenido | --- -## Estructura del currículo v2 +## Estructura del currículo | Parte | Tema | Clases | |---|---|---| @@ -58,12 +57,12 @@ Cada clase vive en `classes/parte-N-slug/NNN-tema-slug/` con `README.md` (ficha) | Capacidad | Lab Flask | App Windows | App Android | Portal alumno | Vista institucional | |---|---|---|---|---|---| -| Ver contenido de las clases v2 | ✅ (stubs) | ✅ (tras rebuild) | ❌ (pendiente) | ❌ (pendiente) | ❌ | +| Ver contenido de las clases | ✅ (stubs) | ✅ (tras rebuild) | ❌ (pendiente) | ❌ (pendiente) | ❌ | | Ejecutar código Python | ✅ (runner local) | ✅ (runner local) | ↗️ Google Colab | ❌ | ❌ | -| Leer código comentado | ✅ | ✅ | ✅ (v1) | ❌ | ❌ | +| Leer código comentado | ✅ | ✅ | ✅ | ❌ | ❌ | | Abrir en Colab | ❌ | ❌ | ✅ | ❌ | ❌ | | Guardar notebooks | ✅ | ✅ | ❌ | ❌ | ❌ | -| Seguimiento de progreso | ❌ | ❌ | ✅ (local, v1) | ❌ | ❌ | +| Seguimiento de progreso | ❌ | ❌ | ✅ (local) | ❌ | ❌ | | Mostrar producto a terceros | parcial | ❌ | ❌ | parcial | ✅ | | Operar sin internet | ✅ | ✅ | ✅ (contenido) | ❌ | ❌ | | Sin Python instalado | ❌ | ✅ | ✅ | ✅ | ✅ | @@ -74,13 +73,13 @@ Cada clase vive en `classes/parte-N-slug/NNN-tema-slug/` con `README.md` (ficha) | Artefacto | Rol | Estado | |---|---|---| -| `classes/README.md` | índice navegable de las 197 clases v2 | vigente | +| `classes/README.md` | índice navegable de las 197 clases | vigente | | `scripts/generate_v2_curriculum.py` | regeneración idempotente de la estructura de carpetas | vigente | -| `docs/pdfs/classes/clase-NN-*-guia-explicativa.pdf` (×31) | guía imprimible por clase v1 | vigente para v1, regenerable para v2 cuando madure | -| `docs/presentaciones/classes/clase-NN-*-presentacion.pptx` (×31) | deck de presentación v1 | mismo estado | -| `docs/pdfs/guia-estudio-repositorio.pdf` | ruta de lectura rápida del repo | vigente, requiere refresh tras v2 | +| `docs/pdfs/classes/` | guías imprimibles por clase | se regenera por bloque al madurar el contenido | +| `docs/presentaciones/classes/` | decks de presentación por clase | mismo estado | +| `docs/pdfs/guia-estudio-repositorio.pdf` | ruta de lectura rápida del repo | vigente | | `docs/pdfs/guia-total-python-data-science.pdf` | guía ampliada de Python con DS | vigente | -| `scripts/generate_class_docs.py` | generación reproducible de PDFs y PPTXs (diseñado para v1) | vigente, requiere adaptación a v2 | +| `scripts/generate_class_docs.py` | generación reproducible de PDFs y PPTXs | pendiente adaptar al recorrido anidado | | `scripts/generate_class_assets.py` | generación de assets por clase | mismo estado | | `scripts/generate_extended_study_pdf.py` | regeneración de la guía ampliada | vigente | @@ -92,25 +91,22 @@ Cada clase vive en `classes/parte-N-slug/NNN-tema-slug/` con `README.md` (ficha) - el repo contiene una pauta de curso completo de Python y Data Science **avanzado** (197 clases en 9 partes); - la pauta está derivada de referentes profesionales (Géron, VanderPlas, Huyen, ISLP, Barocas/Hardt/Narayanan); -- el laboratorio interactivo es operativo como herramienta local de aula y ya consume la estructura v2; +- el laboratorio interactivo es operativo como herramienta local de aula y consume la estructura del currículo; - existen superficies públicas funcionales para alumno e institución; -- el currículo v1 (31 clases con contenido completo) sigue disponible en `historicos/` como referencia y fuente de material; - la propuesta puede arrancar acotada (un bloque) y crecer sin rehacer la base. ### Lo que no se debe mezclar -- **el currículo v2 está en scaffold**: la estructura existe pero el contenido de cada clase debe desarrollarse — no afirmar "197 clases listas para dictar"; +- **el currículo está en scaffold**: la estructura existe pero el contenido de cada clase debe desarrollarse — no afirmar "197 clases listas para dictar"; - el portal del alumno **no es** todo el producto; - la vista institucional **no reemplaza** el laboratorio; -- los PDFs v1 **no cubren** las clases v2 nuevas; -- la app Android v1 embebida **no refleja** el currículo v2 hasta que se regenere; - la app Android **no ejecuta Python nativo** — usa Google Colab; - el instalador Windows es una app de escritorio real — **no abre el navegador del sistema**; - el runner local **no debe presentarse** como SaaS expuesto a internet. --- -## Versión inicial sugerida para primeros pasos (v2) +## Versión inicial sugerida para primeros pasos Para una primera implementación acotada, desarrollar primero el **Bloque 0 — Prerrequisitos** (46 clases): diff --git a/docs/GUIA_EVALUACION.md b/docs/GUIA_EVALUACION.md index c9f35740..5c5eefc1 100644 --- a/docs/GUIA_EVALUACION.md +++ b/docs/GUIA_EVALUACION.md @@ -11,12 +11,11 @@ Este repositorio es una **pauta avanzada y completa de Python y Data Science** o ``` v2.0.0-scaffold: 197 clases · 9 partes · scaffold + READMEs + notebooks stub -v1.1.0 archivado: 31 clases · contenido pedagógico completo → historicos/classes-v1/ ``` Incluye laboratorio interactivo local (Flask), app de escritorio nativa para Windows, app Android y una familia documental que distingue producto, operación y seguridad. -**Estado honesto:** el currículo v2 está en fase **scaffold** — la estructura y la pauta están definidas, pero el contenido pedagógico de cada clase debe desarrollarse. El currículo v1 (31 clases con contenido completo) está en `historicos/` como referencia y fuente de material reutilizable. +**Estado honesto:** el currículo está en fase **scaffold** — la estructura y la pauta están definidas, pero el contenido pedagógico de cada clase debe desarrollarse por bloques. --- @@ -26,11 +25,10 @@ Incluye laboratorio interactivo local (Flask), app de escritorio nativa para Win |---|---|---| | Diseño curricular profesional | 197 clases en 9 partes con prerrequisitos, ML, DL, MLOps, ética, capstones | `classes/README.md` · `docs/syllabus.md` | | Fuentes acreditadas del currículo | pauta derivada de 5 libros referentes en el campo | `docs/syllabus.md` | -| Laboratorio operativo | Flask local con ejecución Python en tiempo real, ya consume v2 | `app/` → `python run_program.py` | +| Laboratorio operativo | Flask local con ejecución Python en tiempo real | `app/` → `python run_program.py` | | Distribución de escritorio | App nativa Windows con Edge WebView2, sin navegador, sin Python instalado | `installer/` · `launcher.py` | -| Distribución móvil | App Android Expo/React Native (contenido v1, pendiente migrar a v2) | `mobile/` | +| Distribución móvil | App Android Expo/React Native (pendiente migrar contenido al índice actual) | `mobile/` | | Portal público funcional | GitHub Pages con portal del alumno + vista institucional | `site/` | -| Material pedagógico v1 | 31 PDFs guía-explicativa + 31 PPTXs presentación + notebooks con soluciones | `historicos/classes-v1/` · `docs/pdfs/classes/` | | Postura de seguridad | Validación de slugs, timeout de ejecución, CSP estricto, sin CDN externas | `SECURITY.md` · `app/app.py` | | CI/CD activo | Tests + lint + build de contenedor + SAST en GitHub Actions | `.github/workflows/` | | Documentación auditada | Arquitectura, operación, pedagogía y seguridad como documentos separados | `docs/` | @@ -40,7 +38,7 @@ Incluye laboratorio interactivo local (Flask), app de escritorio nativa para Win ## Recorrido de 10 minutos ``` -1. README.md → qué es, estado v2, superficies, inicio rápido +1. README.md → qué es, estado actual, superficies, inicio rápido 2. docs/syllabus.md → pauta completa de 197 clases 3. classes/README.md → índice navegable 4. docs/CATALOGO_PRODUCTO.md → qué superficies existen y qué entrega cada una hoy @@ -52,7 +50,7 @@ Incluye laboratorio interactivo local (Flask), app de escritorio nativa para Win ## Inventario real del producto -### Currículo v2 (scaffold) +### Currículo (scaffold) | Parte | Tema | Clases | |---|---|---| @@ -69,16 +67,6 @@ Incluye laboratorio interactivo local (Flask), app de escritorio nativa para Win Cada clase: `README.md` (ficha: objetivo, resultados, temas, prerrequisitos) + `notebook.ipynb` (stub con 8 celdas guía). -### Currículo v1 (archivado, contenido completo) - -| Grupo | Clases | Archivos por clase | -|---|---|---| -| Diagnóstico | 00 | README · slides · teoria · ejercicios · homework · PDF · PPTX | -| Contenido base | 01–12 | README · slides · teoria · ejercicios · homework · notebook · soluciones · PDF · PPTX | -| Contenido avanzado | 13–30 | todo lo anterior + preguntas · tecnologias · guia-codigo | - -Disponible en `historicos/classes-v1/`. - ### Datasets sintéticos | Dataset | Descripción | @@ -94,11 +82,11 @@ Disponible en `historicos/classes-v1/`. | Superficie | Estado | |---|---| -| Portal del alumno (GitHub Pages) | operativo con contenido v1 — pendiente migrar a v2 | +| Portal del alumno (GitHub Pages) | operativo — pendiente migrar al índice actual | | Vista institucional (GitHub Pages) | operativo | -| Laboratorio Flask (local) | operativo con v2 | -| App Windows (Edge WebView2) | v1.0.0 · consume v2 tras rebuild | -| App Android (Expo/React Native) | v1.0.0 · APK debug · contenido v1 | +| Laboratorio Flask (local) | operativo | +| App Windows (Edge WebView2) | código operativo · binario pendiente de rebuild | +| App Android (Expo/React Native) | APK debug · pendiente migrar contenido embebido al índice actual | --- @@ -115,7 +103,6 @@ Disponible en `historicos/classes-v1/`. | CI/CD visible y rastreable | `.github/workflows/` | | Historial de cambios | [../CHANGELOG.md](../CHANGELOG.md) | | Capa pública no técnica | `site/` · `site/product/` | -| Material v1 preservado para reuso | `historicos/` | --- @@ -123,7 +110,7 @@ Disponible en `historicos/classes-v1/`. - una plataforma multiusuario endurecida para internet abierta; - un LMS con autenticación, roles y seguimiento centralizado; -- **el currículo v2 listo para dictar** — está en scaffold; el contenido por clase se desarrolla por bloques; +- **el currículo listo para dictar** — está en scaffold; el contenido por clase se desarrolla por bloques; - la app Android en producción (APK debug, producción está en roadmap); - personalización ilimitada antes de definir condiciones reales. @@ -131,8 +118,7 @@ Disponible en `historicos/classes-v1/`. ## Conclusiones que una evaluación justa puede sacar -- la **pauta v2 cubre un currículo de Data Science avanzado y empleable en 2026** (incluye LLMs, MLOps real, inferencia causal, fairness — temas ausentes en programas más superficiales); +- la **pauta cubre un currículo de Data Science avanzado y empleable en 2026** (incluye LLMs, MLOps real, inferencia causal, fairness — temas ausentes en programas más superficiales); - existe coherencia entre contenido, laboratorio, distribución y documentación; -- el rediseño de v1 a v2 evidencia capacidad de **autoevaluar el propio producto y reestructurarlo** cuando se identifica una mejora estructural; -- el material v1 no se descartó: se archivó como fuente reutilizable, demostrando criterio de preservación; +- la decisión de empezar por un scaffold completo antes de rellenar contenido evidencia capacidad de **diseñar el producto antes de implementarlo**; - el valor no depende de una tecnología puntual sino de la mediación pedagógica y el criterio de diseño curricular. diff --git a/docs/INDEX.md b/docs/INDEX.md index c1888b58..84fb0eda 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -2,7 +2,7 @@ > Punto de entrada canónico para navegar la documentación del programa por audiencia y objetivo. > -> **Estado v2:** el currículo creció a 197 clases en 9 partes. Este repositorio nació como muestra de habilidades técnicas y pedagógicas, y hoy se desarrolla como recurso personal de aprendizaje y enseñanza, abierto a cualquier persona. +> El currículo tiene **197 clases en 9 partes**. Este repositorio nació como muestra de habilidades técnicas y pedagógicas, y hoy se desarrolla como recurso personal de aprendizaje y enseñanza, abierto a cualquier persona. --- @@ -11,8 +11,7 @@ | Territorio | Carpeta / ubicación | Para quién | |---|---|---| | Producto del programa | `docs/` (raíz) + archivos raíz (`README`, `RUNBOOK`, `SECURITY`, etc.) | Docentes, alumnos, evaluadores técnicos | -| Currículo vigente (v2) | `classes/` | Alumnos y docentes | -| Currículo histórico (v1) | `historicos/classes-v1/` | Desarrolladores de contenido (fuente de material reutilizable) | +| Currículo | `classes/` | Alumnos y docentes | | Notas internas del maintainer | `docs/maintainer/` | Solo el autor | --- @@ -21,7 +20,7 @@ | Archivo | Audiencia | Contenido | |---|---|---| -| [../README.md](../README.md) | todos | Portada del producto, estado actual v2, rutas por perfil | +| [../README.md](../README.md) | todos | Portada del producto, estado actual, rutas por perfil | | [../RECRUITER.md](../RECRUITER.md) | reclutadores / evaluadores técnicos | Evidencia técnica en 5 minutos, stack, estado real | | [../CHANGELOG.md](../CHANGELOG.md) | maintainers / contribuidores | Historial de cambios por versión | | [../CONTRIBUTING.md](../CONTRIBUTING.md) | contribuidores | Cómo contribuir al proyecto | @@ -60,14 +59,14 @@ | [entorno-interactivo.md](entorno-interactivo.md) | El laboratorio Flask — modos, API, motor de ejecución | | [despliegue-seguro-y-operacion.md](despliegue-seguro-y-operacion.md) | CI/CD, Docker y hardening técnico | | [portal-estudiante-y-app-movil.md](portal-estudiante-y-app-movil.md) | Portal público, laboratorio y app móvil | -| [pdfs/](pdfs/) | Guías explicativas (v1 vigente; v2 se regenera por bloques) | -| [presentaciones/](presentaciones/) | Decks `.pptx` (mismo estado) | +| [pdfs/](pdfs/) | Guías explicativas por clase (se regeneran por bloques al madurar el contenido) | +| [presentaciones/](presentaciones/) | Decks `.pptx` por clase (mismo estado) | ### Documentos pedagógicos | Documento | Rol | |---|---| -| [syllabus.md](syllabus.md) | **Currículo v2 completo: 197 clases en 9 partes, pauta avanzada** | +| [syllabus.md](syllabus.md) | **Currículo completo: 197 clases en 9 partes, pauta avanzada** | | [../classes/README.md](../classes/README.md) | Índice navegable de las 197 clases con enlaces directos | | [cronograma-referencial.md](cronograma-referencial.md) | Distribución temporal sugerida | | [metodologia-docente.md](metodologia-docente.md) | Marco pedagógico del producto | @@ -80,7 +79,7 @@ ### Regla de lectura rápida (10 minutos) -1. [../README.md](../README.md) — estado v2 y rutas por perfil +1. [../README.md](../README.md) — estado actual y rutas por perfil 2. [../RECRUITER.md](../RECRUITER.md) — evidencia técnica 3. [GUIA_EVALUACION.md](GUIA_EVALUACION.md) — valor y límites 4. [CATALOGO_PRODUCTO.md](CATALOGO_PRODUCTO.md) — superficies y artefactos @@ -88,17 +87,6 @@ --- -## Histórico (`historicos/`) - -Material del currículo v1 archivado como referencia y fuente de material reutilizable. **No es la fuente de verdad del producto vigente** — el producto hoy se desarrolla como recurso personal de aprendizaje y mejora del propio producto. - -| Carpeta / archivo | Rol | -|---|---| -| [../historicos/classes-v1/](../historicos/classes-v1) | 31 clases del currículo v1 con contenido completo (teoría, ejercicios, soluciones, PDF, PPTX) | -| [../historicos/README.md](../historicos/README.md) | Explicación del archivo | - ---- - ## Notas internas del maintainer Documentos de autoevaluación y mejora continua. No forman parte del producto público. diff --git a/docs/aula-ia-y-problemas-frecuentes.md b/docs/aula-ia-y-problemas-frecuentes.md index 0dfd19b6..3a24a01b 100644 --- a/docs/aula-ia-y-problemas-frecuentes.md +++ b/docs/aula-ia-y-problemas-frecuentes.md @@ -1,7 +1,5 @@ # 💬 Aula, tecnología y problemas frecuentes en clase -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - ## Valor docente en una era de herramientas cada vez más accesibles Que los estudiantes tengan acceso a buscadores, asistentes, IA o cualquier otra tecnología no elimina el valor del docente. Cambia el tipo de valor que más importa. diff --git a/docs/cronograma-referencial.md b/docs/cronograma-referencial.md index 57b264ec..4dadc527 100644 --- a/docs/cronograma-referencial.md +++ b/docs/cronograma-referencial.md @@ -1,10 +1,10 @@ # Cronograma referencial -> **Estado v2:** el cronograma detallado de 31 clases que vivía aquí correspondía al currículo v1 y se conserva en [../historicos/classes-v1/](../historicos/classes-v1). El currículo v2 (197 clases) requiere modalidades distintas — este documento las describe a alto nivel hasta que cada bloque de v2 madure. +> Este documento describe las modalidades a alto nivel; el detalle por clase madura conforme se desarrolla cada bloque. ## Visión general -El currículo v2 tiene **197 clases en 9 partes**. A diferencia de v1, no está pensado para impartirse íntegro en un solo programa de pocas semanas: es una pauta completa y profesional. Las modalidades reales recortan o reordenan partes según el público objetivo. +El currículo tiene **197 clases en 9 partes**. No está pensado para impartirse íntegro en un solo programa de pocas semanas: es una pauta completa y profesional. Las modalidades reales recortan o reordenan partes según el público objetivo. Pauta completa: [syllabus.md](syllabus.md). Índice navegable: [../classes/README.md](../classes/README.md). @@ -15,9 +15,9 @@ Pauta completa: [syllabus.md](syllabus.md). ### A — Programa introductorio (3 meses · ~90 horas) -Equivalente al alcance del currículo v1 anterior. Recomendado para alumnos sin experiencia previa. +Recomendado para alumnos sin experiencia previa. -| Bloque | Partes / clases v2 | Duración | +| Bloque | Partes / clases | Duración | |---|---|---| | 1. Fundamentos | Parte 0, clases 001–046 (selección de 25 clases) | 5 semanas | | 2. Estadística + ML clásico | Parte 1 (selección de 15 clases) + Parte 3 (5 clases) | 4 semanas | @@ -27,7 +27,7 @@ Equivalente al alcance del currículo v1 anterior. Recomendado para alumnos sin Cubre el grueso de ML clásico y un primer contacto con Deep Learning. -| Bloque | Partes / clases v2 | Duración | +| Bloque | Partes / clases | Duración | |---|---|---| | 1. Prerrequisitos completos | Parte 0 (46 clases) | 8 semanas | | 2. ML clásico completo | Parte 1 (43 clases) | 8 semanas | @@ -39,7 +39,7 @@ Cubre el grueso de ML clásico y un primer contacto con Deep Learning. Cobertura completa de la pauta. Recomendado para perfiles que buscan empleabilidad como ML Engineer / Data Scientist senior. -| Bloque | Partes / clases v2 | Duración | +| Bloque | Partes / clases | Duración | |---|---|---| | 1. Fundamentos completos | Parte 0 (46 clases) | 8 semanas | | 2. ML clásico + Estadística | Partes 1 y 3 (56 clases) | 10 semanas | @@ -65,10 +65,10 @@ Selección por interés profesional. Asume que la Parte 0 ya está cubierta. ## Duración estimada por clase -Cada clase v2 está diseñada para **90 minutos de aula** + ~60 minutos de práctica autónoma posterior. Las clases-capstone (Parte 8) son notablemente más largas — pueden requerir varias sesiones. +Cada clase está diseñada para **90 minutos de aula** + ~60 minutos de práctica autónoma posterior. Las clases-capstone (Parte 8) son notablemente más largas — pueden requerir varias sesiones. ## Estado actual -El **contenido pedagógico de las 197 clases v2 está en desarrollo**. Las modalidades A/B/C arriba descritas requieren que primero estén rellenos los bloques correspondientes. Mientras tanto, el currículo v1 archivado en `historicos/classes-v1/` sigue siendo dictable como programa introductorio de 3 meses. +El **contenido pedagógico de las 197 clases está en desarrollo**. Las modalidades A/B/C arriba descritas requieren que primero estén rellenos los bloques correspondientes. Ver [../ROADMAP.md](../ROADMAP.md) para el orden recomendado de desarrollo. diff --git a/docs/entorno-interactivo.md b/docs/entorno-interactivo.md index cb3e475f..1f30a369 100644 --- a/docs/entorno-interactivo.md +++ b/docs/entorno-interactivo.md @@ -1,7 +1,5 @@ # 🧪 Entorno interactivo del Programa -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - > Descripción técnica del laboratorio local: modos de ejecución, componentes, sesiones y límites operativos. --- diff --git a/docs/herramientas-pedagogicas-de-aula.md b/docs/herramientas-pedagogicas-de-aula.md index ded823ab..7c4bdc7e 100644 --- a/docs/herramientas-pedagogicas-de-aula.md +++ b/docs/herramientas-pedagogicas-de-aula.md @@ -1,7 +1,5 @@ # 🧰 Herramientas pedagogicas de aula -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - Playbook de mediación para mostrar en entrevista, usar en clase de prueba y operar el programa con criterio. El objetivo de este documento es bajar la pedagogia a decisiones concretas, observables y reutilizables. ## 💡 1. Idea fuerza diff --git a/docs/instructor-guide.md b/docs/instructor-guide.md index 5edf394f..0d7816a6 100644 --- a/docs/instructor-guide.md +++ b/docs/instructor-guide.md @@ -1,7 +1,5 @@ # 🎓 Guía del instructor -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - > Audiencia: docente principal, docente apoyo, coordinacion academica. ## Objetivo diff --git a/docs/metodologia-docente.md b/docs/metodologia-docente.md index 2d37a3b7..8e8ef524 100644 --- a/docs/metodologia-docente.md +++ b/docs/metodologia-docente.md @@ -1,7 +1,5 @@ # 🧠 Metodología docente -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - > Audiencia: docente, coordinacion academica, evaluador pedagógico. ## Proposito diff --git a/docs/perfil-estudiantes.md b/docs/perfil-estudiantes.md index b51101f3..309b6b13 100644 --- a/docs/perfil-estudiantes.md +++ b/docs/perfil-estudiantes.md @@ -1,7 +1,5 @@ # 👥 Perfil de estudiantes -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - ## Perfil principal esperado - Personas en transicion hacia análisis de datos. diff --git a/docs/plan-evaluacion.md b/docs/plan-evaluacion.md index 053be0a7..e6f2dc25 100644 --- a/docs/plan-evaluacion.md +++ b/docs/plan-evaluacion.md @@ -1,7 +1,5 @@ # 📏 Plan de evaluación -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - Plan de evaluación continua para una implementación inicial del programa. Esta propuesta busca medir comprensión, aplicacion, interpretacion y progresión, no solo resultado final. ## 🧭 1. Principios de evaluación diff --git a/docs/portal-estudiante-y-app-movil.md b/docs/portal-estudiante-y-app-movil.md index 7400719d..5388ac7a 100644 --- a/docs/portal-estudiante-y-app-movil.md +++ b/docs/portal-estudiante-y-app-movil.md @@ -1,7 +1,5 @@ # 📱 Portal del alumno y ruta hacia app móvil -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - Documento de producto para explicar por que existe una superficie pública separada del laboratorio local, cual es el enlace oficial para estudiantes y como evoluciona esta base hacia una experiencia móvil sin sobredimensionar la madurez actual. ## 1. Objetivo diff --git a/docs/student-guide.md b/docs/student-guide.md index 55fe88c8..aa18ae44 100644 --- a/docs/student-guide.md +++ b/docs/student-guide.md @@ -1,7 +1,5 @@ # 🚀 Student Guide -> **Estado v2:** este documento describe metodología y enfoque pedagógico — vigente independientemente del número de clases. El currículo creció de 31 (v1) a **197 clases en 9 partes** (v2). Ver [syllabus.md](syllabus.md) para la pauta actual. - Guía base para estudiantes que usan el programa por primera vez. Este documento no reemplaza la clase: ordena expectativas, reduce ansiedad y explica como aprovechar el material sin depender de copiar pasos. ## 🧭 1. Qué es este programa diff --git a/docs/syllabus.md b/docs/syllabus.md index a7623255..f0d2cae6 100644 --- a/docs/syllabus.md +++ b/docs/syllabus.md @@ -1,4 +1,4 @@ -# Syllabus — Python Data Science Program (v2) +# Syllabus — Python Data Science Program > **197 clases · 9 partes · curriculum avanzado y completo** > @@ -66,8 +66,6 @@ Capaz de: | Quizzes pre/post lección | ⏳ pendiente | | Datasets temáticos por bloque | ⏳ pendiente | -El currículo anterior (v1, 31 clases) se conserva en [`historicos/classes-v1/`](../historicos/classes-v1) como referencia y fuente de material reutilizable. - ## Cómo desarrollar una clase Cada carpeta de clase tiene la misma estructura mínima: @@ -78,7 +76,7 @@ classes/parte-N-slug/NNN-tema-slug/ └── notebook.ipynb # cuaderno de la clase ``` -Materiales opcionales que se pueden añadir conforme una clase madure (replicando el estándar de v1): +Materiales opcionales que se pueden añadir conforme una clase madure: ``` ├── teoria.md diff --git a/mobile/README.md b/mobile/README.md index bd5570d4..f649e971 100644 --- a/mobile/README.md +++ b/mobile/README.md @@ -2,7 +2,7 @@ App móvil del Python Data Science Program. -> **Estado actual:** el código de la app está operativo (UI, navegación, almacenamiento de progreso, integración con Google Colab) pero `src/data/classes.js` quedó como **stub vacío** en la migración a v2. La adaptación de las 197 clases del currículo v2 a una UX móvil está pendiente — ver [ROADMAP.md](../ROADMAP.md). Compilar la app hoy genera un APK funcional pero con catálogo vacío. +> **Estado actual:** el código de la app está operativo (UI, navegación, almacenamiento de progreso, integración con Google Colab) pero `src/data/classes.js` quedó como **stub vacío**. La adaptación de las 197 clases del currículo a una UX móvil está pendiente — ver [ROADMAP.md](../ROADMAP.md). Compilar la app hoy genera un APK funcional pero con catálogo vacío. ## Requisitos @@ -55,7 +55,7 @@ mobile/ └── src/ ├── theme.js # Design system: colores, espaciado, tipografia ├── data/ - │ └── classes.js # Stub vacío (CLASSES = []); pendiente cargar v2 + │ └── classes.js # Stub vacío (CLASSES = []); pendiente cargar el catálogo ├── navigation/ │ └── AppNavigator.js # Stack Navigator con rutas Home y Class ├── screens/ @@ -84,7 +84,7 @@ mobile/ ## Agregar/modificar contenido -> El archivo `src/data/classes.js` está hoy vacío (stub). Cuando se decida la UX para representar 197 clases en móvil (jerarquía por partes, búsqueda, progreso por bloque), se irán cargando entradas en este archivo. La estructura del objeto por clase se mantiene del diseño v1: +> El archivo `src/data/classes.js` está hoy vacío (stub). Cuando se decida la UX para representar 197 clases en móvil (jerarquía por partes, búsqueda, progreso por bloque), se irán cargando entradas en este archivo. Estructura de objeto sugerida por clase: ```js codeExamples: [ From 0a25f167f2aa3899bc0f9ef46a905e1d9b17a21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Acu=C3=B1a?= Date: Sun, 17 May 2026 19:11:27 -0400 Subject: [PATCH 2/4] docs(readme): mejora visual del README principal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hero centrado con tagline y dos grupos de badges (estado + tech stack) - Tabla de estado del producto con iconos por aspecto - Mapa visual de las 9 partes del currículo (clases por parte) - Diagrama Mermaid de dependencias entre partes con colores - Iconos en todas las secciones, tablas y bullets - Bloque qué es / qué no es en dos columnas (HTML table) - Footer con badges sociales Co-Authored-By: Claude Opus 4.7 --- README.md | 351 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 226 insertions(+), 125 deletions(-) diff --git a/README.md b/README.md index d9825a02..ac9665c8 100644 --- a/README.md +++ b/README.md @@ -1,110 +1,145 @@ +
+ # 🧭 Python Data Science Program +### **197 clases · 9 partes · pauta avanzada y completa** + +**Curso completo de Python y Data Science — desde fundamentos hasta despliegue de modelos en producción** + +
+ [![CI](https://github.com/vladimiracunadev-create/python-data-science-program/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/vladimiracunadev-create/python-data-science-program/actions/workflows/ci.yml) [![Security](https://github.com/vladimiracunadev-create/python-data-science-program/actions/workflows/security.yml/badge.svg?branch=main)](https://github.com/vladimiracunadev-create/python-data-science-program/actions/workflows/security.yml) [![Pages](https://github.com/vladimiracunadev-create/python-data-science-program/actions/workflows/deploy-pages.yml/badge.svg?branch=main)](https://github.com/vladimiracunadev-create/python-data-science-program/actions/workflows/deploy-pages.yml) -![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-informational.svg) -![Version](https://img.shields.io/badge/release-v2.0.0--scaffold-2e8b57.svg) -![License](https://img.shields.io/badge/license-MIT-blue.svg) -Curso completo de Python y Data Science — desde fundamentos hasta despliegue de modelos en producción. +[![Version](https://img.shields.io/badge/release-v2.0.0--scaffold-2e8b57?style=for-the-badge)](CHANGELOG.md) +[![Clases](https://img.shields.io/badge/clases-197%20%C2%B7%209%20partes-7c5cff?style=for-the-badge)](classes/README.md) +[![Estado](https://img.shields.io/badge/contenido-en%20desarrollo-f59e0b?style=for-the-badge)](ROADMAP.md) +[![License](https://img.shields.io/badge/license-MIT-3fb950?style=for-the-badge)](LICENSE) -> **197 clases · 9 partes · pauta avanzada y completa** -> -> Índice navegable: [classes/README.md](classes/README.md) · Syllabus: [docs/syllabus.md](docs/syllabus.md) +[![Python](https://img.shields.io/badge/Python-3.10%20%7C%203.11%20%7C%203.12-3776AB?style=flat-square&logo=python&logoColor=white)](https://www.python.org/) +[![Jupyter](https://img.shields.io/badge/Jupyter-Notebook-F37626?style=flat-square&logo=jupyter&logoColor=white)](https://jupyter.org/) +[![Flask](https://img.shields.io/badge/Flask-3.x-000000?style=flat-square&logo=flask&logoColor=white)](https://flask.palletsprojects.com/) +[![pandas](https://img.shields.io/badge/pandas-2.x-150458?style=flat-square&logo=pandas&logoColor=white)](https://pandas.pydata.org/) +[![scikit--learn](https://img.shields.io/badge/scikit--learn-1.4-F7931E?style=flat-square&logo=scikit-learn&logoColor=white)](https://scikit-learn.org/) +[![Docker](https://img.shields.io/badge/Docker-ready-2496ED?style=flat-square&logo=docker&logoColor=white)](Dockerfile) +[![Windows](https://img.shields.io/badge/Windows-Desktop%20App-0078D6?style=flat-square&logo=windows&logoColor=white)](docs/BUILD_INSTALLER.md) +[![Android](https://img.shields.io/badge/Android-Expo-3DDC84?style=flat-square&logo=android&logoColor=white)](mobile/) -Integra currículo modular extenso, laboratorio interactivo local, portal del alumno, app de escritorio nativa para Windows y app Android. La pauta se deriva de *Hands-On Machine Learning* (Géron, 3ª ed.), *Python Data Science Handbook* (VanderPlas), *Designing ML Systems* (Huyen), *ISLP* (James et al) y *Fairness and ML* (Barocas/Hardt/Narayanan). +[📚 Índice de clases](classes/README.md) · [📖 Syllabus](docs/syllabus.md) · [🏗️ Arquitectura](docs/ARQUITECTURA_PRODUCTO.md) · [🎯 Evaluación](docs/GUIA_EVALUACION.md) -> **Origen y orientación del proyecto:** este repositorio nació como **muestra de habilidades técnicas y pedagógicas**, y hoy se desarrolla como **recurso personal de aprendizaje, enseñanza y mejora continua del propio producto**. Es público y abierto a cualquier persona que quiera aprender, enseñar o contribuir. +
--- -## Estado actual del producto +Integra currículo modular extenso, laboratorio interactivo local, portal del alumno, app de escritorio nativa para Windows y app Android. La pauta se deriva de *Hands-On Machine Learning* (Géron, 3ª ed.), *Python Data Science Handbook* (VanderPlas), *Designing ML Systems* (Huyen), *ISLP* (James et al) y *Fairness and ML* (Barocas/Hardt/Narayanan). -> **Versión:** v2.0.0-scaffold -> **Clases:** 197 en 9 partes (Prerrequisitos, ML clásico, Deep Learning, Estadística inferencial, MLOps, Ingeniería de datos, Recomendadores, Ética, Capstones) -> **Estructura:** carpetas y stubs de `README.md` + `notebook.ipynb` generados para las 197 clases -> **Contenido pedagógico:** ⏳ en desarrollo — los stubs se rellenan por bloques siguiendo el orden de `docs/syllabus.md` -> **Laboratorio:** Flask local con ejecución Python en tiempo real, captura de gráficos y guardado de notebooks -> **Distribución:** app de escritorio Windows (Edge WebView2, sin navegador) + app Android (Expo/React Native) -> **Postura:** local-first — no internet abierta sin capas adicionales +> 💡 **Origen y orientación del proyecto:** este repositorio nació como **muestra de habilidades técnicas y pedagógicas**, y hoy se desarrolla como **recurso personal de aprendizaje, enseñanza y mejora continua del propio producto**. Es público y abierto a cualquier persona que quiera aprender, enseñar o contribuir. -### Trabajo pendiente +--- -- Rellenar contenido pedagógico de las 197 clases (orden recomendado en `docs/syllabus.md` y `ROADMAP.md`) -- Migrar el contenido embebido del mobile (`mobile/src/data/classes.js`) a la estructura actual -- Migrar el portal `site/` al índice actual -- Generar PDFs y PPTX por bloque al madurar el contenido de cada parte +## 📊 Estado actual del producto + +| 🎯 Aspecto | Estado | +|---|---| +| 🏷️ **Versión** | `v2.0.0-scaffold` | +| 📚 **Clases** | 197 en 9 partes | +| 🗂️ **Estructura** | ✅ stubs de `README.md` + `notebook.ipynb` generados para las 197 clases | +| ✍️ **Contenido pedagógico** | ⏳ en desarrollo — los stubs se rellenan por bloques (ver [`docs/syllabus.md`](docs/syllabus.md)) | +| 🧪 **Laboratorio Flask** | ✅ ejecución Python local, captura de gráficos, guardado de notebooks | +| 🖥️ **App Windows** | ✅ código operativo · binario pendiente de rebuild (Edge WebView2, sin navegador) | +| 📱 **App Android** | ✅ código operativo · APK debug (Expo/React Native) | +| 🛡️ **Postura** | local-first — no internet abierta sin capas adicionales | + +### 🗺️ Las 9 partes del currículo + +| # | Parte | Clases | Foco | +|---|---|---|---| +| 0️⃣ | Prerrequisitos | 46 | Python aplicado, NumPy, pandas, visualización, SQL, NoSQL, APIs | +| 1️⃣ | ML clásico | 43 | Regresión, clasificación, ensembles, no supervisado | +| 2️⃣ | Deep Learning | 56 | Keras, TF, CNN, RNN, Transformers, RL, despliegue | +| 3️⃣ | Estadística inferencial | 13 | Hipótesis, A/B testing, inferencia causal, Bayes | +| 4️⃣ | MLOps | 14 | Docker, CI/CD, MLflow, monitoreo, interpretabilidad | +| 5️⃣ | Ingeniería de datos | 8 | Spark, Airflow, lakehouses, streaming | +| 6️⃣ | Recomendadores | 7 | Filtrado colaborativo, factorización, secuenciales | +| 7️⃣ | Ética, fairness, privacidad | 6 | Sesgo, explicabilidad, marcos normativos | +| 8️⃣ | Capstones | 4 | Proyectos integradores end-to-end | + +### 🚧 Trabajo pendiente + +- 📝 Rellenar contenido pedagógico de las 197 clases (orden recomendado en [`docs/syllabus.md`](docs/syllabus.md) y [`ROADMAP.md`](ROADMAP.md)) +- 📱 Migrar el contenido embebido del mobile (`mobile/src/data/classes.js`) a la estructura actual +- 🌐 Migrar el portal `site/` al índice actual +- 📄 Generar PDFs y PPTX por bloque al madurar el contenido de cada parte --- -## Rutas recomendadas según perfil +## 🧭 Rutas recomendadas según perfil -| Perfil | Documento de entrada | Qué mirar primero | +| 👤 Perfil | 📖 Documento de entrada | 🎯 Qué mirar primero | |---|---|---| -| Institución / evaluador | [docs/GUIA_EVALUACION.md](docs/GUIA_EVALUACION.md) | valor, evidencia y límites reales | -| Reclutador técnico | [RECRUITER.md](RECRUITER.md) | evidencia técnica rápida en 5 minutos | -| Stakeholder técnico | [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md) | capas, flujos y fronteras | -| Producto / maintainer | [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md) | superficies, artefactos y reglas de comunicación | -| Docente | [docs/herramientas-pedagogicas-de-aula.md](docs/herramientas-pedagogicas-de-aula.md) | mediación, problemas de aula y ritmo | -| Alumno | [docs/student-guide.md](docs/student-guide.md) | uso del curso y expectativas | -| Operación | [RUNBOOK.md](RUNBOOK.md) | arranque, smoke checks y apagado | -| Seguridad | [SECURITY.md](SECURITY.md) | postura actual y riesgos aceptados | +| 🏛️ Institución / evaluador | [docs/GUIA_EVALUACION.md](docs/GUIA_EVALUACION.md) | valor, evidencia y límites reales | +| 🎯 Reclutador técnico | [RECRUITER.md](RECRUITER.md) | evidencia técnica rápida en 5 minutos | +| 🏗️ Stakeholder técnico | [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md) | capas, flujos y fronteras | +| 📦 Producto / maintainer | [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md) | superficies, artefactos y reglas de comunicación | +| 👩‍🏫 Docente | [docs/herramientas-pedagogicas-de-aula.md](docs/herramientas-pedagogicas-de-aula.md) | mediación, problemas de aula y ritmo | +| 🎓 Alumno | [docs/student-guide.md](docs/student-guide.md) | uso del curso y expectativas | +| ⚙️ Operación | [RUNBOOK.md](RUNBOOK.md) | arranque, smoke checks y apagado | +| 🔐 Seguridad | [SECURITY.md](SECURITY.md) | postura actual y riesgos aceptados | -Si no sabes por donde entrar, usa [docs/INDEX.md](docs/INDEX.md). +> Si no sabes por dónde entrar, usa [docs/INDEX.md](docs/INDEX.md). --- -## Cómo leer este repo según tiempo disponible +## ⏱️ Cómo leer este repo según tiempo disponible -| Tiempo | Secuencia recomendada | Resultado esperado | +| ⏰ Tiempo | Secuencia recomendada | 🎯 Resultado esperado | |---|---|---| -| 5 minutos | `README` → `RECRUITER.md` | evidencia rápida de qué funciona hoy | -| 15 minutos | `README` → `docs/GUIA_EVALUACION.md` → `docs/CATALOGO_PRODUCTO.md` | entender superficies, arquitectura y criterio de operación | -| 30 minutos | secuencia anterior + `docs/syllabus.md` + `docs/ARQUITECTURA_PRODUCTO.md` | entender el currículo completo, capas y growth path | +| 5 min | `README` → `RECRUITER.md` | evidencia rápida de qué funciona hoy | +| 15 min | `README` → `docs/GUIA_EVALUACION.md` → `docs/CATALOGO_PRODUCTO.md` | entender superficies, arquitectura y criterio de operación | +| 30 min | secuencia anterior + `docs/syllabus.md` + `docs/ARQUITECTURA_PRODUCTO.md` | entender el currículo completo, capas y growth path | -La documentación está pensada como sistema, no como inventario de archivos. +> 📚 La documentación está pensada como sistema, no como inventario de archivos. --- -## Superficies del producto +## 🎛️ Superficies del producto | Superficie | Rol | Estado | |---|---|---| -| Laboratorio interactivo (`app/`) | entorno local de clase — notebooks, runner, ejecución Python | operativo | -| Portal del alumno (`site/`) | punto de entrada oficial para estudiantes | operativo | -| Vista institucional (`site/product/`) | presentación visual del producto | operativa | -| Currículo modular (`classes/`) | 197 clases en 9 partes: Prerrequisitos, ML clásico, Deep Learning, Estadística inferencial, MLOps, Ingeniería de datos, Recomendadores, Ética, Capstones | scaffold operativo · contenido en desarrollo | -| App de escritorio Windows (`launcher.py` + `program.spec` + `installer/`) | ventana nativa con Edge WebView2 — sin navegador, sin Python en el PC del alumno | código operativo · binario pendiente de build | -| App Android (`mobile/`) | Expo/React Native con integración Google Colab | código operativo · contenido pendiente de migración al índice actual | -| PDFs (`docs/pdfs/`) | guías por clase | se regeneran por bloques al madurar el contenido | -| Presentaciones (`docs/presentaciones/`) | decks `.pptx` por clase | se regeneran por bloques al madurar el contenido | +| 🧪 Laboratorio interactivo (`app/`) | entorno local de clase — notebooks, runner, ejecución Python | ✅ operativo | +| 🌐 Portal del alumno (`site/`) | punto de entrada oficial para estudiantes | ✅ operativo | +| 🏛️ Vista institucional (`site/product/`) | presentación visual del producto | ✅ operativa | +| 📚 Currículo modular (`classes/`) | 197 clases en 9 partes: Prerrequisitos, ML clásico, Deep Learning, Estadística inferencial, MLOps, Ingeniería de datos, Recomendadores, Ética, Capstones | 🟡 scaffold operativo · contenido en desarrollo | +| 🖥️ App de escritorio Windows (`launcher.py` + `program.spec` + `installer/`) | ventana nativa con Edge WebView2 — sin navegador, sin Python en el PC del alumno | 🟡 código operativo · binario pendiente de build | +| 📱 App Android (`mobile/`) | Expo/React Native con integración Google Colab | 🟡 código operativo · contenido pendiente de migración | +| 📄 PDFs (`docs/pdfs/`) | guías por clase | 🔄 se regeneran por bloques al madurar el contenido | +| 📊 Presentaciones (`docs/presentaciones/`) | decks `.pptx` por clase | 🔄 se regeneran por bloques al madurar el contenido | La fuente de verdad de esta taxonomía vive en [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md). --- -## Materiales listos para usar - -### Currículo (197 clases) +## 📚 Materiales listos para usar -- Índice navegable: [classes/README.md](classes/README.md) -- Pauta completa: [docs/syllabus.md](docs/syllabus.md) -- Cada clase: `README.md` (ficha) + `notebook.ipynb` (stub). Los materiales PDF/PPTX se regeneran por bloque al madurar el contenido. +### 🗂️ Currículo (197 clases) +- 🧭 **Índice navegable:** [classes/README.md](classes/README.md) +- 📖 **Pauta completa:** [docs/syllabus.md](docs/syllabus.md) +- 📝 Cada clase: `README.md` (ficha) + `notebook.ipynb` (stub). Los materiales PDF/PPTX se regeneran por bloque al madurar el contenido. ### 📄 PDFs de estudio adicionales PDFs listos para imprimir o compartir. Viven en `docs/pdfs/` y son independientes del flujo de clases. -| Documento | Descripción | +| 📑 Documento | Descripción | |---|---| -| [guia-estudio-repositorio.pdf](docs/pdfs/guia-estudio-repositorio.pdf) | Ruta de lectura rápida del repo para evaluador o reclutador | -| [guia-total-python-data-science.pdf](docs/pdfs/guia-total-python-data-science.pdf) | Guía ampliada de Python con Data Science investigada con fuentes oficiales | +| [guia-estudio-repositorio.pdf](docs/pdfs/guia-estudio-repositorio.pdf) | 🗺️ Ruta de lectura rápida del repo para evaluador o reclutador | +| [guia-total-python-data-science.pdf](docs/pdfs/guia-total-python-data-science.pdf) | 📘 Guía ampliada de Python con Data Science investigada con fuentes oficiales | --- -## Arquitectura en una mirada +## 🏗️ Arquitectura en una mirada ```mermaid graph LR @@ -127,11 +162,50 @@ graph LR La arquitectura completa, con flujos y fronteras, está en [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md). +### 🗺️ Mapa del currículo (9 partes · 197 clases) + +```mermaid +graph TD + P0["0️⃣ Prerrequisitos
46 clases"]:::found + P1["1️⃣ ML clásico
43 clases"]:::ml + P2["2️⃣ Deep Learning
56 clases"]:::dl + P3["3️⃣ Estadística inferencial
13 clases"]:::stats + P4["4️⃣ MLOps
14 clases"]:::ops + P5["5️⃣ Ingeniería de datos
8 clases"]:::data + P6["6️⃣ Recomendadores
7 clases"]:::rec + P7["7️⃣ Ética, fairness, privacidad
6 clases"]:::eth + P8["8️⃣ Capstones
4 proyectos"]:::cap + + P0 --> P1 + P0 --> P3 + P1 --> P2 + P1 --> P4 + P3 --> P1 + P2 --> P4 + P4 --> P5 + P1 --> P6 + P2 --> P6 + P0 --> P7 + P1 --> P8 + P2 --> P8 + P4 --> P8 + + classDef found fill:#7c5cff,stroke:#5b3fc7,color:#fff + classDef ml fill:#2e8b57,stroke:#1f6f43,color:#fff + classDef dl fill:#0ea5e9,stroke:#0369a1,color:#fff + classDef stats fill:#f59e0b,stroke:#b45309,color:#fff + classDef ops fill:#ef4444,stroke:#b91c1c,color:#fff + classDef data fill:#8b5cf6,stroke:#6d28d9,color:#fff + classDef rec fill:#ec4899,stroke:#be185d,color:#fff + classDef eth fill:#14b8a6,stroke:#0f766e,color:#fff + classDef cap fill:#facc15,stroke:#a16207,color:#000 +``` + --- -## Capacidades actuales +## ⚙️ Capacidades actuales -### Currículo y pedagogía +### 📚 Currículo y pedagogía - **Currículo (scaffold):** 197 clases en 9 partes — Prerrequisitos (46), ML clásico (43), Deep Learning (56), Estadística inferencial (13), MLOps (14), Ingeniería de datos (8), Recomendadores (7), Ética (6), Capstones (4); - pauta derivada de **Hands-On ML** (Géron 3ª ed.), **Python Data Science Handbook** (VanderPlas), **Designing ML Systems** (Huyen), **ISLP** (James et al), **Fairness and ML** (Barocas/Hardt/Narayanan); @@ -148,7 +222,7 @@ La arquitectura completa, con flujos y fronteras, está en [docs/ARQUITECTURA_PR - guardado de notebooks en JSON local (`app/saved_notebooks/`); - endpoints `GET /health` y `GET /ready` para healthchecks. -### App de escritorio Windows +### 🖥️ App de escritorio Windows - ventana nativa con Edge WebView2 — **sin abrir el navegador del sistema**; - Flask corre internamente en un puerto libre elegido automáticamente; @@ -156,7 +230,7 @@ La arquitectura completa, con flujos y fronteras, está en [docs/ARQUITECTURA_PR - portable (ZIP) + instalador (Inno Setup) disponibles; - sin dependencias en el PC del usuario final. -### App Android +### 📱 App Android - Expo/React Native (pendiente migrar el contenido embebido al índice actual); - integración con Google Colab para ejecución de código sin Python local; @@ -172,15 +246,15 @@ La arquitectura completa, con flujos y fronteras, está en [docs/ARQUITECTURA_PR --- -## Inicio rápido +## 🚀 Inicio rápido -### Opción A — app de escritorio Windows (usuarios finales) +### 🅰️ Opción A — app de escritorio Windows (usuarios finales) El binario distribuible se reconstruye cuando el contenido alcance un primer hito publicable. Mientras tanto, usa el modo desarrollo (Opción B) o la imagen Docker (Opción C/D) para correr el laboratorio local. Ver [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) para construir el `.exe` desde fuente. Requiere (al usar el binario): Edge WebView2 Runtime (preinstalado en Windows 10 v2004+ y Windows 11). -### Opción B — modo desarrollo (entorno virtual) +### 🅱️ Opción B — modo desarrollo (entorno virtual) ```bash python -m venv .venv @@ -192,13 +266,13 @@ python run_program.py Abre automáticamente `http://127.0.0.1:8000` en el navegador. -### Opción C — Docker local +### 🐳 Opción C — Docker local ```bash docker compose up --build ``` -### Opción D — Docker endurecido +### 🛡️ Opción D — Docker endurecido ```bash docker compose -f docker-compose.prod.yml up -d --build @@ -206,7 +280,7 @@ docker compose -f docker-compose.prod.yml up -d --build --- -## Build de distribución +## 📦 Build de distribución ```bash # Instala dependencias de build @@ -220,7 +294,7 @@ Ver [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) para instrucciones comple --- -## Validación y CI/CD +## ✅ Validación y CI/CD ```bash pytest # suite completa @@ -230,83 +304,110 @@ python -m bandit -r app # seguridad estática Workflows activos: -| Workflow | Qué cubre | +| ⚙️ Workflow | Qué cubre | |---|---| -| [ci.yml](.github/workflows/ci.yml) | tests, lint, build de contenedor | -| [security.yml](.github/workflows/security.yml) | auditoría de dependencias, SAST | -| [deploy-pages.yml](.github/workflows/deploy-pages.yml) | despliegue de `site/` a GitHub Pages | +| 🧪 [ci.yml](.github/workflows/ci.yml) | tests, lint, build de contenedor | +| 🔒 [security.yml](.github/workflows/security.yml) | auditoría de dependencias, SAST | +| 🚀 [deploy-pages.yml](.github/workflows/deploy-pages.yml) | despliegue de `site/` a GitHub Pages | --- -## Seguridad y límites +## 🔐 Seguridad y límites -**Protecciones activas:** +### 🛡️ Protecciones activas -- validación de slugs e identificadores (regex, evita path traversal); -- límite de payload por request (1 MB); -- límite de longitud de código (20 KB); -- timeout de ejecución por celda (30 s) + reinicio de sesión; -- eviction de sesiones antiguas (100 sesiones máx, TTL 1 hora); -- CSP estricto sin dependencias CDN externas; -- defaults de arranque a `127.0.0.1`; -- nosec justificado para falsos positivos de Bandit en polling loops. +- ✅ validación de slugs e identificadores (regex, evita path traversal); +- ✅ límite de payload por request (1 MB); +- ✅ límite de longitud de código (20 KB); +- ✅ timeout de ejecución por celda (30 s) + reinicio de sesión; +- ✅ eviction de sesiones antiguas (100 sesiones máx, TTL 1 hora); +- ✅ CSP estricto sin dependencias CDN externas; +- ✅ defaults de arranque a `127.0.0.1`; +- ✅ nosec justificado para falsos positivos de Bandit en polling loops. -**Límites conocidos:** +### ⚠️ Límites conocidos -- no hay autenticación integrada; -- no hay sandbox fuerte para código no confiable; -- no hay rate limiting de red; -- no hay TLS nativo; -- el runner es para uso local en aula, no para internet abierta. +- ❌ no hay autenticación integrada; +- ❌ no hay sandbox fuerte para código no confiable; +- ❌ no hay rate limiting de red; +- ❌ no hay TLS nativo; +- ❌ el runner es para uso local en aula, no para internet abierta. -Ver [SECURITY.md](SECURITY.md) para detalle completo. +> 📖 Ver [SECURITY.md](SECURITY.md) para detalle completo. --- -## Mapa documental +## 🗺️ Mapa documental -| Documento | Rol | +| 📄 Documento | Rol | |---|---| -| [RECRUITER.md](RECRUITER.md) | evidencia técnica rápida para evaluadores | -| [CHANGELOG.md](CHANGELOG.md) | historial de cambios por versión | -| [CONTRIBUTING.md](CONTRIBUTING.md) | cómo contribuir al proyecto | -| [ROADMAP.md](ROADMAP.md) | dirección futura del producto | -| [RUNBOOK.md](RUNBOOK.md) | operación diaria | -| [SECURITY.md](SECURITY.md) | postura de seguridad y límites | -| [docs/INDEX.md](docs/INDEX.md) | índice completo por audiencia y objetivo | -| [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md) | fuente de verdad de superficies y artefactos | -| [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md) | arquitectura funcional con diagramas | -| [docs/GUIA_EVALUACION.md](docs/GUIA_EVALUACION.md) | ruta ejecutiva de 10 minutos | -| [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) | cómo generar el instalador Windows | -| [docs/MOBILE_APP.md](docs/MOBILE_APP.md) | cómo construir y distribuir la app Android | -| [docs/entorno-interactivo.md](docs/entorno-interactivo.md) | el laboratorio Flask y su funcionamiento | -| [docs/metodologia-docente.md](docs/metodologia-docente.md) | marco pedagógico del producto | -| [docs/instructor-guide.md](docs/instructor-guide.md) | playbook de ejecución docente | -| [docs/student-guide.md](docs/student-guide.md) | guía de onboarding del alumno | -| [docs/despliegue-seguro-y-operacion.md](docs/despliegue-seguro-y-operacion.md) | CI/CD, Docker y hardening | -| [docs/MIGRACION_AWS.md](docs/MIGRACION_AWS.md) | migración a la nube AWS — arquitectura, costos y paso a paso | - -> Las notas internas del maintainer viven en `docs/maintainer/`. +| 🎯 [RECRUITER.md](RECRUITER.md) | evidencia técnica rápida para evaluadores | +| 📜 [CHANGELOG.md](CHANGELOG.md) | historial de cambios por versión | +| 🤝 [CONTRIBUTING.md](CONTRIBUTING.md) | cómo contribuir al proyecto | +| 🛣️ [ROADMAP.md](ROADMAP.md) | dirección futura del producto | +| ⚙️ [RUNBOOK.md](RUNBOOK.md) | operación diaria | +| 🔐 [SECURITY.md](SECURITY.md) | postura de seguridad y límites | +| 🧭 [docs/INDEX.md](docs/INDEX.md) | índice completo por audiencia y objetivo | +| 📦 [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md) | fuente de verdad de superficies y artefactos | +| 🏗️ [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md) | arquitectura funcional con diagramas | +| ✅ [docs/GUIA_EVALUACION.md](docs/GUIA_EVALUACION.md) | ruta ejecutiva de 10 minutos | +| 🖥️ [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) | cómo generar el instalador Windows | +| 📱 [docs/MOBILE_APP.md](docs/MOBILE_APP.md) | cómo construir y distribuir la app Android | +| 🧪 [docs/entorno-interactivo.md](docs/entorno-interactivo.md) | el laboratorio Flask y su funcionamiento | +| 🧠 [docs/metodologia-docente.md](docs/metodologia-docente.md) | marco pedagógico del producto | +| 👩‍🏫 [docs/instructor-guide.md](docs/instructor-guide.md) | playbook de ejecución docente | +| 🎓 [docs/student-guide.md](docs/student-guide.md) | guía de onboarding del alumno | +| 🚢 [docs/despliegue-seguro-y-operacion.md](docs/despliegue-seguro-y-operacion.md) | CI/CD, Docker y hardening | +| ☁️ [docs/MIGRACION_AWS.md](docs/MIGRACION_AWS.md) | migración a la nube AWS — arquitectura, costos y paso a paso | + +> 🗂️ Las notas internas del maintainer viven en `docs/maintainer/`. --- -## Lo que este repo sí es +## 🎯 Qué es y qué no es este repo + + + + + + +
+ +### ✅ Lo que este repo sí es + +- 📚 una base seria de capacitación técnica en Python y Data Science; +- 🧩 un sistema que integra contenido, práctica interactiva y presentación; +- 🖥️ una app de escritorio nativa para distribución en aula sin configuración; +- 🎓 una muestra de criterio pedagógico, operacional y de seguridad; +- 🌱 una propuesta que puede empezar acotada y crecer sin rehacerse. + + + +### ❌ Lo que este repo no vende -- una base seria de capacitación técnica en Python y Data Science; -- un sistema que integra contenido, práctica interactiva y presentación; -- una app de escritorio nativa para distribución en aula sin configuración; -- una muestra de criterio pedagógico, operacional y de seguridad; -- una propuesta que puede empezar acotada y crecer sin rehacerse. +- 🚫 una plataforma multiusuario endurecida para internet abierta; +- 🚫 una app móvil ya en producción (el código existe pero el APK se reconstruye con el contenido actual); +- 🚫 una promesa de personalización infinita antes de cerrar condiciones; +- 🚫 profundidad total en todas las direcciones desde la primera versión. -## Lo que este repo no vende +
-- una plataforma multiusuario endurecida para internet abierta; -- una app móvil ya en producción (el código existe pero el APK distribuible se reconstruye con el contenido actual); -- una promesa de personalización infinita antes de cerrar condiciones; -- profundidad total en todas las direcciones desde la primera versión. +--- + +## 💡 Idea fuerza + +> El valor de este proyecto no depende de competir contra una tecnología puntual. Su valor está en **traducir herramientas a aprendizaje real**, con secuencia pedagógica, criterio docente, operación responsable y una base documental que permite evaluarlo como producto. --- -## Idea fuerza +
+ +**¿Te resulta útil? ⭐ Dale una estrella al repo.** + +[![GitHub stars](https://img.shields.io/github/stars/vladimiracunadev-create/python-data-science-program?style=social)](https://github.com/vladimiracunadev-create/python-data-science-program/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/vladimiracunadev-create/python-data-science-program?style=social)](https://github.com/vladimiracunadev-create/python-data-science-program/network/members) +[![Follow](https://img.shields.io/github/followers/vladimiracunadev-create?style=social&label=Follow)](https://github.com/vladimiracunadev-create) + +Hecho con 🧠 y ☕ por [Vladimir Acuña](https://github.com/vladimiracunadev-create) -El valor de este proyecto no depende de competir contra una tecnología puntual. Su valor está en traducir herramientas a aprendizaje real, con secuencia pedagógica, criterio docente, operación responsable y una base documental que permite evaluarlo como producto. +
From 6621a5d4ef972c9a0e32fc04e6b8bc2a63731b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Acu=C3=B1a?= Date: Sun, 17 May 2026 19:49:12 -0400 Subject: [PATCH 3/4] =?UTF-8?q?docs:=20pulido=20visual=20a=20toda=20la=20d?= =?UTF-8?q?ocumentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aplicación consistente del estándar visual establecido para README: - Hero centrado con badges para documentos de alto nivel (RECRUITER, ROADMAP, SECURITY, RUNBOOK, CHANGELOG, CONTRIBUTING, INDEX, GUIA_EVALUACION, CATALOGO_PRODUCTO, ARQUITECTURA_PRODUCTO, syllabus, cronograma) - Iconos en cabeceras H2/H3 y celdas de tablas a lo largo de los 25 docs - Pase automático en docs pedagógicos (student-guide, instructor-guide, metodologia-docente, plan-evaluacion, perfil-estudiantes, portal-estudiante, herramientas-pedagogicas, aula-ia, entorno-interactivo, despliegue-seguro-y-operacion, BUILD_INSTALLER, MOBILE_APP, MIGRACION_AWS) con emojis contextuales por palabra clave del título Sin cambios de contenido — sólo refinamiento visual. Co-Authored-By: Claude Opus 4.7 --- CHANGELOG.md | 12 +- CONTRIBUTING.md | 57 ++++---- RECRUITER.md | 120 +++++++++-------- ROADMAP.md | 157 ++++++++++++----------- RUNBOOK.md | 99 +++++++------- SECURITY.md | 142 ++++++++++---------- docs/ARQUITECTURA_PRODUCTO.md | 12 +- docs/BUILD_INSTALLER.md | 28 ++-- docs/CATALOGO_PRODUCTO.md | 32 +++-- docs/GUIA_EVALUACION.md | 27 ++-- docs/INDEX.md | 154 +++++++++++----------- docs/MIGRACION_AWS.md | 26 ++-- docs/MOBILE_APP.md | 28 ++-- docs/aula-ia-y-problemas-frecuentes.md | 28 ++-- docs/cronograma-referencial.md | 29 +++-- docs/despliegue-seguro-y-operacion.md | 38 +++--- docs/entorno-interactivo.md | 34 ++--- docs/herramientas-pedagogicas-de-aula.md | 28 ++-- docs/instructor-guide.md | 26 ++-- docs/metodologia-docente.md | 40 +++--- docs/perfil-estudiantes.md | 8 +- docs/plan-evaluacion.md | 10 +- docs/portal-estudiante-y-app-movil.md | 32 ++--- docs/student-guide.md | 12 +- docs/syllabus.md | 36 ++++-- 25 files changed, 659 insertions(+), 556 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb7db4b9..975d15b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,15 @@ +
+ # 📝 Changelog -Todos los cambios notables de este proyecto se documentan aquí. +### **Historial de cambios por versión** + +[![Keep a Changelog](https://img.shields.io/badge/Keep%20a%20Changelog-1.0.0-f59e0b?style=for-the-badge)](https://keepachangelog.com/es/1.0.0/) +[![SemVer](https://img.shields.io/badge/SemVer-2.0.0-3fb950?style=for-the-badge)](https://semver.org/lang/es/) + +
-El formato sigue [Keep a Changelog](https://keepachangelog.com/es/1.0.0/). -El versionado sigue [Semantic Versioning](https://semver.org/lang/es/). +> 📌 Todos los cambios notables de este proyecto se documentan aquí. --- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 41dfb7d9..67c66ff0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,32 +1,41 @@ +
+ # 🤝 Cómo contribuir -Gracias por tu interés en mejorar el Python Data Science Program. +### **Guía para colaboradores del Python Data Science Program** + +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-3fb950?style=for-the-badge)](https://github.com/vladimiracunadev-create/python-data-science-program/pulls) +[![Idioma](https://img.shields.io/badge/idioma-espa%C3%B1ol-7c5cff?style=for-the-badge)](#-est%C3%A1ndar-de-commits) + +
+ +> 💚 Gracias por tu interés en mejorar el Python Data Science Program. --- -## Tipos de contribuciones bienvenidas +## ✨ Tipos de contribuciones bienvenidas -| Tipo | Ejemplos | +| 🎯 Tipo | 📝 Ejemplos | |---|---| -| Correcciones de contenido | errores en teoría, ejercicios o soluciones | -| Mejoras pedagógicas | mejor secuencia, ejemplos más claros, nuevos ejercicios | -| Correcciones de bugs | errores en la app Flask, el motor de ejecución o el launcher | -| Mejoras de documentación | textos incorrectos, secciones faltantes, links rotos | -| Nuevos datasets | CSV sintéticos útiles para las clases | -| Mejoras de tests | mayor cobertura, casos borde, smoke tests | +| ✏️ Correcciones de contenido | errores en teoría, ejercicios o soluciones | +| 🧠 Mejoras pedagógicas | mejor secuencia, ejemplos más claros, nuevos ejercicios | +| 🐛 Correcciones de bugs | errores en la app Flask, el motor de ejecución o el launcher | +| 📖 Mejoras de documentación | textos incorrectos, secciones faltantes, links rotos | +| 📊 Nuevos datasets | CSV sintéticos útiles para las clases | +| 🧪 Mejoras de tests | mayor cobertura, casos borde, smoke tests | --- -## Qué NO aceptamos actualmente +## 🚫 Qué NO aceptamos actualmente -- cambios de versión sin acuerdo previo (el versionado lo maneja el maintainer); -- dependencias nuevas no discutidas (el bundle de Windows tiene un tamaño objetivo); -- cambios en el curriculum que rompan la progresión pedagógica existente; -- código que reduzca la postura de seguridad documentada en `SECURITY.md`. +- ❌ cambios de versión sin acuerdo previo (el versionado lo maneja el maintainer); +- ❌ dependencias nuevas no discutidas (el bundle de Windows tiene un tamaño objetivo); +- ❌ cambios en el curriculum que rompan la progresión pedagógica existente; +- ❌ código que reduzca la postura de seguridad documentada en `SECURITY.md`. --- -## Flujo de contribución +## 🔄 Flujo de contribución ``` 1. Fork del repositorio @@ -41,7 +50,7 @@ Gracias por tu interés en mejorar el Python Data Science Program. --- -## Estándar de commits +## 📝 Estándar de commits Usa mensajes en español, en presente, descriptivos: @@ -56,7 +65,7 @@ Usa mensajes en español, en presente, descriptivos: --- -## Verificación antes de PR +## ✅ Verificación antes de PR ```bash # Tests @@ -76,7 +85,7 @@ curl http://127.0.0.1:8000/health --- -## Estructura del currículo +## 🗂️ Estructura del currículo El currículo vive en `classes/parte-N-slug/NNN-tema-slug/` (anidado por parte). Cada clase es un stub generado con la estructura mínima: @@ -92,16 +101,16 @@ El generador idempotente de la estructura está en `scripts/generate_v2_curricul --- -## Reportar bugs +## 🐛 Reportar bugs Abre un issue con: -- versión del sistema (`python --version`, OS); -- pasos para reproducir; -- comportamiento esperado vs comportamiento real; -- si es un problema de seguridad, sigue el proceso en [SECURITY.md](SECURITY.md). +- 🖥️ versión del sistema (`python --version`, OS); +- 🔁 pasos para reproducir; +- 🎯 comportamiento esperado vs comportamiento real; +- 🔐 si es un problema de seguridad, sigue el proceso en [SECURITY.md](SECURITY.md). --- -## Preguntas +## ❓ Preguntas Abre un issue con la etiqueta `pregunta`. Respondemos en español o inglés. diff --git a/RECRUITER.md b/RECRUITER.md index 202378f2..d58add4f 100644 --- a/RECRUITER.md +++ b/RECRUITER.md @@ -1,87 +1,101 @@ +
+ # 🎯 Para reclutadores y evaluadores técnicos -> Evidencia técnica en 5 minutos. Sin lectura extensa. +### **Evidencia técnica en 5 minutos · Sin lectura extensa** + +[![Tiempo](https://img.shields.io/badge/lectura-5%20min-3fb950?style=for-the-badge)](#-c%C3%B3mo-evaluar-en-5-minutos) +[![Estado](https://img.shields.io/badge/CI-passing-3fb950?style=for-the-badge&logo=github-actions&logoColor=white)](https://github.com/vladimiracunadev-create/python-data-science-program/actions) +[![Bandit](https://img.shields.io/badge/Bandit-0%20issues-3fb950?style=for-the-badge)](SECURITY.md) + +
--- -## Qué es este repositorio +## 📦 Qué es este repositorio Un sistema de capacitación en Python y Data Science que integra: -- **currículo modular** (197 clases · 9 partes · pauta derivada de Géron 3ª ed., VanderPlas, Huyen, ISLP, Barocas/Hardt/Narayanan) — estructura scaffold con stubs; contenido pedagógico en desarrollo por bloques; -- **laboratorio interactivo** (Flask + ejecución Python en tiempo real, matplotlib, pandas); -- **app de escritorio nativa para Windows** (pywebview + Edge WebView2, sin navegador); -- **app Android** (Expo/React Native, contenido embebido + Google Colab) — pendiente migrar contenido al índice actual; -- **portal público** (GitHub Pages para alumnos + vista institucional) — pendiente migrar al índice actual; -- **documentación de producto** organizada por audiencia. +- 📚 **currículo modular** (197 clases · 9 partes · pauta derivada de Géron 3ª ed., VanderPlas, Huyen, ISLP, Barocas/Hardt/Narayanan) — estructura scaffold con stubs; contenido pedagógico en desarrollo por bloques; +- 🧪 **laboratorio interactivo** (Flask + ejecución Python en tiempo real, matplotlib, pandas); +- 🖥️ **app de escritorio nativa para Windows** (pywebview + Edge WebView2, sin navegador); +- 📱 **app Android** (Expo/React Native, contenido embebido + Google Colab) — pendiente migrar contenido al índice actual; +- 🌐 **portal público** (GitHub Pages para alumnos + vista institucional) — pendiente migrar al índice actual; +- 📖 **documentación de producto** organizada por audiencia. --- -## Estado real en producción +## ✅ Estado real en producción -| Componente | Estado verificado | Evidencia | +| 🧩 Componente | 🚦 Estado verificado | 🔍 Evidencia | |---|---|---| -| Backend Flask | operativo | 10 rutas, tests automatizados, CI en GitHub Actions | -| Ejecución de código Python | operativo | pandas, matplotlib (gráficos), scikit-learn, timeout 30s | -| 197 clases (scaffold) | operativo | `/api/classes` → 197 clases, `/api/class/` → HTML | -| 6 notebooks interactivos | operativo | `/api/notebooks` → 6 templates, ejecución por celda | -| App de escritorio Windows | código operativo · binario pendiente de rebuild | pywebview 6.1 + PyInstaller 6.19, ZIP portable 92MB | -| Instalador Windows | pendiente de rebuild | Inno Setup — sin Python requerido en el PC del usuario | -| App Android | APK debug | 137MB, Expo/React Native — pendiente migrar contenido embebido al índice actual | -| Portal del alumno | en vivo | GitHub Pages — pendiente migrar al índice actual | -| CI/CD | activo | 3 workflows: tests, security scan, deploy-pages | -| Análisis de seguridad | limpio | Bandit: 0 High, 0 Medium, 0 Low | +| Backend Flask | ✅ operativo | 10 rutas, tests automatizados, CI en GitHub Actions | +| Ejecución de código Python | ✅ operativo | pandas, matplotlib (gráficos), scikit-learn, timeout 30s | +| 197 clases (scaffold) | ✅ operativo | `/api/classes` → 197 clases, `/api/class/` → HTML | +| 6 notebooks interactivos | ✅ operativo | `/api/notebooks` → 6 templates, ejecución por celda | +| App de escritorio Windows | 🟡 código operativo · binario pendiente | pywebview 6.1 + PyInstaller 6.19, ZIP portable 92MB | +| Instalador Windows | 🟡 pendiente de rebuild | Inno Setup — sin Python requerido en el PC del usuario | +| App Android | 🟡 APK debug | 137MB, Expo/React Native — pendiente migrar contenido | +| Portal del alumno | ✅ en vivo | GitHub Pages — pendiente migrar al índice actual | +| CI/CD | ✅ activo | 3 workflows: tests, security scan, deploy-pages | +| Análisis de seguridad | ✅ limpio | Bandit: 0 High, 0 Medium, 0 Low | --- -## Stack técnico +## 🧰 Stack técnico -| Capa | Tecnología | +| 🧱 Capa | 🔧 Tecnología | |---|---| -| Backend | Python 3.10–3.12, Flask 3.x | -| Data Science | pandas 2.x, numpy 1.26+, matplotlib 3.8+, scikit-learn 1.4+ | -| Desktop Windows | pywebview 6.1 (Edge WebView2), PyInstaller 6.19 | -| Instalador | Inno Setup 6 | -| Mobile | Expo SDK 51, React Native, Android Gradle | -| Frontend | HTML/CSS/JS vanilla (SPA sin framework) | -| Tests | pytest 8.x, 4 módulos | -| Lint | ruff | -| Security | Bandit | -| CI/CD | GitHub Actions (3 workflows) | -| Deploy | GitHub Pages | -| Contenedores | Docker + Docker Compose (prod variant) | +| 🐍 Backend | Python 3.10–3.12, Flask 3.x | +| 📊 Data Science | pandas 2.x, numpy 1.26+, matplotlib 3.8+, scikit-learn 1.4+ | +| 🖥️ Desktop Windows | pywebview 6.1 (Edge WebView2), PyInstaller 6.19 | +| 📦 Instalador | Inno Setup 6 | +| 📱 Mobile | Expo SDK 51, React Native, Android Gradle | +| 🎨 Frontend | HTML/CSS/JS vanilla (SPA sin framework) | +| 🧪 Tests | pytest 8.x, 4 módulos | +| 🧹 Lint | ruff | +| 🔐 Security | Bandit | +| ⚙️ CI/CD | GitHub Actions (3 workflows) | +| 🚀 Deploy | GitHub Pages | +| 🐳 Contenedores | Docker + Docker Compose (prod variant) | --- -## Lo que demuestra este proyecto +## 💪 Lo que demuestra este proyecto -- capacidad de integrar backend Python con experiencia de escritorio nativa (pywebview); -- criterio de seguridad documentado y verificado con análisis estático; -- diseño pedagógico con separación clara entre contenido, laboratorio y presentación; -- estructura de producto con documentación organizada por audiencias; -- flujo de build reproducible desde fuente hasta instalador .exe y APK Android; -- operación local-first con múltiples modos de despliegue (venv, Docker, exe). +- ✅ capacidad de integrar backend Python con experiencia de escritorio nativa (pywebview); +- ✅ criterio de seguridad documentado y verificado con análisis estático; +- ✅ diseño pedagógico con separación clara entre contenido, laboratorio y presentación; +- ✅ estructura de producto con documentación organizada por audiencias; +- ✅ flujo de build reproducible desde fuente hasta instalador .exe y APK Android; +- ✅ operación local-first con múltiples modos de despliegue (venv, Docker, exe). --- -## Lo que este proyecto no pretende demostrar +## 🚫 Lo que este proyecto no pretende demostrar -- una plataforma multiusuario SaaS lista para internet abierta; -- personalización infinita antes de un acuerdo comercial; -- profundidad total en todas las capas desde la primera versión. +- ❌ una plataforma multiusuario SaaS lista para internet abierta; +- ❌ personalización infinita antes de un acuerdo comercial; +- ❌ profundidad total en todas las capas desde la primera versión. --- -## Cómo evaluar en 5 minutos +## ⏱️ Cómo evaluar en 5 minutos -1. Clona el repo y ejecuta `python run_program.py` — el navegador abre automáticamente. -2. Haz clic en cualquier clase del sidebar — carga contenido Markdown con quiz. -3. Abre una celda del notebook y ejecuta `import pandas as pd; print(pd.__version__)`. -4. Descarga el ZIP portable del Release y ejecuta `PythonDSProgram.exe` — se abre una ventana nativa. -5. Revisa [docs/GUIA_EVALUACION.md](docs/GUIA_EVALUACION.md) para la ruta ejecutiva completa. +1. 📥 Clona el repo y ejecuta `python run_program.py` — el navegador abre automáticamente. +2. 🖱️ Haz clic en cualquier clase del sidebar — carga contenido Markdown con quiz. +3. 🐍 Abre una celda del notebook y ejecuta `import pandas as pd; print(pd.__version__)`. +4. 📦 Descarga el ZIP portable del Release y ejecuta `PythonDSProgram.exe` — se abre una ventana nativa. +5. 📖 Revisa [docs/GUIA_EVALUACION.md](docs/GUIA_EVALUACION.md) para la ruta ejecutiva completa. --- -## Contacto +## 📬 Contacto + +
+ +**Vladimir Acuña** + +[![GitHub](https://img.shields.io/badge/GitHub-vladimiracunadev--create-181717?style=for-the-badge&logo=github)](https://github.com/vladimiracunadev-create) -**Vladimir Acuña** — [github.com/vladimiracunadev-create](https://github.com/vladimiracunadev-create) +
diff --git a/ROADMAP.md b/ROADMAP.md index 1d9a205d..a9813f2b 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,123 +1,132 @@ -# Roadmap +
-> Dirección futura del Python Data Science Program. No es un compromiso de fechas — es un mapa de intención técnica y pedagógica. +# 🛣️ Roadmap + +### **Dirección futura del Python Data Science Program** + +[![Version](https://img.shields.io/badge/release-v2.0.0--scaffold-2e8b57?style=for-the-badge)](CHANGELOG.md) +[![Estado](https://img.shields.io/badge/contenido-en%20desarrollo-f59e0b?style=for-the-badge)](#-trabajo-cr%C3%ADtico--completar-el-contenido-pedag%C3%B3gico) + +
+ +> 🗺️ No es un compromiso de fechas — es un mapa de intención técnica y pedagógica. --- -## Estado actual — v2.0.0-scaffold (mayo 2026) +## 📊 Estado actual — v2.0.0-scaffold (mayo 2026) -| Superficie | Estado | +| 🎛️ Superficie | 🚦 Estado | |---|---| -| Currículo (197 clases, 9 partes) | scaffold operativo; contenido en desarrollo | -| Laboratorio Flask | operativo | -| App de escritorio Windows (pywebview) | código operativo · binario pendiente de rebuild | -| App Android | APK debug publicado — pendiente migrar contenido embebido al índice actual | -| Portal del alumno | en vivo — pendiente migrar al índice actual | -| Vista institucional | en vivo | -| Documentación | alineada con el currículo actual | +| 📚 Currículo (197 clases, 9 partes) | 🟡 scaffold operativo; contenido en desarrollo | +| 🧪 Laboratorio Flask | ✅ operativo | +| 🖥️ App de escritorio Windows (pywebview) | 🟡 código operativo · binario pendiente de rebuild | +| 📱 App Android | 🟡 APK debug publicado — pendiente migrar contenido al índice actual | +| 🌐 Portal del alumno | 🟡 en vivo — pendiente migrar al índice actual | +| 🏛️ Vista institucional | ✅ en vivo | +| 📖 Documentación | ✅ alineada con el currículo actual | --- -## Trabajo crítico — completar el contenido pedagógico +## 🔥 Trabajo crítico — completar el contenido pedagógico -### Contenido pedagógico +### 📝 Contenido pedagógico -- [ ] Desarrollar las 46 clases de la **Parte 0 — Prerrequisitos** al estándar de calidad mínimo (5+ bloques de código documentados, 4–5 ejercicios concretos con dataset, homework verificable) -- [ ] Desarrollar las 43 clases de la **Parte 1 — ML clásico** -- [ ] Desarrollar las 13 clases de la **Parte 3 — Estadística inferencial** (intercaladas con Parte 1) -- [ ] Desarrollar las 56 clases de la **Parte 2 — Deep Learning** -- [ ] Desarrollar las 14 clases de la **Parte 4 — MLOps** +- [ ] Desarrollar las 46 clases de la **0️⃣ Parte 0 — Prerrequisitos** al estándar de calidad mínimo (5+ bloques de código documentados, 4–5 ejercicios concretos con dataset, homework verificable) +- [ ] Desarrollar las 43 clases de la **1️⃣ Parte 1 — ML clásico** +- [ ] Desarrollar las 13 clases de la **3️⃣ Parte 3 — Estadística inferencial** (intercaladas con Parte 1) +- [ ] Desarrollar las 56 clases de la **2️⃣ Parte 2 — Deep Learning** +- [ ] Desarrollar las 14 clases de la **4️⃣ Parte 4 — MLOps** - [ ] Desarrollar las 25 clases restantes (Partes 5, 6, 7, 8) -### Superficies pendientes de migración +### 🔄 Superficies pendientes de migración -- [ ] `mobile/src/data/classes.js` — regenerar contra el currículo actual -- [ ] `site/` — regenerar portal contra el currículo actual -- [ ] `docs/pdfs/classes/` y `docs/presentaciones/classes/` — regenerar PDFs y PPTX por bloques al madurar el contenido -- [ ] Adaptar `scripts/generate_class_docs.py` y `scripts/generate_class_assets.py` para que recorran la estructura anidada del currículo +- [ ] 📱 `mobile/src/data/classes.js` — regenerar contra el currículo actual +- [ ] 🌐 `site/` — regenerar portal contra el currículo actual +- [ ] 📄 `docs/pdfs/classes/` y `docs/presentaciones/classes/` — regenerar PDFs y PPTX por bloques al madurar el contenido +- [ ] 🔧 Adaptar `scripts/generate_class_docs.py` y `scripts/generate_class_assets.py` para que recorran la estructura anidada del currículo -### Verificación de calidad pedagógica +### ✅ Verificación de calidad pedagógica -- [ ] Script de CI que falle si una clase tiene `notebook.ipynb` con menos de N celdas reales -- [ ] Script de CI que verifique que cada clase referencia un dataset existente -- [ ] Quizzes interactivos pre/post lección como parte del estándar de cada clase +- [ ] 🤖 Script de CI que falle si una clase tiene `notebook.ipynb` con menos de N celdas reales +- [ ] 🔗 Script de CI que verifique que cada clase referencia un dataset existente +- [ ] 🧠 Quizzes interactivos pre/post lección como parte del estándar de cada clase --- -## Corto plazo — mejoras al núcleo existente +## ⏱️ Corto plazo — mejoras al núcleo existente -### Laboratorio +### 🧪 Laboratorio -- [ ] Indicador de progreso por clase en el sidebar (con cobertura de las 197 clases) -- [ ] Navegación jerárquica (parte → clase) en lugar de lista plana -- [ ] Soporte para importar notebooks `.ipynb` externos -- [ ] Modo oscuro / claro configurable desde la interfaz +- [ ] 📊 Indicador de progreso por clase en el sidebar (con cobertura de las 197 clases) +- [ ] 🌲 Navegación jerárquica (parte → clase) en lugar de lista plana +- [ ] 📥 Soporte para importar notebooks `.ipynb` externos +- [ ] 🌓 Modo oscuro / claro configurable desde la interfaz -### App de escritorio Windows +### 🖥️ App de escritorio Windows -- [ ] Icono personalizado (.ico) para el ejecutable y el instalador -- [ ] Instalador con soporte explícito a Edge WebView2 Runtime (descarga automática si falta) -- [ ] Modo quiosco (pantalla completa sin barra de menú) -- [ ] Versión firmada digitalmente (para eliminar alertas de SmartScreen) +- [ ] 🎨 Icono personalizado (.ico) para el ejecutable y el instalador +- [ ] 📦 Instalador con soporte explícito a Edge WebView2 Runtime (descarga automática si falta) +- [ ] 🖼️ Modo quiosco (pantalla completa sin barra de menú) +- [ ] 🔏 Versión firmada digitalmente (para eliminar alertas de SmartScreen) -### Seguridad y operación +### 🔐 Seguridad y operación -- [ ] Rate limiting básico en el motor de ejecución (por sesión) -- [ ] Log estructurado de ejecuciones para auditoría docente -- [ ] Opción de modo demo (sin guardado de notebooks) +- [ ] 🚦 Rate limiting básico en el motor de ejecución (por sesión) +- [ ] 📋 Log estructurado de ejecuciones para auditoría docente +- [ ] 🎭 Opción de modo demo (sin guardado de notebooks) --- -## Mediano plazo — nuevas capacidades +## 🎯 Mediano plazo — nuevas capacidades -### Plataforma +### 🏗️ Plataforma -- [ ] Autenticación básica opcional (PIN por clase o por cohorte) -- [ ] Exportación de notebooks guardados a `.ipynb` -- [ ] Panel de resumen de progreso por alumno (para el docente) con métricas a nivel de las 9 partes -- [ ] Soporte multi-idioma (inglés como segunda lengua de la UI) +- [ ] 🔑 Autenticación básica opcional (PIN por clase o por cohorte) +- [ ] 💾 Exportación de notebooks guardados a `.ipynb` +- [ ] 📈 Panel de resumen de progreso por alumno (para el docente) con métricas a nivel de las 9 partes +- [ ] 🌍 Soporte multi-idioma (inglés como segunda lengua de la UI) -### App Android (post-migración de contenido) +### 📱 App Android (post-migración de contenido) -- [ ] Publicación en APK release (firmado) para distribución directa -- [ ] Seguimiento de progreso con sincronización local -- [ ] Modo offline completo (sin Google Colab como dependencia para ver código) +- [ ] 🚀 Publicación en APK release (firmado) para distribución directa +- [ ] 🔄 Seguimiento de progreso con sincronización local +- [ ] 📴 Modo offline completo (sin Google Colab como dependencia para ver código) --- -## Largo plazo — evolución del producto +## 🌠 Largo plazo — evolución del producto -### Multiusuario y red +### 👥 Multiusuario y red -- [ ] Modo servidor local de aula (múltiples alumnos en la misma red WiFi) -- [ ] Autenticación real (OAuth básico) para entornos compartidos -- [ ] Dashboard de clase para el instructor con estado de alumnos +- [ ] 🌐 Modo servidor local de aula (múltiples alumnos en la misma red WiFi) +- [ ] 🔐 Autenticación real (OAuth básico) para entornos compartidos +- [ ] 📊 Dashboard de clase para el instructor con estado de alumnos -### IA integrada +### 🤖 IA integrada -- [ ] Asistente local de consulta pedagógica (vía Ollama/modelo local) -- [ ] Sugerencias automáticas de corrección en ejercicios -- [ ] Generación asistida de nuevos ejercicios por clase a partir del scaffold +- [ ] 🦙 Asistente local de consulta pedagógica (vía Ollama/modelo local) +- [ ] 💡 Sugerencias automáticas de corrección en ejercicios +- [ ] ⚡ Generación asistida de nuevos ejercicios por clase a partir del scaffold -### Distribución +### 📦 Distribución -- [ ] Paquete de instalación para macOS (usando pywebview con backend cocoa) -- [ ] Instalador para Linux (AppImage o .deb) -- [ ] Imagen Docker pre-construida publicada en Docker Hub +- [ ] 🍎 Paquete de instalación para macOS (usando pywebview con backend cocoa) +- [ ] 🐧 Instalador para Linux (AppImage o .deb) +- [ ] 🐳 Imagen Docker pre-construida publicada en Docker Hub --- -## Lo que NO es parte del roadmap +## 🚫 Lo que NO es parte del roadmap -- conversión a SaaS con hosting externo (sale del scope de herramienta docente local); -- soporte para múltiples lenguajes de programación en el runner (el foco es Python); -- integración con LMS (Moodle, Canvas) sin un contrato específico que lo justifique; -- versión cloud con datos de alumnos en servidor externo sin acuerdo de privacidad. +- ❌ conversión a SaaS con hosting externo (sale del scope de herramienta docente local); +- ❌ soporte para múltiples lenguajes de programación en el runner (el foco es Python); +- ❌ integración con LMS (Moodle, Canvas) sin un contrato específico que lo justifique; +- ❌ versión cloud con datos de alumnos en servidor externo sin acuerdo de privacidad. --- -## Cómo influir en el roadmap +## 💬 Cómo influir en el roadmap -- abre un issue describiendo la necesidad y el contexto educativo que la justifica; -- las mejoras con casos de uso reales (cohortes específicas, problemas documentados) tienen prioridad; -- las contribuciones de código son bienvenidas — ver [CONTRIBUTING.md](CONTRIBUTING.md). +- 📨 abre un issue describiendo la necesidad y el contexto educativo que la justifica; +- 🎯 las mejoras con casos de uso reales (cohortes específicas, problemas documentados) tienen prioridad; +- 🤝 las contribuciones de código son bienvenidas — ver [CONTRIBUTING.md](CONTRIBUTING.md). diff --git a/RUNBOOK.md b/RUNBOOK.md index 27782d72..cf82b80f 100644 --- a/RUNBOOK.md +++ b/RUNBOOK.md @@ -1,12 +1,19 @@ +
+ # 🛠️ RUNBOOK -> Guía de operación diaria, smoke checks y recuperación básica para `python-data-science-program`. +### **Operación diaria · Smoke checks · Recuperación básica** + +[![Health](https://img.shields.io/badge/endpoints-%2Fhealth%20%2Fready-3fb950?style=for-the-badge)](#-smoke-checks-m%C3%ADnimos) +[![Local](https://img.shields.io/badge/host-127.0.0.1-7c5cff?style=for-the-badge)](#variables-de-entorno-disponibles-modo-desarrollo-y-docker) + +
--- -## Arranque estándar +## 🚀 Arranque estándar -### App de escritorio Windows (usuarios finales) +### 🖥️ App de escritorio Windows (usuarios finales) Ejecutar directamente el binario distribuido: @@ -18,7 +25,7 @@ Abre una ventana nativa de Windows (Edge WebView2). No aparece consola, no se ab **Requisito en el PC del usuario:** Edge WebView2 Runtime — preinstalado en Windows 10 v2004+ y Windows 11. -### Modo desarrollo (desde el repositorio) +### 🐍 Modo desarrollo (desde el repositorio) ```powershell python -m venv .venv @@ -29,13 +36,13 @@ python run_program.py Levanta Flask en `http://127.0.0.1:8000` y abre el navegador automáticamente cuando el servidor responde `/health`. Ctrl+C para detener. -### Docker Compose +### 🐳 Docker Compose ```powershell docker compose up --build ``` -### Docker endurecido +### 🛡️ Docker endurecido ```powershell docker compose -f docker-compose.prod.yml up -d --build @@ -43,11 +50,11 @@ docker compose -f docker-compose.prod.yml up -d --build --- -## Smoke checks mínimos +## 🩺 Smoke checks mínimos Los smoke checks aplican al modo desarrollo (puerto 8000) o Docker. En modo app de escritorio Windows, Flask corre en un puerto efímero elegido por el sistema; verificar usando las pruebas del repositorio. -### Health +### 💚 Health ```powershell Invoke-WebRequest -UseBasicParsing http://127.0.0.1:8000/health @@ -55,23 +62,23 @@ Invoke-WebRequest -UseBasicParsing http://127.0.0.1:8000/health Respuesta esperada: `{"service": "python-data-science-program", "status": "ok"}` -### Readiness +### ✅ Readiness ```powershell Invoke-WebRequest -UseBasicParsing http://127.0.0.1:8000/ready ``` -Respuesta esperada: `{"classes": 13, "notebooks": 6, "status": "ready", ...}` +Respuesta esperada: `{"classes": 197, "notebooks": 6, "status": "ready", ...}` -### Catálogo de clases +### 📚 Catálogo de clases ```powershell Invoke-WebRequest -UseBasicParsing http://127.0.0.1:8000/api/classes ``` -Debe devolver array de 13 objetos con `slug`, `title`, `path`. +Debe devolver array de 197 objetos con `slug`, `title`, `path`. -### Ejecución básica +### ⚡ Ejecución básica ```powershell Invoke-WebRequest -UseBasicParsing -Method Post ` @@ -82,7 +89,7 @@ Invoke-WebRequest -UseBasicParsing -Method Post ` Respuesta esperada: `{"error": null, "images": [], "result": "4", "stdout": ""}` -### Ejecución con pandas y matplotlib +### 📊 Ejecución con pandas y matplotlib ```powershell Invoke-WebRequest -UseBasicParsing -Method Post ` @@ -93,7 +100,7 @@ Invoke-WebRequest -UseBasicParsing -Method Post ` --- -## Validaciones del repositorio +## 🧪 Validaciones del repositorio ```powershell .\.venv\Scripts\python.exe -m pytest # suite completa @@ -103,48 +110,48 @@ Invoke-WebRequest -UseBasicParsing -Method Post ` --- -## Build de distribución +## 📦 Build de distribución ```bat build_windows.bat ``` Genera: -- `dist/PythonDSProgram/PythonDSProgram.exe` — ejecutable principal -- `release_artifacts/PythonDSProgram_windows_portable_v1.0.0.zip` — portable (ZIP) -- `dist_installer/PythonDSProgram_Setup_v1.0.0.exe` — instalador (requiere Inno Setup 6) +- 💾 `dist/PythonDSProgram/PythonDSProgram.exe` — ejecutable principal +- 🗜️ `release_artifacts/PythonDSProgram_windows_portable_v1.0.0.zip` — portable (ZIP) +- 📦 `dist_installer/PythonDSProgram_Setup_v1.0.0.exe` — instalador (requiere Inno Setup 6) -Ver [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) para detalle completo. +> 📖 Ver [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) para detalle completo. --- -## Incidentes comunes +## 🚨 Incidentes comunes -| Incidente | Qué revisar | +| ⚠️ Incidente | 🔍 Qué revisar | |---|---| -| App de escritorio no abre ventana | verificar Edge WebView2 Runtime instalado en Windows | -| App de escritorio muestra pantalla de error | Flask interno falló; ejecutar `python run_program.py` para ver el error | -| Modo dev: app no levanta | validar dependencias con `pip install -r requirements.txt` | -| Modo dev: puerto 8000 ocupado | cambiar `PROGRAM_PORT=XXXX` antes de lanzar | -| Runner queda colgado | la celda superó el timeout de 30s; usar `POST /api/reset` desde la UI | -| No guarda notebooks | revisar permisos sobre `app/saved_notebooks/` (modo dev) o junto al .exe (modo desktop) | -| Docker expone mal el puerto | confirmar mapeo `127.0.0.1:8000:8000` en compose | -| GitHub Pages no se publica | confirmar que el workflow corre sobre `master` y que `site/` existe | -| Build PyInstaller falla | asegurar que `pywebview` está instalado: `pip install pywebview` | +| 🖥️ App de escritorio no abre ventana | verificar Edge WebView2 Runtime instalado en Windows | +| ❌ App de escritorio muestra pantalla de error | Flask interno falló; ejecutar `python run_program.py` para ver el error | +| 🐍 Modo dev: app no levanta | validar dependencias con `pip install -r requirements.txt` | +| 🔌 Modo dev: puerto 8000 ocupado | cambiar `PROGRAM_PORT=XXXX` antes de lanzar | +| ⏱️ Runner queda colgado | la celda superó el timeout de 30s; usar `POST /api/reset` desde la UI | +| 💾 No guarda notebooks | revisar permisos sobre `app/saved_notebooks/` (modo dev) o junto al .exe (modo desktop) | +| 🐳 Docker expone mal el puerto | confirmar mapeo `127.0.0.1:8000:8000` en compose | +| 🌐 GitHub Pages no se publica | confirmar que el workflow corre sobre `master` y que `site/` existe | +| 📦 Build PyInstaller falla | asegurar que `pywebview` está instalado: `pip install pywebview` | --- -## Apagado +## 🛑 Apagado -### App de escritorio Windows +### 🖥️ App de escritorio Windows Cerrar la ventana normalmente. Flask daemon se detiene con el proceso principal. -### Modo desarrollo +### 🐍 Modo desarrollo -Ctrl+C en la terminal donde corre `python run_program.py`. +`Ctrl+C` en la terminal donde corre `python run_program.py`. -### Docker +### 🐳 Docker ```powershell docker compose down @@ -153,20 +160,20 @@ docker compose -f docker-compose.prod.yml down --- -## Recuperación básica +## 🩹 Recuperación básica -- si el runner queda en estado inconsistente, usar `POST /api/reset` desde la UI o reiniciar la app; -- si el contenido en `app/saved_notebooks/` no se necesita, eliminarlo manualmente; -- si cambia el material de clases, volver a ejecutar smoke checks de `/ready` y `/api/classes`; -- si falla un smoke check después de cambios de código, revisar `pytest` y los logs del servidor. +- 🔄 si el runner queda en estado inconsistente, usar `POST /api/reset` desde la UI o reiniciar la app; +- 🧹 si el contenido en `app/saved_notebooks/` no se necesita, eliminarlo manualmente; +- ✅ si cambia el material de clases, volver a ejecutar smoke checks de `/ready` y `/api/classes`; +- 📋 si falla un smoke check después de cambios de código, revisar `pytest` y los logs del servidor. --- -## Variables de entorno disponibles (modo desarrollo y Docker) +## 🔧 Variables de entorno disponibles (modo desarrollo y Docker) -| Variable | Default | Descripción | +| 🔤 Variable | 📌 Default | 📝 Descripción | |---|---|---| -| `PROGRAM_HOST` | `127.0.0.1` | dirección de escucha del servidor | -| `PROGRAM_PORT` | `8000` | puerto del servidor | +| `PROGRAM_HOST` | `127.0.0.1` | 🌐 dirección de escucha del servidor | +| `PROGRAM_PORT` | `8000` | 🔌 puerto del servidor | -En modo app de escritorio Windows (`PythonDSProgram.exe`), estas variables son gestionadas internamente y no es necesario configurarlas. +> 🖥️ En modo app de escritorio Windows (`PythonDSProgram.exe`), estas variables son gestionadas internamente y no es necesario configurarlas. diff --git a/SECURITY.md b/SECURITY.md index 3ce07991..035ce55c 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,124 +1,132 @@ +
+ # 🔐 SECURITY -> Postura de seguridad actual y hardening recomendado para `python-data-science-program`. +### **Postura de seguridad actual y hardening recomendado** + +[![Bandit](https://img.shields.io/badge/Bandit-0%20issues-3fb950?style=for-the-badge)](https://github.com/vladimiracunadev-create/python-data-science-program/actions/workflows/security.yml) +[![Local-First](https://img.shields.io/badge/postura-local--first-7c5cff?style=for-the-badge)](#-estado-actual) +[![CSP](https://img.shields.io/badge/CSP-estricto-0ea5e9?style=for-the-badge)](#headers-http) + +
--- -## Estado actual +## 📊 Estado actual Este repositorio está pensado para uso local, docente y de laboratorio. La app interactiva permite ejecutar código Python, por lo que su postura de seguridad es adecuada para entornos controlados, demos guiadas y máquinas administradas por el docente, pero **no para exposición abierta a internet sin capas adicionales**. --- -## Versiones soportadas +## 🏷️ Versiones soportadas -| Versión | Estado | +| 🔖 Versión | 🚦 Estado | |---|---| -| `v2.0.0-scaffold` (rama `main`) | activamente desarrollada | +| `v2.0.0-scaffold` (rama `main`) | ✅ activamente desarrollada | -> El próximo binario distribuible se publicará cuando el contenido alcance un hito publicable. +> 🚀 El próximo binario distribuible se publicará cuando el contenido alcance un hito publicable. --- -## Superficies de ataque por modo de ejecución +## 🎯 Superficies de ataque por modo de ejecución -| Modo | Superficie expuesta | Nivel de riesgo | +| 🚪 Modo | 🌐 Superficie expuesta | ⚠️ Nivel de riesgo | |---|---|---| -| App de escritorio Windows (`PythonDSProgram.exe`) | loopback interno, no accesible desde la red | bajo (local) | -| Modo desarrollo (`python run_program.py`) | `http://127.0.0.1:8000`, vinculado a loopback | bajo si no se cambia HOST | -| Docker Compose (`docker-compose.yml`) | `127.0.0.1:8000`, mapeado a loopback | bajo por configuración | -| Docker Compose endurecido (`docker-compose.prod.yml`) | igual, con configuración adicional | bajo | -| Expuesto a red o internet sin proxy | cualquier superficie | alto — no recomendado sin hardening adicional | +| 🖥️ App de escritorio Windows (`PythonDSProgram.exe`) | loopback interno, no accesible desde la red | 🟢 bajo (local) | +| 🐍 Modo desarrollo (`python run_program.py`) | `http://127.0.0.1:8000`, vinculado a loopback | 🟢 bajo si no se cambia HOST | +| 🐳 Docker Compose (`docker-compose.yml`) | `127.0.0.1:8000`, mapeado a loopback | 🟢 bajo por configuración | +| 🛡️ Docker Compose endurecido (`docker-compose.prod.yml`) | igual, con configuración adicional | 🟢 bajo | +| 🌍 Expuesto a red o internet sin proxy | cualquier superficie | 🔴 alto — no recomendado sin hardening adicional | --- -## Protecciones que existen hoy +## 🛡️ Protecciones que existen hoy -### Validación de entrada +### ✅ Validación de entrada - validación de `slug` e identificadores con regex `^[\w\-]{1,80}$` — previene path traversal; - todos los slugs pasan por `_safe_resolve()` que verifica que la ruta resuelta permanezca dentro del directorio permitido; - nombres de notebooks saneados con `re.sub` antes de escribir a disco. -### Límites de carga +### 📏 Límites de carga -- límite de payload por request: 1 MB (`MAX_PAYLOAD_BYTES`); -- límite de longitud de código por celda: 20 KB (`MAX_CODE_LENGTH`). +- 📦 límite de payload por request: 1 MB (`MAX_PAYLOAD_BYTES`); +- ✏️ límite de longitud de código por celda: 20 KB (`MAX_CODE_LENGTH`). -### Ejecución de código +### ⏱️ Ejecución de código -- timeout por celda: 30 segundos (`EXECUTION_TIMEOUT_SECONDS`); -- reinicio automático de sesión si una celda supera el timeout; -- máximo 100 sesiones concurrentes (`MAX_SESSIONS`); -- TTL de sesión: 1 hora (`SESSION_TTL_SECONDS`); -- eviction automática de sesiones antiguas. +- ⏰ timeout por celda: 30 segundos (`EXECUTION_TIMEOUT_SECONDS`); +- 🔄 reinicio automático de sesión si una celda supera el timeout; +- 👥 máximo 100 sesiones concurrentes (`MAX_SESSIONS`); +- 🕐 TTL de sesión: 1 hora (`SESSION_TTL_SECONDS`); +- 🧹 eviction automática de sesiones antiguas. -### Headers HTTP +### 🪪 Headers HTTP -- `Content-Security-Policy`: default-src 'self', sin dependencias CDN externas, sin Google Fonts; -- `X-Content-Type-Options: nosniff`; -- `X-Frame-Options: SAMEORIGIN`; -- `Referrer-Policy: no-referrer`; -- `Permissions-Policy: camera=(), microphone=(), geolocation=()`. +- 🛡️ `Content-Security-Policy`: default-src 'self', sin dependencias CDN externas, sin Google Fonts; +- 🚫 `X-Content-Type-Options: nosniff`; +- 🖼️ `X-Frame-Options: SAMEORIGIN`; +- 🔒 `Referrer-Policy: no-referrer`; +- 📷 `Permissions-Policy: camera=(), microphone=(), geolocation=()`. -### Configuración de red +### 🌐 Configuración de red -- defaults de arranque en `127.0.0.1` tanto en Flask como en Docker Compose; -- en modo app de escritorio Windows, Flask usa un puerto efímero interno no accesible desde la red; -- en Docker, el binding es explícitamente `127.0.0.1:8000:8000`. +- 🏠 defaults de arranque en `127.0.0.1` tanto en Flask como en Docker Compose; +- 🪟 en modo app de escritorio Windows, Flask usa un puerto efímero interno no accesible desde la red; +- 🐳 en Docker, el binding es explícitamente `127.0.0.1:8000:8000`. -### Análisis estático +### 🔍 Análisis estático -- Bandit integrado en CI (`security.yml`); -- los únicos `# nosec` presentes son B310 y B110 en los polling loops de `launcher.py` y `run_program.py` — justificados porque la URL es siempre `http://127.0.0.1:{port}/health` construida internamente, sin input de usuario; -- los usos de `exec` y `eval` en `execution_engine.py` son intencionales y necesarios para la funcionalidad tipo notebook; están mitigados por timeout, límites de payload y la restricción de uso local. +- 🤖 Bandit integrado en CI (`security.yml`); +- 📝 los únicos `# nosec` presentes son B310 y B110 en los polling loops de `launcher.py` y `run_program.py` — justificados porque la URL es siempre `http://127.0.0.1:{port}/health` construida internamente, sin input de usuario; +- ⚠️ los usos de `exec` y `eval` en `execution_engine.py` son intencionales y necesarios para la funcionalidad tipo notebook; están mitigados por timeout, límites de payload y la restricción de uso local. --- -## Lo que no existe todavía +## ⚠️ Lo que no existe todavía -- autenticación de usuarios; -- aislamiento fuerte por estudiante (sandbox de OS); -- rate limiting por cliente; -- TLS nativo; -- auditoría estructurada de accesos; -- separación de procesos por sesión. +- ❌ autenticación de usuarios; +- ❌ aislamiento fuerte por estudiante (sandbox de OS); +- ❌ rate limiting por cliente; +- ❌ TLS nativo; +- ❌ auditoría estructurada de accesos; +- ❌ separación de procesos por sesión. --- -## Recomendaciones de hardening +## 🧱 Recomendaciones de hardening -### Para uso local y docente +### 🏠 Para uso local y docente -- mantener `PROGRAM_HOST=127.0.0.1` (por defecto); -- ejecutar en máquina controlada por el docente; -- limpiar `app/saved_notebooks/` antes de compartir el repo o una imagen; -- usar la app de escritorio Windows en lugar del modo desarrollo cuando sea posible (no expone puerto). +- ✅ mantener `PROGRAM_HOST=127.0.0.1` (por defecto); +- 👩‍🏫 ejecutar en máquina controlada por el docente; +- 🧹 limpiar `app/saved_notebooks/` antes de compartir el repo o una imagen; +- 🖥️ usar la app de escritorio Windows en lugar del modo desarrollo cuando sea posible (no expone puerto). -### Si se publica fuera del equipo local +### 🌍 Si se publica fuera del equipo local -- poner la app detrás de un reverse proxy con TLS (nginx, Caddy); -- exigir autenticación externa antes de abrir el runner (OAuth, Basic Auth a nivel de proxy); -- aplicar rate limiting en proxy o gateway; -- registrar accesos y errores en logs centralizados; -- separar entorno demo de cualquier entorno con usuarios reales. +- 🛡️ poner la app detrás de un reverse proxy con TLS (nginx, Caddy); +- 🔑 exigir autenticación externa antes de abrir el runner (OAuth, Basic Auth a nivel de proxy); +- 🚦 aplicar rate limiting en proxy o gateway; +- 📋 registrar accesos y errores en logs centralizados; +- 🎭 separar entorno demo de cualquier entorno con usuarios reales. --- -## Riesgos aceptados +## ⚖️ Riesgos aceptados -- el runner ejecuta código Python del usuario dentro del proceso de la app; -- el timeout reduce riesgo de bloqueos, pero no reemplaza un sandbox real; -- el proyecto prioriza facilidad de uso en laboratorio por sobre postura multiusuario endurecida; -- estos riesgos están documentados explícitamente y son conscientes, no accidentales. +- ⚡ el runner ejecuta código Python del usuario dentro del proceso de la app; +- ⏱️ el timeout reduce riesgo de bloqueos, pero no reemplaza un sandbox real; +- 🎓 el proyecto prioriza facilidad de uso en laboratorio por sobre postura multiusuario endurecida; +- 📖 estos riesgos están documentados explícitamente y son conscientes, no accidentales. --- -## Reporte responsable +## 📨 Reporte responsable Si detectas una vulnerabilidad: -1. no publiques secretos ni pasos destructivos en issues públicos; -2. reporta el hallazgo al mantenedor con versión, entorno y pasos de reproducción; -3. si involucra ejecución remota o exposición de datos, coordina una divulgación privada antes de publicar; -4. las correcciones serán incorporadas en la versión `master` y documentadas en [CHANGELOG.md](CHANGELOG.md). +1. 🤫 no publiques secretos ni pasos destructivos en issues públicos; +2. ✉️ reporta el hallazgo al mantenedor con versión, entorno y pasos de reproducción; +3. 🔐 si involucra ejecución remota o exposición de datos, coordina una divulgación privada antes de publicar; +4. 📜 las correcciones serán incorporadas en la versión `master` y documentadas en [CHANGELOG.md](CHANGELOG.md). diff --git a/docs/ARQUITECTURA_PRODUCTO.md b/docs/ARQUITECTURA_PRODUCTO.md index e061428e..908f61b2 100644 --- a/docs/ARQUITECTURA_PRODUCTO.md +++ b/docs/ARQUITECTURA_PRODUCTO.md @@ -1,6 +1,16 @@ +
+ # 🏗️ Arquitectura del producto -> Vista de alto nivel del programa, sus superficies, límites operativos y la relación entre contenido, laboratorio y publicación. +### **Vista funcional con diagramas Mermaid de las superficies, capas y fronteras** + +[![Capas](https://img.shields.io/badge/capas-3-7c5cff?style=for-the-badge)](#-visi%C3%B3n-general) +[![Diagramas](https://img.shields.io/badge/diagramas-Mermaid-ec4899?style=for-the-badge&logo=mermaid)](#%EF%B8%8F-mapa-de-alto-nivel) +[![Local-first](https://img.shields.io/badge/postura-local--first-3fb950?style=for-the-badge)](#%EF%B8%8F-fronteras-importantes) + +
+ +> 🗺️ Vista de alto nivel del programa, sus superficies, límites operativos y la relación entre contenido, laboratorio y publicación. --- diff --git a/docs/BUILD_INSTALLER.md b/docs/BUILD_INSTALLER.md index aec0ee28..53a8e13d 100644 --- a/docs/BUILD_INSTALLER.md +++ b/docs/BUILD_INSTALLER.md @@ -5,7 +5,7 @@ No se abre ningún navegador. La ventana es una app real de Windows. --- -## Qué genera este proceso +## ❓ Qué genera este proceso ``` release_artifacts/ @@ -26,7 +26,7 @@ dist/PythonDSProgram/ --- -## Arquitectura de la app de escritorio +## 📱 Arquitectura de la app de escritorio ``` PythonDSProgram.exe @@ -61,7 +61,7 @@ PythonDSProgram.exe --- -## Requisitos del entorno de build +## 📦 Requisitos del entorno de build | Herramienta | Versión mínima | Instalación | |---|---|---| @@ -75,7 +75,7 @@ PythonDSProgram.exe > El alumno/docente que usa el instalador **NO necesita Python ni ninguna dependencia**. > El bundle incluye el runtime Python completo y el motor gráfico. -### Requisito en el PC del usuario final +### 📋 Requisito en el PC del usuario final **Edge WebView2 Runtime** — viene preinstalado en: - Windows 10 versión 20H2 (octubre 2020) y posteriores @@ -85,9 +85,9 @@ Para Windows 10 anterior: descargar desde [Microsoft Edge WebView2](https://deve --- -## Pasos para generar el instalador +## 👣 Pasos para generar el instalador -### Opción A — Script automático (recomendado) +### 🅰️ Opción A — Script automático (recomendado) ```bat build_windows.bat @@ -103,7 +103,7 @@ build_windows.bat --skip-pyinstaller # Omite PyInstaller si el bundle ya exist build_windows.bat --skip-inno # Genera bundle + ZIP, sin instalador ``` -### Opción B — Manual paso a paso +### 🅱️ Opción B — Manual paso a paso ```bat # Paso 1: Instalar dependencias @@ -133,9 +133,9 @@ where /R "%LOCALAPPDATA%" ISCC.exe --- -## Modos de ejecución +## 🚦 Modos de ejecución -### Modo app de escritorio (producción) +### 📱 Modo app de escritorio (producción) ```bat PythonDSProgram.exe @@ -145,7 +145,7 @@ Abre directamente una ventana nativa de Windows. No aparece ninguna consola, no se abre ningún navegador. El usuario ve la app y la usa igual que cualquier programa. -### Modo desarrollo (desde el repositorio) +### 🐍 Modo desarrollo (desde el repositorio) ```bat python run_program.py @@ -156,7 +156,7 @@ Levanta Flask en `http://127.0.0.1:8000` y abre el navegador automáticamente. --- -## Distribuir a alumnos +## 🎓 Distribuir a alumnos **Opción portable (sin instalador):** @@ -176,7 +176,7 @@ No se requiere internet, no se requiere Python, no se requiere ninguna configura --- -## Notebooks guardados por alumnos +## 🎓 Notebooks guardados por alumnos En modo instalado, los notebooks que el alumno guarda se almacenan junto al ejecutable: @@ -189,7 +189,7 @@ Ver sección `[UninstallDelete]` en `installer/setup.iss` para cambiar este comp --- -## Solucionar problemas comunes +## 🚨 Solucionar problemas comunes | Síntoma | Causa probable | Solución | |---|---|---| @@ -202,7 +202,7 @@ Ver sección `[UninstallDelete]` en `installer/setup.iss` para cambiar este comp --- -## Actualizar a una nueva versión +## 🔄 Actualizar a una nueva versión 1. Cambiar `VERSION` en `build_windows.bat` 2. Cambiar `AppVersion` en `installer/setup.iss` diff --git a/docs/CATALOGO_PRODUCTO.md b/docs/CATALOGO_PRODUCTO.md index 62a1a46e..7786c5c2 100644 --- a/docs/CATALOGO_PRODUCTO.md +++ b/docs/CATALOGO_PRODUCTO.md @@ -1,13 +1,21 @@ -# Catálogo del producto +
-> Fuente de verdad de superficies, artefactos y reglas de comunicación. -> Si algún README, landing o presentación contradice este documento, **este tiene prioridad.** +# 📦 Catálogo del producto -> **Estado:** v2.0.0-scaffold. El currículo tiene **197 clases en 9 partes**. La estructura de carpetas y stubs está creada; el contenido pedagógico de cada clase se desarrolla por bloques. Pauta completa en [syllabus.md](syllabus.md), índice navegable en [../classes/README.md](../classes/README.md). +### **Fuente de verdad de superficies, artefactos y reglas de comunicación** + +[![Autoridad](https://img.shields.io/badge/prioridad-este%20documento-ef4444?style=for-the-badge)](#-regla-de-prioridad) +[![Estado](https://img.shields.io/badge/release-v2.0.0--scaffold-2e8b57?style=for-the-badge)](../CHANGELOG.md) + +
+ +> ⚠️ Si algún README, landing o presentación contradice este documento, **este tiene prioridad.** +> +> 📌 El currículo tiene **197 clases en 9 partes**. La estructura de carpetas y stubs está creada; el contenido pedagógico de cada clase se desarrolla por bloques. Pauta completa en [syllabus.md](syllabus.md), índice navegable en [../classes/README.md](../classes/README.md). --- -## Definiciones +## 📖 Definiciones | Término | Significado | |---|---| @@ -18,7 +26,7 @@ --- -## Matriz canónica de superficies +## 🎛️ Matriz canónica de superficies | Superficie | Tipo | Estado | Audiencia | Qué entrega hoy | |---|---|---|---|---| @@ -34,7 +42,7 @@ --- -## Estructura del currículo +## 🗂️ Estructura del currículo | Parte | Tema | Clases | |---|---|---| @@ -53,7 +61,7 @@ Cada clase vive en `classes/parte-N-slug/NNN-tema-slug/` con `README.md` (ficha) --- -## Funcionalidad real por superficie +## ⚙️ Funcionalidad real por superficie | Capacidad | Lab Flask | App Windows | App Android | Portal alumno | Vista institucional | |---|---|---|---|---|---| @@ -69,7 +77,7 @@ Cada clase vive en `classes/parte-N-slug/NNN-tema-slug/` con `README.md` (ficha) --- -## Artefactos oficiales de apoyo +## 🎨 Artefactos oficiales de apoyo | Artefacto | Rol | Estado | |---|---|---| @@ -85,7 +93,7 @@ Cada clase vive en `classes/parte-N-slug/NNN-tema-slug/` con `README.md` (ficha) --- -## Reglas de comunicación +## 📣 Reglas de comunicación ### Lo que sí se puede afirmar @@ -106,7 +114,7 @@ Cada clase vive en `classes/parte-N-slug/NNN-tema-slug/` con `README.md` (ficha) --- -## Versión inicial sugerida para primeros pasos +## 🚀 Versión inicial sugerida para primeros pasos Para una primera implementación acotada, desarrollar primero el **Bloque 0 — Prerrequisitos** (46 clases): @@ -121,6 +129,6 @@ Con esto un alumno ya puede afrontar cualquier capstone tabular básico. Las par --- -## Regla de prioridad +## ⚖️ Regla de prioridad Si alguna presentación, README o landing contradice esta matriz, **este documento tiene prioridad.** diff --git a/docs/GUIA_EVALUACION.md b/docs/GUIA_EVALUACION.md index 5c5eefc1..a67b457d 100644 --- a/docs/GUIA_EVALUACION.md +++ b/docs/GUIA_EVALUACION.md @@ -1,11 +1,18 @@ -# Guía de evaluación rápida +
-> **Audiencia:** institución, evaluador técnico, reclutador, docente externo. -> **Tiempo estimado:** 10 minutos para el recorrido ejecutivo · 30 minutos para el técnico. +# ✅ Guía de evaluación rápida + +### **Para institución, evaluador técnico, reclutador o docente externo** + +[![Tiempo](https://img.shields.io/badge/recorrido-10%20min-3fb950?style=for-the-badge)](#%EF%B8%8F-recorrido-de-10-minutos) +[![Técnico](https://img.shields.io/badge/t%C3%A9cnico-30%20min-7c5cff?style=for-the-badge)](#-inventario-real-del-producto) +[![Honestidad](https://img.shields.io/badge/estado-honesto-f59e0b?style=for-the-badge)](#-executive-summary) + +
--- -## Executive summary +## 🎯 Executive summary Este repositorio es una **pauta avanzada y completa de Python y Data Science** organizada en 197 clases y 9 partes. La pauta está derivada de referentes profesionales: *Hands-On ML* (Géron, 3ª ed.), *Python Data Science Handbook* (VanderPlas), *Designing ML Systems* (Huyen), *ISLP* (James et al) y *Fairness and ML* (Barocas/Hardt/Narayanan). @@ -19,7 +26,7 @@ Incluye laboratorio interactivo local (Flask), app de escritorio nativa para Win --- -## Lo que demuestra hoy +## 💪 Lo que demuestra hoy | Área | Evidencia concreta | Dónde verla | |---|---|---| @@ -35,7 +42,7 @@ Incluye laboratorio interactivo local (Flask), app de escritorio nativa para Win --- -## Recorrido de 10 minutos +## ⏱️ Recorrido de 10 minutos ``` 1. README.md → qué es, estado actual, superficies, inicio rápido @@ -48,7 +55,7 @@ Incluye laboratorio interactivo local (Flask), app de escritorio nativa para Win --- -## Inventario real del producto +## 📦 Inventario real del producto ### Currículo (scaffold) @@ -90,7 +97,7 @@ Cada clase: `README.md` (ficha: objetivo, resultados, temas, prerrequisitos) + ` --- -## Señales de madurez +## 🏆 Señales de madurez | Señal | Dónde se ve | |---|---| @@ -106,7 +113,7 @@ Cada clase: `README.md` (ficha: objetivo, resultados, temas, prerrequisitos) + ` --- -## Lo que este repositorio no vende +## 🚫 Lo que este repositorio no vende - una plataforma multiusuario endurecida para internet abierta; - un LMS con autenticación, roles y seguimiento centralizado; @@ -116,7 +123,7 @@ Cada clase: `README.md` (ficha: objetivo, resultados, temas, prerrequisitos) + ` --- -## Conclusiones que una evaluación justa puede sacar +## 🎓 Conclusiones que una evaluación justa puede sacar - la **pauta cubre un currículo de Data Science avanzado y empleable en 2026** (incluye LLMs, MLOps real, inferencia causal, fairness — temas ausentes en programas más superficiales); - existe coherencia entre contenido, laboratorio, distribución y documentación; diff --git a/docs/INDEX.md b/docs/INDEX.md index 84fb0eda..3d403d97 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -1,98 +1,106 @@ -# Índice de documentación +
-> Punto de entrada canónico para navegar la documentación del programa por audiencia y objetivo. -> -> El currículo tiene **197 clases en 9 partes**. Este repositorio nació como muestra de habilidades técnicas y pedagógicas, y hoy se desarrolla como recurso personal de aprendizaje y enseñanza, abierto a cualquier persona. +# 🧭 Índice de documentación + +### **Punto de entrada canónico por audiencia y objetivo** + +[![197 clases](https://img.shields.io/badge/clases-197-7c5cff?style=for-the-badge)](../classes/README.md) +[![9 partes](https://img.shields.io/badge/partes-9-0ea5e9?style=for-the-badge)](syllabus.md) +[![Audiencias](https://img.shields.io/badge/audiencias-8-3fb950?style=for-the-badge)](#-lectura-recomendada-por-perfil) + +
+ +> 📌 El currículo tiene **197 clases en 9 partes**. Este repositorio nació como muestra de habilidades técnicas y pedagógicas, y hoy se desarrolla como recurso personal de aprendizaje y enseñanza, abierto a cualquier persona. --- -## Territorios de esta documentación +## 🗺️ Territorios de esta documentación -| Territorio | Carpeta / ubicación | Para quién | +| 🗂️ Territorio | 📁 Carpeta / ubicación | 👤 Para quién | |---|---|---| -| Producto del programa | `docs/` (raíz) + archivos raíz (`README`, `RUNBOOK`, `SECURITY`, etc.) | Docentes, alumnos, evaluadores técnicos | -| Currículo | `classes/` | Alumnos y docentes | -| Notas internas del maintainer | `docs/maintainer/` | Solo el autor | +| 📦 Producto del programa | `docs/` (raíz) + archivos raíz (`README`, `RUNBOOK`, `SECURITY`, etc.) | Docentes, alumnos, evaluadores técnicos | +| 📚 Currículo | `classes/` | Alumnos y docentes | +| 🔒 Notas internas del maintainer | `docs/maintainer/` | Solo el autor | --- -## Archivos raíz del producto +## 📑 Archivos raíz del producto -| Archivo | Audiencia | Contenido | +| 📄 Archivo | 👤 Audiencia | 📝 Contenido | |---|---|---| -| [../README.md](../README.md) | todos | Portada del producto, estado actual, rutas por perfil | -| [../RECRUITER.md](../RECRUITER.md) | reclutadores / evaluadores técnicos | Evidencia técnica en 5 minutos, stack, estado real | -| [../CHANGELOG.md](../CHANGELOG.md) | maintainers / contribuidores | Historial de cambios por versión | -| [../CONTRIBUTING.md](../CONTRIBUTING.md) | contribuidores | Cómo contribuir al proyecto | -| [../ROADMAP.md](../ROADMAP.md) | todos | Dirección futura del producto | -| [../RUNBOOK.md](../RUNBOOK.md) | operación | Arranque, smoke checks, incidentes y apagado | -| [../SECURITY.md](../SECURITY.md) | seguridad / todos | Postura de seguridad, riesgos aceptados, hardening | -| [../LICENSE](../LICENSE) | legal | Términos de uso MIT | +| 🏠 [../README.md](../README.md) | todos | Portada del producto, estado actual, rutas por perfil | +| 🎯 [../RECRUITER.md](../RECRUITER.md) | reclutadores / evaluadores técnicos | Evidencia técnica en 5 minutos, stack, estado real | +| 📜 [../CHANGELOG.md](../CHANGELOG.md) | maintainers / contribuidores | Historial de cambios por versión | +| 🤝 [../CONTRIBUTING.md](../CONTRIBUTING.md) | contribuidores | Cómo contribuir al proyecto | +| 🛣️ [../ROADMAP.md](../ROADMAP.md) | todos | Dirección futura del producto | +| ⚙️ [../RUNBOOK.md](../RUNBOOK.md) | operación | Arranque, smoke checks, incidentes y apagado | +| 🔐 [../SECURITY.md](../SECURITY.md) | seguridad / todos | Postura de seguridad, riesgos aceptados, hardening | +| ⚖️ [../LICENSE](../LICENSE) | legal | Términos de uso MIT | --- -## Documentos del producto en `docs/` +## 📚 Documentos del producto en `docs/` -### Lectura recomendada por perfil +### 🧭 Lectura recomendada por perfil -| Perfil | Documento de entrada | Qué obtiene | +| 👤 Perfil | 📖 Documento de entrada | 🎯 Qué obtiene | |---|---|---| -| Alumno | [student-guide.md](student-guide.md) | Cómo usar los materiales, ruta y expectativas | -| Docente | [instructor-guide.md](instructor-guide.md) | Playbook para impartir el programa | -| Institución / evaluador | [GUIA_EVALUACION.md](GUIA_EVALUACION.md) | Valor del producto, evidencias y límites reales | -| Reclutador técnico | [../RECRUITER.md](../RECRUITER.md) | Evidencia rápida sin lectura extensa | -| Stakeholder técnico | [ARQUITECTURA_PRODUCTO.md](ARQUITECTURA_PRODUCTO.md) | Capas, flujos, fronteras y evolución | -| Producto / fuente de verdad | [CATALOGO_PRODUCTO.md](CATALOGO_PRODUCTO.md) | Superficies, artefactos y reglas de comunicación | -| Operación | [../RUNBOOK.md](../RUNBOOK.md) | Arranque, smoke checks, verificación y apagado | -| Seguridad | [../SECURITY.md](../SECURITY.md) | Postura actual, riesgos aceptados y hardening | - -### Mapa documental técnico - -| Documento | Rol | +| 🎓 Alumno | [student-guide.md](student-guide.md) | Cómo usar los materiales, ruta y expectativas | +| 👩‍🏫 Docente | [instructor-guide.md](instructor-guide.md) | Playbook para impartir el programa | +| 🏛️ Institución / evaluador | [GUIA_EVALUACION.md](GUIA_EVALUACION.md) | Valor del producto, evidencias y límites reales | +| 🎯 Reclutador técnico | [../RECRUITER.md](../RECRUITER.md) | Evidencia rápida sin lectura extensa | +| 🏗️ Stakeholder técnico | [ARQUITECTURA_PRODUCTO.md](ARQUITECTURA_PRODUCTO.md) | Capas, flujos, fronteras y evolución | +| 📦 Producto / fuente de verdad | [CATALOGO_PRODUCTO.md](CATALOGO_PRODUCTO.md) | Superficies, artefactos y reglas de comunicación | +| ⚙️ Operación | [../RUNBOOK.md](../RUNBOOK.md) | Arranque, smoke checks, verificación y apagado | +| 🔐 Seguridad | [../SECURITY.md](../SECURITY.md) | Postura actual, riesgos aceptados y hardening | + +### 🗺️ Mapa documental técnico + +| 📄 Documento | Rol | |---|---| -| [CATALOGO_PRODUCTO.md](CATALOGO_PRODUCTO.md) | Fuente de verdad para superficies y artefactos | -| [ARQUITECTURA_PRODUCTO.md](ARQUITECTURA_PRODUCTO.md) | Arquitectura funcional con diagramas Mermaid | -| [GUIA_EVALUACION.md](GUIA_EVALUACION.md) | Ruta ejecutiva de 10 minutos | -| [BUILD_INSTALLER.md](BUILD_INSTALLER.md) | Cómo generar el instalador .exe para Windows | -| [MOBILE_APP.md](MOBILE_APP.md) | Cómo construir y distribuir la app Android | -| [MIGRACION_AWS.md](MIGRACION_AWS.md) | Plan de migración a cloud (AWS) | -| [entorno-interactivo.md](entorno-interactivo.md) | El laboratorio Flask — modos, API, motor de ejecución | -| [despliegue-seguro-y-operacion.md](despliegue-seguro-y-operacion.md) | CI/CD, Docker y hardening técnico | -| [portal-estudiante-y-app-movil.md](portal-estudiante-y-app-movil.md) | Portal público, laboratorio y app móvil | -| [pdfs/](pdfs/) | Guías explicativas por clase (se regeneran por bloques al madurar el contenido) | -| [presentaciones/](presentaciones/) | Decks `.pptx` por clase (mismo estado) | - -### Documentos pedagógicos - -| Documento | Rol | +| 📦 [CATALOGO_PRODUCTO.md](CATALOGO_PRODUCTO.md) | Fuente de verdad para superficies y artefactos | +| 🏗️ [ARQUITECTURA_PRODUCTO.md](ARQUITECTURA_PRODUCTO.md) | Arquitectura funcional con diagramas Mermaid | +| ✅ [GUIA_EVALUACION.md](GUIA_EVALUACION.md) | Ruta ejecutiva de 10 minutos | +| 🖥️ [BUILD_INSTALLER.md](BUILD_INSTALLER.md) | Cómo generar el instalador .exe para Windows | +| 📱 [MOBILE_APP.md](MOBILE_APP.md) | Cómo construir y distribuir la app Android | +| ☁️ [MIGRACION_AWS.md](MIGRACION_AWS.md) | Plan de migración a cloud (AWS) | +| 🧪 [entorno-interactivo.md](entorno-interactivo.md) | El laboratorio Flask — modos, API, motor de ejecución | +| 🚢 [despliegue-seguro-y-operacion.md](despliegue-seguro-y-operacion.md) | CI/CD, Docker y hardening técnico | +| 📱 [portal-estudiante-y-app-movil.md](portal-estudiante-y-app-movil.md) | Portal público, laboratorio y app móvil | +| 📄 [pdfs/](pdfs/) | Guías explicativas por clase (se regeneran por bloques al madurar el contenido) | +| 📊 [presentaciones/](presentaciones/) | Decks `.pptx` por clase (mismo estado) | + +### 🎓 Documentos pedagógicos + +| 📖 Documento | Rol | |---|---| -| [syllabus.md](syllabus.md) | **Currículo completo: 197 clases en 9 partes, pauta avanzada** | -| [../classes/README.md](../classes/README.md) | Índice navegable de las 197 clases con enlaces directos | -| [cronograma-referencial.md](cronograma-referencial.md) | Distribución temporal sugerida | -| [metodologia-docente.md](metodologia-docente.md) | Marco pedagógico del producto | -| [instructor-guide.md](instructor-guide.md) | Playbook para quien imparte el programa | -| [student-guide.md](student-guide.md) | Guía de onboarding del alumno | -| [plan-evaluacion.md](plan-evaluacion.md) | Criterios de evaluación y retroalimentación | -| [herramientas-pedagogicas-de-aula.md](herramientas-pedagogicas-de-aula.md) | Estrategias de mediación y problemas de aula | -| [aula-ia-y-problemas-frecuentes.md](aula-ia-y-problemas-frecuentes.md) | Uso de IA y manejo de dificultades frecuentes | -| [perfil-estudiantes.md](perfil-estudiantes.md) | Perfil de entrada y consideraciones del grupo | - -### Regla de lectura rápida (10 minutos) - -1. [../README.md](../README.md) — estado actual y rutas por perfil -2. [../RECRUITER.md](../RECRUITER.md) — evidencia técnica -3. [GUIA_EVALUACION.md](GUIA_EVALUACION.md) — valor y límites -4. [CATALOGO_PRODUCTO.md](CATALOGO_PRODUCTO.md) — superficies y artefactos -5. [syllabus.md](syllabus.md) — pauta completa de 197 clases +| 📚 [syllabus.md](syllabus.md) | **Currículo completo: 197 clases en 9 partes, pauta avanzada** | +| 🗂️ [../classes/README.md](../classes/README.md) | Índice navegable de las 197 clases con enlaces directos | +| 📅 [cronograma-referencial.md](cronograma-referencial.md) | Distribución temporal sugerida | +| 🧠 [metodologia-docente.md](metodologia-docente.md) | Marco pedagógico del producto | +| 👩‍🏫 [instructor-guide.md](instructor-guide.md) | Playbook para quien imparte el programa | +| 🎓 [student-guide.md](student-guide.md) | Guía de onboarding del alumno | +| 📏 [plan-evaluacion.md](plan-evaluacion.md) | Criterios de evaluación y retroalimentación | +| 🧰 [herramientas-pedagogicas-de-aula.md](herramientas-pedagogicas-de-aula.md) | Estrategias de mediación y problemas de aula | +| 💬 [aula-ia-y-problemas-frecuentes.md](aula-ia-y-problemas-frecuentes.md) | Uso de IA y manejo de dificultades frecuentes | +| 👥 [perfil-estudiantes.md](perfil-estudiantes.md) | Perfil de entrada y consideraciones del grupo | + +### ⏱️ Regla de lectura rápida (10 minutos) + +1. 🏠 [../README.md](../README.md) — estado actual y rutas por perfil +2. 🎯 [../RECRUITER.md](../RECRUITER.md) — evidencia técnica +3. ✅ [GUIA_EVALUACION.md](GUIA_EVALUACION.md) — valor y límites +4. 📦 [CATALOGO_PRODUCTO.md](CATALOGO_PRODUCTO.md) — superficies y artefactos +5. 📚 [syllabus.md](syllabus.md) — pauta completa de 197 clases --- -## Notas internas del maintainer +## 🔒 Notas internas del maintainer -Documentos de autoevaluación y mejora continua. No forman parte del producto público. +> Documentos de autoevaluación y mejora continua. No forman parte del producto público. -| Documento | Rol | +| 📓 Documento | Rol | |---|---| -| [maintainer/portfolio-high-standard.md](maintainer/portfolio-high-standard.md) | Análisis transversal del portafolio del autor | -| [maintainer/estandar-alto-gap.md](maintainer/estandar-alto-gap.md) | Brecha entre este repo y el estándar alto personal | -| [maintainer/revision-otros-repos-e-insights.md](maintainer/revision-otros-repos-e-insights.md) | Insights de revisión de otros repositorios | +| 🎯 [maintainer/portfolio-high-standard.md](maintainer/portfolio-high-standard.md) | Análisis transversal del portafolio del autor | +| 📊 [maintainer/estandar-alto-gap.md](maintainer/estandar-alto-gap.md) | Brecha entre este repo y el estándar alto personal | +| 🔍 [maintainer/revision-otros-repos-e-insights.md](maintainer/revision-otros-repos-e-insights.md) | Insights de revisión de otros repositorios | diff --git a/docs/MIGRACION_AWS.md b/docs/MIGRACION_AWS.md index 1ce1923a..01c84c2c 100644 --- a/docs/MIGRACION_AWS.md +++ b/docs/MIGRACION_AWS.md @@ -83,7 +83,7 @@ graph LR No hay una única respuesta correcta. Tres caminos viables, en orden creciente de robustez y costo: -### Opción A — **Serverless mínimo** (didáctico, tráfico bajo) +### 🅰️ Opción A — **Serverless mínimo** (didáctico, tráfico bajo) ```mermaid graph TD @@ -99,7 +99,7 @@ graph TD - **Contras:** Lambda tiene timeout 15 min (ok para docente, riesgoso para celdas pesadas); cold start; menor aislamiento entre invocaciones. - **Cuándo elegirla:** demos, evaluación institucional, pilotos con < 50 alumnos no concurrentes. -### Opción B — **Contenedores gestionados** (recomendado por defecto) +### 🅱️ Opción B — **Contenedores gestionados** (recomendado por defecto) ```mermaid graph TD @@ -116,7 +116,7 @@ graph TD - **Contras:** costo base mensual aunque haya 0 usuarios (~50 USD). - **Cuándo elegirla:** producción educativa real, 50–500 alumnos concurrentes, SLA modesto. -### Opción C — **EC2 + nginx + gunicorn** (el más barato si hay alguien que lo opere) +### ❓ Opción C — **EC2 + nginx + gunicorn** (el más barato si hay alguien que lo opere) ```mermaid graph TD @@ -160,7 +160,7 @@ graph TD ## 🪜 Paso a paso — levantar la Opción B (recomendada) -### Fase 0 — Preparación (1 día) +### 0️⃣ Fase 0 — Preparación (1 día) 1. Crear cuenta AWS dedicada al proyecto (no usar la personal). 2. Activar **MFA** en root, crear usuario IAM con rol `Administrator` solo para bootstrap. @@ -172,7 +172,7 @@ graph TD ``` 5. Definir región principal (`us-east-1` recomendada por costo y servicios disponibles; `sa-east-1` São Paulo si el alumno está en Sudamérica y la latencia importa). -### Fase 1 — Static hosting (medio día) +### 1️⃣ Fase 1 — Static hosting (medio día) ```mermaid sequenceDiagram @@ -205,7 +205,7 @@ aws acm request-certificate --domain-name program.tudominio.cl \ aws cloudfront create-distribution --distribution-config file://cf.json ``` -### Fase 2 — Container del laboratorio (1 día) +### 2️⃣ Fase 2 — Container del laboratorio (1 día) ```bash # 1. login en ECR @@ -219,7 +219,7 @@ docker tag pythonds-program-lab:v2.0.0-scaffold .dkr.ecr.us-east-1.amaz docker push .dkr.ecr.us-east-1.amazonaws.com/pythonds-program-lab:v2.0.0-scaffold ``` -### Fase 3 — ECS Fargate (1 día) +### 3️⃣ Fase 3 — ECS Fargate (1 día) 1. Crear cluster ECS Fargate (`python-ds-program-prod`). 2. Definir Task Definition con: @@ -232,13 +232,13 @@ docker push .dkr.ecr.us-east-1.amazonaws.com/pythonds-program-lab:v2.0. 4. ALB en frente, target group health check `GET /health` cada 30s. 5. Listener 443 con certificado ACM, redirección de 80 a 443. -### Fase 4 — DNS y CDN unificado (medio día) +### 4️⃣ Fase 4 — DNS y CDN unificado (medio día) - En CloudFront agregar segundo origin = ALB con path pattern `/api/*` y `/run/*`. - Origin del path `/*` (default) sigue siendo S3. - Comportamiento: `/api/*` con cache deshabilitado, forward de cookies y headers; `/*` con cache largo (1 año) e invalidación por deploy. -### Fase 5 — CI/CD (medio día) +### ⚙️ Fase 5 — CI/CD (medio día) Recomendación: **GitHub Actions con OIDC hacia AWS** (sin almacenar Access Keys). @@ -273,7 +273,7 @@ jobs: run: aws ecs update-service --cluster python-ds-program-prod --service lab --force-new-deployment ``` -### Fase 6 — Hardening (continuo) +### 6️⃣ Fase 6 — Hardening (continuo) - Activar **GuardDuty** ($ por GB analizado, ~5 USD/mes en este tamaño). - Activar **AWS Config** con reglas managed (`s3-bucket-public-read-prohibited`, `iam-root-access-key-check`). @@ -287,7 +287,7 @@ jobs: > Estimaciones a precio público en `us-east-1`, sin tier gratuito, redondeadas hacia arriba. La realidad oscila ±20%. -### Escenario "demo institucional" — 50 alumnos / mes, no concurrentes +### 🎓 Escenario "demo institucional" — 50 alumnos / mes, no concurrentes | Concepto | Servicio | Costo aprox. | |---|---|---| @@ -304,7 +304,7 @@ jobs: | Misma carga en Opción A (serverless) | | **~5 USD** | | Misma carga en Opción C (EC2 t3.small reservada) | | **~12 USD** | -### Escenario "operación educativa" — 300 alumnos, picos concurrentes 30 +### 🎓 Escenario "operación educativa" — 300 alumnos, picos concurrentes 30 | Concepto | Servicio | Costo aprox. | |---|---|---| @@ -318,7 +318,7 @@ jobs: | Egress total estimado | | 12 | | **Total mensual aprox.** | | **~140 USD** | -### Escenario "demo cero usuarios" — Opción A serverless +### 🅰️ Escenario "demo cero usuarios" — Opción A serverless - S3 + CloudFront sin tráfico: **< 1 USD** - Lambda cero invocaciones: **0 USD** diff --git a/docs/MOBILE_APP.md b/docs/MOBILE_APP.md index 6a6c0470..c3f46c52 100644 --- a/docs/MOBILE_APP.md +++ b/docs/MOBILE_APP.md @@ -6,7 +6,7 @@ App React Native (Expo) standalone diseñada para que los alumnos lean el conten --- -## Qué hace la app (cuando se cargue el catálogo v2) +## ❓ Qué hace la app (cuando se cargue el catálogo v2) ``` ALUMNO @@ -31,7 +31,7 @@ ALUMNO --- -## Arquitectura +## 🏗️ Arquitectura ``` mobile/ @@ -57,7 +57,7 @@ mobile/ --- -## Flujo de ejecución de código +## ▶️ Flujo de ejecución de código La app móvil NO ejecuta Python directamente. El flujo es: @@ -76,7 +76,7 @@ La app móvil NO ejecuta Python directamente. El flujo es: (el alumno puede modificarlo y ejecutar celda a celda) ``` -### ¿Por qué este enfoque? +### ❓ ¿Por qué este enfoque? | Alternativa | Problema | |---|---| @@ -87,7 +87,7 @@ La app móvil NO ejecuta Python directamente. El flujo es: --- -## Requisitos para desarrollar +## 📋 Requisitos para desarrollar | Herramienta | Versión | Instalacion | |---|---|---| @@ -100,7 +100,7 @@ No se requiere Android Studio ni SDK de Android para desarrollo y pruebas con Ex --- -## Instalar y ejecutar en desarrollo +## 🛠️ Instalar y ejecutar en desarrollo ```bash # 1. Entrar al directorio de la app @@ -121,9 +121,9 @@ La app se recarga automaticamente cada vez que se guarda un archivo. --- -## Generar APK para distribucion +## 📦 Generar APK para distribucion -### Opción A — EAS Build (recomendado, en la nube) +### 📦 Opción A — EAS Build (recomendado, en la nube) ```bash # Instalar EAS CLI @@ -143,7 +143,7 @@ eas build -p android --profile preview El APK generado se puede instalar en cualquier Android con "Instalar desde fuentes desconocidas" activado. -### Opción B — Build local (requiere Android Studio) +### 📦 Opción B — Build local (requiere Android Studio) ```bash # Generar proyecto Android nativo @@ -158,7 +158,7 @@ cd android && ./gradlew assembleDebug --- -## Configuración del contenido +## ⚙️ Configuración del contenido El contenido de las clases esta embebido en `src/data/classes.js`. Cada clase tiene: @@ -189,7 +189,7 @@ Para actualizar el contenido: editar `src/data/classes.js` y volver a hacer el b --- -## Progreso del alumno +## 🎓 Progreso del alumno El progreso se guarda localmente en el dispositivo con AsyncStorage (no se sincroniza a ningun servidor). Se persiste entre sesiones. @@ -205,7 +205,7 @@ Para resetear el progreso: ir a la pantalla principal y usar "Reiniciar progreso --- -## Colores y diseño +## 🎨 Colores y diseño ```js const colors = { @@ -222,7 +222,7 @@ const colors = { --- -## Diferencias entre la app Android y el laboratorio Windows +## 📱 Diferencias entre la app Android y el laboratorio Windows | Caracteristica | App Android | Laboratorio Windows (Flask) | |---|---|---| @@ -235,7 +235,7 @@ const colors = { --- -## Actualizar la app con nuevo contenido +## 📱 Actualizar la app con nuevo contenido 1. Editar `mobile/src/data/classes.js` 2. Ejecutar `npx expo start` para probar diff --git a/docs/aula-ia-y-problemas-frecuentes.md b/docs/aula-ia-y-problemas-frecuentes.md index 3a24a01b..8358064f 100644 --- a/docs/aula-ia-y-problemas-frecuentes.md +++ b/docs/aula-ia-y-problemas-frecuentes.md @@ -1,6 +1,6 @@ # 💬 Aula, tecnología y problemas frecuentes en clase -## Valor docente en una era de herramientas cada vez más accesibles +## 🧰 Valor docente en una era de herramientas cada vez más accesibles Que los estudiantes tengan acceso a buscadores, asistentes, IA o cualquier otra tecnología no elimina el valor del docente. Cambia el tipo de valor que más importa. @@ -12,11 +12,11 @@ El docente aporta en cinco niveles: 4. contexto: conecta el código con una pregunta real y con el nivel del grupo; 5. transferencia: ayuda a que el estudiante pueda explicar y reutilizar lo aprendido. -## Idea fuerza para la entrevista +## 💡 Idea fuerza para la entrevista "La tecnología puede resolver dudas puntuales, pero no reemplaza el diseño pedagógico, la lectura del grupo, la retroalimentación o la construcción de confianza. Mi valor no es competir con la herramienta, sino convertirla en apoyo sin que reemplace el aprendizaje." -## Indicaciones pedagogicas para este programa +## 📐 Indicaciones pedagogicas para este programa - abrir cada bloque con un objetivo concreto y visible; - trabajar una idea central por tramo, no demasiadas a la vez; @@ -25,14 +25,14 @@ El docente aporta en cinco niveles: - cerrar con una pregunta de interpretacion, no solo con código funcionando; - usar evidencia breve de comprensión: explicación oral, mini reto o salida escrita. -## Regla de uso pedagógico de IA en clase +## 📚 Regla de uso pedagógico de IA en clase - primero pensar; - despues consultar; - siempre verificar; - finalmente explicar con palabras propias. -## Cómo usar tecnología sin que reemplace el aprendizaje +## ❓ Cómo usar tecnología sin que reemplace el aprendizaje - pedir que el estudiante compare la respuesta de IA con su propia idea; - solicitar que modifique un ejemplo y justifique el cambio; @@ -40,9 +40,9 @@ El docente aporta en cinco niveles: - pedir interpretacion del resultado y no solo ejecución exitosa; - mostrar que una respuesta generada puede sonar correcta y aun asi estar mal aplicada. -## Problemas frecuentes y como los manejaria +## 🚨 Problemas frecuentes y como los manejaria -## 1. Copian código o respuestas generadas sin entender +## 📋 1. Copian código o respuestas generadas sin entender Respuesta docente: @@ -51,7 +51,7 @@ Respuesta docente: - evaluar comprensión con una pregunta oral corta; - pedir comparacion entre dos soluciones posibles. -## 2. Se frustran con errores de sintaxis +## ⚠️ 2. Se frustran con errores de sintaxis Respuesta docente: @@ -60,7 +60,7 @@ Respuesta docente: - trabajar con ejemplos pequenos; - resolver un bug comun en pantalla antes de la práctica individual. -## 3. El grupo avanza a ritmos muy distintos +## 🏃 3. El grupo avanza a ritmos muy distintos Respuesta docente: @@ -69,7 +69,7 @@ Respuesta docente: - usar parejas o roles para sostener a quienes van más lento; - hacer checkpoints breves cada 15 a 20 minutos. -## 4. Se quedan en ejecutar y no interpretan +## 🎯 4. Se quedan en ejecutar y no interpretan Respuesta docente: @@ -77,7 +77,7 @@ Respuesta docente: - usar preguntas tipo "que observas?" y "que decision tomarias con esto?"; - cerrar con hallazgos, no solo con celdas corridas. -## 5. Una herramienta entrega una respuesta incorrecta o fuera de nivel +## ⚠️ 5. Una herramienta entrega una respuesta incorrecta o fuera de nivel Respuesta docente: @@ -86,7 +86,7 @@ Respuesta docente: - mostrar por que una solución muy compleja no siempre es mejor; - reforzar que la herramienta no reemplaza criterio. -## 6. Hay poca participación o miedo a equivocarse +## 🗣️ 6. Hay poca participación o miedo a equivocarse Respuesta docente: @@ -95,7 +95,7 @@ Respuesta docente: - permitir práctica en parejas; - reconocer el progreso, no solo el resultado final. -## 7. Falla internet o equipo +## 📡 7. Falla internet o equipo Respuesta docente: @@ -104,6 +104,6 @@ Respuesta docente: - tener una ruta de demo proyectada si no todos pueden ejecutar; - mantener ejercicios que puedan discutirse aunque falle una maquina. -## Lo que conviene decir si te preguntan por el valor frente a IA +## ❓ Lo que conviene decir si te preguntan por el valor frente a IA "Yo no planteo el curso contra una tecnología. Lo planteo mejor porque las herramientas existen. Justamente por eso importa más la pedagogia: para que los estudiantes no solo pidan respuestas, sino que aprendan a formular preguntas, validar resultados, interpretar datos y explicar decisiones." diff --git a/docs/cronograma-referencial.md b/docs/cronograma-referencial.md index 4dadc527..67b4e0dd 100644 --- a/docs/cronograma-referencial.md +++ b/docs/cronograma-referencial.md @@ -1,8 +1,17 @@ -# Cronograma referencial +
-> Este documento describe las modalidades a alto nivel; el detalle por clase madura conforme se desarrolla cada bloque. +# 📅 Cronograma referencial -## Visión general +### **Modalidades de implementación · A/B/C/D · 90 min por clase** + +[![Clases](https://img.shields.io/badge/clases-197-7c5cff?style=for-the-badge)](syllabus.md) +[![Modalidades](https://img.shields.io/badge/modalidades-4-0ea5e9?style=for-the-badge)](#-modalidades-sugeridas) + +
+ +> 📌 Este documento describe las modalidades a alto nivel; el detalle por clase madura conforme se desarrolla cada bloque. + +## 🔭 Visión general El currículo tiene **197 clases en 9 partes**. No está pensado para impartirse íntegro en un solo programa de pocas semanas: es una pauta completa y profesional. Las modalidades reales recortan o reordenan partes según el público objetivo. @@ -11,9 +20,9 @@ Pauta completa: [syllabus.md](syllabus.md). --- -## Modalidades sugeridas +## 🎓 Modalidades sugeridas -### A — Programa introductorio (3 meses · ~90 horas) +### 🅰️ A — Programa introductorio (3 meses · ~90 horas) Recomendado para alumnos sin experiencia previa. @@ -23,7 +32,7 @@ Recomendado para alumnos sin experiencia previa. | 2. Estadística + ML clásico | Parte 1 (selección de 15 clases) + Parte 3 (5 clases) | 4 semanas | | 3. Capstone tabular | Parte 8, clase 194 | 3 semanas | -### B — Programa intermedio (6 meses · ~180 horas) +### 🅱️ B — Programa intermedio (6 meses · ~180 horas) Cubre el grueso de ML clásico y un primer contacto con Deep Learning. @@ -35,7 +44,7 @@ Cubre el grueso de ML clásico y un primer contacto con Deep Learning. | 4. Deep Learning intro | Parte 2, clases 090–105 | 3 semanas | | 5. Capstones 1 y 2 | Parte 8, clases 194–195 | 4 semanas | -### C — Programa completo (12+ meses · ~400 horas) +### 🆎 C — Programa completo (12+ meses · ~400 horas) Cobertura completa de la pauta. Recomendado para perfiles que buscan empleabilidad como ML Engineer / Data Scientist senior. @@ -50,7 +59,7 @@ Cobertura completa de la pauta. Recomendado para perfiles que buscan empleabilid | 7. Ética y fairness | Parte 7 (6 clases) | 1 semana | | 8. Capstones | Parte 8 (4 clases) | 6 semanas | -### D — Especialización (variable) +### 🎯 D — Especialización (variable) Selección por interés profesional. Asume que la Parte 0 ya está cubierta. @@ -63,11 +72,11 @@ Selección por interés profesional. Asume que la Parte 0 ya está cubierta. --- -## Duración estimada por clase +## 📚 Duración estimada por clase Cada clase está diseñada para **90 minutos de aula** + ~60 minutos de práctica autónoma posterior. Las clases-capstone (Parte 8) son notablemente más largas — pueden requerir varias sesiones. -## Estado actual +## 📊 Estado actual El **contenido pedagógico de las 197 clases está en desarrollo**. Las modalidades A/B/C arriba descritas requieren que primero estén rellenos los bloques correspondientes. diff --git a/docs/despliegue-seguro-y-operacion.md b/docs/despliegue-seguro-y-operacion.md index 09c99483..edf43d02 100644 --- a/docs/despliegue-seguro-y-operacion.md +++ b/docs/despliegue-seguro-y-operacion.md @@ -4,7 +4,7 @@ Documento de postura técnica para explicar como se opera este repositorio hoy, que controles existen, que CI/CD ya esta disponible y que cambios harían falta para escenarios más expuestos. -## 1. Postura actual +## 🎯 1. Postura actual Este proyecto esta preparado para: @@ -15,7 +15,7 @@ Este proyecto esta preparado para: Este proyecto no debe venderse hoy como plataforma multiusuario expuesta a internet abierta. El runner de código sigue siendo una superficie local y controlada. -## 2. Modelos de despliegue +## 🚀 2. Modelos de despliegue | Perfil | Superficie | Estado actual | Riesgo | |---|---|---|---| @@ -24,7 +24,7 @@ Este proyecto no debe venderse hoy como plataforma multiusuario expuesta a inter | demo compartida endurecida | contenedor + proxy + auth | posible, no integrada aun | medio | | internet abierta con runner | no recomendado hoy | fuera de alcance | alto | -## 3. Arquitectura operativa +## 🏗️ 3. Arquitectura operativa ```mermaid flowchart LR @@ -36,9 +36,9 @@ flowchart LR G --> H["Classes + datasets + notebooks"] ``` -## 4. Controles actuales +## 🛡️ 4. Controles actuales -### Aplicacion +### 📱 Aplicacion - validación de slugs e identificadores; - proteccion contra path traversal; @@ -49,22 +49,22 @@ flowchart LR - headers HTTP de seguridad; - endpoints `GET /health` y `GET /ready`. -### Operación local +### ⚙️ Operación local - host y puerto configurables por entorno; - `docker-compose.yml` enlazado a `127.0.0.1`; - `docker-compose.prod.yml` con healthcheck y reinicio; - volumen separado para notebooks guardados. -### Pipeline +### ⚙️ Pipeline - `ci.yml`: lint, tests y build de imagen; - `security.yml`: `pip-audit` y `bandit`; - `deploy-pages.yml`: publicación del portal del alumno. -## 5. Quickstart operativo recomendado +## 🚀 5. Quickstart operativo recomendado -### Python nativo +### 🐍 Python nativo ```powershell $env:PROGRAM_HOST="127.0.0.1" @@ -72,13 +72,13 @@ $env:PROGRAM_PORT="8000" python run_program.py ``` -### Docker local +### 🐳 Docker local ```powershell docker compose up --build ``` -### Perfil más serio con healthcheck +### 👤 Perfil más serio con healthcheck ```powershell docker compose -f docker-compose.prod.yml up -d --build @@ -86,7 +86,7 @@ docker compose -f docker-compose.prod.yml up -d --build La aplicacion queda disponible en `http://127.0.0.1:8000`. -## 6. Checklist de preapertura +## 🎬 6. Checklist de preapertura Antes de mostrar el producto o correr una clase: @@ -96,7 +96,7 @@ Antes de mostrar el producto o correr una clase: 4. revisar que carguen una clase y un notebook; 5. comprobar que Pages o la vista estatica sigan publicando bien. -## 7. CI/CD ya disponible +## ⚙️ 7. CI/CD ya disponible Esto ya existe en el repo y no es teórico: @@ -108,7 +108,7 @@ Esto ya existe en el repo y no es teórico: Eso no equivale a una plataforma enterprise. Pero si demuestra disciplina de entrega y criterio de operación. -## 8. Gaps conscientes hacia una exposicion mayor +## 🔭 8. Gaps conscientes hacia una exposicion mayor | Necesidad | Estado | |---|---| @@ -119,7 +119,7 @@ Eso no equivale a una plataforma enterprise. Pero si demuestra disciplina de ent | manejo formal de secretos | parcial por entorno, no completo | | aislamiento fuerte del runner | pendiente | -## 9. Postura heredada del resto del portafolio +## 🎯 9. Postura heredada del resto del portafolio El patron consistente en tus repos fuertes se mantiene aqui: @@ -129,7 +129,7 @@ El patron consistente en tus repos fuertes se mantiene aqui: - documentar hardening en vez de vender humo; - usar CI/CD como evidencia de criterio y no como adorno. -## 10. Si hubiera que exponerlo fuera de localhost +## ❓ 10. Si hubiera que exponerlo fuera de localhost No hacerlo en directo. La secuencia responsable seria: @@ -140,18 +140,18 @@ No hacerlo en directo. La secuencia responsable seria: 5. definir logs, monitoreo y retencion; 6. separar entorno demo de entorno de uso real. -## 11. Preguntas de seguridad que debes poder responder +## ❓ 11. Preguntas de seguridad que debes poder responder - por que el runner no debe exponerse a internet abierta; - que controles existen hoy y cuales no; - que diferencia hay entre portal público y backend local; - por que GitHub Pages si puede ser público mientras el runner no. -## 12. Regla final +## ⚖️ 12. Regla final La madurez técnica de este repo no se demuestra fingiendo que todo esta listo para produccion. Se demuestra mostrando una base operativa, un pipeline visible y una frontera de seguridad bien comunicada. -## 13. Relación con otros documentos +## 🔗 13. Relación con otros documentos - [../SECURITY.md](../SECURITY.md) - [../RUNBOOK.md](../RUNBOOK.md) diff --git a/docs/entorno-interactivo.md b/docs/entorno-interactivo.md index 1f30a369..3ad5f03a 100644 --- a/docs/entorno-interactivo.md +++ b/docs/entorno-interactivo.md @@ -4,7 +4,7 @@ --- -## Objetivo +## 🎯 Objetivo El entorno interactivo permite que el programa no dependa de notebooks estáticos. El mismo repositorio sirve como: @@ -16,9 +16,9 @@ El entorno interactivo permite que el programa no dependa de notebooks estático --- -## Modos de ejecución +## 🚦 Modos de ejecución -### Modo 1: App de escritorio Windows (distribución para alumnos) +### 🎓 Modo 1: App de escritorio Windows (distribución para alumnos) ```bat PythonDSProgram.exe @@ -32,7 +32,7 @@ PythonDSProgram.exe **Requisito del sistema:** Edge WebView2 Runtime (preinstalado en Windows 10 v2004+ y Windows 11). -### Modo 2: Desarrollo desde el repositorio +### 🐍 Modo 2: Desarrollo desde el repositorio ```bash python run_program.py @@ -44,7 +44,7 @@ python run_program.py - Abre el navegador del sistema automáticamente - Ctrl+C para detener -### Modo 3: Docker +### 🐳 Modo 3: Docker ```bash docker compose up --build @@ -56,9 +56,9 @@ Acceder en `http://127.0.0.1:8000`. --- -## Componentes del laboratorio +## 🧩 Componentes del laboratorio -### Vista de clases +### 📚 Vista de clases Renderiza el contenido de las 13 clases directamente desde `classes/`: @@ -73,7 +73,7 @@ Renderiza el contenido de las 13 clases directamente desde `classes/`: El Markdown se convierte a HTML en el servidor con extensiones `fenced_code`, `tables` y `codehilite`. -### Cuaderno interactivo (tipo Jupyter) +### 📓 Cuaderno interactivo (tipo Jupyter) - celdas de código Python editables, ejecutables con `Ctrl+Enter`; - cada celda mantiene su salida (stdout, resultado, gráficos, errores); @@ -89,14 +89,14 @@ El Markdown se convierte a HTML en el servidor con extensiones `fenced_code`, `t | `clasificacion_lab` | árboles de decisión, regresión logística, matriz de confusión | | `pipelines_lab` | Pipeline sklearn, GridSearchCV, cross-validation | -### Runner rápido +### ⚡ Runner rápido - área de texto libre para código Python; - `Ctrl+Enter` para ejecutar; - sesión separada de los notebooks (no comparte variables); - útil para resolver dudas en vivo o probar ideas cortas. -### Guardado de notebooks +### 💾 Guardado de notebooks - botón de guardado en la UI → `POST /api/notebook/save`; - auto-guardado cada 30 segundos de inactividad; @@ -105,9 +105,9 @@ El Markdown se convierte a HTML en el servidor con extensiones `fenced_code`, `t --- -## Motor de ejecución — detalles técnicos +## ▶️ Motor de ejecución — detalles técnicos -### Sesiones +### 🎬 Sesiones | Parámetro | Valor | |---|---| @@ -117,7 +117,7 @@ El Markdown se convierte a HTML en el servidor con extensiones `fenced_code`, `t Cada sesión tiene su propio namespace Python (`globals()`). Las variables definidas en una celda están disponibles en las siguientes de la misma sesión. -### Ejecución y límites +### 🚧 Ejecución y límites | Parámetro | Valor | |---|---| @@ -127,7 +127,7 @@ Cada sesión tiene su propio namespace Python (`globals()`). Las variables defin Si una celda supera el timeout, la sesión se reinicia automáticamente y se devuelve un mensaje de error. -### Paquetes preimportados +### 📦 Paquetes preimportados Las siguientes librerías están disponibles sin importar explícitamente en cada celda: @@ -140,7 +140,7 @@ import matplotlib.pyplot as plt El resto de las librerías disponibles (numpy, scikit-learn, etc.) deben importarse explícitamente. -### Captura de salida +### 🖼️ Captura de salida | Tipo de salida | Cómo se captura | |---|---| @@ -151,7 +151,7 @@ El resto de las librerías disponibles (numpy, scikit-learn, etc.) deben importa --- -## API del laboratorio +## 🔌 API del laboratorio | Método | Ruta | Descripción | |---|---|---| @@ -168,7 +168,7 @@ El resto de las librerías disponibles (numpy, scikit-learn, etc.) deben importa --- -## Límites de diseño +## 🚧 Límites de diseño - el runner ejecuta código Python arbitrario del alumno dentro del proceso de la app; - el timeout de 30s reduce el riesgo de bloqueos pero no reemplaza un sandbox real de OS; diff --git a/docs/herramientas-pedagogicas-de-aula.md b/docs/herramientas-pedagogicas-de-aula.md index 7c4bdc7e..206a26f3 100644 --- a/docs/herramientas-pedagogicas-de-aula.md +++ b/docs/herramientas-pedagogicas-de-aula.md @@ -30,7 +30,7 @@ Esta secuencia funciona bien en clases cortas, medias y en talleres de prueba po ## 🛠 3. Caja de herramientas por momento de la clase -### Apertura +### 🎬 Apertura Objetivo: alinear al grupo y bajar el nivel de incertidumbre. @@ -41,7 +41,7 @@ Herramientas: - hacer una pregunta de entrada de baja exposicion; - partir con una victoria rápida. -### Explicación +### 💡 Explicación Objetivo: construir comprensión sin saturar. @@ -52,7 +52,7 @@ Herramientas: - verbalizar el razonamiento, no solo el teclado; - pedir prediccion antes de ejecutar. -### Práctica +### 🛠️ Práctica Objetivo: transformar observacion en accion. @@ -63,7 +63,7 @@ Herramientas: - desafío opcional para quien termina antes; - checkpoints de 15 a 20 minutos. -### Cierre +### 🏁 Cierre Objetivo: que el aprendizaje no quede solo en ejecución. @@ -89,14 +89,14 @@ Herramientas: El valor docente no esta en competir con asistentes, buscadores o plataformas. Esta en ordenar la experiencia de aprendizaje. -### Lo que hace la tecnología +### ❓ Lo que hace la tecnología - entrega respuestas rapidas; - sugiere código; - muestra ejemplos; - acelera busqueda de información. -### Lo que hace la mediación docente +### ❓ Lo que hace la mediación docente - selecciona dificultad adecuada; - secuencia el aprendizaje; @@ -104,7 +104,7 @@ El valor docente no esta en competir con asistentes, buscadores o plataformas. E - convierte resultado en comprensión; - regula el uso de tecnología según objetivo. -### Regla de aula sugerida +### 🏫 Regla de aula sugerida 1. formular una hipótesis; 2. consultar la herramienta; @@ -131,7 +131,7 @@ La clave no es hacer tres clases distintas. La clave es sostener un minimo comun ## 🚨 8. Problemas reales que pueden aparecer en clase -### Problema: no entienden para que sirve el contenido +### ❓ Problema: no entienden para que sirve el contenido Respuesta: @@ -139,7 +139,7 @@ Respuesta: - mostrar un resultado visible; - volver a nombrar el objetivo en mitad de la clase. -### Problema: el curso se vuelve demasiado técnico muy rápido +### 🚨 Problema: el curso se vuelve demasiado técnico muy rápido Respuesta: @@ -147,7 +147,7 @@ Respuesta: - usar ejemplos más pequenos; - privilegiar lectura y modificacion antes que construcción desde cero. -### Problema: se apoyan demasiado en plantillas o asistentes +### 🚨 Problema: se apoyan demasiado en plantillas o asistentes Respuesta: @@ -155,7 +155,7 @@ Respuesta: - pedir adaptación posterior; - pedir explicación oral o escrita de una parte crítica. -### Problema: se quedan pegados en errores minimos +### ⚠️ Problema: se quedan pegados en errores minimos Respuesta: @@ -172,15 +172,15 @@ Respuesta: ## 🎤 10. Frases utiles para entrevista o clase de prueba -### Sobre enfoque +### 🎯 Sobre enfoque "Mi foco no es solo que ejecuten código. Es que entiendan la lógica, puedan verificar resultados y ganen confianza para reutilizar lo aprendido." -### Sobre tecnología +### ⚙️ Sobre tecnología "No compito contra ninguna tecnología. La ordeno pedagogicamente para que el estudiante no pierda criterio ni autonomia." -### Sobre manejo de aula +### 🏫 Sobre manejo de aula "Trabajo con un minimo comun claro, apoyo a quien se bloquea y retos breves para quien avanza más rápido." diff --git a/docs/instructor-guide.md b/docs/instructor-guide.md index 0d7816a6..d1788918 100644 --- a/docs/instructor-guide.md +++ b/docs/instructor-guide.md @@ -2,11 +2,11 @@ > Audiencia: docente principal, docente apoyo, coordinacion academica. -## Objetivo +## 🎯 Objetivo Traducir la metodología del programa a decisiones concretas antes, durante y despues de la clase. -## Checklist previo a cada sesión +## 🎬 Checklist previo a cada sesión | Área | Qué revisar | |---|---| @@ -15,7 +15,7 @@ Traducir la metodología del programa a decisiones concretas antes, durante y de | Aula | tiempos, agrupamiento, equipamiento y conectividad | | Riesgos | errores probables, dudas frecuentes y apoyo para quienes se bloquean | -## Antes de la clase +## ⏮️ Antes de la clase 1. revisar el objetivo visible de la sesión; 2. probar el notebook y la ruta crítica del ejemplo; @@ -23,36 +23,36 @@ Traducir la metodología del programa a decisiones concretas antes, durante y de 4. decidir cual sera el minimo comun del grupo; 5. preparar un desafío opcional para quienes avancen más rápido. -## Playbook de clase +## 📚 Playbook de clase -### Apertura +### 🎬 Apertura - conectar con la sesión anterior; - explicar para que sirve lo que se vera hoy; - mostrar el resultado esperado; - bajar la ansiedad con una tarea inicial acotada. -### Desarrollo +### 🛠️ Desarrollo - usar un ejemplo breve antes de abrir variaciones; - verbalizar decisiones mientras escribes; - preguntar "que creen que pasara" antes de ejecutar; - evitar meter más de una idea nueva fuerte por bloque. -### Práctica +### 🛠️ Práctica - pasar rapidamente por los puestos o por parejas; - detectar si el problema es técnico o de comprensión; - no resolverle todo a quien se bloquea: dar el siguiente paso, no la solución completa; - recoger un error comun para revisarlo en plenario. -### Cierre +### 🏁 Cierre - pedir una conclusion, no solo "me funciono"; - marcar un error frecuente y como leerlo; - dejar claro que se espera para la siguiente sesión. -## Matriz de intervencion docente +## 👩‍🏫 Matriz de intervencion docente | Situacion | Senal visible | Intervencion sugerida | |---|---|---| @@ -62,7 +62,7 @@ Traducir la metodología del programa a decisiones concretas antes, durante y de | Frustracion por error | abandono o repeticion mecanica | leer el error en voz alta y aislar la causa | | Dispersion por tecnología | cambia de herramienta, busca demasiado | volver al objetivo y acotar el alcance | -## Buenas prácticas para explicación técnica +## 💡 Buenas prácticas para explicación técnica - hablar en voz alta mientras escribes; - comparar lo correcto con lo casi-correcto; @@ -70,7 +70,7 @@ Traducir la metodología del programa a decisiones concretas antes, durante y de - no ocultar errores de sintaxis comunes; - mostrar al menos una interpretacion del resultado obtenido. -## Integración con evaluación +## ✅ Integración con evaluación El docente debe recoger evidencia de: @@ -84,13 +84,13 @@ Relación directa: - [plan-evaluación.md](plan-evaluacion.md) - [metodología-docente.md](metodologia-docente.md) -## Despues de la clase +## ⏭️ Despues de la clase 1. registrar que se logro y que quedo fragil; 2. anotar errores recurrentes; 3. decidir si la siguiente sesión mantiene ritmo o necesita ajuste; 4. guardar notebooks o evidencia utiles para la siguiente cohort. -## Regla de oro +## 🏆 Regla de oro Una buena clase no es la que "cubre más contenido". Es la que deja al grupo entendiendo una idea util, pudiendo hacer algo con ella y con menos miedo a seguir aprendiendo. diff --git a/docs/metodologia-docente.md b/docs/metodologia-docente.md index 8e8ef524..78961285 100644 --- a/docs/metodologia-docente.md +++ b/docs/metodologia-docente.md @@ -2,11 +2,11 @@ > Audiencia: docente, coordinacion academica, evaluador pedagógico. -## Proposito +## 🎯 Proposito Este documento define como se enseña dentro de este programa. No describe solo contenidos, sino la forma de mediarlos para que el estudiante avance con comprensión, práctica y confianza. -## Idea fuerza +## 💡 Idea fuerza El programa no se apoya en "mostrar código" como fin. Su foco es convertir herramientas técnicas en aprendizaje real mediante: @@ -16,17 +16,17 @@ El programa no se apoya en "mostrar código" como fin. Su foco es convertir herr - interpretacion de resultados; - retroalimentación que ayude a avanzar. -## Principios metodologicos +## ⭐ Principios metodologicos -### 1. De la comprensión minima al uso significativo +### 🌱 1. De la comprensión minima al uso significativo Cada sesión debe dejar al estudiante pudiendo hacer algo util y explicarlo. La dificultad aumenta cuando ya existe una base minima de seguridad. -### 2. Contexto antes que tecnicismo +### ❓ 2. Contexto antes que tecnicismo Los conceptos se presentan ligados a problemas entendibles: ventas, asistencia, transporte, soporte o seguimiento de estudiantes. Eso reduce friccion y hace visible para que sirve lo que se aprende. -### 3. Mostrar, practicar, interpretar +### 🔄 3. Mostrar, practicar, interpretar La secuencia didáctica central del programa es: @@ -35,15 +35,15 @@ La secuencia didáctica central del programa es: 3. practicar con acompanamiento; 4. pedir interpretacion, no solo ejecución. -### 4. Error como material de trabajo +### ❓ 4. Error como material de trabajo Los errores no se esconden. Se usan para enseñar lectura de mensajes, depuracion, comparacion de alternativas y autonomia gradual. -### 5. Un minimo comun para todos +### 🤝 5. Un minimo comun para todos La clase debe asegurar un piso de logro compartido, aun cuando haya estudiantes que avancen más rápido que otros. -### 6. Tecnología como apoyo, no como reemplazo +### ❓ 6. Tecnología como apoyo, no como reemplazo El programa acepta buscadores, asistentes o herramientas de IA, pero siempre subordinadas al objetivo de aprendizaje. La regla es: @@ -52,7 +52,7 @@ El programa acepta buscadores, asistentes o herramientas de IA, pero siempre sub 3. verificar; 4. explicar. -## Modelo de sesión de 90 minutos +## 🎬 Modelo de sesión de 90 minutos | Momento | Tiempo estimado | Qué ocurre | |---|---|---| @@ -63,7 +63,7 @@ El programa acepta buscadores, asistentes o herramientas de IA, pero siempre sub | Chequeo de comprensión | 10 a 15 min | variacion corta, ticket de salida o explicación oral | | Cierre | 5 min | síntesis, error comun y siguiente paso | -## Rol del docente +## 👩‍🏫 Rol del docente El docente cumple al mismo tiempo cinco funciones: @@ -73,7 +73,7 @@ El docente cumple al mismo tiempo cinco funciones: 4. normaliza la equivocacion como parte del proceso; 5. protege el foco pedagógico cuando la tecnología distrae o sobrecomplica. -## Tipos de evidencia que la clase debe producir +## ❓ Tipos de evidencia que la clase debe producir | Tipo de evidencia | Ejemplo | |---|---| @@ -82,37 +82,37 @@ El docente cumple al mismo tiempo cinco funciones: | Evidencia de interpretacion | escribir un hallazgo en lenguaje simple | | Evidencia de transferencia | resolver una pequena variacion del ejercicio | -## Intervenciones pedagogicas clave +## 🤝 Intervenciones pedagogicas clave -### Cuando el grupo va lento +### 🐢 Cuando el grupo va lento - reducir cantidad de variaciones; - reforzar una sola idea por bloque; - usar ejemplos ya preparados; - convertir el objetivo en una tarea más acotada. -### Cuando el grupo va rápido +### 🐇 Cuando el grupo va rápido - agregar desafío opcional; - pedir comparacion entre dos soluciones; - pedir interpretacion adicional o justificacion; - abrir una micro extension del problema. -### Cuando aparece ansiedad +### 😰 Cuando aparece ansiedad - mostrar primero una victoria rápida; - hacer visible que nadie debe dominar todo de inmediato; - preguntar con baja exposicion; - trabajar en parejas antes de pasar a plenario. -### Cuando la tecnología reemplaza el razonamiento +### ⚙️ Cuando la tecnología reemplaza el razonamiento - volver al objetivo de la tarea; - pedir hipótesis antes de consultar; - pedir adaptación y explicación de cualquier respuesta obtenida; - bajar la complejidad al nivel del grupo. -## Errores frecuentes que se deben anticipar +## ⚠️ Errores frecuentes que se deben anticipar | Tipo de error | Ejemplos | Respuesta docente recomendada | |---|---|---| @@ -121,7 +121,7 @@ El docente cumple al mismo tiempo cinco funciones: | Interpretacion | creer que el gráfico "habla solo" | pedir una conclusion escrita u oral | | Dependencia externa | copiar código sin criterio | pedir ajuste, justificacion y explicación | -## Indicadores de exito de una buena sesión +## 🎬 Indicadores de exito de una buena sesión - el estudiante entiende que hizo y para que sirve; - puede modificar algo pequeno sin perderse; @@ -129,7 +129,7 @@ El docente cumple al mismo tiempo cinco funciones: - gana confianza para seguir practicando; - no depende exclusivamente de copiar pasos. -## Relación con otros documentos +## 🔗 Relación con otros documentos - [herramientas-pedagogicas-de-aula.md](herramientas-pedagogicas-de-aula.md): tacticas concretas de aula; - [instructor-guide.md](instructor-guide.md): playbook operativo para impartir clases; diff --git a/docs/perfil-estudiantes.md b/docs/perfil-estudiantes.md index 309b6b13..20967dfd 100644 --- a/docs/perfil-estudiantes.md +++ b/docs/perfil-estudiantes.md @@ -1,12 +1,12 @@ # 👥 Perfil de estudiantes -## Perfil principal esperado +## 👤 Perfil principal esperado - Personas en transicion hacia análisis de datos. - Estudiantes o profesionales que recien comienzan a programar. - Participantes con experiencia previa en Excel u otras herramientas, pero no necesariamente en Python. -## Necesidades frecuentes +## 📌 Necesidades frecuentes - perder miedo al código; - comprender para que sirve cada paso; @@ -14,14 +14,14 @@ - practicar en un entorno que no sea fragil; - recibir retroalimentación oportuna. -## Riesgos comunes +## ⚠️ Riesgos comunes - frustracion por errores de sintaxis; - sobrecarga si se mezclan demasiados conceptos en una sola clase; - baja confianza frente a notebooks y librerias; - tendencia a copiar sin comprender. -## Decisiones de diseño asociadas +## 🧭 Decisiones de diseño asociadas Por estas razones, el material: - usa datasets pequenos; diff --git a/docs/plan-evaluacion.md b/docs/plan-evaluacion.md index e6f2dc25..2f7c3670 100644 --- a/docs/plan-evaluacion.md +++ b/docs/plan-evaluacion.md @@ -38,21 +38,21 @@ flowchart LR ## 📋 5. Evidencias por tipo de actividad -### En clase +### 📚 En clase - respuestas a preguntas de chequeo; - cambios pequenos sobre ejemplos; - resolución de ejercicio base; - ticket de salida o conclusion corta. -### En notebooks +### 📓 En notebooks - orden de pasos; - comentarios o notas propias; - corrección de errores detectados; - pequenas variaciones sobre el ejemplo. -### En proyecto o actividad integradora +### 🏆 En proyecto o actividad integradora - comprensión de la pregunta; - uso pertinente de datos; @@ -73,14 +73,14 @@ flowchart LR Usar asistentes, buscadores o ayudas externas no debe medirse como trampa por defecto. Debe medirse como parte del proceso de trabajo. -### Uso aceptable +### ✅ Uso aceptable - consulta despues de pensar una hipótesis; - adapta la respuesta recibida; - puede explicar lo que dejo; - detecta si la propuesta no coincide con el nivel de la clase. -### Uso problematico +### 🚫 Uso problematico - pega código sin comprenderlo; - no puede modificar ni justificar; diff --git a/docs/portal-estudiante-y-app-movil.md b/docs/portal-estudiante-y-app-movil.md index 5388ac7a..ff402d71 100644 --- a/docs/portal-estudiante-y-app-movil.md +++ b/docs/portal-estudiante-y-app-movil.md @@ -2,7 +2,7 @@ Documento de producto para explicar por que existe una superficie pública separada del laboratorio local, cual es el enlace oficial para estudiantes y como evoluciona esta base hacia una experiencia móvil sin sobredimensionar la madurez actual. -## 1. Objetivo +## 🎯 1. Objetivo Separar claramente tres cosas: @@ -12,7 +12,7 @@ Separar claramente tres cosas: Eso evita mezclar presentación, aprendizaje y ejecución de código en una sola capa. -## 2. Enlace oficial para estudiantes +## 🎓 2. Enlace oficial para estudiantes Si este repositorio se publica desde `vladimiracunadev-create/python-data-science-program`, la URL esperada para alumnos es: @@ -20,7 +20,7 @@ Si este repositorio se publica desde `vladimiracunadev-create/python-data-scienc Ese es el enlace que conviene compartir por correo, QR, sala virtual o material impreso. -## 3. Qué problema resuelve el portal del alumno +## ❓ 3. Qué problema resuelve el portal del alumno | Necesidad | Respuesta del portal | |---|---| @@ -29,7 +29,7 @@ Ese es el enlace que conviene compartir por correo, QR, sala virtual o material | revisar desde celular | interfaz ligera y sin backend obligatorio | | ordenar recursos y expectativas | ruta, normas y materiales visibles | -## 4. Arquitectura de superficies +## 🏗️ 4. Arquitectura de superficies ```mermaid flowchart LR @@ -40,7 +40,7 @@ flowchart LR B -. futura integracion .-> G["Experiencia movil"] ``` -## 5. Qué queda en GitHub Pages +## ❓ 5. Qué queda en GitHub Pages - presentación del programa; - ruta de aprendizaje; @@ -49,7 +49,7 @@ flowchart LR - enlace oficial del curso; - base de lectura en celular. -## 6. Qué sigue viviendo en la app Flask +## ❓ 6. Qué sigue viviendo en la app Flask - catálogo dinamico de clases; - notebooks interactivos; @@ -57,13 +57,13 @@ flowchart LR - ejecución de código; - sesiones y salidas generadas. -## 7. Regla de comunicación importante +## 💬 7. Regla de comunicación importante El portal del alumno no es toda la aplicacion. Es la puerta de entrada oficial para estudiantes. El laboratorio Flask sigue siendo el núcleo local de práctica y demostracion. -## 8. Ruta móvil realista +## 📱 8. Ruta móvil realista -### Lo portable con poca friccion +### 🎒 Lo portable con poca friccion - listado de clases; - detalle de clase; @@ -71,7 +71,7 @@ El portal del alumno no es toda la aplicacion. Es la puerta de entrada oficial p - checklist de avances; - recursos públicos y avisos. -### Lo que requiere backend y mayor control +### ❓ Lo que requiere backend y mayor control - ejecución de código; - guardado persistente por estudiante; @@ -79,7 +79,7 @@ El portal del alumno no es toda la aplicacion. Es la puerta de entrada oficial p - sesiones autenticadas; - seguimiento docente por alumno. -## 9. Roadmap de evolución +## 🛣️ 9. Roadmap de evolución | Fase | Entregable | Madurez esperada | |---|---|---| @@ -88,7 +88,7 @@ El portal del alumno no es toda la aplicacion. Es la puerta de entrada oficial p | fase 3 | integración con backend para funciones interactivas | requiere decisiones de auth y seguridad | | fase 4 | app móvil dedicada | solo si el programa lo justifica | -## 10. CI/CD de la superficie pública +## ⚙️ 10. CI/CD de la superficie pública La capa del portal ya tiene despliegue automatico por GitHub Actions: @@ -98,7 +98,7 @@ La capa del portal ya tiene despliegue automatico por GitHub Actions: Antes de que ese deploy funcione, el repositorio debe tener GitHub Pages habilitado con `Source: GitHub Actions`. -## 11. Qué deben usar los alumnos +## ❓ 11. Qué deben usar los alumnos El mensaje recomendado para estudiantes es simple: @@ -108,14 +108,14 @@ El mensaje recomendado para estudiantes es simple: 4. usar el laboratorio local o notebook cuando se indique; 5. volver al portal para recursos y continuidad. -## 12. Porque esta separacion agrega valor +## 🤝 12. Porque esta separacion agrega valor - mejora la claridad para el estudiante; - evita exponer el runner como si fuera un portal público más; - permite crecer a móvil sin rehacer la experiencia base; - demuestra criterio de producto y no solo acumulacion de pantallas. -## 13. Archivos involucrados +## 📁 13. Archivos involucrados - `site/index.html` - `site/styles.css` @@ -123,7 +123,7 @@ El mensaje recomendado para estudiantes es simple: - `site/assets/icon.svg` - `.github/workflows/deploy-pages.yml` -## 14. Relación con otros documentos +## 🔗 14. Relación con otros documentos - [CATALOGO_PRODUCTO.md](CATALOGO_PRODUCTO.md) - [ARQUITECTURA_PRODUCTO.md](ARQUITECTURA_PRODUCTO.md) diff --git a/docs/student-guide.md b/docs/student-guide.md index aa18ae44..ec3551d7 100644 --- a/docs/student-guide.md +++ b/docs/student-guide.md @@ -35,14 +35,14 @@ Si solo copias código, avanzas poco. Si modificas, preguntas y justificas, avan ## 🧰 3. Qué necesitas antes de empezar -### Minimo técnico +### 📋 Minimo técnico - Python 3.10 o superior; - navegador moderno; - acceso para instalar dependencias al menos una vez; - ganas de equivocarte y corregir sin bloquearte. -### Preparación del entorno +### 🌿 Preparación del entorno #### Windows @@ -86,7 +86,7 @@ Si trabajas desde el laboratorio local del repo, el docente puede indicarte abri Este programa no se posiciona contra una tecnología puntual. Puedes usar buscadores, videos, asistentes de IA, documentación o notas externas. Lo importante es como las usas. -### Regla operativa +### ⚖️ Regla operativa 1. piensa primero que deberia pasar; 2. consulta la herramienta; @@ -94,14 +94,14 @@ Este programa no se posiciona contra una tecnología puntual. Puedes usar buscad 4. adapta el resultado; 5. explica por que lo dejaste asi. -### Senales de buen uso +### ✅ Senales de buen uso - usas la tecnología para destrabarte, no para apagar tu criterio; - cambias el código recibido y entiendes la diferencia; - puedes explicar una línea clave; - detectas cuando una respuesta se pasa de complejidad para la clase. -### Senales de mal uso +### 🚫 Senales de mal uso - pegas código sin leerlo; - no sabes de donde salen las columnas, variables o gráficos; @@ -117,7 +117,7 @@ Este programa no se posiciona contra una tecnología puntual. Puedes usar buscad | intentar antes de pedir la solución completa | acertar siempre al primer intento | | corregir y volver a probar | trabajar en silencio sin mostrar bloqueos | -## 🆘 8. Cómo pedir ayuda de forma útil +## ❓ 🆘 8. Cómo pedir ayuda de forma útil Cuando te bloquees, intenta decir: diff --git a/docs/syllabus.md b/docs/syllabus.md index f0d2cae6..2024863a 100644 --- a/docs/syllabus.md +++ b/docs/syllabus.md @@ -1,14 +1,22 @@ -# Syllabus — Python Data Science Program +
-> **197 clases · 9 partes · curriculum avanzado y completo** -> -> Fuente: pauta derivada de *Hands-On Machine Learning* (Géron, 3ª ed.) + *Python Data Science Handbook* (VanderPlas) + *Designing ML Systems* (Huyen) + *ISLP* (James et al) + *Fairness and Machine Learning* (Barocas/Hardt/Narayanan). +# 📚 Syllabus — Python Data Science Program + +### **197 clases · 9 partes · curriculum avanzado y completo** + +[![Clases](https://img.shields.io/badge/clases-197-7c5cff?style=for-the-badge)](../classes/README.md) +[![Partes](https://img.shields.io/badge/partes-9-0ea5e9?style=for-the-badge)](#-mapa-curricular-por-partes) +[![Fuentes](https://img.shields.io/badge/fuentes-5%20libros-f59e0b?style=for-the-badge)](#-fuentes-y-pauta) + +
+ +> 📖 Fuente: pauta derivada de *Hands-On Machine Learning* (Géron, 3ª ed.) + *Python Data Science Handbook* (VanderPlas) + *Designing ML Systems* (Huyen) + *ISLP* (James et al) + *Fairness and Machine Learning* (Barocas/Hardt/Narayanan). > -> Índice navegable completo: [classes/README.md](../classes/README.md) +> 🧭 Índice navegable completo: [classes/README.md](../classes/README.md) --- -## Propósito +## 🎯 Propósito Llevar a una persona desde cero programación hasta nivel **data scientist / ML engineer empleable** en 2026, con cobertura honesta de: @@ -23,11 +31,11 @@ Llevar a una persona desde cero programación hasta nivel **data scientist / ML - Ética, privacidad y reproducibilidad - Tres capstones públicos en GitHub -## Perfil de entrada +## 🚪 Perfil de entrada Sin requisitos formales. Una persona con cero programación entra por la Parte 0. Una persona con experiencia previa puede saltarse partes específicas validándose contra el `README.md` de cada clase. -## Perfil de salida +## 🎓 Perfil de salida Capaz de: @@ -39,7 +47,7 @@ Capaz de: --- -## Estructura general +## 🗂️ Estructura general | Parte | Tema | Clases | Carpeta | |---|---|---|---| @@ -54,7 +62,7 @@ Capaz de: | 8 | Capstones | 4 | [`parte-8-capstones/`](../classes/parte-8-capstones) | | | **Total** | **197** | | -## Estado de implementación +## 📊 Estado de implementación | Componente | Estado | |---|---| @@ -66,7 +74,7 @@ Capaz de: | Quizzes pre/post lección | ⏳ pendiente | | Datasets temáticos por bloque | ⏳ pendiente | -## Cómo desarrollar una clase +## 🛠️ Cómo desarrollar una clase Cada carpeta de clase tiene la misma estructura mínima: @@ -89,7 +97,7 @@ Materiales opcionales que se pueden añadir conforme una clase madure: └── guia-codigo.md ``` -## Orden recomendado de desarrollo +## 🛣️ Orden recomendado de desarrollo 1. **Parte 0** completa (46 clases) — sin prerrequisitos nadie llega al resto. 2. **Parte 1** (43 clases) — ML clásico es la base del 70% del trabajo real. @@ -99,7 +107,7 @@ Materiales opcionales que se pueden añadir conforme una clase madure: 6. **Partes 5, 6, 7** en paralelo según prioridad. 7. **Parte 8** (capstones) — al cierre del programa. -## Metodología por clase +## 🧠 Metodología por clase - Pregunta motivadora (1 min) - Concepto y metáfora (5–10 min) @@ -108,6 +116,6 @@ Materiales opcionales que se pueden añadir conforme una clase madure: - Ejercicio individual (15–20 min) - Quiz de cierre + pregunta integradora (5 min) -## Herramientas del programa +## 🧰 Herramientas del programa Python 3.12+, JupyterLab, NumPy, pandas, matplotlib, seaborn, scikit-learn, XGBoost/LightGBM/CatBoost, scipy, statsmodels, SQL (sqlite/DuckDB/PostgreSQL), MongoDB, Polars, PySpark, TensorFlow/Keras, PyTorch, Hugging Face Transformers, FastAPI, Docker, MLflow, DVC, GitHub Actions, Airflow/Prefect, SHAP, Great Expectations. From 02037b2afff05e3d612478eaec2546ec106d6073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Acu=C3=B1a?= Date: Sun, 17 May 2026 19:55:18 -0400 Subject: [PATCH 4/4] =?UTF-8?q?docs:=20aclarar=20qu=C3=A9=20aporta=20cada?= =?UTF-8?q?=20fuente=20al=20curr=C3=ADculo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se elimina la frase opaca 'pauta derivada de Géron, VanderPlas, Huyen, ISLP y Barocas/Hardt/Narayanan' (que no decía nada concreto al lector) y se reemplaza por: - README.md: bloque desplegado con un bullet por autor enlazando al libro y diciendo qué parte del currículo cubre cada uno. - docs/syllabus.md § Fuentes y pauta: tabla completa con autor, edición, editorial y aporte concreto al temario, más una nota explicando qué significa 'derivado' (secuencia y énfasis, no copia de contenido). Co-Authored-By: Claude Opus 4.7 --- README.md | 12 +++++++++++- docs/syllabus.md | 18 +++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ac9665c8..1480a203 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,17 @@ --- -Integra currículo modular extenso, laboratorio interactivo local, portal del alumno, app de escritorio nativa para Windows y app Android. La pauta se deriva de *Hands-On Machine Learning* (Géron, 3ª ed.), *Python Data Science Handbook* (VanderPlas), *Designing ML Systems* (Huyen), *ISLP* (James et al) y *Fairness and ML* (Barocas/Hardt/Narayanan). +Integra currículo modular extenso, laboratorio interactivo local, portal del alumno, app de escritorio nativa para Windows y app Android. + +📖 **¿Qué significa "pauta derivada"?** Cada parte del temario sigue explícitamente la secuencia y los énfasis de cinco libros referentes: + +- 🧠 **Géron** ([*Hands-On ML*, 3ª ed.](https://www.oreilly.com/library/view/hands-on-machine-learning/9781098125967/)) → estructura de las partes 1 (ML clásico) y 2 (Deep Learning) +- 📊 **VanderPlas** ([*Python Data Science Handbook*](https://jakevdp.github.io/PythonDataScienceHandbook/)) → parte 0 (NumPy, pandas, matplotlib) +- 🏭 **Huyen** ([*Designing ML Systems*](https://www.oreilly.com/library/view/designing-machine-learning/9781098107956/)) → parte 4 (MLOps en producción) +- 📈 **ISLP** ([*Statistical Learning with Python*](https://www.statlearning.com/)) → parte 3 (estadística inferencial) + rigor matemático de la parte 1 +- ⚖️ **Barocas/Hardt/Narayanan** ([*Fairness and ML*](https://fairmlbook.org/)) → parte 7 (ética, fairness, privacidad) + +> Detalle completo (qué aporta cada uno, cómo se adapta) en [docs/syllabus.md § Fuentes y pauta](docs/syllabus.md#-fuentes-y-pauta). > 💡 **Origen y orientación del proyecto:** este repositorio nació como **muestra de habilidades técnicas y pedagógicas**, y hoy se desarrolla como **recurso personal de aprendizaje, enseñanza y mejora continua del propio producto**. Es público y abierto a cualquier persona que quiera aprender, enseñar o contribuir. diff --git a/docs/syllabus.md b/docs/syllabus.md index 2024863a..5fd9038d 100644 --- a/docs/syllabus.md +++ b/docs/syllabus.md @@ -10,12 +10,28 @@ -> 📖 Fuente: pauta derivada de *Hands-On Machine Learning* (Géron, 3ª ed.) + *Python Data Science Handbook* (VanderPlas) + *Designing ML Systems* (Huyen) + *ISLP* (James et al) + *Fairness and Machine Learning* (Barocas/Hardt/Narayanan). +> 📖 Pauta derivada de cinco libros referentes — ver [§ Fuentes y pauta](#-fuentes-y-pauta) para qué aporta cada uno. > > 🧭 Índice navegable completo: [classes/README.md](../classes/README.md) --- +## 📚 Fuentes y pauta + +> Cuando decimos que el currículo está *derivado* de estas fuentes, queremos decir que cada parte del temario se construyó tomando explícitamente la secuencia, los énfasis y las decisiones pedagógicas de uno o más de estos libros. No se copia contenido — se respetan sus criterios técnicos y se adaptan a notebooks, datasets y ejercicios propios. + +| 📘 Libro / autor | Aporte concreto al currículo | +|---|---| +| **🧠 Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow** — Aurélien Géron (3ª ed., O'Reilly 2022) | Espina dorsal del programa. Define la secuencia de **Parte 1 (ML clásico)** y **Parte 2 (Deep Learning)**: regresión → clasificación → ensembles → reducción dimensional → clustering → MLP → CNN → RNN → transformers → RL → despliegue. Es la referencia más práctica del mercado. | +| **📊 Python Data Science Handbook** — Jake VanderPlas (O'Reilly, 2ª ed.) | Cubre la **Parte 0 (Prerrequisitos)**: NumPy, pandas, matplotlib, ML clásico introductorio. Su tratamiento de pandas y visualización es el estándar tácito de la comunidad Python para análisis de datos. | +| **🏭 Designing Machine Learning Systems** — Chip Huyen (O'Reilly 2022) | Define la **Parte 4 (MLOps)** y la mentalidad de "ML como sistema de producción": ciclo de vida real, monitoreo, deriva de datos, fairness, observabilidad. Cierra la brecha entre notebook y servicio en vivo. | +| **📈 An Introduction to Statistical Learning, Python edition (ISLP)** — James, Witten, Hastie, Tibshirani (Springer 2023) | Refuerza la **Parte 3 (Estadística inferencial)** y aporta rigor matemático a la **Parte 1**. Es el manual estándar para entender por qué los modelos funcionan, no sólo cómo entrenarlos. | +| **⚖️ Fairness and Machine Learning** — Solon Barocas, Moritz Hardt, Arvind Narayanan (MIT Press 2023) | Funda la **Parte 7 (Ética, fairness, privacidad)**. Plantea el problema de sesgo algorítmico no como anexo moral sino como decisión técnica con métricas, definiciones formales y trade-offs documentables. | + +> 🎯 La cobertura de las **Partes 5 (Ingeniería de datos)**, **6 (Recomendadores)** y **8 (Capstones)** se apoya en buenas prácticas comunitarias y documentación oficial de cada herramienta (Spark, Airflow, Surprise, scikit-learn). + +--- + ## 🎯 Propósito Llevar a una persona desde cero programación hasta nivel **data scientist / ML engineer empleable** en 2026, con cobertura honesta de: