Spaces:
Build error
Build error
import streamlit as st | |
import pandas as pd | |
import csv | |
st.logo( | |
"images/ledesma-logo.png", | |
icon_image="images/ledesma-logo.png", | |
) | |
st.image("images/ledesma-logo.png", width=300) | |
st.markdown("<h2 style='text-align: left;'>Comparador de precios vs competencia</h1>", unsafe_allow_html=True) | |
st.divider() | |
st.subheader("Sucursales:") | |
df = pd.read_csv("./Products.csv") | |
stores = pd.read_csv("sucursales.csv") | |
provinces = stores['provincia'].unique() | |
provinces_dict = { | |
'Ciudad Aut贸noma de Buenos Aires': 'AR-C', | |
'La Rioja': 'AR-F', | |
'Santiago del Estero': 'AR-G', | |
'Catamarca': 'AR-K', | |
'Neuqu茅n': 'AR-Q', | |
'R铆o Negro': 'AR-R', | |
'Santa Fe': 'AR-S', | |
'Tucum谩n': 'AR-T', | |
'Chubut': 'AR-U', | |
'C贸rdoba': 'AR-X', | |
'Santa Cruz': 'AR-Z' | |
} | |
provinces_dataframe = pd.DataFrame({ | |
'provincia':['AR-C','AR-F','AR-G','AR-K','AR-Q','AR-R','AR-S','AR-T','AR-U','AR-X','AR-Z'], | |
'provincia_nombre':['Ciudad Aut贸noma de Buenos Aires','La Rioja','Santiago del Estero','Catamarca','Neuqu茅n','R铆o Negro','Santa Fe','Tucum谩n','Chubut','C贸rdoba','Santa Cruz'] | |
}) | |
provinces_list = ['Ciudad Aut贸noma de Buenos Aires','La Rioja','Santiago del Estero','Catamarca','Neuqu茅n','R铆o Negro','Santa Fe','Tucum谩n','Chubut','C贸rdoba','Santa Cruz'] | |
sucursales_seleccionadas = st.multiselect('Selecciona provincias de interes', provinces_list, placeholder="Elige una opcion") | |
# check if sucursales_seleccionadas no es null | |
if sucursales_seleccionadas: | |
for sucursal_seleccionada in sucursales_seleccionadas: | |
#st.write(f'**{sucursal_seleccionada}**') | |
province_code = provinces_dict[sucursal_seleccionada] | |
stores_selected = stores[stores['provincia']==province_code] | |
stores_selected = stores_selected[['banderaDescripcion','direccion', 'localidad']] | |
stores_selected.columns = ['Marca','Direccion', 'Localidad'] | |
#st.write(stores_selected) | |
province_codes = [provinces_dict[sucursal_seleccionada] for sucursal_seleccionada in sucursales_seleccionadas] | |
selected_provinces = stores[stores['provincia'].isin(province_codes)] | |
store_codes = selected_provinces['sucursalId'].to_list() | |
st.map(selected_provinces,latitude='lat', longitude='lng', color="#00a3e0", use_container_width=True) | |
tab1, tab2, tab3 = st.tabs(["Stevia 50u", "Stevia 96u", "Stevia 200u"]) | |
products = pd.read_csv("Products_unique.csv") | |
product_stores_original = pd.read_csv("Store-Products.csv") | |
def show_stats(product, competitors_list, product_stores_original, store_codes, provinces_dataframe, stores, cuantity): | |
product_row = products[products['id']==product] | |
st.text(product_row['nombre'].values[0]) | |
st.image(f"images/ledesma{cuantity}u.png", width=200) | |
product_stores_original = product_stores_original[product_stores_original['id_sucursal'].isin(store_codes)] | |
#save to csv | |
#TODO REMOVE THIS | |
product_stores_original_test = product_stores_original.copy() | |
product_stores_original_test.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True) | |
product_stores_original_test = pd.merge(product_stores_original_test, stores, on='sucursalId', how='inner') | |
product_stores_original_test = pd.merge(product_stores_original_test, provinces_dataframe, on='provincia', how='inner') | |
product_stores_original_test_filtered = product_stores_original_test[product_stores_original_test['id_producto'].isin(competitors_list + [product])] | |
st.subheader("Comparativa de productos en las regiones seleccionadas") | |
if product_stores_original_test_filtered.empty: | |
st.warning("No se encontraron precios para los productos en las regiones seleccionadas") | |
else: | |
product_stores_original_test_filtered.to_csv(f"product_stores_original_test_filtered_{cuantity}.csv",index=False) | |
st.bar_chart(product_stores_original_test_filtered,x='provincia_nombre',y='precio_lista',color='nombre_producto', stack=False, horizontal=True) | |
competitors = product_stores_original[product_stores_original['id_producto'].isin(competitors_list)] | |
product_presentation = product_stores_original[product_stores_original['id_producto'].isin([product])] | |
if product_presentation.empty: | |
st.warning("No se encontraron precios para el producto de Ledesma en las regiones seleccionadas") | |
else: | |
st.subheader("Precio del producto en las regiones seleccionadas") | |
product_presentation.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True) | |
product_presentation = pd.merge(product_presentation, stores, on='sucursalId', how='inner') | |
product_presentation = pd.merge(product_presentation, provinces_dataframe, on='provincia', how='inner') | |
st.bar_chart(product_presentation,x='banderaDescripcion',y='precio_lista', stack=False,color='provincia_nombre') | |
st.divider() | |
if competitors.empty: | |
st.warning("No se encontraron precios para los productos de la competencia en las regiones seleccionadas") | |
else: | |
###### | |
###### | |
st.subheader("Precio de los productos de la competencia en las regiones seleccionadas") | |
competitors_50_brands = competitors['marca_producto'].unique() | |
#reemplazar sucursalID por id | |
competitors.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True) | |
competitors_join = pd.merge(competitors, stores, on='sucursalId', how='inner') | |
competitors_join = pd.merge(competitors_join, provinces_dataframe, on='provincia', how='inner') | |
print("competitors_join") | |
print(competitors_join.columns) | |
for brand in competitors_50_brands: | |
st.write(brand) | |
st.bar_chart(competitors_join[competitors_join['marca_producto']==brand],x='banderaDescripcion',y='precio_lista',color='provincia_nombre', stack=False) | |
with tab1: | |
ledesma_50_u = 7799086000266 | |
competitors_ledesma_50_u = [7792129003620, 7791720030493, 7794940000758, 7790150812747] | |
show_stats(ledesma_50_u, competitors_ledesma_50_u, product_stores_original, store_codes, provinces_dataframe, stores,50) | |
with tab2: | |
ledesma_100_u = 7799086000051 | |
competitors_ledesma_100_u = [7794940000765, 7792129003637, 7791720030509, 7790150812761] | |
show_stats(ledesma_100_u, competitors_ledesma_100_u, product_stores_original, store_codes, provinces_dataframe, stores,96) | |
with tab3: | |
ledesma_200_u = 7799086000198 | |
competitors_ledesma_200_u = [7794940000772, 7792129003507, 7792129003644, 7790150812785] | |
show_stats(ledesma_200_u, competitors_ledesma_200_u, product_stores_original, store_codes, provinces_dataframe, stores,200) | |
st.divider() | |
with st.expander("Regla de comparacion :pencil:"): | |
col1, col2 , col3 = st.columns([1,2,1]) | |
with col1: | |
st.write("Producto") | |
st.write("Competidores") | |
with col2: | |
st.write("Azucar Ledesma 1 kg :pencil:") | |
st.button("Agregar competidores") | |
st.text_area(label='Competidores agregados',value="Azucar La Perla 1 kg") | |
col1, col2 , col3 = st.columns([1,2,1]) | |
with col1: | |
st.write("Ubicaciones :world_map:") | |
st.button("Agregar sucursales") | |
st.text_area(label='Ubicaciones incluidas',value="C. Pellegrini 3250,Hipermercado Carrefour,Rosario") | |
col1, col2 , col3 = st.columns([1,3,1]) | |
with col1: | |
combo = st.selectbox( | |
"Criterio", | |
("Menor precio", "Mayor precio"), | |
) | |
with col2: | |
if combo == "Menor precio": | |
st.text_input("Notificar si el precio del producto es **menor** por un porcentaje de") | |
if combo == "Mayor precio": | |
st.text_input("Notificar si el precio del producto es **mayor** por un porcentaje de") | |
st.checkbox("Notificar via email",value=True) | |
st.button("Guardar regla") |