GianJSX commited on
Commit
2f07243
1 Parent(s): 15db1c2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +188 -188
app.py CHANGED
@@ -1,189 +1,189 @@
1
- import streamlit as st
2
- import pandas as pd
3
- import csv
4
-
5
-
6
-
7
- st.logo(
8
- "images/ledesma-logo.png",
9
- icon_image="images/ledesma-logo.png",
10
- )
11
-
12
- st.image("images/ledesma-logo.png", width=300)
13
- st.markdown("<h2 style='text-align: left;'>Comparador de precios vs competencia</h1>", unsafe_allow_html=True)
14
- st.divider()
15
-
16
- st.subheader("Sucursales:")
17
-
18
- df = pd.read_csv("products.csv")
19
-
20
-
21
-
22
- stores = pd.read_csv("sucursales.csv")
23
- provinces = stores['provincia'].unique()
24
- provinces_dict = {
25
- 'Ciudad Autónoma de Buenos Aires': 'AR-C',
26
- 'La Rioja': 'AR-F',
27
- 'Santiago del Estero': 'AR-G',
28
- 'Catamarca': 'AR-K',
29
- 'Neuquén': 'AR-Q',
30
- 'Río Negro': 'AR-R',
31
- 'Santa Fe': 'AR-S',
32
- 'Tucumán': 'AR-T',
33
- 'Chubut': 'AR-U',
34
- 'Córdoba': 'AR-X',
35
- 'Santa Cruz': 'AR-Z'
36
- }
37
-
38
- provinces_dataframe = pd.DataFrame({
39
- 'provincia':['AR-C','AR-F','AR-G','AR-K','AR-Q','AR-R','AR-S','AR-T','AR-U','AR-X','AR-Z'],
40
- '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']
41
- })
42
-
43
- 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']
44
- sucursales_seleccionadas = st.multiselect('Selecciona provincias de interes', provinces_list, placeholder="Elige una opcion")
45
-
46
- # check if sucursales_seleccionadas no es null
47
- if sucursales_seleccionadas:
48
-
49
- for sucursal_seleccionada in sucursales_seleccionadas:
50
- #st.write(f'**{sucursal_seleccionada}**')
51
- province_code = provinces_dict[sucursal_seleccionada]
52
- stores_selected = stores[stores['provincia']==province_code]
53
- stores_selected = stores_selected[['banderaDescripcion','direccion', 'localidad']]
54
- stores_selected.columns = ['Marca','Direccion', 'Localidad']
55
- #st.write(stores_selected)
56
-
57
-
58
- province_codes = [provinces_dict[sucursal_seleccionada] for sucursal_seleccionada in sucursales_seleccionadas]
59
-
60
- selected_provinces = stores[stores['provincia'].isin(province_codes)]
61
-
62
- store_codes = selected_provinces['sucursalId'].to_list()
63
-
64
-
65
- st.map(selected_provinces,latitude='lat', longitude='lng', color="#00a3e0", use_container_width=True)
66
-
67
- tab1, tab2, tab3 = st.tabs(["Stevia 50u", "Stevia 96u", "Stevia 200u"])
68
-
69
- products = pd.read_csv("Products_unique.csv")
70
- product_stores_original = pd.read_csv("Store-Products.csv")
71
-
72
- def show_stats(product, competitors_list, product_stores_original, store_codes, provinces_dataframe, stores, cuantity):
73
-
74
- product_row = products[products['id']==product]
75
- st.text(product_row['nombre'].values[0])
76
-
77
- st.image(f"images/ledesma{cuantity}u.png", width=200)
78
-
79
- product_stores_original = product_stores_original[product_stores_original['id_sucursal'].isin(store_codes)]
80
-
81
-
82
- #save to csv
83
- #TODO REMOVE THIS
84
- product_stores_original_test = product_stores_original.copy()
85
- product_stores_original_test.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True)
86
- product_stores_original_test = pd.merge(product_stores_original_test, stores, on='sucursalId', how='inner')
87
- product_stores_original_test = pd.merge(product_stores_original_test, provinces_dataframe, on='provincia', how='inner')
88
- product_stores_original_test_filtered = product_stores_original_test[product_stores_original_test['id_producto'].isin(competitors_list + [product])]
89
-
90
-
91
- st.subheader("Comparativa de productos en las regiones seleccionadas")
92
- if product_stores_original_test_filtered.empty:
93
- st.warning("No se encontraron precios para los productos en las regiones seleccionadas")
94
- else:
95
- product_stores_original_test_filtered.to_csv(f"product_stores_original_test_filtered_{cuantity}.csv",index=False)
96
- st.bar_chart(product_stores_original_test_filtered,x='provincia_nombre',y='precio_lista',color='nombre_producto', stack=False, horizontal=True)
97
-
98
-
99
-
100
- competitors = product_stores_original[product_stores_original['id_producto'].isin(competitors_list)]
101
- product_presentation = product_stores_original[product_stores_original['id_producto'].isin([product])]
102
-
103
- if product_presentation.empty:
104
- st.warning("No se encontraron precios para el producto de Ledesma en las regiones seleccionadas")
105
- else:
106
- st.subheader("Precio del producto en las regiones seleccionadas")
107
- product_presentation.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True)
108
- product_presentation = pd.merge(product_presentation, stores, on='sucursalId', how='inner')
109
- product_presentation = pd.merge(product_presentation, provinces_dataframe, on='provincia', how='inner')
110
- st.bar_chart(product_presentation,x='banderaDescripcion',y='precio_lista', stack=False,color='provincia_nombre')
111
-
112
-
113
- st.divider()
114
-
115
- if competitors.empty:
116
- st.warning("No se encontraron precios para los productos de la competencia en las regiones seleccionadas")
117
- else:
118
- ######
119
- ######
120
- st.subheader("Precio de los productos de la competencia en las regiones seleccionadas")
121
- competitors_50_brands = competitors['marca_producto'].unique()
122
- #reemplazar sucursalID por id
123
- competitors.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True)
124
- competitors_join = pd.merge(competitors, stores, on='sucursalId', how='inner')
125
- competitors_join = pd.merge(competitors_join, provinces_dataframe, on='provincia', how='inner')
126
- print("competitors_join")
127
- print(competitors_join.columns)
128
- for brand in competitors_50_brands:
129
- st.write(brand)
130
- st.bar_chart(competitors_join[competitors_join['marca_producto']==brand],x='banderaDescripcion',y='precio_lista',color='provincia_nombre', stack=False)
131
-
132
-
133
-
134
- with tab1:
135
-
136
- ledesma_50_u = 7799086000266
137
- competitors_ledesma_50_u = [7792129003620, 7791720030493, 7794940000758, 7790150812747]
138
- show_stats(ledesma_50_u, competitors_ledesma_50_u, product_stores_original, store_codes, provinces_dataframe, stores,50)
139
-
140
- with tab2:
141
- ledesma_100_u = 7799086000051
142
- competitors_ledesma_100_u = [7794940000765, 7792129003637, 7791720030509, 7790150812761]
143
- show_stats(ledesma_100_u, competitors_ledesma_100_u, product_stores_original, store_codes, provinces_dataframe, stores,96)
144
-
145
-
146
-
147
- with tab3:
148
- ledesma_200_u = 7799086000198
149
- competitors_ledesma_200_u = [7794940000772, 7792129003507, 7792129003644, 7790150812785]
150
- show_stats(ledesma_200_u, competitors_ledesma_200_u, product_stores_original, store_codes, provinces_dataframe, stores,200)
151
-
152
-
153
- st.divider()
154
- with st.expander("Regla de comparacion :pencil:"):
155
-
156
-
157
- col1, col2 , col3 = st.columns([1,2,1])
158
-
159
- with col1:
160
- st.write("Producto")
161
- st.write("Competidores")
162
-
163
- with col2:
164
- st.write("Azucar Ledesma 1 kg :pencil:")
165
- st.button("Agregar competidores")
166
-
167
- st.text_area(label='Competidores agregados',value="Azucar La Perla 1 kg")
168
-
169
- col1, col2 , col3 = st.columns([1,2,1])
170
- with col1:
171
- st.write("Ubicaciones :world_map:")
172
- st.button("Agregar sucursales")
173
-
174
-
175
- st.text_area(label='Ubicaciones incluidas',value="C. Pellegrini 3250,Hipermercado Carrefour,Rosario")
176
-
177
- col1, col2 , col3 = st.columns([1,3,1])
178
- with col1:
179
- combo = st.selectbox(
180
- "Criterio",
181
- ("Menor precio", "Mayor precio"),
182
- )
183
- with col2:
184
- if combo == "Menor precio":
185
- st.text_input("Notificar si el precio del producto es **menor** por un porcentaje de")
186
- if combo == "Mayor precio":
187
- st.text_input("Notificar si el precio del producto es **mayor** por un porcentaje de")
188
- st.checkbox("Notificar via email",value=True)
189
  st.button("Guardar regla")
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import csv
4
+
5
+
6
+
7
+ st.logo(
8
+ "images/ledesma-logo.png",
9
+ icon_image="images/ledesma-logo.png",
10
+ )
11
+
12
+ st.image("images/ledesma-logo.png", width=300)
13
+ st.markdown("<h2 style='text-align: left;'>Comparador de precios vs competencia</h1>", unsafe_allow_html=True)
14
+ st.divider()
15
+
16
+ st.subheader("Sucursales:")
17
+
18
+ df = pd.read_csv("./Products.csv")
19
+
20
+
21
+
22
+ stores = pd.read_csv("sucursales.csv")
23
+ provinces = stores['provincia'].unique()
24
+ provinces_dict = {
25
+ 'Ciudad Autónoma de Buenos Aires': 'AR-C',
26
+ 'La Rioja': 'AR-F',
27
+ 'Santiago del Estero': 'AR-G',
28
+ 'Catamarca': 'AR-K',
29
+ 'Neuquén': 'AR-Q',
30
+ 'Río Negro': 'AR-R',
31
+ 'Santa Fe': 'AR-S',
32
+ 'Tucumán': 'AR-T',
33
+ 'Chubut': 'AR-U',
34
+ 'Córdoba': 'AR-X',
35
+ 'Santa Cruz': 'AR-Z'
36
+ }
37
+
38
+ provinces_dataframe = pd.DataFrame({
39
+ 'provincia':['AR-C','AR-F','AR-G','AR-K','AR-Q','AR-R','AR-S','AR-T','AR-U','AR-X','AR-Z'],
40
+ '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']
41
+ })
42
+
43
+ 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']
44
+ sucursales_seleccionadas = st.multiselect('Selecciona provincias de interes', provinces_list, placeholder="Elige una opcion")
45
+
46
+ # check if sucursales_seleccionadas no es null
47
+ if sucursales_seleccionadas:
48
+
49
+ for sucursal_seleccionada in sucursales_seleccionadas:
50
+ #st.write(f'**{sucursal_seleccionada}**')
51
+ province_code = provinces_dict[sucursal_seleccionada]
52
+ stores_selected = stores[stores['provincia']==province_code]
53
+ stores_selected = stores_selected[['banderaDescripcion','direccion', 'localidad']]
54
+ stores_selected.columns = ['Marca','Direccion', 'Localidad']
55
+ #st.write(stores_selected)
56
+
57
+
58
+ province_codes = [provinces_dict[sucursal_seleccionada] for sucursal_seleccionada in sucursales_seleccionadas]
59
+
60
+ selected_provinces = stores[stores['provincia'].isin(province_codes)]
61
+
62
+ store_codes = selected_provinces['sucursalId'].to_list()
63
+
64
+
65
+ st.map(selected_provinces,latitude='lat', longitude='lng', color="#00a3e0", use_container_width=True)
66
+
67
+ tab1, tab2, tab3 = st.tabs(["Stevia 50u", "Stevia 96u", "Stevia 200u"])
68
+
69
+ products = pd.read_csv("Products_unique.csv")
70
+ product_stores_original = pd.read_csv("Store-Products.csv")
71
+
72
+ def show_stats(product, competitors_list, product_stores_original, store_codes, provinces_dataframe, stores, cuantity):
73
+
74
+ product_row = products[products['id']==product]
75
+ st.text(product_row['nombre'].values[0])
76
+
77
+ st.image(f"images/ledesma{cuantity}u.png", width=200)
78
+
79
+ product_stores_original = product_stores_original[product_stores_original['id_sucursal'].isin(store_codes)]
80
+
81
+
82
+ #save to csv
83
+ #TODO REMOVE THIS
84
+ product_stores_original_test = product_stores_original.copy()
85
+ product_stores_original_test.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True)
86
+ product_stores_original_test = pd.merge(product_stores_original_test, stores, on='sucursalId', how='inner')
87
+ product_stores_original_test = pd.merge(product_stores_original_test, provinces_dataframe, on='provincia', how='inner')
88
+ product_stores_original_test_filtered = product_stores_original_test[product_stores_original_test['id_producto'].isin(competitors_list + [product])]
89
+
90
+
91
+ st.subheader("Comparativa de productos en las regiones seleccionadas")
92
+ if product_stores_original_test_filtered.empty:
93
+ st.warning("No se encontraron precios para los productos en las regiones seleccionadas")
94
+ else:
95
+ product_stores_original_test_filtered.to_csv(f"product_stores_original_test_filtered_{cuantity}.csv",index=False)
96
+ st.bar_chart(product_stores_original_test_filtered,x='provincia_nombre',y='precio_lista',color='nombre_producto', stack=False, horizontal=True)
97
+
98
+
99
+
100
+ competitors = product_stores_original[product_stores_original['id_producto'].isin(competitors_list)]
101
+ product_presentation = product_stores_original[product_stores_original['id_producto'].isin([product])]
102
+
103
+ if product_presentation.empty:
104
+ st.warning("No se encontraron precios para el producto de Ledesma en las regiones seleccionadas")
105
+ else:
106
+ st.subheader("Precio del producto en las regiones seleccionadas")
107
+ product_presentation.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True)
108
+ product_presentation = pd.merge(product_presentation, stores, on='sucursalId', how='inner')
109
+ product_presentation = pd.merge(product_presentation, provinces_dataframe, on='provincia', how='inner')
110
+ st.bar_chart(product_presentation,x='banderaDescripcion',y='precio_lista', stack=False,color='provincia_nombre')
111
+
112
+
113
+ st.divider()
114
+
115
+ if competitors.empty:
116
+ st.warning("No se encontraron precios para los productos de la competencia en las regiones seleccionadas")
117
+ else:
118
+ ######
119
+ ######
120
+ st.subheader("Precio de los productos de la competencia en las regiones seleccionadas")
121
+ competitors_50_brands = competitors['marca_producto'].unique()
122
+ #reemplazar sucursalID por id
123
+ competitors.rename(columns={'id_sucursal': 'sucursalId'}, inplace=True)
124
+ competitors_join = pd.merge(competitors, stores, on='sucursalId', how='inner')
125
+ competitors_join = pd.merge(competitors_join, provinces_dataframe, on='provincia', how='inner')
126
+ print("competitors_join")
127
+ print(competitors_join.columns)
128
+ for brand in competitors_50_brands:
129
+ st.write(brand)
130
+ st.bar_chart(competitors_join[competitors_join['marca_producto']==brand],x='banderaDescripcion',y='precio_lista',color='provincia_nombre', stack=False)
131
+
132
+
133
+
134
+ with tab1:
135
+
136
+ ledesma_50_u = 7799086000266
137
+ competitors_ledesma_50_u = [7792129003620, 7791720030493, 7794940000758, 7790150812747]
138
+ show_stats(ledesma_50_u, competitors_ledesma_50_u, product_stores_original, store_codes, provinces_dataframe, stores,50)
139
+
140
+ with tab2:
141
+ ledesma_100_u = 7799086000051
142
+ competitors_ledesma_100_u = [7794940000765, 7792129003637, 7791720030509, 7790150812761]
143
+ show_stats(ledesma_100_u, competitors_ledesma_100_u, product_stores_original, store_codes, provinces_dataframe, stores,96)
144
+
145
+
146
+
147
+ with tab3:
148
+ ledesma_200_u = 7799086000198
149
+ competitors_ledesma_200_u = [7794940000772, 7792129003507, 7792129003644, 7790150812785]
150
+ show_stats(ledesma_200_u, competitors_ledesma_200_u, product_stores_original, store_codes, provinces_dataframe, stores,200)
151
+
152
+
153
+ st.divider()
154
+ with st.expander("Regla de comparacion :pencil:"):
155
+
156
+
157
+ col1, col2 , col3 = st.columns([1,2,1])
158
+
159
+ with col1:
160
+ st.write("Producto")
161
+ st.write("Competidores")
162
+
163
+ with col2:
164
+ st.write("Azucar Ledesma 1 kg :pencil:")
165
+ st.button("Agregar competidores")
166
+
167
+ st.text_area(label='Competidores agregados',value="Azucar La Perla 1 kg")
168
+
169
+ col1, col2 , col3 = st.columns([1,2,1])
170
+ with col1:
171
+ st.write("Ubicaciones :world_map:")
172
+ st.button("Agregar sucursales")
173
+
174
+
175
+ st.text_area(label='Ubicaciones incluidas',value="C. Pellegrini 3250,Hipermercado Carrefour,Rosario")
176
+
177
+ col1, col2 , col3 = st.columns([1,3,1])
178
+ with col1:
179
+ combo = st.selectbox(
180
+ "Criterio",
181
+ ("Menor precio", "Mayor precio"),
182
+ )
183
+ with col2:
184
+ if combo == "Menor precio":
185
+ st.text_input("Notificar si el precio del producto es **menor** por un porcentaje de")
186
+ if combo == "Mayor precio":
187
+ st.text_input("Notificar si el precio del producto es **mayor** por un porcentaje de")
188
+ st.checkbox("Notificar via email",value=True)
189
  st.button("Guardar regla")