Organizar proyectos de machine learning desde cero puede volverse caótico cuando cada integrante del equipo define su propia estructura. Cookie Cutter resuelve ese problema al permitirte diseñar una plantilla reutilizable que incluye carpetas para datos, código, modelos y documentación, garantizando consistencia y colaboración efectiva en equipos grandes o dispersos.
¿Cómo se estructura un directorio de machine learning con Cookie Cutter?
El punto de partida es definir la arquitectura del proyecto. La plantilla incluye carpetas y archivos clave que cubren todo el ciclo de trabajo en ciencia de datos [0:40]:
- data: almacena los conjuntos de datos del proyecto.
- source (src): contiene el código fuente, como
model.py con código de ejemplo.
- notebooks: organiza los cuadernos de análisis y experimentación.
- models: guarda los modelos entrenados.
- environment.yml: reproduce el entorno virtual con las dependencias exactas.
- requirements.txt: lista las bibliotecas necesarias para la instalación.
- README.md: documenta el proyecto en formato Markdown.
- LICENSE: define los términos legales de uso.
Toda esta estructura vive dentro de una carpeta cuyo nombre se genera dinámicamente gracias al motor de plantillas Jinja. Este motor es muy flexible y permite crear archivos con contenido variable basado en la entrada del usuario [1:18].
¿Qué variables se definen en cookiecutter.json?
El archivo cookiecutter.json es la pieza central. Aquí se especifican las variables que el usuario debe completar al generar un nuevo proyecto [3:06]:
- project_name: nombre del proyecto, con un valor por defecto que se usa si el usuario presiona enter sin escribir nada.
- author_name: nombre del autor, por ejemplo "Carl Cox".
- python_version: versión de Python (3.8, 3.12, según el proyecto).
- license: opción múltiple entre MIT, GPL y Apache.
Cuando defines múltiples opciones como en el caso de la licencia, Cookie Cutter presenta al usuario una lista para seleccionar. Cada valor por defecto actúa como sugerencia, agilizando la creación del proyecto.
¿Cómo se usa la sintaxis de Jinja dentro de los archivos?
La sintaxis de Jinja utiliza dobles llaves {{ cookiecutter.variable }} para insertar valores dinámicos. En el README.md, por ejemplo, el título se genera con {{ cookiecutter.project_name }} y la autoría con {{ cookiecutter.author_name }} [4:26].
Para lógica condicional, como en el archivo de licencia, se emplean bloques de control con {% if %}, {% elif %} y {% endif %} [5:30]:
jinja
{% if cookiecutter.license == "MIT" %}
MIT License
Copyright (c) {{ cookiecutter.author_name }}
...
{% elif cookiecutter.license == "GPL" %}
GPL License
...
{% elif cookiecutter.license == "Apache" %}
Apache License
...
{% endif %}
Un error frecuente es olvidar el signo de porcentaje de cierre o colocar las comillas fuera de posición. Siempre verifica que cada bloque if tenga su correspondiente endif [8:15].
¿Cómo se personaliza el archivo de entorno virtual?
El archivo environment.yml también acepta variables de Jinja. El nombre del entorno se genera con {{ cookiecutter.project_name }} y las dependencias se listan con la indentación correcta [7:30]:
- NumPy.
- Pandas.
- Python con la versión definida por el usuario.
Cuidar la compatibilidad entre la versión de Python y las dependencias es fundamental para evitar conflictos de instalación.
¿Cómo se ejecuta Cookie Cutter desde la terminal?
Antes de ejecutar, la estructura debe quedar clara: el archivo cookiecutter.json se ubica al mismo nivel que la carpeta raíz del template [9:10]. Una buena práctica es agrupar los templates en carpetas individuales, por ejemplo my_ml_template, pensando en que podrías tener múltiples plantillas.
Desde la terminal, el comando es directo [9:50]:
bash
cookiecutter my_ml_template
El sistema solicita cada variable definida en el JSON. Al completarlas, genera automáticamente el directorio con toda la estructura personalizada. Puedes verificar con ls que el nuevo proyecto contiene las mismas carpetas y archivos del template original, pero con los valores que ingresaste.
La recomendación final es subir tu plantilla personalizada a un repositorio en GitHub y compartir el enlace. También considera usar la plantilla de ciencia de datos que Cookie Cutter ofrece por defecto como punto de partida. En la próxima sesión se explorarán los hooks para automatizar tareas dentro de tus proyectos.