0 / 0
Go back to the English version of the documentation
Korzystanie z biblioteki szeregów czasowych
Last updated: 07 lip 2023
Korzystanie z biblioteki szeregów czasowych

Aby rozpocząć pracę z biblioteką szeregów czasowych, zaimportuj bibliotekę do notatnika Python lub aplikacji.

Ta komenda służy do importowania biblioteki szeregów czasowych:

# Import the package
import tspy

Tworzenie szeregów czasowych

Aby utworzyć szeregi czasowe i korzystać z funkcji biblioteki, należy podjąć decyzję w sprawie źródła danych. Obsługiwane są następujące źródła danych:

  • Listy in-memory
  • pandas DataFrames
  • Kolekcje obserwacji w pamięci (za pomocą konstrukcji ObservationCollection )
  • Czytelnicy zdefiniowani przez użytkownika (przy użyciu konstrukcji TimeSeriesReader )

Poniższy przykład przedstawia ingesting danych z listy in-memory:

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

Wynik jest następujący:

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

Można również operować na wielu seriach czasowych w tym samym czasie, korzystając z konstrukcji MultiTimeSeries . MultiTimeSeries jest zasadniczo słownikiem szeregów czasowych, w którym każda seria czasowa ma swój własny klucz unikalny. Szeregi czasowe nie są wyrównywane w czasie.

Konstrukcja MultiTimeSeries udostępnia podobne metody transformowania i ingesting jako jednokrotnego konstruowania szeregów czasowych:

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])
})

Dane wyjściowe są następujące:

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

Czas interpretowania

Domyślnie szeregi czasowe używają typu danych long do oznaczenia, kiedy dana obserwacja została utworzona, co oznacza, że jest to znacznik czasu. System odniesienia czasu jest używany dla szeregów czasowych z datownikami, które są interpretatowani przez człowieka. Patrz Korzystanie z systemu odniesienia czasu.

W poniższym przykładzie przedstawiono sposób tworzenia prostych szeregów czasowych, w których każdy indeks oznacza dzień po godzinie rozpoczęcia 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

Wynik jest następujący:

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

Wykonywanie prostych transformacji

Transformacje to funkcje, które w przypadku jednej lub większej liczby szeregów czasowych zwracają nową serię czasową.

Na przykład, aby segmentować szeregi czasowe w oknach, w których każde okno jest typu size=3, przesuwane są o 2 rekordy, można użyć następującej metody:

window_ts = ts.segment(3, 2)
window_ts

Wynik jest następujący:

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)]

W tym przykładzie przedstawiono dodawanie wartości 1 do każdej wartości w szeregu czasowym:

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

Wynik jest następujący:

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

Można też tymczasowo pozostawić łączenie szeregów czasowych, na przykład ts z innym szeregiem czasowym ts2:

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

Wynik jest następujący:

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]

Używanie transformatorów

W pakiecie transformatorów dostarczany jest bogaty pakiet wbudowanych transformatorów. Zaimportuj pakiet, aby użyć udostępnionych funkcji transformatora:

from tspy.builders.functions import transformers

Po dodaniu pakietu można transformować dane w szeregach czasowych za pomocą metody transform .

Na przykład, aby wykonać różnicę w seriach czasowych:

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

W tym miejscu dane wyjściowe są następujące:

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

Stosowanie reduktorów

Podobnie jak w przypadku pakietu transformatorów, można zredukować szeregi czasowe za pomocą metod zapewnianych przez pakiet reduktorów. Pakiet reduktorów można zaimportować w następujący sposób:

from tspy.builders.functions import reducers

Po zaimportowaniu pakietu należy użyć metody reduce w celu uzyskania średniej z serii czasu, na przykład:

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

Dane wyjściowe:

5.0

Reduktory mają specjalną właściwość, która umożliwia ich użycie wraz z transformacjami segmentacji (suma godzinowa, avg w oknie przed wystąpeniem błędu, a także inne). Ponieważ dane wyjściowe segmentation + reducer są szeregami czasowymi, używana jest metoda transform .

Na przykład, aby segmentować w systemie windows o wielkości 3 i uzyskać średnią w każdym oknie, należy użyć:

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

Powoduje to:

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

Seria czasu Graphing

Ocena opóźnionego użycia jest używana podczas grafowania szeregów czasowych. Podczas wykresu szeregów czasowych można wykonać jedną z następujących czynności:

  • Zbierz obserwacje z serii czasowej, która zwraca BoundTimeSeries
  • Zmniejsz serię czasu do wartości lub kolekcji wartości
  • Wykonywanie operacji składowania lub drukowania

Na przykład, aby gromadzić i zwracać wszystkie wartości w kartach pracy:

observations = ts.materialize()
observations

Powoduje to:

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

Aby zgromadzić zakres z szeregu czasowego, należy użyć następujących elementów:

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

W tym miejscu dane wyjściowe są następujące:

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

Należy pamiętać, że seria czasowa jest optymalizowana dla zapytań zakresu, jeśli szeregi czasowe mają charakter okresowy.

Korzystając z konsoli describe w bieżącym szeregu czasowym, można również grafować szeregi czasowe:

describe_obj = ts.describe()
describe_obj

Dane wyjściowe:

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

Więcej inform.

Temat nadrzędny: Analiza szeregów czasowych

Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more