Translation not up to date
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.
- Funkcja klucza szeregów czasowych
- Funkcje szeregów czasowych
- Ocena opóźnionego szeregu czasowego
- Korzystanie z systemu odniesienia czasu
- Dokumentacja pakietu SDK produktu
tspy
Python
Temat nadrzędny: Analiza szeregów czasowych