DEV Community

Evolución de los precios de los carburantes en España

En esta entrada, me planteé corroborar la impresión general de que los precios de los carburantes en España se deben a la pura y simple especulación, y no directamente del precio del petróleo. Para hacer esto, la elección parecía obvia: Python con Pandas.

Origen de los datos

Pude obtener la evolución del precio del barril Brent desde una plataforma de inversión llamada investing.com. Los precios de la Gasolina y el Gasóil, los obtuve de la plataforma de datos de Europa Press.

Lo ideal hubiera sido tomar todos estos datos de los datos publicados por el ministerio correspondiente del gobierno de España. Sin embargo, aunque los datos sí se ofrecen, se hace en formato tipo texto, como documento PDF, de manera que los datos no son directamente utilizables.

Preparando los datos

Primero había que limpiar los datos. Se puede hacer de muchas formas, pero por ejemplo podemos transformar los precios en dólares que utilizan comas, de esta manera:

import pandas as pd

df = pd.read_csv("historico_precio-petroleo_brent.csv")
df.Precio = pd.to_numeric(df.Precio.str.replace(",", "."))
df.to_csv("historico_precio-petroleo_brent.csv", index=False)
Enter fullscreen mode Exit fullscreen mode

En este caso, se transforma la columna de una columna de texto (de ahí que se acceda a df.Precio.str.replace(',', '.'). Esta propiedad str le dice a Pandas que debe aplicar el cambio a todos los valores de la columna. Utilizamos pd.to_numeric() para también convertir a número todos los valores.

Pero lo más importante es que el histórico de precios del barril Brent se ofrece mediante la fecha del domingo de cada semana, y el histórico de precios de carburantes en España, mediante el año y el número de semana de ese año. Podemos convertir la fecha del domingo de los datos del barril Brent en la descomposición en Año y Semana.

df.Fecha = df.Fecha.str.split('/').apply(lambda x: str.join('-', reversed(x)))
df.Fecha = pd.to_datetime(df.Fecha)
df["Semana"] = df.Fecha.dt.isocalendar().week
df["Año"] = df.Fecha.dt.year
Enter fullscreen mode Exit fullscreen mode

Como las fechas se ofrecen en formato español, primero se divide por el carácter '/', se invierten su orden, y se vuelven a combinar usando el carácter '-'. Finalmente, se convierten en datos fecha desde sus valores como texto, y desde ahí se extraen Año y Semana. Ahora ya es posible combinar ambos datasets, dfbrent (el precio del barril Brent), y dfes (el precio de los carburantes en España).

dfr = dfbrent.merge(dfes, on=["Año", "Semana"])
dfr = dfr[dfr['Gasolina'].notna() & dfr['Gasóil'].notna()]
dfr.to_csv("normalized_data.csv", index=False)
Enter fullscreen mode Exit fullscreen mode

Combinamos ambos datasets, y filtramos aquellas filas que tienen NaN como valores para los precios de la Gasolina o el Gasóil (tenemos más datos del dataset dfbrent que del dfes). Los datos se guardan en el archivo normalized_data.csv.

Ahora ya podemos analizar un poco los datos. Si ejecutamos lo siguiente, estaremos agrupando los datos por año, siempre que el barril de Brent estuviera por encima de 110.

df_by_year = df[df.Brent > 110].groupby("Año")[['Semana', 'Brent', 'Gasolina', 'Gasóil']]

    print(df_by_year)
    for year, group in df_by_year:
        print(f"\nYear: {year}")
        print(group)
Enter fullscreen mode Exit fullscreen mode

Datos más relevantes

Los datos más relevantes se obtienen filtrando por el precio del mayor Brent mayor que 110, de manera que se observa cómo los precios sí crecen con el precio del barril, pero no decrecen cuando este decrece. Además, los precios actuales no se corresponden con el precio del barril Brent, pues podemos ver como el barril Brent en la semana 9 de 2022 estuvo a 112$, y en cambio el precio del gasóil estaba por debajo de 1.5€/L. En cambio, en la semana 12 de 2026 el precio del barril Brent estaba al mismo precio, y en cambio el precio del gasóil se sitúa en 1.84€/L., aún con IVA reducido. Pura especulación.

Año: 2022

Precio del barril Brent en dólares.
Precio de la Gasolina y el Gasóil en Euros/Litro.

Semana Brent Gasolina Gasóil
8 118.11 1.58 1.46
9 112.67 1.59 1.48
11 120.65 1.68 1.58
14 111.70 1.82 1.84
18 111.55 1.82 1.85
19 112.55 1.84 1.87
20 119.43 1.88 1.91
21 119.72 1.90 1.89
22 122.01 1.94 1.87
23 113.12 1.97 1.85
24 113.12 2.05 1.92
25 111.63 2.12 2.00
29 110.01 2.07 2.02

Año 2026

Precio del barril Brent en dólares.
Precio de la Gasolina y el Gasóil en Euros/Litro.

Semana Brent Gasolina Gasóil
11 112.19 1.60 1.65
12 112.57 1.71 1.84

Gráfica de evolución de los precios

Se aprecia como los precios en España siguen unos dientes de sierra más suaves, pues "tardan" mucho más en bajar que el precio del barril Brent.

Evolución de los precios de carburantes en España contra el precio del barril Brent

Ejecución

Estos datos están disponible en el repositorio de la evolución de los precios del carburante en España.

La ejecución puede realizarse directamente con plot_results.py, pero a continuación se muestra la forma de invocación por módulo, anteponiendo python -m, al ser más versátil. Las opciones son -d, que muestra los datos por la salida estándar, y -g. que muestra el gráfico que genera pyploy.

$ python -m plot_results.py -d
Year: 2022
...

$ python -m plot_results.py -g
Enter fullscreen mode Exit fullscreen mode

Si te gusta este contenido, puedes encontrar más en mi libro Introducción a la programación con Python. ¡Aprende mientras aplicas tus conocimientos en casos reales!

Top comments (0)