Funzioni di Python Pandas per analizzare le serie temporali

Funzioni di Python Pandas per analizzare le serie temporali

8 Marzo 2022 ai 1
4 funzioni python pandas comode nell'analisi delle serie temporali

I dati delle serie temporali non sono altro che punti collegati temporalmente in sequenza. Ad esempio, la misurazione della temperatura nelle varie fasi di un processo chimico, oppure il numero di persone che entra a ogni ora in un edificio.

I dati delle serie temporali hanno caratteristiche diverse dai dati tabellari, e quasi andrebbero considerate come un campo separato, soprattutto viste le tecniche completamente diverse impiegate in questo campo.

Perché Panda è particolarmente adatto alle serie temporali?

Innanzi tutto perché il suo ideatore Wes Mckinney aveva l’intenzione di fornire uno strumento per lavorare con i dati finanziari, che in alcuni sensi sono una serie temporale. Questo, ma anche l’estrema versatilità di Pandas, lo rendono uno strumento ideale per molteplici usi con le serie temporali.

In questa breve guida vedremo 4 funzioni di Pandas che possono essere utilizzate per l’analisi delle serie temporali, e quindi per integrare le tue analisi predittive.

Importazione serie temporali

Iniziamo dall’importare il nostro dataset: le temperature giornaliere durante un periodo di 100 giorni.

import numpy as np
import pandas as pd
df = pd.DataFrame({
   "date": pd.date_range(start="2020-05-01", periods=100, freq="D"),
   "temperature": np.random.randint(18, 30, size=100) +  
                  np.random.random(100).round(1)
})
df.head()

La funzione date_range di Pandas può essere utilizzata per generare un intervallo di date con frequenza personalizzata. I valori di temperatura sono generati in modo casuale utilizzando le funzioni Numpy.

Possiamo ora iniziare con le funzioni.

1) Spostamento – funzione shift

È un’operazione che consente di spostare i dati delle serie temporali. Serve per fare un confronto tra caratteristiche che arrivano in determinati momenti della serie (all’inizio? In ritardo? A metà?). 

Mettiamo di voler ad esempio inserire nella tabella che abbiamo creato poco fa la temperatura del giorno precedente.

df["temperature_lag_1"] = df["temperature"].shift(1)
df.head()

Il valore scalare passato alla funzione shift indica il numero di periodi da spostare. Ovviamente nella prima riga non avrai un valore (comparirà “Nan”), perché non c’è nulla che precede il primo valore della serie temporale.

Non ti piace “Nan” e vuoi sostituirlo?

Usa il parametro fill_value. Inseriamoci ad esempio il valore medio della colonna della temperatura.

df["temperature_lag_1"] = df["temperature"]\
.shift(1, fill_value = df.temperature.mean())
df.head()

Puoi fare la stessa cosa con le temperature future: basta usare valori negativi nella funzione shift. Per esempio, “-1” porta la temperatura nel giorno successivo.

2) Ricampionamento – funzione resample

Un’altra operazione comune eseguita sui dati delle serie temporali è il ricampionamento, ovvero la modifica della frequenza dei periodi. Mettiamo che ti interessino le temperature settimanali e non le giornaliere: con la funzione resample puoi creare dei gruppi di un interno specificato (detti bin). Poi, possiamo applicare funzioni di aggregazione ai gruppi per calcolare il valore basato sulla frequenza ricampionata.

Se vogliamo vedere le temperature medie settimanali, per prima cosa dobbiamo ricampionare i dati a livello di settimana, e dopo calcoleremo la media.

df_weekly = df.resample("W", on="date").mean()
df_weekly.head()

Il parametro “w”, che sta per “week”, specifica la nuova frequenza di campionamento. Se il dataframe non ha un indice datetime, la colonna che contiene le informazioni relative alla data o al tempo deve essere passata al parametro “on”.

3) Funzione Asfreq nelle serie temporali

La funzione asfreq restituisce il valore alla fine dell’intervallo specificato, in sostanza fornendo una tecnica diversa per il ricampionamento. Per esempio, asfreq (“W”) restituisce il valore dell’ultimo giorno di ogni settimana.

Per utilizzare la funzione asfreq, dobbiamo impostare la colonna della data come indice del dataframe:

df.set_index("date").asfreq("W").head()

Dato che stiamo ottenendo un valore in un giorno specifico, non serve applicare una funzione di aggregazione.

4) Media mobile – funzione rolling

La funzione rolling può essere usata per calcolare la media mobile che è un’operazione molto comune per i dati delle serie temporali. 

In sostanza, immagina di avere una finestra di dimensione fissa, come il mirino di una macchina fotografica, che sposti a tuo piacimento nel dataset. Ovunque sposti questa finestra, lei calcola per i dati sottostanti un determinato valore (ad esempio la media mobile). Nello stesso modo in cui il mirino di una macchina fotografica mette a fuoco, ovunque tu lo punti.

Questo è in breve il concetto di “rolling”. 

Creiamo una finestra mobile di dimensione 3 e usiamola per calcolare la media mobile.

df.set_index("date").rolling(3).mean().head()

Per ogni giorno, i valori mostrano la media del giorno e dei 2 giorni precedenti. Possiamo anche usare questa finestra mobile per coprire il giorno precedente e quello successivo per qualsiasi giorno. Può essere fatto impostando il parametro center come true:

df.set_index("date").rolling(3, center=True).mean().head()

Ci saranno dei valori NaN dove il valore non è presente, come abbiamo visto sopra.

Conclusione

Abbiamo parlato di 4 funzioni Pandas che sono comunemente usate nell’analisi delle serie temporali, e che possono esserti molto utili nell’analisi predittiva, per la quale le serie temporali sono pane quotidiano. 

Spero che ti siano state utili e che ti rendano la vita più facile con i dati in sequenze temporali, se non hai trovato quello che cercavi prova a chiedere al nostro bot di intelligenza artificiale.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *