import gradio as gr import joblib import pandas as pd import numpy as np from tensorflow.keras.models import load_model from sklearn.preprocessing import StandardScaler # Cargar el modelo #modelo = load_model('mi_modelo_red_neuronal.h5') modelo = joblib.load('mi_modelo_Adaboost_V3.pkl') def transformacion (dataframe_1): dataframe_1.replace({'estado_terminal':{'Activo':1,'Bloqueado':0}}, inplace=True) #Se seleccionan todas las filas de las columnas 2,3 y 6, y todas que van de la 14 a la 37 dataframe_1 = dataframe_1.iloc[:, [2,4,6] + list(range(14, 37))] dataframe_1['tecnologiapp_a'] = 0 dataframe_1.loc[dataframe_1['tecnologiapp'] == 'a', 'tecnologiapp_a'] = 1 dataframe_1['tecnologiapp_b'] = 0 dataframe_1.loc[dataframe_1['tecnologiapp'] == 'b', 'tecnologiapp_b'] = 1 dataframe_1['tecnologiapp_c'] = 0 dataframe_1.loc[dataframe_1['tecnologiapp'] == 'c', 'tecnologiapp_c'] = 1 dataframe_1['tecnologiapp_d'] = 0 dataframe_1.loc[dataframe_1['tecnologiapp'] == 'd', 'tecnologiapp_d'] = 1 dataframe_1['tecnologiaaf_a'] = 0 dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'a', 'tecnologiaaf_a'] = 1 dataframe_1['tecnologiaaf_b'] = 0 dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'b', 'tecnologiaaf_b'] = 1 dataframe_1['tecnologiaaf_c'] = 0 dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'c', 'tecnologiaaf_c'] = 1 dataframe_1['tecnologiaaf_d'] = 0 dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'd', 'tecnologiaaf_d'] = 1 dataframe_1['tecnologiaaf_e'] = 0 dataframe_1.loc[dataframe_1['tecnologiaaf'] == 'e', 'tecnologiaaf_e'] = 1 #Se crea DataFRame data_sel_num = pd.DataFrame() #Se transforma la data data_sel_num['log_trx_dia_cero'] = np.log1p(dataframe_1['trx_dia_cero']) data_sel_num['log_trx_dia_uno'] = np.log1p(dataframe_1['trx_dia_uno']) data_sel_num['log_trx_dia_dos'] = np.log1p(dataframe_1['trx_dia_dos']) data_sel_num['log_trx_dia_tres'] = np.log1p(dataframe_1['trx_dia_tres']) data_sel_num['log_trx_dia_cuatro'] = np.log1p(dataframe_1['trx_dia_cuatro']) data_sel_num['log_trx_dia_cinco'] = np.log1p(dataframe_1['trx_dia_cinco']) data_sel_num['log_trx_dia_seis'] = np.log1p(dataframe_1['trx_dia_seis']) data_sel_num['log_trx_mes_tres'] = np.log1p(dataframe_1['trx_mes_tres']) data_sel_num['log_trx_mes_dos'] = np.log1p(dataframe_1['trx_mes_dos']) data_sel_num['log_trx_mes_uno'] = np.log1p(dataframe_1['trx_mes_uno']) data_sel_num['log_total_terminales'] = np.log1p(dataframe_1['total_terminales']) data_sel_num['sqrt_cantidad_falla_m3'] = np.power(dataframe_1['cantidad_falla_m3'], 0.1) data_sel_num['sqrt_cantidad_falla_m2'] = np.power(dataframe_1['cantidad_falla_m3'], 0.1) data_sel_num['sqrt_cantidad_falla_mes1'] = np.power(dataframe_1['cantidad_falla_mes1'], 0.1) data_sel_num['log_antiguedad_creacion_terminal'] = np.log1p(dataframe_1['antiguedad_creacion_terminal']) data_sel_num['log_antiguedad_version'] = np.log1p(dataframe_1['antiguedad_version']) data_sel_num['log_antiguedad_compra_pos'] = np.log1p(dataframe_1['antiguedad_compra_pos']) #Se normalizan los datos scaler = StandardScaler() X_train_scaled = scaler.fit_transform(data_sel_num) #Se convierte en DataFrame X_train_scaled_df = pd.DataFrame(X_train_scaled, columns=data_sel_num.columns) #Agregar campos estado terminal X_train_scaled_df['estado_terminal'] = dataframe_1['estado_terminal'] X_train_scaled_df['tecnologiapp_a'] = dataframe_1['tecnologiapp_a'] X_train_scaled_df['tecnologiapp_b'] = dataframe_1['tecnologiapp_b'] X_train_scaled_df['tecnologiapp_c'] = dataframe_1['tecnologiapp_c'] X_train_scaled_df['tecnologiapp_d'] = dataframe_1['tecnologiapp_d'] X_train_scaled_df['tecnologiaaf_a'] = dataframe_1['tecnologiaaf_a'] X_train_scaled_df['tecnologiaaf_b'] = dataframe_1['tecnologiaaf_b'] X_train_scaled_df['tecnologiaaf_c'] = dataframe_1['tecnologiaaf_c'] X_train_scaled_df['tecnologiaaf_d'] = dataframe_1['tecnologiaaf_d'] X_train_scaled_df['tecnologiaaf_e'] = dataframe_1['tecnologiaaf_e'] return X_train_scaled_df # Definir una función para hacer predicciones desde un DataFrame def predecir_estado(csv_file): # Leer el archivo CSV df = pd.read_csv(csv_file, sep =";" ,encoding="latin-1") #Transformar los datos para el modelo X_train_scaled_df = transformacion(df) # Realizar las predicciones predicciones = modelo.predict(X_train_scaled_df.values) resultados_red =pd.DataFrame(predicciones, columns=['predictions']) resultados_red=(resultados_red>0.5).astype(int) # Crear un DataFrame para mostrar las predicciones resultados = pd.DataFrame() resultados['Id terminal'] = df['terminal'] resultados['Estado_Predicho'] = resultados_red resultados['trx_dia_cero'] = df['trx_dia_cero'] resultados['trx_dia_uno'] = df['trx_dia_uno'] resultados['trx_dia_dos'] = df['trx_dia_dos'] resultados['trx_dia_tres'] = df['trx_dia_tres'] resultados['trx_dia_cuatro'] = df['trx_dia_cuatro'] resultados['trx_dia_cinco'] = df['trx_dia_cinco'] resultados['trx_dia_seis'] = df['trx_dia_seis'] resultados['trx_mes_tres'] = df['trx_mes_tres'] resultados['trx_mes_dos'] = df['trx_mes_dos'] resultados['trx_mes_uno'] = df['trx_mes_uno'] resultados['total_terminales'] = df['total_terminales'] resultados['cantidad_falla_m3'] = df['cantidad_falla_m3'] resultados['cantidad_falla_m2'] = df['cantidad_falla_m2'] resultados['cantidad_falla_mes1'] = df['cantidad_falla_mes1'] resultados['antiguedad_creacion_terminal'] = df['antiguedad_creacion_terminal'] resultados['antiguedad_version'] = df['antiguedad_version'] resultados['antiguedad_compra_pos'] = df['antiguedad_compra_pos'] resultados['tecnologiapp'] = df['tecnologiapp'] resultados['tecnologiaaf'] = df['tecnologiaaf'] return resultados # Crear la interfaz de Gradio para cargar archivos CSV entrada = gr.File(label="Subir archivo CSV") salida = gr.Dataframe(label="Estados de las terminales") gr.Interface(fn=predecir_estado, inputs=entrada, outputs=salida, title="Clasificación del Estado de Terminales").launch()