Blog de Ciencia de Datos
Artículos sobre ciencia de datos aplicada, patrones de programación y aprendizajes construyendo productos analíticos.
- El frontend, la infraestructura y los bugs del último kilómetro
Este artículo describe la implementación de un dashboard de analíticas de YouTube usando React y Recharts. Se centra en los desafíos del despliegue en producción, incluyendo un bug de colisión de nombres en el frontend resuelto renombrando una función. Además, aborda problemas de accesibilidad en componentes Select de Material UI y la importancia de añadir enlaces de navegación para asegurar la visibilidad de nuevas funcionalidades. El lector aprenderá sobre la resolución de errores comunes en el desarrollo frontend y la importancia de la accesibilidad. - El backend: nueve modelos, un ETL idempotente y cinco endpoints
Este artículo técnico detalla la implementación del backend para un DataMart, resolviendo el problema de analizar datos de YouTube. Se utiliza Django para construir nueve modelos de datos, incluyendo tablas raw y dimensionales. Se implementa un ETL idempotente para evitar duplicados al procesar datos de la API de YouTube. El lector aprenderá sobre el diseño de modelos de datos, la creación de ETLs idempotentes y la construcción de endpoints para acceder a los datos procesados. - Antes de escribir código: el diseño del DataMart de YouTube
Este artículo describe el diseño de un DataMart para analizar datos de YouTube Analytics, resolviendo la limitación de la API al permitir el análisis histórico y de la competencia. Se utiliza la YouTube Data API v3, Django con JSONField para la capa raw y un esquema dimensional normalizado para las consultas analíticas. El lector aprenderá sobre la importancia de planificar la cuota de la API, diseñar un ETL idempotente y estructurar un DataMart en capas raw y dimensional antes de escribir el código. - Cómo Rescaté el Chatbot: Reverts, Streaming SSE y Conversaciones Multi-turno
Este artículo relata la depuración de un chatbot que fallaba en producción tras la implementación de conversaciones multi-turno. Se describe cómo un simple revert inicial permitió aislar una serie de problemas subyacentes, desde errores de CORS y health checks mal configurados hasta el manejo incorrecto de streams SSE y la respuesta de la API de Vertex AI. El lector aprenderá sobre estrategias de depuración en producción, la importancia de un buen manejo de errores en streams y cómo solucionar problemas comunes al integrar APIs de LLMs. - Búsqueda Híbrida en RAG: BM25, HyDE, Query Expansion y Rank Fusion
Este artículo técnico aborda las limitaciones de la búsqueda puramente vectorial en sistemas RAG, especialmente con keywords exactas, entidades raras y preguntas cortas. Presenta una solución de búsqueda híbrida que combina la búsqueda semántica con la búsqueda léxica, utilizando técnicas como BM25 para la recuperación de información basada en frecuencias de términos. Explica la implementación de BM25 en Python con la librería `rank-bm25` y cómo se integra en un índice personalizado. Además, introduce Reciprocal Rank Fusion (RRF) para combinar los resultados de diferentes métodos de ranking, m - SEO para LLMs: llms.txt y Atom Feed en un portafolio React + Django
Este artículo técnico aborda la optimización SEO para LLMs (Large Language Models) como ChatGPT y Gemini. Explica cómo mejorar la visibilidad de un sitio web ante estos sistemas utilizando dos estrategias clave: la implementación del archivo `llms.txt`, un estándar emergente para comunicar la estructura del sitio a los LLMs, y la creación de un feed Atom dinámico servido desde un backend Django. El lector aprenderá a generar estos elementos en un portafolio React, aprovechando el pre-renderizado HTML, Schema.org y sitemaps existentes. - sync_dev_posts: Creación Automática de Posts y Metadata con Gemini
Este artículo describe la actualización del comando `sync_dev_posts` para sincronizar posts de desarrollo desde archivos Markdown a una base de datos. La nueva versión elimina el encabezado duplicado, usa el slug de la categoría para la estructura de carpetas y crea posts automáticamente si no existen. Además, integra Gemini para generar excerpts y tags automáticamente, mejorando la metadata y la organización del contenido. Aprenderás sobre manipulación de archivos, interacción con bases de datos y el uso de Gemini para tareas de generación de contenido. - Pipeline Multi-Ambiente: Staging Antes de Producción
Este artículo aborda el problema de desplegar cambios directamente a producción, introduciendo un entorno de staging para pruebas previas. Se implementa un pipeline CI/CD multi-ambiente con GitHub Actions y Cloud Run, gestionando las diferencias de configuración entre staging y producción. El lector aprenderá a configurar un workflow para desplegar a múltiples entornos, obtener dinámicamente URLs de servicios en Cloud Run y configurar CORS dinámicamente. - De GitHub Copilot a Claude Code: Automatizando la Documentación del Proyecto
Este artículo describe cómo automatizar la documentación de un proyecto usando Claude Code, explorando sus ventajas sobre GitHub Copilot. Se introduce el archivo `CLAUDE.md` para proporcionar contexto persistente al modelo, mejorando la comprensión del proyecto. Se detalla la creación de un management command de Django, `sync_dev_posts`, para sincronizar archivos `.md` con la base de datos y corregir automáticamente los links de navegación en los posts. Aprenderás a usar LLMs para automatizar tareas de documentación y mantener la consistencia entre el código y el contenido del blog. - Bugs de Producción: Cold Start, el Cuerpo Vacío del SPA y la configuración de nginx
Este artículo técnico aborda el problema del "cold start" en una aplicación SPA (Single Page Application) desplegada en Cloud Run, donde la primera carga tras un período de inactividad es excesivamente lenta. Se identifican tres causas principales: el escalado a cero de Cloud Run, el bloqueo del renderizado por una llamada a la API y la falta de un mecanismo de "warm-up". Se implementan soluciones como mantener una instancia activa en Cloud Run, desacoplar el contenido estático del estado de carga y usar `--cpu-boost`. Aprenderás a optimizar el rendimiento de tu SPA y mejorar la experiencia de - Cinco Bugs en Cadena: Una Noche Arreglando el Admin de Django en Producción
Este artículo técnico detalla la resolución de cinco bugs críticos encontrados en el panel de administración de Django en un entorno de producción. El primer bug, un error 503, se debió a una señal sincrónica que bloqueaba Gunicorn al interactuar con Vertex AI. La solución implicó el uso de `transaction.on_commit()` y hilos daemon. El segundo bug, también un error 503, fue causado por un fallo en la verificación CSRF debido a un problema de parsing en GitHub Actions. Aprenderás sobre el manejo de señales en Django, la configuración de Gunicorn y la depuración de errores en entornos de producc - Analytics de Comportamiento: Entendiendo Cómo Navegan los Usuarios Mi Portafolio
Este artículo técnico te guía en la implementación de analytics de comportamiento en tu portafolio web, desde lo básico hasta lo avanzado. Aprenderás a usar Google Analytics 4 (GA4) para métricas de página y eventos personalizados con `react-ga4` en React. Profundizarás con heatmaps y grabaciones de sesión usando Microsoft Clarity para entender la experiencia del usuario. Finalmente, se introduce PostHog para un análisis de producto completo, permitiéndote optimizar la interacción y el rendimiento de tu portafolio. - Por Qué Implementé Tests Automáticos en Mi Portafolio (Django + React)
Este artículo explica la implementación de tests automáticos en un portafolio personal desarrollado con Django y React. Se detalla cómo se utilizan herramientas como `django.test`, `rest_framework.test`, Jest y `@testing-library/react` para asegurar la calidad del código tanto en el backend como en el frontend. Se describe la arquitectura de testing, integrada en el pipeline de GitHub Actions, garantizando que ningún código llegue a producción sin pasar las pruebas. El lector aprenderá sobre las estrategias de testing para modelos, APIs y componentes, así como el mockeo de servicios externos. - Conectar un Formulario de Contacto con Gmail en Django + React
Este artículo técnico explica cómo conectar un formulario de contacto creado con React a Gmail utilizando Django. Se detalla la configuración de Django para enviar correos electrónicos a través de SMTP de Gmail, incluyendo la creación de una App Password para mayor seguridad. Aprenderás a configurar las variables de entorno necesarias, a implementar una vista en Django que envíe el correo electrónico al recibir un nuevo mensaje del formulario y a manejar errores en caso de que la configuración sea incorrecta. El flujo es sincrónico, ideal para sitios de bajo tráfico. - Dominio Propio en Cloud Run: hectorgarrido.cl Paso a Paso
Este artículo detalla el proceso para configurar un dominio propio (`hectorgarrido.cl`) en Cloud Run, desde la compra del dominio en NIC Chile hasta la configuración del DNS. Aprenderás a crear una zona administrada en Cloud DNS, mapear el dominio a tu servicio de Cloud Run y actualizar los nameservers en el registrador del dominio. Se utiliza la herramienta `gcloud` para interactuar con Google Cloud y se explica la arquitectura DNS involucrada, permitiendo a los lectores tener control total sobre sus dominios y una integración fluida con Cloud Run. - De Blog Personal a Portafolio Profesional: Por Qué y Cómo
Este artículo aborda la transformación de un blog personal en un portafolio profesional enfocado en data science y machine learning. Se describe cómo reestructurar la página principal (Home.js) para destacar habilidades, proyectos y experiencia relevante para reclutadores. Se discuten decisiones de diseño como la creación de una página `/projects` dedicada y la selección de proyectos clave. El lector aprenderá a priorizar la información, implementar un "hero section" con métricas verificables y mostrar un stack tecnológico visible, utilizando React y componentes MUI. - data.table: El Motor Oculto Detrás de un Pipeline ETL Rápido
¿Cómo pasar de 8 minutos a menos de 2 en un pipeline de datos con 171 hojas de Excel? En este post, analizo la migración crítica del proyecto manageDW desde dplyr hacia data.table. Exploro por qué la manipulación in-place y la gestión eficiente de memoria permitieron procesar 2 millones de filas reduciendo el consumo de RAM de 4 GB a solo 800 MB. Una comparativa técnica sobre cuándo priorizar la legibilidad de la "gramática de datos" frente al rendimiento bruto en entornos de producción. - Random Forest + Raking: Cómo Estimar Datos Faltantes Respetando Totales Conocidos
¿Cómo lidiar con los datos censurados por confidencialidad en las estadísticas públicas? El SII de Chile utiliza asteriscos para proteger la privacidad en comunas con pocas empresas, rompiendo la coherencia jerárquica de los datos. En este post, exploramos cómo el proyecto manageDW resuelve este problema combinando la potencia predictiva de Random Forest con el rigor matemático del Iterative Proportional Fitting (IPF). Descubre cómo este algoritmo de 80 años de historia permite imputar valores faltantes asegurando que las sumas de las comunas coincidan exactamente con los totales provinciales y regionales. - Cómo Desplegar una App Shiny en la Nube con Neon y Cloud Run
De Localhost al Mundo: Desplegando Shiny con Docker, Cloud Run y Neon.
¿Cómo pasar un dashboard de R/Shiny de localhost a una URL pública con costo casi cero? En esta guía técnica de la v0.3.0, detallo la arquitectura serverless ideal para proyectos de datos: el uso de Neon para PostgreSQL escalable a cero, la contenedorización con Docker (optimizada para geo-dependencias) y el despliegue automatizado mediante GitHub Actions en Google Cloud Run. Una solución profesional para evitar los límites de shinyapps.io y la administración de servidores VPS. - ¿Qué es un Esquema de Estrella? Modelado Dimensional para Datamarts Analíticos
De archivos Excel caóticos a un Data Mart profesional. Acompaña el proceso técnico de transformar los datos abiertos del SII (2005-2023) mediante el modelo dimensional de Ralph Kimball. Descubre cómo un Star Schema en PostgreSQL permite resolver jerarquías geográficas complejas, gestionar datos imputados por algoritmos y convertir consultas imposibles en SQL simple y eficiente. Una guía práctica sobre ingeniería de datos, normalización vs. desnormalización y el valor de la idempotencia en pipelines ETL.