Saltar a contenido

Plantilla de proyecto de ciencia de datos

uv Ruff pre-commit security: bandit Checked with mypy pages-build-deployment CI codecov


Una plantilla moderna para proyectos de ciencia de datos con todas las herramientas necesarias para experimentación, desarrollo, pruebas y despliegue. Desde notebooks hasta producción.

✨📚✨ Documentación: https://joserzapata.github.io/data-science-project-template/

Código Fuente: https://github.com/JoseRZapata/data-science-project-template


Características


📁 Crear un Nuevo Proyecto

👍 Recomendaciones

Se recomienda encarecidamente usar gestores para las versiones de Python, dependencias y entornos virtuales.

Este proyecto usa UV, una herramienta extremadamente rápida para reemplazar pip, pip-tools, Pipx, Poetry, Pyenv, twine, virtualenv, y más.

🌟 Revisa cómo configurar tu entorno: https://joserzapata.github.io/data-science-project-template/local_setup/

🍪🥇 Vía Cruft - (recomendado)

instalar cruft
# Instalar cruft en un entorno aislado usando uv

uv tool install cruft

# O instalar con pip

pip install --user cruft # Instalar `cruft` en tu PATH para fácil acceso
crear proyecto
cruft create https://github.com/JoseRZapata/data-science-project-template

luego dentro de la carpeta del proyecto, inicializar git y el entorno uv usando Make:

instalar proyecto
make init_git
make install_env
source .venv/bin/activate

🍪 Vía Cookiecutter

instalar cookiecutter
uv tool install cookiecutter # Instalar cookiecutter en un entorno aislado

# O instalar con pip

pip install --user cookiecutter # Instalar `cookiecutter` en tu PATH para fácil acceso
crear proyecto
cookiecutter gh:JoseRZapata/data-science-project-template

Nota: Cookiecutter usa gh: como abreviatura de https://github.com/

🔗 Vincular un Proyecto Existente

Si el proyecto fue instalado originalmente vía Cookiecutter, primero debes usar Cruft para vincular el proyecto con la plantilla original:

cruft link https://github.com/JoseRZapata/data-science-project-template

Luego:

cruft update

🗃️ Estructura del proyecto

Estructura de carpetas para proyectos de ciencia de datos ¿por qué?

.
├── .code_quality
   ├── mypy.ini                        # configuración de mypy
   └── ruff.toml                       # configuración de ruff
├── .github                             # configuración de github
   ├── actions
      └── python-poetry-env
          └── action.yml              # github action para configurar entorno python
   ├── dependabot.md                   # github action para actualizar dependencias
   ├── pull_request_template.md        # plantilla para pull requests
   └── workflows                       # flujos de trabajo de github actions
       ├── ci.yml                      # ejecutar integración continua (pruebas, pre-commit, etc.)
       ├── dependency_review.yml       # revisión de dependencias
       ├── docs.yml                    # construir documentación (mkdocs)
       └── pre-commit_autoupdate.yml   # actualizar hooks de pre-commit
├── .vscode                             # configuración de vscode
|   ├── extensions.json                 # lista de extensiones recomendadas
|   ├── launch.json                     # configuración de ejecución de vscode
|   └── settings.json                   # configuración de vscode
├── conf                                # carpeta de archivos de configuración
   └── config.yaml                     # archivo principal de configuración
├── data
   ├── 01_raw                          # datos crudos inmutables
   ├── 02_intermediate                 # datos tipados
   ├── 03_primary                      # datos del modelo de dominio
   ├── 04_feature                      # características del modelo
   ├── 05_model_input                  # frecuentemente llamados 'master tables'
   ├── 06_models                       # modelos serializados
   ├── 07_model_output                 # datos generados por ejecuciones del modelo
   ├── 08_reporting                    # reportes, resultados, etc
   └── README.md                       # descripción de la estructura de datos
├── docs                                # documentación de tu proyecto
   ├── index.md                        # página principal de documentación
