Manipulación de columnas temporales con Pandas
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.
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.
import pandas as pd
df = pd.read_csv('data.csv')
Preguntas
Para crear el reporte a partir de los datos brutos, tenemos que responder a las siguientes preguntas:
- ¿Cómo formatear la columna temporal con
pandas
? - ¿Por qué es útil establecer la columna temporal como índice?
- ¿Cómo crear columnas temporales independientes?
- ¿Cómo agregar los datos en función de la hora y el mes?
- ¿Cómo filtrar los datos relevantes para el análisis?
- ¿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
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)
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
.
Ayúdame a saber si has aprendido algo nuevo con este tutorial pulsando el botón del aplauso.
df = (df
.assign(
month = df.index.month,
hour = df.index.hour,
)
)
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'
)
)
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à.
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:
- Formatear la columna temporal:
pd.to_datetime
convierte la columna especificada a formato de fecha y hora. - Establecer la columna temporal como índice:
set_index
facilita operaciones temporales al hacer la columna de tiempo el índice del DataFrame. - Crear columnas temporales independientes:
DatetimeIndex
permite extrear propiedades temporales independientes. - 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. - Filtrar los datos relevantes para el análisis:
loc
selecciona segmentos delDataFrame
. - 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.
Si pudieras programar lo que quisieras, ¿qué sería?
Puede que te eche una mano creando tutoriales que te ayuden. Te leo en los comentarios.