Resumen
El episodio 29 de enCoders presenta Snakemake, una herramienta de gestión de flujos de trabajo para construir pipelines de análisis de datos bajo la lógica input → script → output. Cris explica su instalación (vía conda, en Linux o WSL) y la recorre con un ejemplo introductorio tipo "Hello World" y otro con el dataset Iris (obtención de datos, split train/test, entrenamiento con random forest y métrica de performance). Se destaca que Snakemake construye un DAG, ejecuta en paralelo según los cores disponibles y solo re-ejecuta lo que cambió (por dependencias o por modificación del script), y que no ata el código a la herramienta, a diferencia de Kedro. Se compara con Kedro: Snakemake es más simple y flexible, aunque no tiene un catálogo de datos nativo (se puede imitar con un archivo de configuración). Hay una discusión sobre si la flexibilidad (usar código Python dentro del Snakefile) incentiva malas prácticas. La conclusión general es que es una buena herramienta, simple y fácil de depurar, para productivizar procesos.
Capítulos
- 00:00IntroSe presenta el episodio 29. Uno de los conductores cuenta su experiencia de depurar un modelo heredado de una consultora, con mucho dolor de debugging línea por línea. Se anuncia que Cris mostrará una presentación y ejemplos de Snakemake.
- 03:15Pipelines de datosUn proyecto analítico es un flujo donde el output de un script es el input del siguiente. Se critica enseñar todo en un solo Jupyter Notebook, se habla de los trabajos "one shot" que terminan productivizándose y se cuenta la experiencia con Kedro, que no termina de convencer. También se plantea la duda de qué significa "disponibilizar" un modelo (ONNX, pickle, H2O) sin el preprocesamiento.
- 14:06¿Por qué seguir este esquema?Se argumenta que un flujo simple facilita comunicar el proyecto, revisarlo, encontrar errores ("garbage in, garbage out") y colaborar, sobre todo porque los data scientists no son ingenieros de software.
- 14:53Bentajas de Snakemake y cómo se veSe usa mucho en bioinformática y se actualiza constantemente. Ahorra tiempo, reduce errores y no genera dependencia de la herramienta, a diferencia de Kedro, de modo que se podría migrar a Airflow. Se muestra un DAG de un caso real: varias fuentes, tablón maestro con left joins, ajustes, selección de variables y clasificador.
- 18:30InstalaciónRequiere Linux o WSL en Windows. Se instala con Miniconda y un ambiente conda para Snakemake. Hay una discusión sobre Conda (que limita paquetes por seguridad) frente a pip, y sobre por qué Snakemake necesita conda aunque el proyecto use un virtualenv de Python aparte.
- 26:55Ejemplo introductorioLas reglas definen input, output y comando de shell, y Snakemake valida que el output se genere. Se muestra `snakemake -c1` (cores), la regla Hello World, el uso de `echo` y la redirección a archivo, la detección de cambios en inputs o script para re-ejecutar, y el uso de parámetros en una regla.
- 46:04MemesSe comentan memes sobre llamar "pipeline" a scripts de Python sueltos y sobre ejecución paralela. Se explica que los scripts propios no escalan bien ni saben qué ya se ejecutó. Cris cuenta que lo usa en un proyecto con un compañero y que le ahorra preguntar qué cambió.
- 52:26Catálogo de datosMati echa de menos el catálogo de Kedro, que obliga a declarar inputs y outputs. Cris responde que en Snakemake se puede usar un archivo de configuración con todas las rutas, aunque no lee los formatos automáticamente como el catálogo. Mati valora que aquí el script casi no cambia, a diferencia de Kedro.
- 58:03DAG del ejemploSe explica por qué el grafo es acíclico dirigido: un flujo tiene inicio y fin, aunque dentro puede haber subprocesos con bucles, como el entrenamiento de modelos. Se presenta el ejemplo con el dataset Iris: formateo, split train/test, entrenamiento y performance.
- 01:04:40Analizando el pipeline.smkSe resume el tema hasta ahora y se recorre el Snakefile del ejemplo Iris: regla `get` (script como input, feather como output), uso del Python del virtualenv, y `--snakefile` para un archivo `.smk` en otra carpeta. Se explica cómo se infiere la dependencia entre reglas, la ventaja de no hardcodear rutas y que `--forceall` fuerza la ejecución completa; el resultado final fue un performance de 1.0.
- 01:22:29Discusión sobre malas prácticasDebate sobre si la flexibilidad (importar pandas en el Snakefile, ejecutar una regla para una lista de meses en paralelo) incentiva malas prácticas. Cris la defiende como parte de la funcionalidad y Mati prefiere hacerlo en un script previo. Todo se toma con humor.
- 01:29:45CierreResumen de que Snakemake permite productivizar procesos, reejecuta solo lo necesario y es flexible, simple y fácil de depurar. No destruye el código, a diferencia de otras herramientas. Se anuncia que la próxima semana se hablará de herramientas de visualización y dashboards (Power BI, Tableau), junto con avisos del Discord y del canal de YouTube.