Jartemio commited on
Commit
805e36e
·
1 Parent(s): 3267330

cambios subidos

Browse files
Files changed (2) hide show
  1. DataModelo.csv +0 -0
  2. app.py +129 -20
DataModelo.csv ADDED
The diff for this file is too large to render. See raw diff
 
app.py CHANGED
@@ -1,48 +1,157 @@
 
1
  import streamlit as st
 
 
 
 
 
 
2
 
3
- st.image('banner.jpg', caption='SYSVIA')
4
 
 
5
 
 
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
 
 
 
 
 
 
 
9
 
 
10
 
 
11
 
 
 
 
 
12
  col1, col2, col3 = st.columns(3)
13
  with col1:
14
  recency = st.number_input('Inserte los dias recientes',value=0)
15
 
16
  with col2:
17
- avg_dias = st.number_input('Promedio de dias que se usa mibici',value=0.00)
18
-
 
 
19
  with col3:
20
  total_min = st.number_input('Distancia que recorre en km',value=0.000000)
21
 
22
- col1, col2 = st.columns(2)
23
  with col1:
24
  num_reincidencia = st.number_input('Numeros de reincidencia',value=0)
25
  with col2:
 
 
26
  mes = st.number_input('Cuantos meses ha usado mi bici',value=0.0)
27
-
28
  #Master = Master[[recency, avg_dias, total_min, num_reincidencia, mes]]
29
- # st.write('The current number is ', recency)
30
 
31
  col1, col2, col3 , col4, col5, col6, col7 = st.columns(7)
32
  with col4:
33
- st.button('Calcular')
34
 
35
- col1, col2, col3 , col4, col5 = st.columns(5)
36
- with col1:
37
- st.image('logo.png')
38
 
39
- cluster_dict = {
40
- 0: {"descripcion":"Usuarios que usan muchas veces el servicio, por distancias largas y frecuentemente.",},
41
- 1: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan pocas veces al año y con muy poca frecuencia.",},
42
- 2: {"descripcion":"Usuarios que usan el servicio para distancias largas, pocas veces al año y no muy frecuentemente.",},
43
- 3: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan varias veces al año y frecuentemente.",},
44
- 4: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan varias veces al año y muy frecuentemente",},
45
- 5: {"descripcion":"Usuarios que lo usan por distancias muy cortas, muy pocas veces al año y muy pocas veces al año.",},
46
- 6: {"descripcion":"Usuarios que usan el servicio para distancias cortas, pero lo utilizan muy seguido durante todo el año.",},
47
- 7: {"descripcion":"Usuarios que utilizan el servicio para distancias largas, pero muy pocas veces al año y con muy poca frecuencia.",},
48
- }
 
1
+ #imports
2
  import streamlit as st
3
+ import random
4
+ import pickle
5
+ import joblib
6
+ from sklearn.preprocessing import StandardScaler
7
+ import pandas as pd
8
+ import time
9
 
10
+ from sklearn.cluster import KMeans
11
 
12
+ standard_scaler = StandardScaler()
13
 
14
+ #pre cargar
15
 
