L'índex temporal de pandas: trucs essencials
Una de les majors avantatges de treballar amb sèries temporals en pandas és que l’índex no és només una etiqueta: és una eina que et permet filtrar, agregar i transformar dades sense escriure bucles.
En aquest subcapítol veuràs els patrons que usaràs una i altra vegada: seleccionar rangs de dates, canviar la freqüència de la sèrie i calcular estadístiques mòbils.
Seleccionar rangs de dates
Quan l’índex és un DatetimeIndex, pots usar strings per seleccionar períodes.
import pandas as pd
import numpy as np
dates = pd.date_range(start="2020-01-01", periods=365, freq="D")
serie = pd.Series(np.random.randn(365).cumsum(), index=dates)
# Tot l'any 2020
serie_2020 = serie["2020"]
# Des de març fins a juny
serie_q2 = serie["2020-03":"2020-06"]
# Només un mes concret
serie_marc = serie["2020-03"]
Aquesta sintaxi és molt més llegible que filtrar amb màscares booleanes sobre columnes de data.
Canviar la freqüència amb resample
resample és com groupby però per al temps. Et permet passar de dades diàries a setmanals, mensuals o anuals.
# Dades diàries a mensuals: mitjana de cada mes
serie_mensual = serie.resample("ME").mean()
# Dades diàries a setmanals: suma de cada setmana
serie_setmanal = serie.resample("W").sum()
# Màxim anual
serie_anual_max = serie.resample("YE").max()
Fixa’t que
MEsignifica “final de mes” iYE“final d’any”. Aquestes etiquetes van canviar en pandas 2.2; si uses una versió anterior potser necessitesMiY.
Desplaçar sèries amb shift
shift mou els valors cap endavant o cap enrere en el temps. És útil per crear variables retardades.
# Valor del dia anterior
serie_lag1 = serie.shift(1)
# Diferència respecte al dia anterior
serie_diff = serie.diff()
# Variació percentual respecte al dia anterior
serie_pct = serie.pct_change() * 100
El lag més bàsic és la base de molts models de forecasting: predir el valor de demà utilitzant els valors d’avui, ahir i la setmana passada.
Finestres mòbils
Les finestres mòbils permeten calcular estadístiques sobre un tram lliscant de la sèrie.
# Mitjana mòbil de 7 dies
mitjana_7 = serie.rolling(window=7).mean()
# Desviació estàndard mòbil de 30 dies
std_30 = serie.rolling(window=30).std()
# Mínim mòbil de 14 dies
min_14 = serie.rolling(window=14).min()
La mitjana mòbil és especialment útil per suavitzar el soroll i veure la tendència subjacent.
Resum
En aquest subcapítol has vist com aprofitar l’índex temporal de pandas per a:
- Seleccionar períodes amb strings.
- Canviar la freqüència amb
resample. - Crear lags i diferències amb
shiftidiff. - Calcular estadístiques mòbils amb
rolling.
Aquestes operacions són el 80 % del treball diari amb sèries temporals. El següent pas és aprendre a visualitzar-los correctament.