from numpy import dtype import streamlit as st import pandas as pd from sklearn.preprocessing import StandardScaler import numpy as np import joblib as jl # VALORES POR DEFECTO QUE INDICAN CELULAS NO CANCEROSAS # radius_mean 14.12 # texture_mean 19.28 # perimeter_mean 91.96 # area_mean 551,17 # compactness_mean 0.0092 # concavity_mean 0.061 # concave_points_mean 0.033 # area_se 24.5 # radius_worst 14.97 # texture_worst 25.41 # perimeter_worst 97.6 # area_worst 686.5 # smoothness_worst 0.1313 # compactness_worst 0.20 # concavity_worst 0.22 # concave points_worst 0.09 col=['radius_mean', 'texture_mean', 'perimeter_mean', 'area_mean', 'compactness_mean', 'concavity_mean', 'concave points_mean', 'area_se', 'radius_worst', 'texture_worst', 'perimeter_worst', 'area_worst', 'smoothness_worst', 'compactness_worst', 'concavity_worst', 'concave points_worst'] modnames=['mlp_final.pkl','svm_final.pkl','lr_final.pkl'] #@st.cache def getScaler(): # Cargo el dataset para poder normalizar los valores recogidos en el formulario print ("cargando dataset") data=pd.read_csv('https://raw.githubusercontent.com/gitmecalvon/mamamIA/main/resources/data/cleaned/train_web.csv',sep=';') print("dataset cargado") scaler = StandardScaler() scaler.fit(data) return scaler # cargandolos para poder usarlos desde un sidebar si da tiempo def cargaModelos (indice): print('Preparando el guardado de Modelos ' ) modelo=jl.load(modnames[indice]) return modelo def interpreta (prediccion): respuesta ="Los datos introducidos pronostican que son células de tipo " if prediccion ==1: respuesta= respuesta + "Maligno" else: respuesta= respuesta + "BENIGNO" return respuesta def contruyeFormulario(): # st.set_page_config(layout="wide") st.title("Mama mIA") st.markdown('',unsafe_allow_html=True) html_temp = """

Algoritmo de ayuda a la predicción diagnóstica del Cáncer de mama

""" st.markdown(html_temp, unsafe_allow_html = True) st.subheader("Por favor introduzca las medidas de la muestra") form = st.form(key="formulario") # col1, col2 = form.columns(2) # intento de dos columnas sin recurrir a html # with col1: radius_mean = form.number_input( label="Radio Promedio", min_value=0.00000, max_value=20.0,value=13.54, step=0.0001,format="%4f") texture_mean = form.number_input(label="Textura Promedio", min_value=0.00000, max_value=36.0,value=14.36, step=0.0001,format="%4f") perimeter_mean = form.number_input(label="Perímertro Promedio", min_value=0.00000, max_value=150.0,value=87.46, step=0.0001,format="%4f") area_mean = form.number_input(label="Área Promedio", min_value=0.00000, max_value=1600.0,value=566.3, step=0.0001,format="%4f") compactness_mean = form.number_input(label="Promedio de Compactabilidad", min_value=0.00000, max_value=1.0,value=0.08129, step=0.0001,format="%5f") concavity_mean = form.number_input(label="Promedio de Concavidad", min_value=0.00000, max_value=1.0,value=0.06664, step=0.0001,format="%5f") concave_points_mean = form.number_input(label="Puntos Cóncavos promedio", min_value=0.00000, max_value=1.0,value=0.04781, step=0.0001,format="%4f") area_se = form.number_input(label="Area Error Estandar", min_value=0.00000, max_value=150.0,value=23.56, step=0.0001,format="%4f") # with col2: radius_worst = form.number_input(label="Radio worst ", min_value=0.00000, max_value=30.0,value=15.11, step=0.0001,format="%4f") texture_worst= form.number_input(label="Textura worsk", min_value=0.00000, max_value=70.0,value=19.26, step=0.0001,format="%4f") perimeter_worst = form.number_input(label="Perimetro worst", min_value=0.00000, max_value=99.70,value=0.0092, step=0.0001,format="%4f") area_worst = form.number_input(label="Area ", min_value=0.00000, max_value=800.0,value=711.2, step=0.0001,format="%4f") smoothness_worst = form.number_input(label="Suavidad worst", min_value=0.00000, max_value=1.0,value=0.144, step=0.0001,format="%4f") compactness_worst = form.number_input(label="Compactabilidad worst", min_value=0.00000, max_value=2.0,value=0.1773, step=0.0001,format="%4f") concavity_worst = form.number_input(label="Concavidad worst", min_value=0.00000, max_value=2.0,value=0.2390, step=0.0001,format="%4f") concavepoints_worst = form.number_input(label="Puntos cóncavos worst", min_value=0.00000, max_value=2.0,value=0.1288, step=0.0001,format="%4f") submit = form.form_submit_button(label="Predicción") if submit: # Escalamos los datos del formulario scaler=getScaler() nbnormaliz=scaler.transform ([[radius_mean, texture_mean, perimeter_mean ,area_mean , compactness_mean , concavity_mean , concave_points_mean , area_se , radius_worst , texture_worst ,perimeter_worst , area_worst , smoothness_worst , compactness_worst , concavity_worst , concavepoints_worst ]]) # Recuperamos el modelo print ("cargando modelo") print (modnames[2]) algoritmo=cargaModelos(2) # Realizamos la prediccion print ("Preparando la prediccion...") prediccion=algoritmo.predict (nbnormaliz) print (prediccion) st.write ("") st.write (interpreta (prediccion)) def main(): contruyeFormulario() if __name__ == '__main__': main()