0 / 0
Torna alla versione inglese della documentazione

Utilizzo della libreria di serie temporali

Ultimo aggiornamento: 04 ott 2024
Utilizzo della libreria di serie temporali

Per iniziare a lavorare con la libreria di serie temporali, importare la libreria sul tuo notebook o applicazione Python .

Utilizzare questo comando per importare la libreria della serie temporale:

# Import the package
import tspy

Creazione di una serie temporale

Per creare una serie temporale e utilizzare le funzioni della libreria, è necessario decidere l'origine dati. Le origini dati supportate includono:

  • Elenchi in memoria
  • pandas DataFrames
  • Raccolte in memoria di osservazioni (utilizzando il costrutto ObservationCollection )
  • Lettori definiti dall'utente (utilizzando il costrutto TimeSeriesReader )

Il seguente esempio mostra l'inserimento dei dati da un elenco in - memory:

ts = tspy.time_series([5.0, 2.0, 4.0, 6.0, 6.0, 7.0])
ts

L'output è il seguente:

TimeStamp: 0     Value: 5.0
TimeStamp: 1     Value: 2.0
TimeStamp: 2     Value: 4.0
TimeStamp: 3     Value: 6.0
TimeStamp: 4     Value: 6.0
TimeStamp: 5     Value: 7.0

È inoltre possibile operare su molte serie storiche contemporaneamente utilizzando il costrutto MultiTimeSeries . Un MultiTimeSeries è essenzialmente un dizionario delle serie storiche, dove ogni serie temporale ha la sua chiave unica. Le serie storiche non sono allineate nel tempo.

Il costrutto MultiTimeSeries fornisce metodi simili per la trasformazione e l'ingestione come costrutto della serie a tempo unico:

mts = tspy.multi_time_series({
	"ts1": tspy.time_series([1.0, 2.0, 3.0]),
	"ts2": tspy.time_series([5.0, 2.0, 4.0, 5.0])
})

L'output è il seguente:

ts2 time series
------------------------------
TimeStamp: 0     Value: 5.0
TimeStamp: 1     Value: 2.0
TimeStamp: 2     Value: 4.0
TimeStamp: 3     Value: 5.0
ts1 time series
------------------------------
TimeStamp: 0     Value: 1.0
TimeStamp: 1     Value: 2.0
TimeStamp: 2     Value: 3.0

Tempo di interpretazione

Per impostazione predefinita, una serie temporale utilizza un tipo di dati long per denotare quando è stata creata una determinata osservazione, che viene indicata come un time tick. Un sistema di riferimento temporale viene utilizzato per le serie storiche con timbri che sono interpretabili umani. Consultare Utilizzo del sistema di riferimento del tempo.

Il seguente esempio mostra come creare una serie temporale semplice dove ogni indice denota un giorno dopo l'ora di inizio di 1990-01-01:

import datetime
granularity = datetime.timedelta(days=1)
start_time = datetime.datetime(1990, 1, 1, 0, 0, 0, 0, tzinfo=datetime.timezone.utc)

ts = tspy.time_series([5.0, 2.0, 4.0, 6.0, 6.0, 7.0], granularity=granularity, start_time=start_time)
ts

L'output è il seguente:

TimeStamp: 1990-01-01T00:00Z     Value: 5.0
TimeStamp: 1990-01-02T00:00Z     Value: 2.0
TimeStamp: 1990-01-03T00:00Z     Value: 4.0
TimeStamp: 1990-01-04T00:00Z     Value: 6.0
TimeStamp: 1990-01-05T00:00Z     Value: 6.0
TimeStamp: 1990-01-06T00:00Z     Value: 7.0

Esecuzione di semplici trasformazioni

Le trasformazioni sono funzioni che, quando date una o più serie temporali, restituiscono una nuova serie temporale.

Ad esempio, per segmentare una serie temporale in finestre in cui ogni finestra è di size=3, scorrere di 2 record, è possibile utilizzare il seguente metodo:

window_ts = ts.segment(3, 2)
window_ts

L'output è il seguente:

TimeStamp: 0     Value: original bounds: (0,2) actual bounds: (0,2) observations: [(0,5.0),(1,2.0),(2,4.0)]
TimeStamp: 2     Value: original bounds: (2,4) actual bounds: (2,4) observations: [(2,4.0),(3,6.0),(4,6.0)]

Questo esempio mostra l'aggiunta di 1 ad ogni valore in una serie temporale:

