Procesar y visualizar datos MIBGAS

Descubre cómo analizar y visualizar precios de contratos MIBGAS usando Pandas y Matplotlib. Este tutorial te guía por filtrado de datos, manejo de fechas y técnicas de interpolación.

Gráfico lineal mostrando el aumento de precios futuros del gas respecto a los actuales.
F1. Contango visualizado: precios futuros superan a los actuales

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.
F2. Datos iniciales de MIBGAS antes del procesamiento

Preguntas

  1. ¿Para qué filtrar y renombrar las columnas del DataFrame?
  2. ¿Cómo reestructuramos las categorías de contrato a columnas del DataFrame?
  3. ¿Qué función se usa para convertir texto a fechas?
  4. ¿Cómo visualizar datos directamente desde el DataFrame con una función?
  5. ¿Qué técnica inteligente aplicamos para rellenar datos faltantes en series temporales?
  6. ¿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}
F3. DataFrame de Pandas mostrando columnas específicas: fecha, contrato, y precio

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.
F4. Contratos reorganizados como columnas

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.
F5. Comparativa de contratos tras interpolación

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.
F6. Contango visualizado: precios futuros superan a los actuales

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:

  1. 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.
  2. 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.
  3. Transformar Texto a Fechas: Utilizar pd.to_datetime para convertir strings a objetos datetime es esencial para manipular eficientemente las series temporales.
  4. Visualización de Datos: La integración de Pandas con Matplotlib posibilita la creación de visualizaciones directas y efectivas desde el DataFrame.
  5. 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.
  6. Ordenar Series Temporales: Es crucial ordenar los datos por fecha para asegurar la coherencia temporal en el análisis y la visualización.

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to datons.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.