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
- funzionalità chiave serie storiche
- Funzioni serie temporali
- Valutazione pigra della serie temporale
- Utilizzo del sistema di riferimento temporale
tspy
Python Documentazione SDK
Argomento principale Analisi di serie temporali