SysvIA / app.py
Jartemio's picture
cambios subidos
805e36e
raw
history blame
5.29 kB
#imports
import streamlit as st
import random
import pickle
import joblib
from sklearn.preprocessing import StandardScaler
import pandas as pd
import time
from sklearn.cluster import KMeans
standard_scaler = StandardScaler()
#pre cargar
dataIni = pd.read_csv('DataModelo.csv')
#data = dataIni.drop(['Usuario_Id','Cluster','recency','Avg_dias','distancia','total_min','num_reincidencia','mes'], axis=1, )
#data = dataIni.drop(columns= {'Cluster','Usuario_Id','recency', 'Avg_dias','distancia', 'total_min', 'num_reincidencia', 'mes'})
data = dataIni[['recency_t','Avg_dias_t','distancia_t','total_min_t','num_reincidencia_t','mes_t']]
# var
cluster_dict = {
0: {"descripcion":"Usuarios que usan muchas veces el servicio, por distancias largas y frecuentemente.",},
1: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan pocas veces al año y con muy poca frecuencia.",},
2: {"descripcion":"Usuarios que usan el servicio para distancias largas, pocas veces al año y no muy frecuentemente.",},
3: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan varias veces al año y frecuentemente.",},
4: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan varias veces al año y muy frecuentemente",},
5: {"descripcion":"Usuarios que lo usan por distancias muy cortas, muy pocas veces al año y muy pocas veces al año.",},
6: {"descripcion":"Usuarios que usan el servicio para distancias cortas, pero lo utilizan muy seguido durante todo el año.",},
7: {"descripcion":"Usuarios que utilizan el servicio para distancias largas, pero muy pocas veces al año y con muy poca frecuencia."},
}
diccionario_operaciones = {
'recency_t': (1/3),
'Avg_dias_t': (1/5),
'distancia_t': 1,
'total_min_t': (1/3),
'num_reincidencia_t': (1/3),
'mes_t': 1
}
diccionario_promedio = {
'1 - 10 dias': 1,
'10 - 30 dias': 15,
'30 - 50 dias': 40,
}
#Funciones
def transformacionData(formularioTemp):
for k, v in formularioTemp.items():
formularioTemp[k]= (float(v[0]) ** diccionario_operaciones[k])
return formularioTemp
def procesarDatos(valor):
with st.spinner('Cargando...'):
formulario = {
'recency_t': str(valor[0]),
'Avg_dias_t': str(diccionario_promedio[valor[1]]),
'distancia_t': str(valor[2]),
'total_min_t': str(valor[3]),
'num_reincidencia_t': str(valor[4]),
'mes_t': str(valor[5])
}
resultado = transformacionData(formulario)
dataNew = data.append(resultado,ignore_index=True)
dataNew = dataNew.fillna(0)
#standard_scaler
Master_scaled = standard_scaler.fit_transform(dataNew)
Master_scaled = pd.DataFrame(Master_scaled)
Master_scaled.columns = dataNew.columns
# Agregar el diccionario de entrada al dataset como último valor
#last_data = Master_scaled.iloc[1:]
# Verificar el tiempo de respuesta de estandarización para estandarizar los datos de entrada
# Ejecución de modelo
kmeans = KMeans()
# Aplicación del método del codo para la obtención de número de clúster óptimos
distortions = []
K = range(1,8)
for k in K:
kmeanModel = KMeans(n_clusters=k)
kmeanModel.fit(Master_scaled)
distortions.append(kmeanModel.inertia_)
dataNew["Cluster"] = kmeans.fit_predict(Master_scaled)
# Resultado
#resultado = dataNew.iloc[1:]['cluster']
#st.text(resultado)
# print(resultado)
#dataNew.to_csv(r'C:\Users\Jartemio\Desktop\Saturdays\repositorioPruebaHuggingface\export_dataframe.csv', index=False, header=True)
st.success(cluster_dict[dataNew["Cluster"].iloc[-1]]["descripcion"], icon="✅")
return ""
#list1 = [0,1, 2, 3, 4, 5, 6,7]
#return cluster_dict[random.choice(list1)]["descripcion"]
#Interface
st.image('banner.jpg')
col1, col2, col3 , col4, col5 = st.columns(5)
with col3:
st.image('logo.png')
col1, col2, col3 = st.columns(3)
with col1:
recency = st.number_input('Inserte los dias recientes',value=0)
with col2:
#avg_dias = st.number_input('Promedio de dias que se usa mibici',value=0.00)
avg_dias = option = st.selectbox(
'Promedio de dias que se usa mibici',
('1 - 10 dias', '10 - 30 dias', '30 - 50 dias '))
with col3:
total_min = st.number_input('Distancia que recorre en km',value=0.000000)
col1, col2, col3 = st.columns(3)
with col1:
num_reincidencia = st.number_input('Numeros de reincidencia',value=0)
with col2:
total_min = st.number_input('Total de minutos usados',value=0)
with col3:
mes = st.number_input('Cuantos meses ha usado mi bici',value=0.0)
#Master = Master[[recency, avg_dias, total_min, num_reincidencia, mes]]
col1, col2, col3 , col4, col5, col6, col7 = st.columns(7)
with col4:
buttonCalcular = st.button('Calcular')
texto_output = st.markdown('')
if buttonCalcular:
texto_output.markdown(procesarDatos([recency, avg_dias, total_min, total_min, num_reincidencia, mes]))