Configure seus projetos de ciência de dados com Hydra

6.1. Configure seus projetos de ciência de dados com Hydra#

6.1.1. Introdução#

Hydra é uma ferramenta simples para gerenciar configurações complexas em Python. Para instalar o Hydra, digite:

pip install hydra-core

Se estiver usando o Poetry, então digite:

poetry add hydra-core

O vídeo abaixo mostra alguns recursos simples do Hydra.

Imagine que seu arquivo de configuração YAML seja assim:

process:
  keep_columns:
      - Income
      - Recency
      - NumWebVisitsMonth
      - Complain
      - age
      - total_purchases
      - enrollment_years
      - family_size

  remove_outliers_threshold:
    age: 90
    Income: 600000

Para acessar a lista em process.keep_columns no arquivo de configuração, basta adicionar o decorator @hydra.main à função que usa a configuração:

import hydra
from omegaconf import DictConfig, OmegaConf


@hydra.main(config_path="../config", config_name="main")
def process_data(config: DictConfig):

    print(config.process.keep_columns)

process_data()

Saída:

['Income', 'Recency', 'NumWebVisitsMonth', 'Complain', 'age', 'total_purchases', 'enrollment_years', 'family_size']

6.1.2. Group Configuration Files#

Imagine a estrutura do seu diretório config assim:

config
├── main.yaml
└── process
    ├── process_1.yaml
    ├── process_2.yaml
    ├── process_3.yaml
    └── process_4.yaml

Cada arquivo tem valores diferentes para os mesmos parâmetros. Você pode definir os parâmetros no arquivo process_2.yaml como padrão adicionando o seguinte a main.yaml:

defaults:
  - process: process_2
  - _self_

Agora os parâmetros em main.yaml são mesclados com os parâmetros em process_2.yaml.

Executando o arquivo print_config.py:

python print_config.py

Deve imprimir:

# Do process_2.yaml
process:
  keep_columns:
  - Income
  - Recency
  - NumWebVisitsMonth
  - Complain
  - age
  - total_purchases
  - enrollment_years
  - family_size
  remove_outliers_threshold:
    age: 90
    Income: 600000
  family_size:
    Married: 2
    Together: 2
    Absurd: 1
    Widow: 1
    YOLO: 1
    Divorced: 1
    Single: 1
    Alone: 1

# Do main.yaml
raw_data:
  path: data/raw/marketing_campaign.csv
intermediate:
  dir: data/intermediate
  name: scale_features.csv
  path: ${intermediate.dir}/${intermediate.name}
flow: all
image:
  kmeans: image/elbow.png
  clusters: image/cluster.png

6.1.3. Sobrescrever Parâmetros Padrão#

HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/t9hwWxBnU0o?start=167" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>')

Você também pode substituir os parâmetros padrão na linha de comando. Por exemplo, para substituir process_2 por process_1, execute o seguinte:

python print_config.py process=process_1

A saída deve ser a combinação de todos os parâmetros em main.yaml e em process_1.yaml:

# Do process_1.yaml
process:
  keep_columns:
  - Income
  - Recency
  - NumWebVisitsMonth
  - AcceptedCmp3
  - AcceptedCmp4
  - AcceptedCmp5
  - AcceptedCmp1
  - AcceptedCmp2
  - Complain
  - Response
  - age
  - total_purchases
  - enrollment_years
  - family_size
  remove_outliers_threshold:
    age: 90
    Income: 600000
  family_size:
    Married: 2
    Together: 2
    Absurd: 1
    Widow: 1
    YOLO: 1
    Divorced: 1
    Single: 1
    Alone: 1
    
# Do main.yaml
raw_data:
  path: data/raw/marketing_campaign.csv
intermediate:
  dir: data/intermediate
  name: scale_features.csv
  path: ${intermediate.dir}/${intermediate.name}
flow: all
image:
  kmeans: image/elbow.png
  clusters: image/cluster.png