GMARTINEZMILLA commited on
Commit
6e09d82
1 Parent(s): d67815a

feat: generated files

Browse files
Files changed (3) hide show
  1. app.py +129 -27
  2. clientes_relevantes.csv +684 -0
  3. productos.csv +0 -0
app.py CHANGED
@@ -3,6 +3,8 @@ import pandas as pd
3
  import plotly.express as px
4
  import matplotlib.pyplot as plt
5
  import numpy as np
 
 
6
 
7
  # Page configuration
8
  st.set_page_config(page_title="Customer Insights App", page_icon=":bar_chart:")
@@ -16,6 +18,11 @@ euros_proveedor = pd.read_csv("euros_proveedor.csv", sep=',')
16
  df['CLIENTE'] = df['CLIENTE'].astype(str)
17
  nombres_proveedores['codigo'] = nombres_proveedores['codigo'].astype(str)
18
  euros_proveedor['CLIENTE'] = euros_proveedor['CLIENTE'].astype(str)
 
 
 
 
 
19
 
20
  # Convert all columns except 'CLIENTE' to float in euros_proveedor
21
  for col in euros_proveedor.columns:
@@ -87,7 +94,7 @@ st.markdown("""
87
  """)
88
 
89
  # Navigation menu
90
- page = st.selectbox("Select the tool you want to use", ["", "Customer Analysis", "Basket Recommendations"])
91
 
92
  # Home Page
93
  if page == "":
@@ -188,11 +195,14 @@ elif page == "Customer Analysis":
188
  st.warning(f"No data found for customer {customer_code}. Please check the code.")
189
 
190
  # Customer Recommendations Page
191
- elif page == "Basket Recommendations":
192
- st.title("Basket Recommendations")
193
- st.markdown("""Get tailored product recommendations for your customers based on their purchasing basket.""")
194
 
195
- # Use the same customer search as in Customer Analysis
 
 
 
 
196
  partial_code = st.text_input("Enter part of Customer Code for Recommendations (or leave empty to see all)")
197
  if partial_code:
198
  filtered_customers = df[df['CLIENTE'].str.contains(partial_code)]
@@ -201,30 +211,122 @@ elif page == "Basket Recommendations":
201
  customer_list = filtered_customers['CLIENTE'].unique()
202
  customer_code = st.selectbox("Select Customer Code for Recommendations", customer_list)
203
 
204
- # Basket input section
205
- if customer_code:
206
- st.write(f"### Purchase Basket for Customer {customer_code}")
 
 
207
 
208
- # Create input fields for article codes and units
209
- basket_items = []
210
- num_lines = st.number_input("How many lines do you want to add?", min_value=1, value=1, step=1)
211
-
212
- for i in range(num_lines):
213
- col1, col2 = st.columns(2)
214
- with col1:
215
- article_code = st.text_input(f"Enter Article Code for Line {i + 1}")
216
- with col2:
217
- units = st.number_input(f"Enter Units for Line {i + 1}", min_value=1, value=1, step=1)
218
 
219
- # Add each article code and units to the list
220
- if article_code and units:
221
- basket_items.append((article_code, units))
222
 
223
- # Generate the concatenated string
224
- input_cesta = ''.join([f"{code * units}" for code, units in basket_items])
225
 
226
- # Show the result
227
- st.write(f"Generated input_cesta: {input_cesta}")
228
 
