![Gráfico lineal mostrando el aumento de precios futuros del gas respecto a los actuales.](https://images.datons.ai/ENERGY-2024-05-03/P_plot_custom.png)
Si tengo una fábrica que consume gas natural, no es lo mismo comprarlo para el día siguiente que para el año que viene. Los precios varían según la fecha de entrega, y es importante tener una visión general de cómo se comportan para tomar decisiones de compra.
En la Figura 1 vemos que, en general, los precios futuros son más altos que los precios actuales. Esto es lo que se conoce como contango.
Curioso cómo la bolsa usa la jerga argentina: it takes two to tango.
Todo muy claro, pero… ¿cómo procesamos los datos crudos que proporciona MIBGAS para una visualización que compare de contratos?
Data
Cada fila representa una fecha de negociación para un contrato determinado según cuándo se va a entregar el gas.
- GDAES_D+1: Día siguiente
- GMAES: Mes siguiente
- GQES_Q+1: Trimestre siguiente
- GYES_Y+1: Año siguiente
En este tutorial trabajamos con los datos de 2024 en formato CSV, obtenidos de MIBGAS.
import pandas as pd
df = pd.read_csv('data/MIBGAS_Data_2024.csv', sep=';', skiprows=1)
![Vista previa de datos crudos de MIBGAS en formato CSV con múltiples columnas.](https://images.datons.ai/ENERGY-2024-05-03/D_raw.png)
Preguntas
- ¿Para qué filtrar y renombrar las columnas del
DataFrame
? - ¿Cómo reestructuramos las categorías de contrato a
columnas del
DataFrame
? - ¿Qué función se usa para convertir texto a fechas?
- ¿Cómo visualizar datos directamente desde el
DataFrame
con una función? - ¿Qué técnica inteligente aplicamos para rellenar datos faltantes en series temporales?
- ¿Por qué es importante que la serie temporal esté ordenada por fecha?
Metodología
Seleccionar & Renombrar Columnas
Vamos a comparar los distintos precios del gas según el tipo de contrato y la fecha de negociación.
df = df.filter(regex='Trading|Product|MIBGAS')
df.columns = ['date_trading', 'contract', 'price']
![{alt_text}](https://images.datons.ai/ENERGY-2024-05-03/D_filtered.png)
Reestructurar Contratos a Columnas
Para simplificar el trabajo con el DataFrame
, vamos a
reestructurarlo para que cada columna represente un contrato y cada fila
un día de negociación.
¿Conoces a alguien que podría interesarle este artículo? Compártelo con ellos.
df = df.pivot(index='date_trading', columns='contract', values='price')
![DataFrame pivotado con contratos en columnas para análisis simplificado.](https://images.datons.ai/ENERGY-2024-05-03/D_pivot.png)
Formatear Columna Temporal
Por defecto, las fechas se encuentra en formato string
(cadena de texto). Vamos a convertirla a datetime
para que
las funciones de visualización y análisis tengan en cuenta la naturaleza
temporal de los datos.
df.index = pd.to_datetime(df.index, dayfirst=True)
Ordenar Filas por Fecha
Es muy importante que los datos estén ordenados por fecha para que la visualización se haga en el orden correcto.
df.sort_index(inplace=True)
Visualización Comparativa de Columnas
Como el DataFrame
de la librería pandas
está conectado a la librería matplotlib
, podemos visualizar
los datos directamente con la función plot
.
df.plot();
![Gráfico suavizado de precios de contratos de gas, resultado de la interpolación lineal.](https://images.datons.ai/ENERGY-2024-05-03/P_plot_raw.png)
Observamos muchos saltos irregulares debido a la falta de datos en algunos días, probablemente por ser festivos o fines de semana.
Interpolación Lineal
Utilizaremos una interpolación lineal para rellenar estos huecos, lo que hará la visualización más clara
df.interpolate(method='linear', inplace=True)
Ahora sí que podemos comparar los distintos contratos de gas en el tiempo.
![Gráfico lineal mostrando el aumento de precios futuros del gas respecto a los actuales.](https://images.datons.ai/ENERGY-2024-05-03/P_plot_custom.png)
Si observamos que los colores más claros indican un horizonte más lejano y se sitúan mayormente en la parte alta de la gráfica, podemos concluir que, a largo plazo, el precio del gas es más caro.
¿Qué conclusiones adicionales puedes identificar a partir de este análisis? Te leo en los comentarios.
Conclusiones
Gracias a este tutorial, ya sabes cómo:
- Filtrar & Renombrar Columnas: Simplifica el
DataFrame
para trabajar sólo con las variables que te interesan y renómbralas para que sean más cómodas de manejar. - Reestructurar DataFrames: La función
pivot
permite reestructurar categorías de una columna en columnas independientes, simplificando la visualización y el análisis de los datos. - Transformar Texto a Fechas: Utilizar
pd.to_datetime
para convertir strings a objetosdatetime
es esencial para manipular eficientemente las series temporales. - Visualización de Datos: La integración de
Pandas
conMatplotlib
posibilita la creación de visualizaciones directas y efectivas desde elDataFrame
. - Interpolación Lineal: La interpolación lineal es una técnica clave para tratar con datos faltantes, permitiendo una representación continua de las series temporales.
- Ordenar Series Temporales: Es crucial ordenar los datos por fecha para asegurar la coherencia temporal en el análisis y la visualización.