Procesando propiedades temporales de Pandas DatetimeIndex

Sácale provecho a las propiedades del DatetimeIndex en Pandas para analizar series temporales con mayor eficiencia, desde formatear la columna hasta crear reportes con tablas pivotantes.

Según la hora y el mes, la electricidad generada por una planta solar fotovoltaica varía significativamente.

Tabla de pivot con la generación de energía solar por hora y mes en una planta fotovoltaica durante el año 2023.
F1. Generación de energía por hora y mes en 2023

No es lo mismo la generación de energía a las 18:00 que a las 21:00, ni en enero que en junio.

Data

Los datos brutos representan la generación de energía solar en una planta fotovoltaica en el transcurso del año 2023.

Datos brutos de generación de energía solar en una planta fotovoltaica a lo largo del año 2023.
F2. Datos brutos de energía solar a lo largo de 2023

Preguntas

Para crear el reporte a partir de los datos brutos, tenemos que responder a las siguientes preguntas:

  1. ¿Cómo formatear la columna temporal con pandas?
  2. ¿Por qué es útil establecer la columna temporal como índice?
  3. ¿Cómo crear columnas temporales independientes?
  4. ¿Cómo agregar los datos en función de la hora y el mes?
  5. ¿Cómo filtrar los datos relevantes para el análisis?
  6. ¿Qué técnica permite destacar la variación de la generación de energía a lo largo del día?

Metodología

Formatear Columna Temporal

La columna temporal debe ser reconocida como un objeto de tipo DateTime para trabajar con las propiedades temporales que ofrece pandas.

Para ello, usamos la función pd.to_datetime.

df['datetime'] = pd.to_datetime(df['datetime'])
df.dtypes
Tipos de datos en el DataFrame después de convertir la columna temporal a tipo DateTime en Pandas.
F3. Columna temporal como DateTime para análisis

Columna Temporal A Índice

Si nuestra tabla de datos tiene una columna temporal cuyos valores son únicos, es una buena práctica establecerla como índice.

df.set_index('datetime', inplace=True)
DataFrame de Pandas con la columna temporal establecida como índice para facilitar las operaciones temporales.
F4. Uso de columna temporal como índice

Crear Columnas Temporales Independientes

Nos gustaría agregar la generación total de energía por mes y hora. Para ello, creamos dos columnas nuevas: month y hour.

¿Conoces a alguien que podría interesarle este artículo? Compártelo con ellos.

df = (df
 .assign(
     month = df.index.month,
     hour = df.index.hour,
   )
)
DataFrame de Pandas mostrando las nuevas columnas de mes y hora derivadas del índice temporal.
F5. Columnas de mes y hora para análisis detallado

Agregar Valores Tabla Pivotante

Al tener nuevas columnas que pueden ser interpretadas como categóricas, usamos la función pivot_table para crear una tabla-reporte que represente la generación total de energía por mes y hora.

dfr = (df
 .pivot_table(
     index='month', columns='hour',
     values='energy', aggfunc='sum'
    )
)
Tabla pivotante en Pandas mostrando la generación total de energía solar por mes y hora.
F6. Análisis de generación energética por mes y hora

Localiza Datos Relevantes

Como no podemos esperar de otra manera, la generación solar produce 0 energía durante la noche.

Para limpiar la tabla, seleccionamos con loc las horas de 6:00 a 21:00.

dfr.loc[:, 6:21]

Análisis Matriz Calor

El reporte está muy soso, le hace falta sal y algo de especias.

Se la echamos siguiendo esta receta et voilà.

Matriz de calor representando la generación de energía solar por mes y hora, resaltando los picos de generación
F7. Matriz de calor destacando variación energética

Es curioso que, justo antes de comenzar el verano, pleno junio, la generación no sigue arrastrando la tendencia de la primavera. ¿Qué habrá pasado?

Te leo en los comentarios.

Conclusiones

En definitiva, gracias a este tutorial hemos respondido a las preguntas planteadas al principio:

  1. Formatear la columna temporal: pd.to_datetime convierte la columna especificada a formato de fecha y hora.
  2. Establecer la columna temporal como índice: set_index facilita operaciones temporales al hacer la columna de tiempo el índice del DataFrame.
  3. Crear columnas temporales independientes: DatetimeIndex permite extrear propiedades temporales independientes.
  4. Agregar los datos en función de la hora y el mes: pivot_table organiza los datos según mes y hora, útil para análisis agregados.
  5. Filtrar los datos relevantes para el análisis: loc selecciona segmentos del DataFrame.
  6. Destacar la variación de la generación de energía a lo largo del día: pivot_table en combinación con los gradientes de color resalta patrones temporales.

Me encantaría escuchar tus opiniones para mejorar nuestros futuros artículos.

¿Qué te pareció más interesante/valioso de este artículo?

¿Hay algún tema que te gustaría que cubriéramos en el futuro?

Tu feedback es crucial para generar contenido de alta calidad que se alinee con tus necesidades e intereses.

¡Gracias por tu atención y apoyo de antemano!

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.