Si2469 commited on
Commit
92be168
1 Parent(s): ef0a000

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -13
app.py CHANGED
@@ -1,3 +1,4 @@
 
1
  from fastapi import FastAPI, HTTPException
2
  from pydantic import BaseModel
3
  import numpy as np
@@ -6,29 +7,42 @@ import tensorflow as tf
6
  from sklearn.preprocessing import StandardScaler, OneHotEncoder
7
  from sklearn.compose import ColumnTransformer
8
 
 
 
 
9
  app = FastAPI()
10
 
11
  # Cargar el modelo preentrenado desde el archivo .h5
12
- model = tf.keras.models.load_model('Model.h5')
 
 
 
 
13
 
14
  # Cargar el conjunto de datos para ajuste del preprocesador
15
- file_path = 'heart.csv'
16
- df = pd.read_csv(file_path)
 
 
 
 
17
 
18
  # Identificar columnas numéricas y categóricas
19
  num_features = ['Age', 'RestingBP', 'Cholesterol', 'MaxHR', 'Oldpeak']
20
  cat_features = ['Sex', 'ChestPainType', 'FastingBS', 'RestingECG', 'ExerciseAngina', 'ST_Slope']
21
 
22
  # Preprocesamiento: Escalar características numéricas y codificar características categóricas
23
- preprocessor = ColumnTransformer(
24
- transformers=[
25
- ('num', StandardScaler(), num_features),
26
- ('cat', OneHotEncoder(handle_unknown='ignore'), cat_features)
27
- ])
28
-
29
- # Ajustar el preprocesador al conjunto de datos
30
- X = df.drop('HeartDisease', axis=1)
31
- preprocessor.fit(X)
 
 
32
 
33
  class HeartDiseaseInput(BaseModel):
34
  age: float
@@ -65,16 +79,23 @@ def predict(input: HeartDiseaseInput):
65
  'ST_Slope': [input.st_slope]
66
  })
67
 
 
 
68
  # Aplicar preprocesamiento
69
  input_data_preprocessed = preprocessor.transform(input_data)
 
70
 
71
  # Realizar la predicción
72
  prediction_prob = model.predict(input_data_preprocessed)
73
  predicted_class = (prediction_prob > 0.3).astype(int)
74
 
 
 
 
75
  # Interpretar la predicción
76
  result = "Tiene enfermedad cardíaca." if predicted_class == 1 else "No tiene enfermedad cardíaca."
77
 
78
  return {"prediction": result, "probability": prediction_prob[0][0]}
79
  except Exception as e:
80
- raise HTTPException(status_code=400, detail=str(e))
 
 
1
+ import logging
2
  from fastapi import FastAPI, HTTPException
3
  from pydantic import BaseModel
4
  import numpy as np
 
7
  from sklearn.preprocessing import StandardScaler, OneHotEncoder
8
  from sklearn.compose import ColumnTransformer
9
 
10
+ # Configurar el logger
11
+ logging.basicConfig(level=logging.INFO)
12
+
13
  app = FastAPI()
14
 
15
  # Cargar el modelo preentrenado desde el archivo .h5
16
+ try:
17
+ model = tf.keras.models.load_model('Model.h5')
18
+ logging.info("Modelo cargado correctamente.")
19
+ except Exception as e:
20
+ logging.error("Error cargando el modelo: %s", e)
21
 
22
  # Cargar el conjunto de datos para ajuste del preprocesador
23
+ try:
24
+ file_path = 'heart.csv'
25
+ df = pd.read_csv(file_path)
26
+ logging.info("Conjunto de datos cargado correctamente.")
27
+ except Exception as e:
28
+ logging.error("Error cargando el conjunto de datos: %s", e)
29
 
30
  # Identificar columnas numéricas y categóricas
31
  num_features = ['Age', 'RestingBP', 'Cholesterol', 'MaxHR', 'Oldpeak']
32
  cat_features = ['Sex', 'ChestPainType', 'FastingBS', 'RestingECG', 'ExerciseAngina', 'ST_Slope']
33
 
34
  # Preprocesamiento: Escalar características numéricas y codificar características categóricas
35
+ try:
36
+ preprocessor = ColumnTransformer(
37
+ transformers=[
38
+ ('num', StandardScaler(), num_features),
39
+ ('cat', OneHotEncoder(handle_unknown='ignore'), cat_features)
40
+ ])
41
+ X = df.drop('HeartDisease', axis=1)
42
+ preprocessor.fit(X)
43
+ logging.info("Preprocesador ajustado correctamente.")
44
+ except Exception as e:
45
+ logging.error("Error ajustando el preprocesador: %s", e)
46
 
47
  class HeartDiseaseInput(BaseModel):
48
  age: float
 
79
  'ST_Slope': [input.st_slope]
80
  })
81
 
82
+ logging.info("Datos de entrada recibidos: %s", input_data)
83
+
84
  # Aplicar preprocesamiento
85
  input_data_preprocessed = preprocessor.transform(input_data)
86
+ logging.info("Datos preprocesados: %s", input_data_preprocessed)
87
 
88
  # Realizar la predicción
89
  prediction_prob = model.predict(input_data_preprocessed)
90
  predicted_class = (prediction_prob > 0.3).astype(int)
91
 
92
+ logging.info("Probabilidad de predicción: %s", prediction_prob)
93
+ logging.info("Clase predicha: %s", predicted_class)
94
+
95
  # Interpretar la predicción
96
  result = "Tiene enfermedad cardíaca." if predicted_class == 1 else "No tiene enfermedad cardíaca."
97
 
98
  return {"prediction": result, "probability": prediction_prob[0][0]}
99
  except Exception as e:
100
+ logging.error("Error en la predicción: %s", e)
101
+ raise HTTPException(status_code=500, detail=str(e))