Para empezar a trabajar con la biblioteca de series temporales, importe la biblioteca en el cuaderno o aplicación Python.
Utilice este mandato para importar la biblioteca de series de tiempo:
# Import the package
import tspy
Creación de una serie temporal
Para crear una serie temporal y utilizar las funciones de la biblioteca, debe decidir el origen de datos. Los orígenes de datos soportados son:
- Listas de la memoria
- pandas DataFrames
- Colecciones de observaciones en memoria (mediante la construcción
ObservationCollection
) - Lectores definidos por el usuario (mediante la construcción
TimeSeriesReader
)
El ejemplo siguiente muestra la ingesta de datos de una lista de la memoria:
ts = tspy.time_series([5.0, 2.0, 4.0, 6.0, 6.0, 7.0])
ts
La salida es la siguiente:
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
También puede operar en muchas series temporales al mismo tiempo mediante la construcción MultiTimeSeries
. Un MultiTimeSeries
es esencialmente un diccionario de series temporales, donde cada serie de tiempo tiene su propia clave exclusiva. La serie temporal no está alineada en el tiempo.
La construcción MultiTimeSeries
proporciona métodos similares para transformar e ingerir, como la construcción de una sola serie temporal:
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])
})
La salida es la siguiente:
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
Interpretación del tiempo
De forma predeterminada, una serie temporal utiliza un tipo de datos long
para indicar cuándo se ha creado una determinada observación, a la que se hace referencia como una marca de tiempo. Se utiliza un sistema de referencia de tiempo para las series temporales con indicaciones de fecha y hora que pueden interpretar las personas. Consulte Utilización del sistema de referencia de tiempo.
El ejemplo siguiente muestra cómo crear una serie de temporal en la que cada índice indica un día después de la hora inicial 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
La salida es la siguiente:
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
Realizar transformaciones simples
Las transformaciones son funciones que, cuando se les proporciona una o más series temporales, devuelven una nueva serie temporal.
Por ejemplo, para segmentar una serie temporal en ventanas, en la que cada ventana es de size=3
, con un deslizamiento de 2 registros, puede utilizar el método siguiente:
window_ts = ts.segment(3, 2)
window_ts
La salida es la siguiente:
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)]
Este ejemplo muestra la adición de 1 a cada valor de una serie temporal:
add_one_ts = ts.map(lambda x: x + 1)
add_one_ts
La salida es la siguiente:
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
O puede realizar una unión izquierda de una serie temporal, por ejemplo ts
con otra serie temporal ts2
:
ts2 = tspy.time_series([1.0, 2.0, 3.0])
joined_ts = ts.left_join(ts2)
joined_ts
La salida es la siguiente:
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]
Utilización de transformadores
En el paquete de transformadores se proporciona un suite de transformadores incorporados. Importe el paquete para utilizar las funciones de transformador proporcionadas:
from tspy.builders.functions import transformers
Después de añadir el paquete, puede transformar los datos de una serie temporal utilizando el método transform
.
Por ejemplo, para crear una diferencia en una serie temporal:
ts_diff = ts.transform(transformers.difference())
Aquí la salida es:
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
Utilización de reductores
Del mismo modo que con el paquete de transformadores, puede reducir una serie temporal utilizando los métodos que proporciona el paquete de reductores. Puede importar el paquete de reductores de la siguiente manera:
from tspy.builders.functions import reducers
Después de importar el paquete, utilice el método reduce
para obtener el promedio de una serie temporal, por ejemplo:
avg = ts.reduce(reducers.average())
avg
Este es el resultado:
5.0
Los reductores tienen una propiedad especial que permite que se utilicen junto con las transformaciones de segmentación (suma por hora, promedio de la ventana anterior a la generación de un error y otras). Dado que la salida de un segmentation + reducer
es una serie temporal, se utiliza el método transform
.
Por ejemplo, para segmentar en ventanas de tamaño 3 y obtener el promedio de cada ventana, utilice:
avg_windows_ts = ts.segment(3).transform(reducers.average())
Esto da como resultado:
imeStamp: 0 Value: 3.6666666666666665
TimeStamp: 1 Value: 4.0
TimeStamp: 2 Value: 5.333333333333333
TimeStamp: 3 Value: 6.333333333333333
Creación de gráficos de series temporales
Se utiliza la evaluación diferida cuando se crea un gráfico de una serie temporal. Cuando crea un gráfico de una serie temporal, puede realizar una de las siguientes acciones:
- Recopilar las observaciones de la serie temporal, que devuelve un
BoundTimeSeries
- Reducir la serie temporal a un valor o colección de valores
- Realizar operaciones de guardar o imprimir
Por ejemplo, para recopilar y devolver todos los valores de una serie temporal:
observations = ts.materialize()
observations
Esto da como resultado:
[(0,5.0),(1,2.0),(2,4.0),(3,6.0),(4,6.0),(5,7.0)]
Para recopilar un rango de una serie temporal, utilice:
observations = ts[1:3] # same as ts.materialize(1, 3)
observations
Aquí la salida es:
[(1,2.0),(2,4.0),(3,6.0)]
Tenga en cuenta que una serie temporal se optimiza para las consultas de rango si la serie temporal es de naturaleza periódica.
Si se utiliza describe
en una serie temporal actual, también se crea el gráfico de la serie temporal:
describe_obj = ts.describe()
describe_obj
La salida es:
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
Más información
- Funciones clave de series temporales
- Funciones de series temporales
- Evaluación en descanso de series temporales
- Utilización del sistema de referencia de tiempo
- Documentación del SDK de
tspy
Python
Tema principal: Análisis de series temporales