Skip to main content

Biblioteca para mineração de dados e aprendizado de máquina com fluxo end-to-end.

Project description

DataKhanon — Ferramentas para Pré-Processamento, Visualização e Modelagem de Dados

PyPI version License: MIT Build Status

Python pandas scikit-learn matplotlib plotly shap umap-learn


Descrição

DataKhanon é uma biblioteca Python para construção de pipelines reprodutíveis de ciência de dados. Integra funcionalidades para pré-processamento (limpeza, imputação, codificação, engenharia/seleção de features), visualização / EDA / explainability (plotagem estática e interativa, relatórios HTML, integração SHAP/UMAP) e modelagem / experimentação (wrappers, treinadores, AutoTrainer, persistência de artefatos). O objetivo é facilitar a transição entre protótipo, CI e produção mantendo artefatos auditáveis (preprocessor.joblib, schema.json, data_health_report.html, model/*.joblib, summary.json).


Recursos principais:

  • Normalização de schema (nomes e tipos) e remoção baseada em missingness.
  • Imputação por tipo (numérico / categórico) com opções simples e iterativas.
  • Codificações: One-Hot, Ordinal e Target (com mapeamento persistente).
  • Engenharia de features: escalonadores, VarianceThreshold, SelectKBest, seleção por importância de modelo.
  • Orquestrador datakhanon.preprocess.Preprocessor — interface fit/transform/save/load.
  • Geração de relatórios de saúde de dados (data_health_report.html) e sumários JSON.
  • Visualizações estáticas (matplotlib/seaborn) e interativas (Plotly/Bokeh) com fallback.
  • Explainability com SHAP e projeções UMAP (quando instalados).
  • datakhanon.model.AutoTrainer — CV sobre candidatos, seleção do melhor modelo e export de artefatos.
  • quick_experiment_from_csv — atalho end-to-end: CSV → EDA → Preprocess → Treino → Artefatos + summary.json.

Instalação

Requisitos mínimos: Python ≥ 3.9.

Instalação básica:

pip install datakhanon

Instalação com extras (EDA / interactive / explainability):

pip install "datakhanon[viz,interactive,explainer]"

Recomenda-se utilizar ambiente virtual (venv / conda).


Quickstart — 3 passos (exemplo mínimo)

import pandas as pd
from datakhanon.preprocess import Preprocessor
from datakhanon.visualize import quick_eda
from datakhanon.model import AutoTrainer

# 1. carregar dados
df = pd.read_csv("examples/credit_dataset_2000.csv")
y = (df["loan_status"] == "Default").astype(int)

# 2. inspeção rápida
quick_eda(df, output_dir="artifacts/eda", target=y)

# 3. preprocess + treino
pp = Preprocessor(categorical_columns=["purpose","housing"],
                  imputer_config={"num_strategy":"median","cat_strategy":"most_frequent"},
                  encoder_config={"ohe":{"drop":"first"}},
                  feature_engineer_config={"scaler":"standard","select_k":20})
X = pp.fit_transform(df, y=y)
pp.save("artifacts/preprocessor.joblib")

trainer = AutoTrainer(output_dir="artifacts/model", cv=3, candidates=["rf","lr","xgb"])
res = trainer.fit(X, y)
print(res["metrics"])

quick_experiment_from_csv — documentação completa (copy-paste)

Assinatura (exemplo):

quick_experiment_from_csv(
    csv_path: str,
    target_col: Optional[str] = None,
    out_dir: str = "outputs/quick_experiment",
    preprocess_config: Optional[dict] = None,
    trainer_config: Optional[dict] = None,
    run_eda: bool = True,
    sample_predictions: int = 10,
    random_state: int = 42,
    overwrite: bool = False
) -> dict

Descrição: atalho que executa, de forma repetível, o pipeline completo: leitura do CSV, (opcional) EDA via datakhanon.visualize.quick_eda, pré-processamento com datakhanon.preprocess.Preprocessor (fit e persistência), treinamento e seleção por datakhanon.model.AutoTrainer, export de artefatos e construção de summary.json.

Parâmetros importantes:

  • csv_path: caminho para o arquivo CSV de entrada.
  • target_col: nome da coluna alvo (se None, tentativa de autodetecção).
  • out_dir: diretório de saída para todos os artefatos.
  • preprocess_config: dicionário com parâmetros para Preprocessor.
  • trainer_config: dicionário com parâmetros para AutoTrainer (candidates, cv, scoring, etc.).
  • run_eda: se True, gera relatório EDA.
  • sample_predictions: número de linhas de predição exemplificativa a salvar.

Fluxo executado internamente (resumido):

  1. valida csv_path e carrega pandas DataFrame.
  2. detecta target_col ou usa o fornecido.
  3. gera EDA (se run_eda=True).
  4. inicializa e executa datakhanon.preprocess.Preprocessor.fit_transform; salva preprocessor.joblib e schema.json.
  5. inicializa datakhanon.model.AutoTrainer com trainer_config, executa CV e seleciona melhor candidato; salva best_model.joblib, best_model_spec.json, candidates_cv_results.csv e metrics_aggregated.json.
  6. salva predictions/sample_predictions.csv com id, y_true, y_pred, y_score.
  7. monta e salva summary.json (retornado também como dict em memória).

Saída em disco (padrão):

out_dir/
├─ preprocessor/preprocessor.joblib
├─ schema.json
├─ eda/data_health_report.html
├─ eda/eda_summary.json
├─ model/best_model.joblib
├─ model/best_model_spec.json
├─ model/candidates_cv_results.csv
├─ model/metrics_aggregated.json
├─ predictions/sample_predictions.csv
├─ logs/run.log
└─ summary.json

Exemplo de uso copy-paste:

from datakhanon.model.experiment import quick_experiment_from_csv

summary = quick_experiment_from_csv(
    csv_path="examples/credit_dataset_2000.csv",
    target_col="loan_status",
    out_dir="outputs/credit_exp1",
    preprocess_config={
        "categorical_columns":["purpose","housing"],
        "imputer_config":{"num_strategy":"median","cat_strategy":"most_frequent"},
        "encoder_config":{"ohe":{"drop":"first"}},
        "feature_engineer_config":{"scaler":"standard","select_k":20}
    },
    trainer_config={
        "cv": 3,
        "candidates": ["rf","xgb","lr"],
        "scoring": "f1"
    },
    run_eda=True,
    sample_predictions=10,
    random_state=42,
    overwrite=True
)

# 'summary' é um dict Python equivalente ao summary.json salvo.
print(summary["training"]["best_model_name"])
print("EDA salvo em:", summary["paths"]["eda_report"])

Formato de summary.json (exemplo resumido):

{
  "config": { "csv_path": "examples/credit_dataset_2000.csv", "target_col": "loan_status", "trainer_config": {...} },
  "data": { "n_rows": 2000, "n_cols": 45, "class_balance": {"NoDefault": 0.84, "Default": 0.16} },
  "paths": { "preprocessor": "preprocessor/preprocessor.joblib", "schema": "schema.json", "eda_report": "eda/data_health_report.html", "model_dir": "model/" },
  "training": { "best_model_name": "RandomForest", "best_model_path": "model/best_model.joblib", "metrics": {"f1": {"mean":0.701,"std":0.028}, "roc_auc": {"mean":0.812,"std":0.014}} },
  "predictions": { "sample_predictions_path": "predictions/sample_predictions.csv" },
  "run_metadata": { "run_id": "credit_exp1_20251129T150312", "created_at": "2025-11-29T15:03:12Z" }
}

Exemplo de linhas esperadas em candidates_cv_results.csv:

candidate,fold,metric_name,metric_value,train_time_s,params
RandomForest,0,f1,0.694,12.3,"{'n_estimators':200}"
RandomForest,1,f1,0.702,11.8,"{'n_estimators':200}"
XGBoost,0,f1,0.681,14.5,"{'max_depth':6}"
...

Artefatos gerados (resumo rápido e como usá-los)

  • preprocessor.joblib — carregar em produção com datakhanon.preprocess.Preprocessor.load(...) e aplicar transform(df_new).
  • schema.json — verificar retained_columns e dtypes antes de scoring.
  • data_health_report.html — relatório auto-contido para auditoria.
  • best_model.joblib + best_model_spec.json — carregar com datakhanon.model.load_model(...).
  • summary.json — entrada canónica para integração com CI e dashboards.

Exemplos avançados

Uso em produção — inferência:

from datakhanon.preprocess import Preprocessor
from datakhanon.model.persistence import load_model
import pandas as pd

pp = Preprocessor.load("outputs/credit_exp1/preprocessor/preprocessor.joblib")
model, spec = load_model("outputs/credit_exp1/model/best_model.joblib")

df_new = pd.read_csv("incoming/new_batch.csv")
pp.validate_input(df_new)     # checar schema
X_new = pp.transform(df_new)
preds = model.predict(X_new)

examples/quickstart.py

#!/usr/bin/env python3
"""
examples/quickstart.py
Exemplo mínimo de uso do DataKhanon:
- gera EDA
- treina Preprocessor
- executa AutoTrainer
- imprime resumo (summary)

Uso:
    python examples/quickstart.py
"""

import json
from pathlib import Path
import pandas as pd

# Import (API de alto nível)
from datakhanon.preprocess import Preprocessor
from datakhanon.visualize import quick_eda
from datakhanon.model.experiment import quick_experiment_from_csv
from datakhanon.model import AutoTrainer  # opcional, uso direto

# Ajuste: caminhos
ROOT = Path(__file__).resolve().parents[1]
EXAMPLE_CSV = ROOT / "examples" / "credit_dataset_2000.csv"
OUT_DIR = ROOT / "outputs" / "quickstart_example"

def run_quick_example():
    # 1) Carregar dados
    if not EXAMPLE_CSV.exists():
        raise FileNotFoundError(f"Arquivo de exemplo não encontrado: {EXAMPLE_CSV}")
    df = pd.read_csv(EXAMPLE_CSV)
    # Exemplo: converter label para binário
    if "loan_status" not in df.columns:
        raise KeyError("Coluna 'loan_status' esperada no dataset de exemplo.")
    y = (df["loan_status"] == "Default").astype(int)

    # 2) Quick EDA (gera artifacts/eda)
    print("Gerando EDA rápido...")
    quick_eda(df, output_dir=str(OUT_DIR / "eda"), target=y, use_reporter=True)

    # 3) Executar quick_experiment_from_csv (end-to-end)
    print("Executando quick_experiment_from_csv (treino completo)...")
    summary = quick_experiment_from_csv(
        csv_path=str(EXAMPLE_CSV),
        target_col="loan_status",
        out_dir=str(OUT_DIR),
        preprocess_config={
            "categorical_columns": ["purpose", "housing"],
            "imputer_config": {"num_strategy": "median", "cat_strategy": "most_frequent"},
            "encoder_config": {"ohe": {"drop": "first"}},
            "feature_engineer_config": {"scaler": "standard", "select_k": 20}
        },
        trainer_config={
            "cv": 3,
            "candidates": ["rf", "xgb", "lr"],
            "scoring": "f1"
        },
        run_eda=False,            # já rodamos acima
        sample_predictions=10,
        random_state=42,
        overwrite=True
    )

    # 4) Salvar e imprimir resumo
    OUT_DIR.mkdir(parents=True, exist_ok=True)
    summary_path = OUT_DIR / "summary_inspect.json"
    summary_path.write_text(json.dumps(summary, indent=2, ensure_ascii=False))
    print("Resumo do experimento salvo em:", summary_path)
    print("Melhor modelo:", summary["training"].get("best_model_name"))
    print("EDA report:", summary["paths"].get("eda_report"))
    print("Modelo salvo em:", summary["training"].get("best_model_path"))

if __name__ == "__main__":
    run_quick_example()

Licença e créditos

Licença: MIT. Autor: Vinicius de Souza Santos — Mestrado em Ciências da Computação (UNESP Bauru).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

datakhanon-0.1.0.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

datakhanon-0.1.0-py3-none-any.whl (63.2 kB view details)

Uploaded Python 3

File details

Details for the file datakhanon-0.1.0.tar.gz.

File metadata

  • Download URL: datakhanon-0.1.0.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for datakhanon-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b651a62c8787f1071dd4411b30ce761d7e8d3f633c091dc5fd95e965a994290f
MD5 8c815cd309ec493c392ee9d2a609e604
BLAKE2b-256 ea8c52cc04d2b59e4533a5efbceb9165b36805ab21372d381d121efb2d829450

See more details on using hashes here.

File details

Details for the file datakhanon-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: datakhanon-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 63.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for datakhanon-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25f633dd99929a62678f11f6d341c53acc0494bd31cc5c2b33dd76fd5f2f0e01
MD5 8217899f743db020425683743885c114
BLAKE2b-256 af2a6289296dccafd662505b528b3b586dfc68c0d7ce3d3794a4c719cf6e7d3d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page