16
+ dataIni = pd.read_csv('DataModelo.csv')
17
+ #data = dataIni.drop(['Usuario_Id','Cluster','recency','Avg_dias','distancia','total_min','num_reincidencia','mes'], axis=1, )
18
+ #data = dataIni.drop(columns= {'Cluster','Usuario_Id','recency', 'Avg_dias','distancia', 'total_min', 'num_reincidencia', 'mes'})
19
+ data = dataIni[['recency_t','Avg_dias_t','distancia_t','total_min_t','num_reincidencia_t','mes_t']]
20
+ # var
21
+
22
+ cluster_dict = {
23
+ 0: {"descripcion":"Usuarios que usan muchas veces el servicio, por distancias largas y frecuentemente.",},
24
+ 1: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan pocas veces al año y con muy poca frecuencia.",},
25
+ 2: {"descripcion":"Usuarios que usan el servicio para distancias largas, pocas veces al año y no muy frecuentemente.",},
26
+ 3: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan varias veces al año y frecuentemente.",},
27
+ 4: {"descripcion":"Usuarios que no lo usan por distancias largas, lo usan varias veces al año y muy frecuentemente",},
28
+ 5: {"descripcion":"Usuarios que lo usan por distancias muy cortas, muy pocas veces al año y muy pocas veces al año.",},
29
+ 6: {"descripcion":"Usuarios que usan el servicio para distancias cortas, pero lo utilizan muy seguido durante todo el año.",},
30
+ 7: {"descripcion":"Usuarios que utilizan el servicio para distancias largas, pero muy pocas veces al año y con muy poca frecuencia."},
31
+ }
32
+
33
+ diccionario_operaciones = {
34
+ 'recency_t': (1/3),
35
+ 'Avg_dias_t': (1/5),
36
+ 'distancia_t': 1,
37
+ 'total_min_t': (1/3),
38
+ 'num_reincidencia_t': (1/3),
39
+ 'mes_t': 1
40
+
41
+ }
42
+
43
+ diccionario_promedio = {
44
+ '1 - 10 dias': 1,
45
+ '10 - 30 dias': 15,
46
+ '30 - 50 dias': 40,
47
+ }
48
+
49
+ #Funciones
50
+
51
+ def transformacionData(formularioTemp):
52
+ for k, v in formularioTemp.items():
53
+ formularioTemp[k]= (float(v[0]) ** diccionario_operaciones[k])
54
+ return formularioTemp
55
+
56
+ def procesarDatos(valor):
57
+ with st.spinner('Cargando...'):
58
+
59
+
60
+ formulario = {
61
+ 'recency_t': str(valor[0]),
62
+ 'Avg_dias_t': str(diccionario_promedio[valor[1]]),
63
+ 'distancia_t': str(valor[2]),
64
+ 'total_min_t': str(valor[3]),
65
+ 'num_reincidencia_t': str(valor[4]),
66
+ 'mes_t': str(valor[5])
67
+ }
68
+
69
+ resultado = transformacionData(formulario)
70
+
71
+ dataNew = data.append(resultado,ignore_index=True)
72
+ dataNew = dataNew.fillna(0)
73
+ #standard_scaler
74
+ Master_scaled = standard_scaler.fit_transform(dataNew)
75
+ Master_scaled = pd.DataFrame(Master_scaled)
76
+ Master_scaled.columns = dataNew.columns
77
+
78
+
79
+
80
+ # Agregar el diccionario de entrada al dataset como último valor
81
+
82
+ #last_data = Master_scaled.iloc[1:]
83
+
84
+ # Verificar el tiempo de respuesta de estandarización para estandarizar los datos de entrada
85
+
86
+ # Ejecución de modelo
87
+ kmeans = KMeans()
88
+
89
+ # Aplicación del método del codo para la obtención de número de clúster óptimos
90
+ distortions = []
91
+ K = range(1,8)
92
+ for k in K:
93
+ kmeanModel = KMeans(n_clusters=k)
94
+ kmeanModel.fit(Master_scaled)
95
+ distortions.append(kmeanModel.inertia_)
96
+
97
+ dataNew["Cluster"] = kmeans.fit_predict(Master_scaled)
98
+
99
+
100
+ # Resultado
101
+ #resultado = dataNew.iloc[1:]['cluster']
102
+
103
+ #st.text(resultado)
104
 
105
 
106
+ # print(resultado)
107
+ #dataNew.to_csv(r'C:\Users\Jartemio\Desktop\Saturdays\repositorioPruebaHuggingface\export_dataframe.csv', index=False, header=True)
108
+ st.success(cluster_dict[dataNew["Cluster"].iloc[-1]]["descripcion"], icon="✅")
109
+ return ""
110
+ #list1 = [0,1, 2, 3, 4, 5, 6,7]
111
+ #return cluster_dict[random.choice(list1)]["descripcion"]
112
 
113
+ #Interface
114
 
115
+ st.image('banner.jpg')
116
 
117
+ col1, col2, col3 , col4, col5 = st.columns(5)
118
+ with col3:
119
+ st.image('logo.png')
120
+
121
  col1, col2, col3 = st.columns(3)
122
  with col1:
123
  recency = st.number_input('Inserte los dias recientes',value=0)
124
 
125
  with col2:
126
+ #avg_dias = st.number_input('Promedio de dias que se usa mibici',value=0.00)
127
+ avg_dias = option = st.selectbox(
128
+ 'Promedio de dias que se usa mibici',
129
+ ('1 - 10 dias', '10 - 30 dias', '30 - 50 dias '))
130
  with col3:
131
  total_min = st.number_input('Distancia que recorre en km',value=0.000000)
132
 
133
+ col1, col2, col3 = st.columns(3)
134
  with col1:
135
  num_reincidencia = st.number_input('Numeros de reincidencia',value=0)
136
  with col2:
137
+ total_min = st.number_input('Total de minutos usados',value=0)
138
+ with col3:
139
  mes = st.number_input('Cuantos meses ha usado mi bici',value=0.0)
 
140
  #Master = Master[[recency, avg_dias, total_min, num_reincidencia, mes]]
 
141
 
142
  col1, col2, col3 , col4, col5, col6, col7 = st.columns(7)
143
  with col4:
144
+ buttonCalcular = st.button('Calcular')
145
 
146
+ texto_output = st.markdown('')
 
 
147
 
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+ if buttonCalcular:
156
+ texto_output.markdown(procesarDatos([recency, avg_dias, total_min, total_min, num_reincidencia, mes]))
157
+