File size: 2,569 Bytes
8d6c767
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
"""
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