229
- # Placeholder for passing the input_cesta to the model
230
- st.write("Model is not yet implemented, but input_cesta is ready.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  import plotly.express as px
4
  import matplotlib.pyplot as plt
5
  import numpy as np
6
+ from sklearn.feature_extraction.text import TfidfVectorizer
7
+ from sklearn.metrics.pairwise import cosine_similarity
8
 
9
  # Page configuration
10
  st.set_page_config(page_title="Customer Insights App", page_icon=":bar_chart:")
 
18
  df['CLIENTE'] = df['CLIENTE'].astype(str)
19
  nombres_proveedores['codigo'] = nombres_proveedores['codigo'].astype(str)
20
  euros_proveedor['CLIENTE'] = euros_proveedor['CLIENTE'].astype(str)
21
+ fieles_df = pd.read_csv("clientes_relevantes.csv")
22
+ # Cargo csv del histórico de cestas
23
+ cestas = pd.read_csv("cestas.csv")
24
+ # Cargo csv de productos y descripcion
25
+ productos = pd.read_csv("productos.csv")
26
 
27
  # Convert all columns except 'CLIENTE' to float in euros_proveedor
28
  for col in euros_proveedor.columns:
 
94
  """)
95
 
96
  # Navigation menu
97
+ page = st.selectbox("Select the tool you want to use", ["", "Customer Analysis", "Articles Recommendations"])
98
 
99
  # Home Page
100
  if page == "":
 
195
  st.warning(f"No data found for customer {customer_code}. Please check the code.")
196
 
197
  # Customer Recommendations Page
198
+ elif page == "Articles Recommendations":
199
+ st.title("Articles Recommendations")
 
200
 
201
+ st.markdown("""
202
+ Get tailored recommendations for your customers based on their basket.
203
+ """)
204
+
205
+ # Campo input para cliente
206
  partial_code = st.text_input("Enter part of Customer Code for Recommendations (or leave empty to see all)")
207
  if partial_code:
208
  filtered_customers = df[df['CLIENTE'].str.contains(partial_code)]
 
211
  customer_list = filtered_customers['CLIENTE'].unique()
212
  customer_code = st.selectbox("Select Customer Code for Recommendations", customer_list)
213
 
214
+ # DEfinicion de la funcion recomienda
215
+ def recomienda(new_basket):
216
+ # Calcular la matriz TF-IDF
217
+ tfidf = TfidfVectorizer()
218
+ tfidf_matrix = tfidf.fit_transform(cestas['Cestas'])
219
 
220
+ # Convertir la nueva cesta en formato TF-IDF
221
+ new_basket_str = ' '.join(new_basket)
222
+ new_basket_tfidf = tfidf.transform([new_basket_str])
 
 
 
 
 
 
 
223
 
224
+ # Comparar la nueva cesta con las anteriores
225
+ similarities = cosine_similarity(new_basket_tfidf, tfidf_matrix)
 
226
 
 
 
227
 
228
+ # Obtener los índices de las cestas más similares
229
+ similar_indices = similarities.argsort()[0][-3:] # Las 3 más similares
230
 
231
+ # Crear un diccionario para contar las recomendaciones
232
+ recommendations_count = {}
233
+ total_similarity = 0
234
+
235
+ # Recomendar productos de cestas similares
236
+ for idx in similar_indices:
237
+ sim_score = similarities[0][idx]
238
+ total_similarity += sim_score
239
+ products = cestas.iloc[idx]['Cestas'].split()
240
+
241
+ for product in products:
242
+ if product.strip() not in new_basket: # Evitar recomendar lo que ya está en la cesta
243
+ if product.strip() in recommendations_count:
244
+ recommendations_count[product.strip()] += sim_score
245
+ else:
246
+ recommendations_count[product.strip()] = sim_score
247
+
248
+ # Calcular la probabilidad relativa de cada producto recomendado
249
+ recommendations_with_prob = []
250
+ if total_similarity > 0: # Verificar que total_similarity no sea cero
251
+ recommendations_with_prob = [(product, score / total_similarity) for product, score in recommendations_count.items()]
252
+ else:
253
+ print("No se encontraron similitudes suficientes para calcular probabilidades.")
254
+
255
+ recommendations_with_prob.sort(key=lambda x: x[1], reverse=True) # Ordenar por puntuación
256
+
257
+ # Crear un nuevo DataFrame para almacenar las recomendaciones con descripciones y probabilidades
258
+ recommendations_df = pd.DataFrame(columns=['ARTICULO', 'DESCRIPCION', 'PROBABILIDAD'])
259
+
260
+ # Agregar las recomendaciones al DataFrame usando pd.concat
261
+ for product, prob in recommendations_with_prob:
262
+ # Buscar la descripción en el DataFrame de productos
263
+ description = productos.loc[productos['ARTICULO'] == product, 'DESCRIPCION']
264
+ if not description.empty:
265
+ # Crear un nuevo DataFrame temporal para la recomendación
266
+ temp_df = pd.DataFrame({
267
+ 'ARTICULO': [product],
268
+ 'DESCRIPCION': [description.values[0]], # Obtener el primer valor encontrado
269
+ 'PROBABILIDAD': [prob]
270
+ })
271
+ # Concatenar el DataFrame temporal al DataFrame de recomendaciones
272
+ recommendations_df = pd.concat([recommendations_df, temp_df], ignore_index=True)
273
+
274
+ return recommendations_df
275
+
276
+ # Comprobar si el cliente está en el CSV de fieles
277
+
278
+ is_fiel = customer_code in fieles_df['CLIENTE'].astype(str).values
279
+
280
+ if customer_code:
281
+ if is_fiel:
282
+ st.write(f"### Customer {customer_code} is a loyal customer.")
283
+ option = st.selectbox("Select Recommendation Type", ["Select an option", "By Purchase History", "By Current Basket"])
284
+
285
+ if option == "By Purchase History":
286
+ st.warning("Option not available... aún")
287
+ elif option == "By Current Basket":
288
+
289
+ st.write("Enter the items in the basket:")
290
+
291
+ # Input para los artículos y unidades
292
+ items = st.text_input("Enter items (comma-separated):").split(',')
293
+ quantities = st.text_input("Enter quantities (comma-separated):").split(',')
294
+
295
+ # Crear una lista de artículos basada en la entrada
296
+ new_basket = [item.strip() for item in items]
297
+
298
+ # Asegurarse de que las longitudes de artículos y cantidades coincidan
299
+ if len(new_basket) == len(quantities):
300
+ # Procesar la lista para recomendar
301
+ recommendations_df = recomienda(new_basket)
302
+
303
+ if not recommendations_df.empty:
304
+ st.write("### Recommendations based on the current basket:")
305
+ st.dataframe(recommendations_df)
306
+ else:
307
+ st.warning("No recommendations found for the provided basket.")
308
+ else:
309
+ st.warning("The number of items must match the number of quantities.")
310
+ else:
311
+ st.write(f"### Customer {customer_code} is not a loyal customer.")
312
+ st.write("Recommendation based on the basket. Please enter the items:")
313
+
314
+ # Input para los artículos y unidades
315
+ items = st.text_input("Enter items (comma-separated):").split(',')
316
+ quantities = st.text_input("Enter quantities (comma-separated):").split(',')
317
+
318
+ # Crear una lista de artículos basada en la entrada
319
+ new_basket = [item.strip() for item in items]
320
+
321
+ # Asegurarse de que las longitudes de artículos y cantidades coincidan
322
+ if len(new_basket) == len(quantities):
323
+ # Procesar la lista para recomendar
324
+ recommendations_df = recomienda(new_basket)
325
+
326
+ if not recommendations_df.empty:
327
+ st.write("### Recommendations based on the current basket:")
328
+ st.dataframe(recommendations_df)
329
+ else:
330
+ st.warning("No recommendations found for the provided basket.")
331
+ else:
332
+ st.warning("The number of items must match the number of quantities.")
clientes_relevantes.csv ADDED
@@ -0,0 +1,684 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ,Cliente
2
+ 0,1019
3
+ 5,1161
4
+ 6,1169
5
+ 7,1177
6
+ 8,1193
7
+ 11,1218
8
+ 12,1232
9
+ 16,1348
10
+ 19,1381
11
+ 20,1403
12
+ 22,1421
13
+ 23,1447
14
+ 25,1486
15
+ 28,1523
16
+ 30,1575
17
+ 32,1597
18
+ 35,1630
19
+ 39,1665
20
+ 41,1692
21
+ 43,1853
22
+ 47,2098
23
+ 49,2132
24
+ 52,2190
25
+ 53,2192
26
+ 54,2204
27
+ 55,2247
28
+ 56,2252
29
+ 57,2267
30
+ 59,2279
31
+ 60,2308
32
+ 62,2484
33
+ 63,3001
34
+ 64,3003
35
+ 65,3016
36
+ 66,4350
37
+ 67,5018
38
+ 68,5022
39
+ 69,5037
40
+ 70,5295
41
+ 72,6000
42
+ 74,6062
43
+ 75,6077
44
+ 76,6079
45
+ 77,6089
46
+ 78,6110
47
+ 87,6503
48
+ 88,6506
49
+ 90,6515
50
+ 94,6559
51
+ 96,6588
52
+ 97,6593
53
+ 100,7034
54
+ 101,7035
55
+ 103,7073
56
+ 105,7136
57
+ 106,7141
58
+ 107,7179
59
+ 108,7219
60
+ 109,7243
61
+ 110,7335
62
+ 111,7340
63
+ 112,7451
64
+ 118,7593
65
+ 121,7622
66
+ 122,7629
67
+ 123,7667
68
+ 124,7701
69
+ 125,7702
70
+ 127,7763
71
+ 129,7791
72
+ 131,7806
73
+ 132,8060
74
+ 133,8063
75
+ 136,8222
76
+ 137,8227
77
+ 139,8955
78
+ 141,10018
79
+ 145,12197
80
+ 147,12566
81
+ 149,12595
82
+ 150,12612
83
+ 151,13244
84
+ 152,14023
85
+ 153,14030
86
+ 155,14064
87
+ 156,14079
88
+ 158,14104
89
+ 159,14165
90
+ 161,14177
91
+ 162,14182
92
+ 166,78020
93
+ 170,78028
94
+ 173,78050
95
+ 174,78065
96
+ 181,78102
97
+ 184,78116
98
+ 185,78122
99
+ 187,78129
100
+ 189,78155
101
+ 191,78177
102
+ 193,78195
103
+ 195,78208
104
+ 196,78218
105
+ 198,78222
106
+ 200,78229
107
+ 202,78248
108
+ 203,78253
109
+ 205,78272
110
+ 206,78276
111
+ 207,78283
112
+ 210,78300
113
+ 213,78332
114
+ 214,78335
115
+ 222,78387
116
+ 224,78398
117
+ 225,78401
118
+ 231,78450
119
+ 232,78453
120
+ 233,78463
121
+ 234,78469
122
+ 237,78486
123
+ 239,78491
124
+ 244,78539
125
+ 252,78584
126
+ 253,78585
127
+ 256,78591
128
+ 257,78601
129
+ 260,78611
130
+ 267,78664
131
+ 270,78673
132
+ 271,78679
133
+ 276,78704
134
+ 281,78722
135
+ 283,78725
136
+ 291,78739
137
+ 294,78743
138
+ 295,78747
139
+ 296,78748
140
+ 299,78756
141
+ 300,78762
142
+ 301,78763
143
+ 304,78773
144
+ 309,78796
145
+ 310,78799
146
+ 311,78802
147
+ 312,78803
148
+ 315,78817
149
+ 317,78827
150
+ 318,78830
151
+ 319,78832
152
+ 326,78858
153
+ 327,78868
154
+ 328,78872
155
+ 329,78879
156
+ 334,78901
157
+ 338,78916
158
+ 343,78942
159
+ 347,78951
160
+ 348,78953
161
+ 351,78969
162
+ 355,78987
163
+ 357,78991
164
+ 358,79001
165
+ 359,79017
166
+ 360,79019
167
+ 361,79023
168
+ 362,79024
169
+ 363,79031
170
+ 365,79037
171
+ 369,79071
172
+ 371,79081
173
+ 373,79086
174
+ 374,79090
175
+ 376,79093
176
+ 377,79095
177
+ 379,79101
178
+ 382,79113
179
+ 383,79114
180
+ 385,79117
181
+ 386,79127
182
+ 387,79129
183
+ 389,79133
184
+ 392,79145
185
+ 393,79152
186
+ 394,79160
187
+ 395,79164
188
+ 400,79177
189
+ 401,79187
190
+ 402,79188
191
+ 403,79192
192
+ 404,79193
193
+ 405,79198
194
+ 408,79205
195
+ 409,79210
196
+ 410,79211
197
+ 411,79217
198
+ 412,79221
199
+ 415,79237
200
+ 417,79266
201
+ 420,79280
202
+ 421,79284
203
+ 422,79297
204
+ 423,79316
205
+ 424,79324
206
+ 425,79325
207
+ 426,79328
208
+ 427,79331
209
+ 428,79340
210
+ 430,79354
211
+ 431,79355
212
+ 433,79361
213
+ 434,79362
214
+ 436,79378
215
+ 444,79426
216
+ 445,79435
217
+ 447,79451
218
+ 448,79462
219
+ 449,79465
220
+ 450,79466
221
+ 451,79467
222
+ 452,79477
223
+ 453,79480
224
+ 454,79483
225
+ 455,79486
226
+ 456,79488
227
+ 458,79495
228
+ 459,79497
229
+ 463,79518
230
+ 465,79529
231
+ 466,79531
232
+ 471,79549
233
+ 472,79550
234
+ 473,79551
235
+ 476,79561
236
+ 477,79565
237
+ 478,79568
238
+ 479,79576
239
+ 480,79580
240
+ 483,79593
241
+ 484,79594
242
+ 485,79609
243
+ 486,79610
244
+ 487,79614
245
+ 489,79631
246
+ 495,79653
247
+ 496,79655
248
+ 497,79660
249
+ 498,79667
250
+ 499,79673
251
+ 500,79674
252
+ 501,79686
253
+ 502,79687
254
+ 504,79694
255
+ 506,79703
256
+ 509,79727
257
+ 513,79742
258
+ 514,79754
259
+ 515,79757
260
+ 516,79762
261
+ 517,79764
262
+ 519,79769
263
+ 522,79775
264
+ 524,79786
265
+ 526,79789
266
+ 528,79803
267
+ 529,79807
268
+ 530,79812
269
+ 531,79819
270
+ 532,79827
271
+ 535,79843
272
+ 536,79844
273
+ 537,79854
274
+ 538,79859
275
+ 539,79863
276
+ 543,79907
277
+ 544,79908
278
+ 545,79909
279
+ 546,79915
280
+ 547,79920
281
+ 548,79921
282
+ 549,79931
283
+ 550,79932
284
+ 551,79933
285
+ 556,79953
286
+ 557,79965
287
+ 558,79981
288
+ 559,79991
289
+ 561,80018
290
+ 562,80022
291
+ 563,80024
292
+ 564,80026
293
+ 565,80027
294
+ 566,80030
295
+ 567,80033
296
+ 568,80036
297
+ 569,80038
298
+ 570,80039
299
+ 571,80042
300
+ 572,80044
301
+ 573,80045
302
+ 574,80048
303
+ 575,80058
304
+ 580,80087
305
+ 581,80095
306
+ 583,80106
307
+ 584,80108
308
+ 585,80123
309
+ 586,80129
310
+ 588,80139
311
+ 590,80147
312
+ 592,80156
313
+ 595,80164
314
+ 599,80180
315
+ 600,80183
316
+ 604,80197
317
+ 605,80202
318
+ 607,80210
319
+ 610,80225
320
+ 611,80231
321
+ 613,80243
322
+ 614,80249
323
+ 619,80259
324
+ 622,80287
325
+ 624,80298
326
+ 625,80301
327
+ 626,80303
328
+ 627,80307
329
+ 628,80308
330
+ 629,80310
331
+ 630,80312
332
+ 631,80315
333
+ 632,80317
334
+ 633,80318
335
+ 640,80361
336
+ 641,80363
337
+ 642,80375
338
+ 643,80377
339
+ 645,80380
340
+ 646,80389
341
+ 647,80390
342
+ 648,80392
343
+ 649,80393
344
+ 650,80396
345
+ 651,80401
346
+ 652,80404
347
+ 653,80405
348
+ 656,80418
349
+ 657,80419
350
+ 658,80429
351
+ 660,80440
352
+ 663,80445
353
+ 664,80447
354
+ 666,80453
355
+ 667,80455
356
+ 669,80460
357
+ 671,80468
358
+ 672,80471
359
+ 675,80479
360
+ 677,80489
361
+ 678,80495
362
+ 681,80511
363
+ 682,80512
364
+ 684,80520
365
+ 685,80524
366
+ 686,80532
367
+ 687,80538
368
+ 688,80540
369
+ 690,80544
370
+ 691,80546
371
+ 692,80555
372
+ 694,80561
373
+ 696,80570
374
+ 700,80582
375
+ 701,80584
376
+ 702,80586
377
+ 705,80604
378
+ 708,80612
379
+ 709,80615
380
+ 715,80637
381
+ 718,80661
382
+ 721,80680
383
+ 723,80689
384
+ 724,80699
385
+ 727,80725
386
+ 730,80734
387
+ 732,80739
388
+ 733,80741
389
+ 734,80747
390
+ 735,80751
391
+ 736,80753
392
+ 741,80801
393
+ 744,80828
394
+ 746,80852
395
+ 751,80867
396
+ 752,80871
397
+ 753,80872
398
+ 754,80873
399
+ 755,80875
400
+ 756,80877
401
+ 757,80881
402
+ 758,80886
403
+ 759,80894
404
+ 760,80897
405
+ 761,80911
406
+ 762,80912
407
+ 764,80923
408
+ 765,80924
409
+ 766,80930
410
+ 772,80952
411
+ 773,80955
412
+ 774,80963
413
+ 778,80979
414
+ 779,80980
415
+ 780,80988
416
+ 781,80992
417
+ 782,81003
418
+ 783,81014
419
+ 788,81045
420
+ 791,81077
421
+ 796,81107
422
+ 797,81110
423
+ 798,81121
424
+ 802,81135
425
+ 804,81140
426
+ 805,81144
427
+ 806,81149
428
+ 807,81150
429
+ 808,81151
430
+ 810,81160
431
+ 811,81162
432
+ 814,81173
433
+ 815,81178
434
+ 816,81188
435
+ 818,81205
436
+ 819,81207
437
+ 820,81208
438
+ 827,81239
439
+ 830,81253
440
+ 834,81275
441
+ 835,81280
442
+ 840,81295
443
+ 847,81312
444
+ 850,81315
445
+ 851,81323
446
+ 852,81325
447
+ 855,81339
448
+ 857,81349
449
+ 859,81363
450
+ 863,81380
451
+ 864,81389
452
+ 865,81390
453
+ 870,81415
454
+ 871,81418
455
+ 874,81430
456
+ 876,81439
457
+ 877,81441
458
+ 882,81461
459
+ 883,81465
460
+ 884,81473
461
+ 885,81474
462
+ 887,81476
463
+ 889,81487
464
+ 901,81533
465
+ 914,81569
466
+ 915,81570
467
+ 921,81599
468
+ 922,81602
469
+ 923,81604
470
+ 941,81765
471
+ 956,81981
472
+ 957,81982
473
+ 958,81991
474
+ 961,82019
475
+ 962,82024
476
+ 965,82043
477
+ 969,82092
478
+ 970,82096
479
+ 971,82104
480
+ 978,82152
481
+ 979,82157
482
+ 983,82180
483
+ 985,82191
484
+ 987,82219
485
+ 994,82247
486
+ 997,82302
487
+ 1001,82345
488
+ 1003,82360
489
+ 1012,82444
490
+ 1016,82466
491
+ 1021,82483
492
+ 1022,82487
493
+ 1023,82500
494
+ 1024,82507
495
+ 1025,82516
496
+ 1026,82521
497
+ 1028,82558
498
+ 1029,82565
499
+ 1032,82588
500
+ 1033,82589
501
+ 1043,82648
502
+ 1045,82694
503
+ 1046,82703
504
+ 1049,82715
505
+ 1051,82731
506
+ 1052,82737
507
+ 1054,82743
508
+ 1055,82763
509
+ 1056,82764
510
+ 1057,82768
511
+ 1061,82846
512
+ 1062,82848
513
+ 1063,82850
514
+ 1067,82891
515
+ 1073,82928
516
+ 1075,82944
517
+ 1079,83002
518
+ 1080,83023
519
+ 1081,83049
520
+ 1085,83080
521
+ 1095,83157
522
+ 1096,83168
523
+ 1099,83185
524
+ 1101,83192
525
+ 1102,83195
526
+ 1106,83238
527
+ 1107,83244
528
+ 1110,83254
529
+ 1114,83276
530
+ 1115,83278
531
+ 1120,83300
532
+ 1123,83319
533
+ 1124,83335
534
+ 1126,83340
535
+ 1127,83352
536
+ 1132,83380
537
+ 1139,83434
538
+ 1142,83451
539
+ 1143,83452
540
+ 1145,83473
541
+ 1149,83500
542
+ 1150,83502
543
+ 1151,83513
544
+ 1154,83529
545
+ 1156,83551
546
+ 1159,83566
547
+ 1166,83605
548
+ 1168,83613
549
+ 1169,83615
550
+ 1172,83624
551
+ 1174,83640
552
+ 1177,83665
553
+ 1181,83677
554
+ 1183,83694
555
+ 1184,83696
556
+ 1186,83703
557
+ 1199,83786
558
+ 1208,83906
559
+ 1211,83919
560
+ 1216,83968
561
+ 1217,83971
562
+ 1219,83984
563
+ 1223,84000
564
+ 1224,84001
565
+ 1226,84008
566
+ 1227,84014
567
+ 1232,84117
568
+ 1235,84140
569
+ 1239,84174
570
+ 1241,84177
571
+ 1244,84188
572
+ 1246,84203
573
+ 1251,84284
574
+ 1252,84297
575
+ 1256,84349
576
+ 1258,84364
577
+ 1260,84385
578
+ 1261,84386
579
+ 1266,84412
580
+ 1267,84435
581
+ 1271,84489
582
+ 1277,84537
583
+ 1284,84598
584
+ 1285,84599
585
+ 1287,84611
586
+ 1288,84619
587
+ 1289,84620
588
+ 1290,84623
589
+ 1291,84640
590
+ 1294,84648
591
+ 1295,84654
592
+ 1297,84679
593
+ 1303,84717
594
+ 1307,84781
595
+ 1313,84840
596
+ 1315,84845
597
+ 1316,84851
598
+ 1320,84883
599
+ 1327,84933
600
+ 1333,84969
601
+ 1335,84988
602
+ 1336,84992
603
+ 1341,85015
604
+ 1346,85028
605
+ 1350,85040
606
+ 1358,85085
607
+ 1360,85088
608
+ 1362,85099
609
+ 1365,85103
610
+ 1367,85106
611
+ 1369,85138
612
+ 1370,85139
613
+ 1372,85144
614
+ 1374,85150
615
+ 1383,85177
616
+ 1385,85179
617
+ 1386,85190
618
+ 1397,85276
619
+ 1400,85287
620
+ 1404,85305
621
+ 1405,85309
622
+ 1409,85333
623
+ 1411,85338
624
+ 1415,85348
625
+ 1418,85367
626
+ 1419,85368
627
+ 1426,85398
628
+ 1432,85430
629
+ 1445,85490
630
+ 1449,85508
631
+ 1457,85552
632
+ 1461,85563
633
+ 1463,85565
634
+ 1467,85582
635
+ 1490,85652
636
+ 1496,85668
637
+ 1498,85675
638
+ 1501,85680
639
+ 1502,85687
640
+ 1507,85711
641
+ 1510,85722
642
+ 1512,85729
643
+ 1516,85733
644
+ 1520,85737
645
+ 1531,85751
646
+ 1535,85755
647
+ 1575,85800
648
+ 1581,85809
649
+ 1595,85823
650
+ 1606,85834
651
+ 1617,85846
652
+ 1626,85857
653
+ 1671,85913
654
+ 1681,85925
655
+ 1689,85934
656
+ 1711,85962
657
+ 1723,85974
658
+ 1732,85986
659
+ 1733,85987
660
+ 1754,86012
661
+ 1771,86031
662
+ 1777,86040
663
+ 1791,86059
664
+ 1797,86067
665
+ 1804,86077
666
+ 1832,86110
667
+ 1851,86134
668
+ 1852,86135
669
+ 1869,86153
670
+ 1897,86184
671
+ 1903,86191
672
+ 1917,86205
673
+ 1954,90251
674
+ 1957,90742
675
+ 1958,90792
676
+ 1961,90876
677
+ 1965,91863
678
+ 1966,91876
679
+ 1967,91883
680
+ 1968,91884
681
+ 1971,91905
682
+ 1973,97148
683
+ 1974,98018
684
+ 1977,98317
productos.csv ADDED
The diff for this file is too large to render. See raw diff