Tutorial
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.
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)
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
DataFramecon 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']
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')
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();
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.
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
DataFramepara 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
pivotpermite 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_datetimepara convertir strings a objetosdatetimees esencial para manipular eficientemente las series temporales. - Visualización de Datos: La integración de
PandasconMatplotlibposibilita 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.