import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder
from sklearn.impute import SimpleImputer
# Função para carregar os dados do arquivo Excel
def load_data_from_excel(file_path):
# Lendo o arquivo Excel, ajustando o separador de milhar e decimal
df = pd.read_excel(file_path, decimal=',', thousands='.')
# Extraindo as colunas 3P Mace e TAE
mace = df.iloc[:, 0].values # Primeira coluna (A) -> 3P Mace
TAE = df.iloc[:, 1].values # Segunda coluna (B) -> TAE (cm²)
return TAE, mace
# Caminho do arquivo Excel (substitua pelo caminho do seu arquivo)
file_path = '3P MACE.xlsx'
# Carregando os dados
TAE, mace = load_data_from_excel(file_path)
# Preenchendo valores ausentes (NaN) na coluna TAE com a mediana
imputer = SimpleImputer(strategy='median')
TAE = imputer.fit_transform(TAE.reshape(-1, 1)).flatten()
# Codificando os dados binários de 3P Mace como 0 e 1
label_encoder = LabelEncoder()
mace_encoded = label_encoder.fit_transform(mace) # 'No' -> 0, 'Yes' -> 1
# Dividindo os dados em treino e teste
X_train, X_test, y_train, y_test = train_test_split(TAE.reshape(-1, 1), mace_encoded, test_size=0.3, random_state=42)
# Treinando um modelo de regressão logística
model = LogisticRegression()
model.fit(X_train, y_train)
# Prevendo as probabilidades de classe para os dados de teste
y_scores = model.predict_proba(X_test)[:, 1]
# Calculando a curva ROC
fpr, tpr, thresholds = roc_curve(y_test, y_scores)
roc_auc = auc(fpr, tpr)
# Plotando a curva ROC
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'Curva ROC (área = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('Taxa de Falsos Positivos')
plt.ylabel('Taxa de Verdadeiros Positivos')
plt.title('Curva ROC para TAE (cm²) e 3P Mace')
plt.legend(loc="lower right")
plt.show()