Organización del proyecto#

  • Última modificación: Mayo 14, 2022

  • Los notebooks de jupyter promueven el desorden.

  • Los notebooks deben ser usados para la parte explicativa, no para desarrollar código.

  • Los notebooks deben estar estructurados como los módulos. Tienen un fin específico, tienen un orden de lectura y son primariamente para documentar decisiones.

  • Todo lo demás debe almacenarse en archivos py, md, etc.

Cookiecutter#

https://github.com/drivendata/cookiecutter-data-science

├── LICENSE
│
├── Makefile                   <- Makefile with commands like `make data` or
│                                 `make train`
│
├── README.md                  <- The top-level README for developers using this
└                                 project.
├── data/
│   ├── external/              <- Data from third party sources.
│   ├── interim/               <- Intermediate data that has been transformed.
│   ├── processed/             <- The final, canonical data sets for modeling.
│   └── raw/                   <- The original, immutable data dump.
│
├── docs/                      <- A default Sphinx project; see sphinx-doc.org for
│                                 details
│
├── models/                    <- Trained and serialized models, model predictions,
│                                 or model summaries
│
├── notebooks/                 <- Jupyter notebooks. Naming convention is a number
│                                 (for ordering),the creator's initials, and a
│                                 short `-` delimited description, e.g.
│                                 `1.0-jqp-initial-data-exploration`.
│
├── references/                <- Data dictionaries, manuals, and all other
│                                 explanatory materials.
│
├── reports/                   <- Generated analysis as HTML, PDF, LaTeX, etc.
│   └── figures                <- Generated graphics and figures to be used in
│                                 reporting
│
├── requirements.txt           <- The requirements file for reproducing the analysis
│                                 environment, e.g. generated with
│                                 `pip freeze > requirements.txt`
│
├── setup.py                   <- makes project pip installable (`pip install -e .`)
│                                 so src can be imported
│
└── src/                       <- Source code for use in this project.
    │
    ├── __init__.py            <- Makes src a Python module
    │
    ├── data/                  <- Scripts to download or generate data
    │   └── make_dataset.py
    │
    ├── features/              <- Scripts to turn raw data into features for modeling
    │   └── build_features.py
    │
    ├── models/                <- Scripts to train models and then use trained models
    │   │                         to make predictions
    │   ├── predict_model.py
    │   └── train_model.py
    │
    └── visualization/         <- Scripts to create exploratory and results oriented
        │                         visualizations
        └── visualize.py

¿Dónde colocar los tests?#

Opción 1: Un solo archivo de prueba

├── module/
│   ├── lib/
│   │   ├── __init__.py
│   │   └── module.py
│   └── test.py

y en la línea de comando use:

module/ $ python test.py

Opción 2: Muchos archivos de prueba.

├── module/
│   ├── lib/
│   │   ├── __init__.py
│   │   └── module.py
│   │
│   └── tests/
│       ├── test_module.py
│       └── test_module_function.py
# test_module.py

import unittest
from lib import module

class TestModule(unittest.TestCase):
    def test_module(self):
        pass

if __name__ == '__main__':
    unittest.main()
# In top-level /module/ folder
python -m tests.test_module
python -m tests.test_module_function

Use unittest discovery

├── module/
│   ├── lib/
│   │   ├── __init__.py
│   │   └── module.py
│   │
│   └── tests/
│       ├── __init__.py              <-- indica que es un módulo
│       ├── test_module.py
│       └── test_module_function.py
# In top-level /module/ folder

# -s, --start-directory (default current directory)
# -p, --pattern (default test*.py)

$ python -m unittest discover

¿Dónde colocar las pipelines?#

?

¿Dónde colocar el código para orquestación?#

?