Spaces:
Sleeping
Sleeping
Update app.py
Browse filesUpdated the positions to obtain the desired UX
app.py
CHANGED
@@ -972,17 +972,13 @@ elif page == "💡 Recomendación de Artículos":
|
|
972 |
else:
|
973 |
st.write("✓")
|
974 |
|
975 |
-
# Preview section
|
976 |
-
st.write("### Previsualiza la cesta completa antes de agregarla:")
|
977 |
-
for code in st.session_state['new_basket']:
|
978 |
-
article_desc = productos[productos['ARTICULO'] == code]['DESCRIPCION'].values[0]
|
979 |
-
st.write(f"- {article_desc} (Código: {code})")
|
980 |
|
|
|
981 |
col1, col2 = st.columns([4, 1])
|
982 |
-
|
983 |
-
# Input manual del código de producto con el botón en la misma
|
984 |
with col1:
|
985 |
-
manual_code = st.text_input("Añadir código manualmente:", value="", key="manual_code")
|
986 |
|
987 |
# Botón para añadir el código manualmente ingresado, junto al input
|
988 |
with col2:
|
@@ -994,6 +990,12 @@ elif page == "💡 Recomendación de Artículos":
|
|
994 |
st.warning(f"⚠️ El código {manual_code} ya está en la cesta.")
|
995 |
else:
|
996 |
st.warning("⚠️ No se ha introducido un código válido.")
|
|
|
|
|
|
|
|
|
|
|
|
|
997 |
|
998 |
# Botón para añadir cesta al histórico
|
999 |
if st.button("📦 Añadir cesta al histórico"):
|
@@ -1009,78 +1011,3 @@ elif page == "💡 Recomendación de Artículos":
|
|
1009 |
elif st.session_state['recommendations_df'] is not None:
|
1010 |
st.warning("⚠️ No se encontraron recomendaciones para la cesta proporcionada.")
|
1011 |
|
1012 |
-
|
1013 |
-
# elif page == "💡 Recomendación de Artículos":
|
1014 |
-
# # Carga de CSV necesarios cestas y productos
|
1015 |
-
# cestas = pd.read_csv('cestas.csv')
|
1016 |
-
# productos = pd.read_csv('productos.csv')
|
1017 |
-
# # Estilo principal de la página
|
1018 |
-
# st.markdown(
|
1019 |
-
# "<h1 style='text-align: center;'>Recomendación de Artículos</h1>",
|
1020 |
-
# unsafe_allow_html=True
|
1021 |
-
# )
|
1022 |
-
# st.markdown("""
|
1023 |
-
# <p style='text-align: center; color: #5D6D7E;'>Obtén recomendaciones personalizadas para tus clientes basadas en su cesta de compra.</p>
|
1024 |
-
# """, unsafe_allow_html=True)
|
1025 |
-
# st.write("### Selecciona los artículos y asigna las cantidades para la cesta:")
|
1026 |
-
# # Añadir separador para mejorar la segmentación visual
|
1027 |
-
# st.divider()
|
1028 |
-
# # Mostrar lista de artículos disponibles (ahora se usa el código asociado a cada descripción)
|
1029 |
-
# available_articles = productos[['ARTICULO', 'DESCRIPCION']].drop_duplicates()
|
1030 |
-
|
1031 |
-
# # Crear diccionario para asignar las descripciones a los códigos
|
1032 |
-
# article_dict = dict(zip(available_articles['DESCRIPCION'], available_articles['ARTICULO']))
|
1033 |
-
# # Permitir seleccionar las descripciones, pero trabajar con los códigos
|
1034 |
-
# selected_descriptions = st.multiselect("Select Articles", available_articles['DESCRIPCION'].unique())
|
1035 |
-
# quantities = {}
|
1036 |
-
|
1037 |
-
# if selected_descriptions:
|
1038 |
-
# st.write("### Selecciona los artículos y las unidades:")
|
1039 |
-
# for description in selected_descriptions:
|
1040 |
-
# code = article_dict[description] # Usar el código del artículo
|
1041 |
-
# col1, col2 = st.columns([1, 3]) # Ajustar proporciones para que las cantidades vayan a la izquierda
|
1042 |
-
# with col1:
|
1043 |
-
# # Caja de número para la cantidad, asociada al código
|
1044 |
-
# quantities[code] = st.number_input(f"Quantity {code}", min_value=0, step=1, key=code)
|
1045 |
-
# with col2:
|
1046 |
-
# # Mostrar la descripción del artículo
|
1047 |
-
# st.write(description)
|
1048 |
-
|
1049 |
-
# # Añadir un botón estilizado "Calcular" con icono
|
1050 |
-
# if st.button("🛒 Obtener Recomendaciones"):
|
1051 |
-
# # Crear una lista de artículos basada en los códigos y cantidades
|
1052 |
-
# new_basket = []
|
1053 |
-
# for code in quantities:
|
1054 |
-
# quantity = quantities[code]
|
1055 |
-
# if quantity > 0:
|
1056 |
-
# new_basket.extend([code] * quantity) # Añadir el código tantas veces como 'quantity'
|
1057 |
-
# if new_basket:
|
1058 |
-
# # Procesar la lista para recomendar
|
1059 |
-
# recommendations_df = recomienda_tf(new_basket, cestas, productos)
|
1060 |
-
|
1061 |
-
# if not recommendations_df.empty:
|
1062 |
-
# st.success("### Según tu cesta, te recomendamos que consideres añadir uno de estos artículos:")
|
1063 |
-
# st.dataframe(recommendations_df, height=300, width=800) # Ajustar el tamaño del DataFrame
|
1064 |
-
# else:
|
1065 |
-
# st.warning("⚠️ No recommendations found for the provided basket.")
|
1066 |
-
# else:
|
1067 |
-
# st.warning("⚠️ Please select at least one article and set its quantity.")
|
1068 |
-
|
1069 |
-
# # Gráfico adicional: Comparar las ventas predichas y reales para los principales fabricantes
|
1070 |
-
# st.markdown("### Predicted vs Actual Sales for Top Manufacturers")
|
1071 |
-
# top_manufacturers = results.groupby('marca_id_encoded').agg({'ventas_reales': 'sum', 'ventas_predichas': 'sum'}).sort_values(by='ventas_reales', ascending=False).head(10)
|
1072 |
-
|
1073 |
-
# fig_comparison = go.Figure()
|
1074 |
-
# fig_comparison.add_trace(go.Bar(x=top_manufacturers.index, y=top_manufacturers['ventas_reales'], name="Actual Sales", marker_color='blue'))
|
1075 |
-
# fig_comparison.add_trace(go.Bar(x=top_manufacturers.index, y=top_manufacturers['ventas_predichas'], name="Predicted Sales", marker_color='orange'))
|
1076 |
-
|
1077 |
-
# fig_comparison.update_layout(
|
1078 |
-
# title="Actual vs Predicted Sales by Top Manufacturers",
|
1079 |
-
# xaxis_title="Manufacturer",
|
1080 |
-
# yaxis_title="Sales (€)",
|
1081 |
-
# barmode='group',
|
1082 |
-
# height=400,
|
1083 |
-
# hovermode="x unified"
|
1084 |
-
# )
|
1085 |
-
|
1086 |
-
# st.plotly_chart(fig_comparison, use_container_width=True)
|
|
|
972 |
else:
|
973 |
st.write("✓")
|
974 |
|
|
|
|
|
|
|
|
|
|
|
975 |
|
976 |
+
# Crear columnas para el input manual y el botón en una fila más compacta
|
977 |
col1, col2 = st.columns([4, 1])
|
978 |
+
|
979 |
+
# Input manual del código de producto con el botón en la misma fila
|
980 |
with col1:
|
981 |
+
manual_code = st.text_input("Añadir código manualmente:", value="", key="manual_code", max_chars=15)
|
982 |
|
983 |
# Botón para añadir el código manualmente ingresado, junto al input
|
984 |
with col2:
|
|
|
990 |
st.warning(f"⚠️ El código {manual_code} ya está en la cesta.")
|
991 |
else:
|
992 |
st.warning("⚠️ No se ha introducido un código válido.")
|
993 |
+
|
994 |
+
# Preview section
|
995 |
+
st.write("### Previsualiza la cesta completa antes de agregarla:")
|
996 |
+
for code in st.session_state['new_basket']:
|
997 |
+
article_desc = productos[productos['ARTICULO'] == code]['DESCRIPCION'].values[0]
|
998 |
+
st.write(f"- {article_desc} (Código: {code})")
|
999 |
|
1000 |
# Botón para añadir cesta al histórico
|
1001 |
if st.button("📦 Añadir cesta al histórico"):
|
|
|
1011 |
elif st.session_state['recommendations_df'] is not None:
|
1012 |
st.warning("⚠️ No se encontraron recomendaciones para la cesta proporcionada.")
|
1013 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|