teste_laudos / models /model_data.py
gui-sparim's picture
Upload 44 files
8d6c767 verified
"""
Dataclass tipada para os dados do modelo de avaliação.
Os dados são carregados de arquivos .dai (joblib).
"""
from dataclasses import dataclass, field
from typing import Dict, List, Any, Optional
from pathlib import Path
import pandas as pd
@dataclass
class ModelData:
"""Representa os dados estatísticos de um modelo de avaliação."""
nome: str
path: Path
# Dados do banco de dados
xy_preview: pd.DataFrame = field(default_factory=pd.DataFrame)
top_x_esc: pd.DataFrame = field(default_factory=pd.DataFrame)
top_y_esc: pd.Series = field(default_factory=pd.Series)
# Estatísticas descritivas
estatisticas: pd.DataFrame = field(default_factory=pd.DataFrame)
# Modelo de regressão
tabelas_coef: pd.DataFrame = field(default_factory=pd.DataFrame)
tabelas_obs_calc: pd.DataFrame = field(default_factory=pd.DataFrame)
modelos_resumos: Dict[str, Any] = field(default_factory=dict)
modelos_sm: Any = None # RegressionResultsWrapper
# Transformações e gráficos
formatted_top_transformation_info: List[Any] = field(default_factory=list)
graf_model: str = ""
@property
def r2(self) -> Optional[float]:
"""Retorna o coeficiente de determinação R²."""
return self.modelos_resumos.get('r2')
@property
def r2_ajustado(self) -> Optional[float]:
"""Retorna o R² ajustado."""
return self.modelos_resumos.get('r2_ajustado')
@property
def equacao(self) -> Optional[str]:
"""Retorna a equação do modelo."""
return self.modelos_resumos.get('equacao')
@property
def variaveis(self) -> List[str]:
"""Retorna lista de variáveis do modelo."""
if self.tabelas_coef.empty:
return []
return [v for v in self.tabelas_coef.index.tolist() if v != 'const']
@property
def n_amostras(self) -> int:
"""Retorna número de amostras no banco de dados."""
return self.modelos_resumos.get('n', 0)
@property
def n_variaveis(self) -> int:
"""Retorna número de variáveis do modelo."""
return self.modelos_resumos.get('k', 0)
def tem_template(self) -> bool:
"""Verifica se existe template de metodologia."""
template_path = self.path / "metodologia.docx"
return template_path.exists()
def get_template_path(self) -> Optional[Path]:
"""Retorna caminho do template de metodologia."""
template_path = self.path / "metodologia.docx"
return template_path if template_path.exists() else None