{"id":50484271,"url":"https://github.com/vladimiracunadev-create/python-data-science-program","last_synced_at":"2026-06-01T20:30:45.991Z","repository":{"id":350047210,"uuid":"1205052519","full_name":"vladimiracunadev-create/python-data-science-program","owner":"vladimiracunadev-create","description":"Python Data Science Program — 197 clases en 9 partes. Pauta avanzada derivada de Géron, VanderPlas, Huyen, ISLP y Barocas/Hardt/Narayanan. Recurso personal de aprendizaje, enseñanza y mejora continua.","archived":false,"fork":false,"pushed_at":"2026-05-17T23:11:41.000Z","size":2877,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-17T23:47:08.856Z","etag":null,"topics":["bootcamp","data-analysis","data-science","education","jupyter","machine-learning","matplotlib","numpy","pandas","python","scikit-learn"],"latest_commit_sha":null,"homepage":"https://vladimiracunadev-create.github.io/python-data-science-program/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vladimiracunadev-create.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-08T15:32:43.000Z","updated_at":"2026-05-17T23:00:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vladimiracunadev-create/python-data-science-program","commit_stats":null,"previous_names":["vladimiracunadev-create/python-data-science-bootcamp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vladimiracunadev-create/python-data-science-program","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimiracunadev-create%2Fpython-data-science-program","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimiracunadev-create%2Fpython-data-science-program/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimiracunadev-create%2Fpython-data-science-program/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimiracunadev-create%2Fpython-data-science-program/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vladimiracunadev-create","download_url":"https://codeload.github.com/vladimiracunadev-create/python-data-science-program/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimiracunadev-create%2Fpython-data-science-program/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33793032,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootcamp","data-analysis","data-science","education","jupyter","machine-learning","matplotlib","numpy","pandas","python","scikit-learn"],"created_at":"2026-06-01T20:30:44.320Z","updated_at":"2026-06-01T20:30:45.985Z","avatar_url":"https://github.com/vladimiracunadev-create.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🧭 Python Data Science Program\n\n### **197 clases · 9 partes · pauta avanzada y completa**\n\n**Curso completo de Python y Data Science — desde fundamentos hasta despliegue de modelos en producción**\n\n\u003cbr\u003e\n\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)\n[![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)\n[![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)\n\n[![Version](https://img.shields.io/badge/release-v2.2.0-2e8b57?style=for-the-badge)](CHANGELOG.md)\n[![Clases](https://img.shields.io/badge/clases-197%20%C2%B7%209%20partes-7c5cff?style=for-the-badge)](classes/README.md)\n[![Parte 0](https://img.shields.io/badge/Parte%200-46%2F46%20completa%20%E2%9C%A8-3fb950?style=for-the-badge)](classes/parte-0-prerrequisitos/README.md)\n[![Estado](https://img.shields.io/badge/Partes%201--8-en%20desarrollo-f59e0b?style=for-the-badge)](ROADMAP.md)\n[![License](https://img.shields.io/badge/license-MIT-3fb950?style=for-the-badge)](LICENSE)\n\n[![Python](https://img.shields.io/badge/Python-3.10%20%7C%203.11%20%7C%203.12-3776AB?style=flat-square\u0026logo=python\u0026logoColor=white)](https://www.python.org/)\n[![Jupyter](https://img.shields.io/badge/Jupyter-Notebook-F37626?style=flat-square\u0026logo=jupyter\u0026logoColor=white)](https://jupyter.org/)\n[![Flask](https://img.shields.io/badge/Flask-3.x-000000?style=flat-square\u0026logo=flask\u0026logoColor=white)](https://flask.palletsprojects.com/)\n[![pandas](https://img.shields.io/badge/pandas-2.x-150458?style=flat-square\u0026logo=pandas\u0026logoColor=white)](https://pandas.pydata.org/)\n[![scikit--learn](https://img.shields.io/badge/scikit--learn-1.4-F7931E?style=flat-square\u0026logo=scikit-learn\u0026logoColor=white)](https://scikit-learn.org/)\n[![Docker](https://img.shields.io/badge/Docker-ready-2496ED?style=flat-square\u0026logo=docker\u0026logoColor=white)](Dockerfile)\n[![Windows](https://img.shields.io/badge/Windows-Desktop%20App-0078D6?style=flat-square\u0026logo=windows\u0026logoColor=white)](docs/BUILD_INSTALLER.md)\n[![Android](https://img.shields.io/badge/Android-Expo-3DDC84?style=flat-square\u0026logo=android\u0026logoColor=white)](mobile/)\n\n[📚 Índice de clases](classes/README.md) · [📖 Syllabus](docs/syllabus.md) · [🏗️ Arquitectura](docs/ARQUITECTURA_PRODUCTO.md) · [🎯 Evaluación](docs/GUIA_EVALUACION.md)\n\n\u003c/div\u003e\n\n---\n\nIntegra currículo modular extenso, laboratorio interactivo local, portal del alumno, app de escritorio nativa para Windows y app Android.\n\n📖 **¿Qué significa \"pauta derivada\"?** Cada parte del temario sigue explícitamente la secuencia y los énfasis de cinco libros referentes:\n\n- 🧠 **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)\n- 📊 **VanderPlas** ([*Python Data Science Handbook*](https://jakevdp.github.io/PythonDataScienceHandbook/)) → parte 0 (NumPy, pandas, matplotlib)\n- 🏭 **Huyen** ([*Designing ML Systems*](https://www.oreilly.com/library/view/designing-machine-learning/9781098107956/)) → parte 4 (MLOps en producción)\n- 📈 **ISLP** ([*Statistical Learning with Python*](https://www.statlearning.com/)) → parte 3 (estadística inferencial) + rigor matemático de la parte 1\n- ⚖️ **Barocas/Hardt/Narayanan** ([*Fairness and ML*](https://fairmlbook.org/)) → parte 7 (ética, fairness, privacidad)\n\n\u003e Detalle completo (qué aporta cada uno, cómo se adapta) en [docs/syllabus.md § Fuentes y pauta](docs/syllabus.md#-fuentes-y-pauta).\n\n\u003e 💡 **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.\n\n---\n\n## 📊 Estado actual del producto\n\n| 🎯 Aspecto | Estado |\n|---|---|\n| 🏷️ **Versión** | `v2.2.0` |\n| 📚 **Clases** | 197 en 9 partes |\n| 🗂️ **Estructura** | ✅ scaffold de las 197 clases (`README.md` + `notebook.ipynb`) |\n| ✍️ **Contenido pedagógico** | 🟢 **Parte 0 (46 clases) — completa y ampliada** con Definiciones · Errores comunes · FAQ · ⏳ Partes 1-8 en desarrollo |\n| 🧭 **Descubribilidad Pages** | ✅ tabla de contenidos automática + badges por clase + banner global de progreso |\n| 🧪 **Laboratorio Flask** | ✅ ejecución Python local, captura de gráficos, guardado de notebooks |\n| 🖥️ **App Windows** | ✅ código operativo · binario pendiente de rebuild (Edge WebView2, sin navegador) |\n| 📱 **App Android** | ✅ código operativo · APK debug (Expo/React Native) |\n| 🛡️ **Postura** | local-first — no internet abierta sin capas adicionales |\n\n### 🗺️ Las 9 partes del currículo\n\nCada parte tiene su **propio README** con narrativa completa: de qué trata, qué problemas resuelve, resultados de aprendizaje, estructura temática y enlaces a las clases.\n\n| # | Parte | Clases | Foco | README |\n|---|---|---:|---|---|\n| 0️⃣ | Prerrequisitos ✅ | 46 | Python aplicado, NumPy, pandas, visualización, SQL, NoSQL, APIs | [📘 leer](classes/parte-0-prerrequisitos/README.md) |\n| 1️⃣ | ML clásico | 43 | Regresión, clasificación, ensembles, no supervisado | [📘 leer](classes/parte-1-machine-learning-clasico/README.md) |\n| 2️⃣ | Deep Learning | 56 | Keras, TF, CNN, RNN, Transformers, RL, despliegue | [📘 leer](classes/parte-2-deep-learning/README.md) |\n| 3️⃣ | Estadística inferencial | 13 | Hipótesis, A/B testing, inferencia causal, Bayes | [📘 leer](classes/parte-3-estadistica-inferencial/README.md) |\n| 4️⃣ | MLOps | 14 | Docker, CI/CD, MLflow, monitoreo, interpretabilidad | [📘 leer](classes/parte-4-mlops/README.md) |\n| 5️⃣ | Ingeniería de datos | 8 | Spark, Airflow, lakehouses, streaming | [📘 leer](classes/parte-5-ingenieria-de-datos/README.md) |\n| 6️⃣ | Recomendadores | 7 | Filtrado colaborativo, factorización, secuenciales | [📘 leer](classes/parte-6-sistemas-de-recomendacion/README.md) |\n| 7️⃣ | Ética, fairness, privacidad | 6 | Sesgo, explicabilidad, marcos normativos | [📘 leer](classes/parte-7-etica-fairness-privacidad/README.md) |\n| 8️⃣ | Capstones | 4 | Proyectos integradores end-to-end | [📘 leer](classes/parte-8-capstones/README.md) |\n\n### 🚧 Trabajo pendiente\n\n- 📝 Rellenar contenido pedagógico de las 197 clases (orden recomendado en [`docs/syllabus.md`](docs/syllabus.md) y [`ROADMAP.md`](ROADMAP.md))\n- 📱 Migrar el contenido embebido del mobile (`mobile/src/data/classes.js`) a la estructura actual\n- 🌐 Migrar el portal `site/` al índice actual\n- 📄 Generar PDFs y PPTX por bloque al madurar el contenido de cada parte\n\n---\n\n## 🧭 Rutas recomendadas según perfil\n\n| 👤 Perfil | 📖 Documento de entrada | 🎯 Qué mirar primero |\n|---|---|---|\n| 🏛️ Institución / evaluador | [docs/GUIA_EVALUACION.md](docs/GUIA_EVALUACION.md) | valor, evidencia y límites reales |\n| 🎯 Reclutador técnico | [RECRUITER.md](RECRUITER.md) | evidencia técnica rápida en 5 minutos |\n| 🏗️ Stakeholder técnico | [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md) | capas, flujos y fronteras |\n| 📦 Producto / maintainer | [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md) | superficies, artefactos y reglas de comunicación |\n| 👩‍🏫 Docente | [docs/herramientas-pedagogicas-de-aula.md](docs/herramientas-pedagogicas-de-aula.md) | mediación, problemas de aula y ritmo |\n| 🎓 Alumno | [docs/student-guide.md](docs/student-guide.md) | uso del curso y expectativas |\n| ⚙️ Operación | [RUNBOOK.md](RUNBOOK.md) | arranque, smoke checks y apagado |\n| 🔐 Seguridad | [SECURITY.md](SECURITY.md) | postura actual y riesgos aceptados |\n\n\u003e Si no sabes por dónde entrar, usa [docs/INDEX.md](docs/INDEX.md).\n\n---\n\n## ⏱️ Cómo leer este repo según tiempo disponible\n\n| ⏰ Tiempo | Secuencia recomendada | 🎯 Resultado esperado |\n|---|---|---|\n| 5 min | `README` → `RECRUITER.md` | evidencia rápida de qué funciona hoy |\n| 15 min | `README` → `docs/GUIA_EVALUACION.md` → `docs/CATALOGO_PRODUCTO.md` | entender superficies, arquitectura y criterio de operación |\n| 30 min | secuencia anterior + `docs/syllabus.md` + `docs/ARQUITECTURA_PRODUCTO.md` | entender el currículo completo, capas y growth path |\n\n\u003e 📚 La documentación está pensada como sistema, no como inventario de archivos.\n\n---\n\n## 🎛️ Superficies del producto\n\n| Superficie | Rol | Estado |\n|---|---|---|\n| 🧪 Laboratorio interactivo (`app/`) | entorno local de clase — notebooks, runner, ejecución Python | ✅ operativo |\n| 🌐 Portal del alumno (`site/`) | punto de entrada oficial para estudiantes | ✅ operativo |\n| 🏛️ Vista institucional (`site/product/`) | presentación visual del producto | ✅ operativa |\n| 📚 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 | 🟢 Parte 0 (46) completa y ampliada · 🟡 Partes 1-8 scaffold operativo, contenido en desarrollo |\n| 🖥️ 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 |\n| 📱 App Android (`mobile/`) | Expo/React Native con integración Google Colab | 🟡 código operativo · contenido pendiente de migración |\n| 📄 PDFs (`docs/pdfs/`) | guías por clase | 🔄 se regeneran por bloques al madurar el contenido |\n| 📊 Presentaciones (`docs/presentaciones/`) | decks `.pptx` por clase | 🔄 se regeneran por bloques al madurar el contenido |\n\nLa fuente de verdad de esta taxonomía vive en [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md).\n\n---\n\n## 📚 Materiales listos para usar\n\n### 🗂️ Currículo (197 clases)\n\n- 🧭 **Índice navegable:** [classes/README.md](classes/README.md)\n- 📖 **Pauta completa:** [docs/syllabus.md](docs/syllabus.md)\n- 📝 Cada clase: `README.md` (ficha) + `notebook.ipynb` (stub). Los materiales PDF/PPTX se regeneran por bloque al madurar el contenido.\n\n### 📄 PDFs de estudio adicionales\n\nPDFs listos para imprimir o compartir. Viven en `docs/pdfs/` y son independientes del flujo de clases.\n\n| 📑 Documento | Descripción |\n|---|---|\n| [guia-estudio-repositorio.pdf](docs/pdfs/guia-estudio-repositorio.pdf) | 🗺️ Ruta de lectura rápida del repo para evaluador o reclutador |\n| [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 |\n\n---\n\n## 🏗️ Arquitectura en una mirada\n\n```mermaid\ngraph LR\n    INST[\"Institución\"] --\u003e PRODUCT[\"site/product/\\nVista institucional\"]\n    ALUM[\"Alumno\"] --\u003e PORTAL[\"site/\\nPortal del alumno\"]\n    ALUM --\u003e MOBILE[\"mobile/\\nApp Android\"]\n    DOC[\"Docente\"] --\u003e LAB[\"app/\\nLaboratorio Flask\"]\n    DOC --\u003e WIN[\"PythonDSProgram.exe\\nApp de escritorio Windows\"]\n\n    PRODUCT --\u003e DOCS[\"docs/\\nDocumentación canónica\"]\n    PORTAL --\u003e DOCS\n    MOBILE --\u003e CLASSES[\"classes/\\n197 clases · 9 partes\"]\n    MOBILE --\u003e COLAB[\"Google Colab\\n(ejecución de código)\"]\n    LAB --\u003e CLASSES\n    LAB --\u003e DATA[\"datasets/\\n6 CSV sintéticos\"]\n    LAB --\u003e NOTEBOOKS[\"app/notebooks/\\n6 labs interactivos\"]\n    LAB --\u003e SAVED[\"app/saved_notebooks/\\nTrabajo del alumno\"]\n    WIN --\u003e LAB\n```\n\nLa arquitectura completa, con flujos y fronteras, está en [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md).\n\n### 🗺️ Mapa del currículo (9 partes · 197 clases)\n\n```mermaid\ngraph TD\n    P0[\"0️⃣ Prerrequisitos\u003cbr/\u003e46 clases\"]:::found\n    P1[\"1️⃣ ML clásico\u003cbr/\u003e43 clases\"]:::ml\n    P2[\"2️⃣ Deep Learning\u003cbr/\u003e56 clases\"]:::dl\n    P3[\"3️⃣ Estadística inferencial\u003cbr/\u003e13 clases\"]:::stats\n    P4[\"4️⃣ MLOps\u003cbr/\u003e14 clases\"]:::ops\n    P5[\"5️⃣ Ingeniería de datos\u003cbr/\u003e8 clases\"]:::data\n    P6[\"6️⃣ Recomendadores\u003cbr/\u003e7 clases\"]:::rec\n    P7[\"7️⃣ Ética, fairness, privacidad\u003cbr/\u003e6 clases\"]:::eth\n    P8[\"8️⃣ Capstones\u003cbr/\u003e4 proyectos\"]:::cap\n\n    P0 --\u003e P1\n    P0 --\u003e P3\n    P1 --\u003e P2\n    P1 --\u003e P4\n    P3 --\u003e P1\n    P2 --\u003e P4\n    P4 --\u003e P5\n    P1 --\u003e P6\n    P2 --\u003e P6\n    P0 --\u003e P7\n    P1 --\u003e P8\n    P2 --\u003e P8\n    P4 --\u003e P8\n\n    classDef found fill:#7c5cff,stroke:#5b3fc7,color:#fff\n    classDef ml fill:#2e8b57,stroke:#1f6f43,color:#fff\n    classDef dl fill:#0ea5e9,stroke:#0369a1,color:#fff\n    classDef stats fill:#f59e0b,stroke:#b45309,color:#fff\n    classDef ops fill:#ef4444,stroke:#b91c1c,color:#fff\n    classDef data fill:#8b5cf6,stroke:#6d28d9,color:#fff\n    classDef rec fill:#ec4899,stroke:#be185d,color:#fff\n    classDef eth fill:#14b8a6,stroke:#0f766e,color:#fff\n    classDef cap fill:#facc15,stroke:#a16207,color:#000\n```\n\n---\n\n## ⚙️ Capacidades actuales\n\n### 📚 Currículo y pedagogía\n\n- **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);\n- 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);\n- cada clase: `README.md` (ficha) + `notebook.ipynb` (stub); materiales adicionales se agregan al madurar;\n- **6 datasets** sintéticos: ventas_tienda, retencion_clientes, soporte_tickets, transporte, estudiantes, comentarios_productos;\n- guías de instructor, metodología, criterios de evaluación y ética de datos.\n\n### 🧪 Laboratorio interactivo\n\n- app Flask con acceso a las 197 clases desde interfaz web (descubrimiento automático por anidamiento);\n- notebooks interactivos precargados con celdas editables y ejecutables;\n- ejecución de código Python por celdas con persistencia de sesión;\n- captura de gráficos matplotlib como PNG inline;\n- guardado de notebooks en JSON local (`app/saved_notebooks/`);\n- endpoints `GET /health` y `GET /ready` para healthchecks.\n\n### 🖥️ App de escritorio Windows\n\n- ventana nativa con Edge WebView2 — **sin abrir el navegador del sistema**;\n- Flask corre internamente en un puerto libre elegido automáticamente;\n- pantalla de carga animada mientras el entorno inicia;\n- portable (ZIP) + instalador (Inno Setup) disponibles;\n- sin dependencias en el PC del usuario final.\n\n### 📱 App Android\n\n- Expo/React Native (pendiente migrar el contenido embebido al índice actual);\n- integración con Google Colab para ejecución de código sin Python local;\n- seguimiento de progreso local con AsyncStorage;\n- APK debug disponible — producción en roadmap.\n\n### 📊 Presentación y distribución de materiales\n\n- 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;\n- landing pública para alumnos en GitHub Pages (`site/`);\n- vista institucional HTML con narrativa de producto (`site/product/`);\n- PDFs adicionales de estudio en `docs/pdfs/`.\n\n---\n\n## 🚀 Inicio rápido\n\n### 🅰️ Opción A — app de escritorio Windows (usuarios finales)\n\nEl 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.\n\nRequiere (al usar el binario): Edge WebView2 Runtime (preinstalado en Windows 10 v2004+ y Windows 11).\n\n### 🅱️ Opción B — modo desarrollo (entorno virtual)\n\n```bash\npython -m venv .venv\n.venv\\Scripts\\activate        # Windows\n# source .venv/bin/activate   # macOS / Linux\npip install -r requirements.txt\npython run_program.py\n```\n\nAbre automáticamente `http://127.0.0.1:8000` en el navegador.\n\n### 🐳 Opción C — Docker local\n\n```bash\ndocker compose up --build\n```\n\n### 🛡️ Opción D — Docker endurecido\n\n```bash\ndocker compose -f docker-compose.prod.yml up -d --build\n```\n\n---\n\n## 📦 Build de distribución\n\n```bash\n# Instala dependencias de build\npip install pywebview pyinstaller\n\n# Genera bundle + ZIP portable + instalador (requiere Inno Setup 6)\nbuild_windows.bat\n```\n\nVer [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) para instrucciones completas.\n\n---\n\n## ✅ Validación y CI/CD\n\n```bash\npytest                   # suite completa\nruff check .             # lint\npython -m bandit -r app  # seguridad estática\n```\n\nWorkflows activos:\n\n| ⚙️ Workflow | Qué cubre |\n|---|---|\n| 🧪 [ci.yml](.github/workflows/ci.yml) | tests, lint, build de contenedor |\n| 🔒 [security.yml](.github/workflows/security.yml) | auditoría de dependencias, SAST |\n| 🚀 [deploy-pages.yml](.github/workflows/deploy-pages.yml) | despliegue de `site/` a GitHub Pages |\n\n---\n\n## 🔐 Seguridad y límites\n\n### 🛡️ Protecciones activas\n\n- ✅ validación de slugs e identificadores (regex, evita path traversal);\n- ✅ límite de payload por request (1 MB);\n- ✅ límite de longitud de código (20 KB);\n- ✅ timeout de ejecución por celda (30 s) + reinicio de sesión;\n- ✅ eviction de sesiones antiguas (100 sesiones máx, TTL 1 hora);\n- ✅ CSP estricto sin dependencias CDN externas;\n- ✅ defaults de arranque a `127.0.0.1`;\n- ✅ nosec justificado para falsos positivos de Bandit en polling loops.\n\n### ⚠️ Límites conocidos\n\n- ❌ no hay autenticación integrada;\n- ❌ no hay sandbox fuerte para código no confiable;\n- ❌ no hay rate limiting de red;\n- ❌ no hay TLS nativo;\n- ❌ el runner es para uso local en aula, no para internet abierta.\n\n\u003e 📖 Ver [SECURITY.md](SECURITY.md) para detalle completo.\n\n---\n\n## 🗺️ Mapa documental\n\n| 📄 Documento | Rol |\n|---|---|\n| 🎯 [RECRUITER.md](RECRUITER.md) | evidencia técnica rápida para evaluadores |\n| 📜 [CHANGELOG.md](CHANGELOG.md) | historial de cambios por versión |\n| 🤝 [CONTRIBUTING.md](CONTRIBUTING.md) | cómo contribuir al proyecto |\n| 🛣️ [ROADMAP.md](ROADMAP.md) | dirección futura del producto |\n| ⚙️ [RUNBOOK.md](RUNBOOK.md) | operación diaria |\n| 🔐 [SECURITY.md](SECURITY.md) | postura de seguridad y límites |\n| 🧭 [docs/INDEX.md](docs/INDEX.md) | índice completo por audiencia y objetivo |\n| 📦 [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md) | fuente de verdad de superficies y artefactos |\n| 🏗️ [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md) | arquitectura funcional con diagramas |\n| ✅ [docs/GUIA_EVALUACION.md](docs/GUIA_EVALUACION.md) | ruta ejecutiva de 10 minutos |\n| 🖥️ [docs/BUILD_INSTALLER.md](docs/BUILD_INSTALLER.md) | cómo generar el instalador Windows |\n| 📱 [docs/MOBILE_APP.md](docs/MOBILE_APP.md) | cómo construir y distribuir la app Android |\n| 🧪 [docs/entorno-interactivo.md](docs/entorno-interactivo.md) | el laboratorio Flask y su funcionamiento |\n| 🧠 [docs/metodologia-docente.md](docs/metodologia-docente.md) | marco pedagógico del producto |\n| 👩‍🏫 [docs/instructor-guide.md](docs/instructor-guide.md) | playbook de ejecución docente |\n| 🎓 [docs/student-guide.md](docs/student-guide.md) | guía de onboarding del alumno |\n| 🚢 [docs/despliegue-seguro-y-operacion.md](docs/despliegue-seguro-y-operacion.md) | CI/CD, Docker y hardening |\n| ☁️ [docs/MIGRACION_AWS.md](docs/MIGRACION_AWS.md) | migración a la nube AWS — arquitectura, costos y paso a paso |\n\n\u003e 🗂️ Las notas internas del maintainer viven en `docs/maintainer/`.\n\n---\n\n## 🎯 Qué es y qué no es este repo\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\" width=\"50%\"\u003e\n\n### ✅ Lo que este repo sí es\n\n- 📚 una base seria de capacitación técnica en Python y Data Science;\n- 🧩 un sistema que integra contenido, práctica interactiva y presentación;\n- 🖥️ una app de escritorio nativa para distribución en aula sin configuración;\n- 🎓 una muestra de criterio pedagógico, operacional y de seguridad;\n- 🌱 una propuesta que puede empezar acotada y crecer sin rehacerse.\n\n\u003c/td\u003e\n\u003ctd valign=\"top\" width=\"50%\"\u003e\n\n### ❌ Lo que este repo no vende\n\n- 🚫 una plataforma multiusuario endurecida para internet abierta;\n- 🚫 una app móvil ya en producción (el código existe pero el APK se reconstruye con el contenido actual);\n- 🚫 una promesa de personalización infinita antes de cerrar condiciones;\n- 🚫 profundidad total en todas las direcciones desde la primera versión.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## 💡 Idea fuerza\n\n\u003e 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.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**¿Te resulta útil? ⭐ Dale una estrella al repo.**\n\n[![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)\n[![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)\n[![Follow](https://img.shields.io/github/followers/vladimiracunadev-create?style=social\u0026label=Follow)](https://github.com/vladimiracunadev-create)\n\nHecho con 🧠 y ☕ por [Vladimir Acuña](https://github.com/vladimiracunadev-create)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvladimiracunadev-create%2Fpython-data-science-program","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvladimiracunadev-create%2Fpython-data-science-program","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvladimiracunadev-create%2Fpython-data-science-program/lists"}