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)
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
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)
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)
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.
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
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)