add_one_ts = ts.map(lambda x: x + 1)
add_one_ts

L'output è il seguente:

TimeStamp: 0     Value: 6.0
TimeStamp: 1     Value: 3.0
TimeStamp: 2     Value: 5.0
TimeStamp: 3     Value: 7.0
TimeStamp: 4     Value: 7.0
TimeStamp: 5     Value: 8.0

Oppure è possibile lasciare temporalmente unire una serie temporale, ad esempio ts con un'altra serie temporale ts2:

ts2 = tspy.time_series([1.0, 2.0, 3.0])
joined_ts = ts.left_join(ts2)
joined_ts

L'output è il seguente:

TimeStamp: 0     Value: [5.0, 1.0]
TimeStamp: 1     Value: [2.0, 2.0]
TimeStamp: 2     Value: [4.0, 3.0]
TimeStamp: 3     Value: [6.0, null]
TimeStamp: 4     Value: [6.0, null]
TimeStamp: 5     Value: [7.0, null]

Utilizzo dei trasformatori

Nella confezione dei trasformatori è fornita una ricca suite di trasformatori integrati. Importare il pacchetto per utilizzare le funzioni trasformate fornite:

from tspy.builders.functions import transformers

Dopo aver aggiunto il pacchetto, è possibile trasformare i dati in una serie temporale utilizzando il metodo transform .

Ad esempio, per eseguire una differenza su una serie temporale:

ts_diff = ts.transform(transformers.difference())

Qui l'output è:

TimeStamp: 1     Value: -3.0
TimeStamp: 2     Value: 2.0
TimeStamp: 3     Value: 2.0
TimeStamp: 4     Value: 0.0
TimeStamp: 5     Value: 1.0

Utilizzo dei riduttori

Simile al pacchetto dei trasformatori, è possibile ridurre una serie temporale utilizzando i metodi forniti dal pacchetto riduttori. È possibile importare il pacchetto riduttori come segue:

from tspy.builders.functions import reducers

Dopo aver importato il pacchetto, utilizzare il metodo reduce per ottenere la media su un tempo - serie ad esempio:

avg = ts.reduce(reducers.average())
avg

Questo output:

5.0

I riduttori hanno una proprietà speciale che permette loro di essere utilizzati a fianco delle trasformazioni di segmentazione (somma oraria, avg nella finestra precedente ad un errore che si verifica, e altri). Poiché l'output di una segmentation + reducer è una serie temporale, viene utilizzato il metodo transform .

Ad esempio, per segare in finestre di dimensioni 3 e ottenere la media attraverso ogni finestra, utilizzare:

avg_windows_ts = ts.segment(3).transform(reducers.average())

Questo risultato in:

imeStamp: 0     Value: 3.6666666666666665
TimeStamp: 1     Value: 4.0
TimeStamp: 2     Value: 5.333333333333333
TimeStamp: 3     Value: 6.333333333333333

Serie temporali di grafatura

La valutazione pigra viene utilizzata quando si grafa una serie temporale. Quando si grafa una serie temporale, è possibile effettuare una delle seguenti:

  • Raccogliere le osservazioni della serie temporale, che restituisce un BoundTimeSeries
  • Ridurre la serie temporale a un valore o una raccolta di valori
  • Eseguire operazioni di salvataggio o stampa

Ad esempio, per raccogliere e restituire tutti i valori di una timeseries:

observations = ts.materialize()
observations

Questo risultato in:

[(0,5.0),(1,2.0),(2,4.0),(3,6.0),(4,6.0),(5,7.0)]

Per raccogliere un intervallo da una serie temporale, utilizzare:

observations = ts[1:3] # same as ts.materialize(1, 3)
observations

Qui l'output è:

[(1,2.0),(2,4.0),(3,6.0)]

Da notare che una serie temporale è ottimizzata per le query di gamma se la serie temporale è periodica in natura.

Utilizzando il describe su una serie temporale corrente, anche i grafici della serie temporale:

describe_obj = ts.describe()
describe_obj

L'output è:

min inter-arrival-time: 1
max inter-arrival-time: 1
mean inter-arrival-time: 1.0
top: 6.0
unique: 5
frequency: 2
first: TimeStamp: 0     Value: 5.0
last: TimeStamp: 5     Value: 7.0
count: 6
mean:5.0
std:1.632993161855452
min:2.0
max:7.0
25%:3.5
50%:5.5
75%:6.25

Ulteriori informazioni

Argomento principale Analisi di serie temporali