Evolución de precios mayoristas en MercaTenerife, 2024
Versión 1.2. Fecha: 20 noviembre 2024.
Advertencias
Este cuadro de mandos está vinculado a las fuentes de origen vía datos.tenerife.es, que en caso de estar inoperativa generará un fallo en el mismo dashboard.
Si ves este artículo desde móvil, aún está pendiente la configuración del cuadro de mandos para dispositivos.
¡Por eso es la versión 1.2! ¡Ten paciencia!
El gráfico es dinámico, puedes interactuar con él.
Resumen
Lo que estás viendo arriba es la media de los precios moda entre abril y, se supone, el día de hoy (que cuando actualizo es 20 de noviembre, pero si tú lees esto posteriormente deberá estar actualizado de manera automática, más abajo te contaré más detalles).
El primer gráfico (arriba, izquierda) muestra el promedio del precio de todo el periodo, si bien la idea es que muestre solo el último precio, para cada producto en la muestra. El gráfico es dinámico, así que puedes desplazarte hacia abajo para ver el resto de productos. En la última versión 1.2 se ha añadido el último precio conocido con respecto al promedio del precio más repetido cada día (moda del precio).
El segundo gráfico (arriba, derecha) es el mismo promedio del precio moda, para productos locales y no locales, entendiendo por tales los que son de la provincia de Santa Cruz de Tenerife y los que no lo son. Es decir, no local puede ser un producto importado de la provincia de Las Palmas, de Península, de la EU o de fuera de estas regiones, sin distinción.
Y, por último, el tercer gráfico (abajo) el gráfico de líneas muestra la evolución del mismo promedio del precio moda, en su conjunto (naranja), para productos locales (azul claro) y para productos no locales (azul oscuro). En las versiones anteriores se mostraba diario pero en el actual se totaliza por mes para tener una visión más clara y global, teniendo en cuenta que si el último mes debe tomarse considerando el día que estás viendo el gráfico.
En su conjunto el gráfico es interactivo, de tal moda que si tú seleccionas «papas negras» en el gráfico superior, los otros dos filtran la información para solo las papas negras. De igual manera si filtras por «local» en el segundo gráfico, toda la información queda representada para ese dato.
Como principales observaciones podemos destacar que el precio del producto local está, en promedio, unos 50 céntimos más caro que el no local. La explicación de esto puede tener múltiples raíces, pero desde luego, es significativo, ya que se presupone que el producto no local arrastra unos costes extra (transporte y conservación) que no necesariamente deben estar presentes en el producto local.
Está bien aquí recordar la polka frutera del intermediario, de Los Sabandeños que ya nos orienta en las posibles causas de por qué el producto local es ligeramente más caro, en promedio, que el producto no local.
No podemos decir que cuando hay producto local no exista producto no local ya que eso no se cumple en todos los productos, existiendo las 3 posibilidades: hay local pero no hay no local; hay no local pero no se produce localmente; y hay local pero también no local que, recordemos, puede significar que se trae de Las Palmas, de Península, de la EU o de otra región, ya que no se determina en el archivo fuente de datos.
En promedio, los precios globalmente se han mantenido estancados en torno a los casi 3 euros el kilo de fruta verdura. Si separamos producto local y no local observaremos que el de la provincia de Santa Cruz de Tenerife anda en ese límite de los 3 euros mientras que el no local fluctúa mucho más entre los 3 y los 2 euros durante todo el periodo (abril – día actual hasta diciembre de 2024).
La pimienta palmera seca es, con diferencia, el producto más caro, rozando los 25€ el kilo, manteniéndose absolutamente estable durante todo el periodo, mientras que las acelgas son los producto más económicos, a menos de 50 céntimos el kilo, manteniéndose igualmente estable y sin cambios durante todo el periodo.
En su conjunto los precios parecen haber experimentando un ligero descenso entre abril y julio, para iniciar una remontada hasta noviembre (redacto el 10 de noviembre).
Mientras precios como el de la calabaza parece haber ido descendiendo durante el periodo, precios como el de los fresones muestran un incremento de hasta casi el doble de su precio de abril -en noviembre-, pasando de 5 a 10 euros el kilo en ese periodo.
En resumen, esta herramienta puede constituir un interesante indagador de precios útil para planificar compras en la restauración.
Metodología
Los datos en origen son pocos: producto, código (que no uso), procedencia (local o no local), precio mínimo, precio máximo y precio moda. El precio moda es el precio que más se repite en el muestreo diario que debe realizar MercaTenerife entre los puestos, ahora bien, ignoro cómo se realiza esa captación de datos.
No se dispone de precio medio aunque podría estimarse con la media entre le precio mínimo y el precio máximo. O incluso trabajar con una aproximación a la media de Pearson o al centro de la distribución de los datos, que sería la moda ± ((precio máximo – precio mínimo)÷2).
En cualquier caso ya que el propio MercaTenerife elige la moda como estimación del valor central, he desarrollado el análisis a partir de ese precio.
Para calcular las estimaciones por cada segmentación de datos o conjuntos filtrados, por lo tanto, he calculado el promedio de la moda, pendiente de analizar la distribución de estos precios para saber si volver a usar la moda, el promedio o bien la mediana.
Los precios están divididos por meses y contienen filas que representan un muestreo de precio por cada producto local o no local y cada día del mes con su precio mínimo, máximo y moda, como ya adelanté. El muestreo de precios parece completo, a excepción del día 10 de septiembre para productos locales.
El dashboard que ves está construido con Power BI Desktop y publicado a través de Power BI online en la web, incrustado en este artículo a través de una etiqueta <iframe>. Todo el ámbito del gráfico pertenece a Power BI (las acciones dinámicas, filtros y todo lo demás.
En Power BI se importaron los datos directamente desde las fuentes CSV presentes en datos.tenerife.es que si bien hacen referencia a los precios de MercaTenerife para 2024, el muestreo solo llega hasta abril en el listado descargable. Posteriormente se anidaron los ficheros antes de iniciar los procesos ETL, ya que al tener la misma estructura y presentar los mismos inconvenientes en varias columnas, sería más eficiente tratarlos globalmente.
El fichero del mes en curso se actualiza diariamente. La duda que me queda aquí y que desvelaré en algunos días es si al actualizarse la fuente, dado que el cuadro de mando está vinculado a las fuentes, Power BI lo actualiza. O si requiere una orden manual para que esa actualización se produzca.
Una de las particularidades que he encontrado es que cuando modifico el cuadro de mando y lo mejoro, al publicar a Mi área de trabajo en Power BI en la nube, tarda unas 24 horas de reflejarse en el punto final del proceso, que es esta página. Una solución sería, cada vez que se actualice, volver a publicar en la web y actualizar el <iframe>, si bien esto no tendría sentido en un proceso que debe funcionar de manera automática.
El proceso ETL realizado con los datos ha sido básico. Se centra principalmente en transformar las columnas de precios para sustituir el punto decimal anglosajón por una coma decimal latina y que así Power BI entienda de manera correcta los precios.
Posteriormente se añadió una tabla de medidas con el promedio del precio moda además del mismo promedio filtrado para precios locales y no locales. Se trabajó solo por encima la personalización de los gráficos visibles para configurar unos títulos y subtítulos, así como limpiar los ejes.
El formato de gráficos es simple, barras para los precios y locales vs. no locales. Este último podría ser un gráfico de tarta, pero no tiene sentido sumar ambos precios y obtener un porcentaje de distribución, ya que no representan ambos valores un conjunto único sino dos valores diferentes para el mismo conjunto, dependiendo de una dimensión concreta. Para la evolución temporal, un gráfico de líneas clásico.
Al iniciar este proyecto valoré usar un cuaderno de Jupyter con Google Colab, y ahorrarme así tener que instalarlo en local. Pero realmente es complicar todo el desarrollo sin necesidad.
Este pequeño proyecto se basa en la carga de datos directa desde la fuente, el anidamiento, la preparación de las columnas y una sencilla representación gráfica, sin llegar -aún- más lejos. Aunque más adelante, en una futura versión, no descargo el uso mixto de ambas herramientas. Lo explicaré más abajo.
Por último divulgué el proyecto en Twitter y en LinkedIn con la intención de ir captando la atención de algún reclutador sobre lo que puedo hacer por mi cuenta.
Quién sabe, nunca se sabe dónde está la siguiente puerta a abrir.
Mejoras
Una de las posibles mejoras es la automatización de extracción de datos con tecnología web scraping con Python. El motivo está en la propia configuración de las fuentes de datos.
Como dije, son ficheros CSV partidos por meses donde el fichero del mes en curso se actualiza cada día. A priori esto me obliga a que cada mes incluya el nuevo enlace del nuevo fichero generado.
¿Por qué web scraping? El problema radica en la URL de los CSV que, podría ser, aún no lo he comprobado, no sea fija sino temporal. Como se ve en el siguiente ejemplo la estructura URL tiene algunas partes fácilmente predecibles y reutilizables, pero otras que bien podrían significar que se genera una URL dinámica por sesión, usuario, temporalidad concreta o cualquier otra circunstancia.
https://datos.tenerife.es/ckan
/dataset/0723d38b-dbea-4d58-b864-6943c972b2e0
/resource/ed0afd8f-5105-49a4-9cc2-afb984ed5a7b
/download/precios-diarios-de-abril-de-2024.csv
Lo que podría intuir de esta estructura es que la URL amigable pasa 3 datos a 3 variables a datos.tenerife.es/ckan que son dataset (el conjunto de datos de referencia), el resource (lo que estás consultando y su formato) y el nombre del fichero que vas a desargar (download). La pregunta es, ¿estos datos cambian en algún momento o son fijos?
Podría construir un script con Python que simplemente leyera todos los CSV y los anidara sin más, añadiendo un segundo script que solo cargue el del mes en curso y añada al CSV final los datos nuevos del día en curso o día anterior.
Pero si esas URLs llegan a cambiar, estos scripts dejarían de ejecutarse adecuadamente. ¿De qué manera puedo asegurarme que los scripts de Python encuentren siempre los CSV? Con web scraping. Es decir, el script «navega» por la web y busca los CSV, extrayendo las URL que encuentra.
Otra posible mejora sería analizar y evaluar la posibilidad de construir un modelo predictivo para los precios por cada producto, siempre que exista una relación entre los precios y la temporalidad o incluso añadiendo la característica de si son locales o no. Sería interesante tener no solo los datos de abril hasta noviembre o diciembre sino tener los datos de precios en 2022 y 2023 para analizar así no solo la estacionalidad del producto (temporada y fuera de temporada) sino la proyección de incremento de precio. Aquí sí que emplearía un cuaderno Jupyther para realizar este segundo análisis y, además, desarrollaría los scripts para la carga de datos continua.
Por último, una última pequeña mejora sería corregir algunos casos particulares. Por ejemplo, algunos productos presentan caídas de precios en una fuerte fecha concreta, 3 de septiembre. ¿Por qué? Y el 10 de septiembre simplemente no hay precios para productos locales. ¿Motivo? Podría corregir estas ausencias con una estimación de tendencia entre los meses anteriores y posteriores. Por otro lado podría sustituir los precios por una media móvil para suavizar el impacto de subidas o bajadas extremas o errores en precios no detectados.
Historial de versiones
- Versión 0.1 (7 nov.): Construcción del modelo de datos y visualización.
- Versión 0.2 (8 nov.): Mejoras visuales estéticas simples y añadido de meses.
- Versión 0.3 (9 nov.): Mejoras, ampliación temporal e inicio de redacción.
- Versión 1.0 (10 nov.): Primera versión completa.
- Versión 1.1 (14 nov.): Configuración actualización automática.
- Versión 1.2 (20 nov.): Se cambia evolución de la serie temporal a una vista mes y se añade en el gráfico de media del precio (azul claro) el último precio conocido (azul oscuro).