├── models                              # almacenar modelos finales
├── notebooks
   ├── 1-data                          # extracción y limpieza de datos
   ├── 2-exploration                   # análisis exploratorio de datos (EDA)
   ├── 3-analysis                      # Análisis estadístico, pruebas de hipótesis.
   ├── 4-feat_eng                      # ingeniería de características (creación, selección y transformación.)
   ├── 5-models                        # entrenamiento de modelos, evaluación y ajuste de hiperparámetros.
   ├── 6-interpretation                # interpretación de modelos
   ├── 7-deploy                        # empaquetado de modelos, estrategias de despliegue.
   ├── 8-reports                       # narrativa, resúmenes y conclusiones de análisis.
   ├── notebook_template.ipynb         # plantilla para notebooks
   └── README.md                       # información sobre los notebooks
├── src                                 # código fuente para uso en este proyecto
   ├── README.md                       # descripción de la estructura de src
   ├── tmp_mock.py                     # archivo python de ejemplo
   ├── data                            # extracción, validación, procesamiento, transformación de datos
   ├── model                           # entrenamiento, evaluación, validación, exportación de modelos
   ├── inference                       # predicción, servicio, monitoreo de modelos
   └── pipelines                       # orquestación de pipelines
       ├── feature_pipeline            # transforma datos crudos en características y etiquetas
       ├── training_pipeline           # transforma características y etiquetas en un modelo
       └── inference_pipeline          # toma características y un modelo entrenado para predicciones
├── tests                               # código de pruebas para tu proyecto
   ├── test_mock.py                    # archivo de prueba de ejemplo
   ├── data                            # pruebas para el módulo data
   ├── model                           # pruebas para el módulo model
   ├── inference                       # pruebas para el módulo inference
   └── pipelines                       # pruebas para el módulo pipelines
├── .editorconfig                       # configuración del editor
├── .gitignore                          # archivos a ignorar en git
├── .pre-commit-config.yaml             # configuración para hooks de pre-commit
├── codecov.yml                         # configuración para codecov
├── Makefile                            # comandos útiles para configurar entorno, ejecutar pruebas, etc.
├── mkdocs.yml                          # configuración para documentación mkdocs
├── pyproject.toml                      # archivo de dependencias y configuración del proyecto
├── uv.lock                             # dependencias bloqueadas
└── README.md                           # descripción de tu proyecto

✨ Características y Herramientas

🚀 Estandarización y Automatización del Proyecto

🔨 Automatización del Flujo de Trabajo del Desarrollador

🌱 Paquete Python o Plantilla de Proyecto Renderizado Condicionalmente

🔧 Mantenibilidad

🏷️ Verificación de Tipos y Validación de Datos

  • Verificación estática de tipos con Mypy

✅ 🧪 Pruebas/Cobertura

🚨 Linting

🔍 Calidad de código
🎨 Formateo de código

👷 CI/CD

Actualizaciones automáticas de dependencias
Revisión de dependencias en PR
  • Revisión de dependencias con dependency-review-action, esta acción escanea tus pull requests por cambios de dependencias, y generará un error si se están introduciendo vulnerabilidades o licencias inválidas.
Actualizaciones automáticas de Pre-commit
  • Actualizaciones automáticas con flujo de trabajo de GitHub Actions .github/workflows/pre-commit_autoupdate.yml

🔒 Seguridad

🔏 Pruebas Estáticas de Seguridad de Aplicaciones (SAST)

  • Vulnerabilidades de código con Bandit usando Ruff

⌨️ Accesibilidad

🔨 Herramienta de automatización (Makefile)

Makefile para automatizar la configuración de tu entorno, la instalación de dependencias, la ejecución de pruebas, etc. en la terminal escribe make para ver los comandos disponibles

Target                Descripción
-------------------   ----------------------------------------------------
check                 Ejecutar herramientas de calidad de código con hooks de pre-commit.
docs_test             Probar si la documentación se puede construir sin advertencias o errores
docs_view             Construir y servir la documentación
init_env              Instalar dependencias con uv y activar entorno
init_git              Inicializar repositorio git
install_data_libs     Instalar pandas, scikit-learn, Jupyter, seaborn
pre-commit_update     Actualizar hooks de pre-commit
test                  Probar el código con pytest y cobertura

📝 Documentación del Proyecto

🗃️ Plantillas

Buenas prácticas


Referencias