0 / 0
Go back to the English version of the documentation
Použití knihovny časové řady
Last updated: 07. 7. 2023
Použití knihovny časové řady

Chcete-li začít pracovat s knihovnou časové řady, importujte knihovnu do zápisníku nebo aplikace Python .

Použijte tento příkaz k importu knihovny časové řady:

# Import the package
import tspy

Vytvoření časové řady

Chcete-li vytvořit časovou řadu a použít funkce knihovny, musíte se rozhodnout pro zdroj dat. Mezi podporované zdroje dat patří následující:

  • Seznamy v paměti
  • pandy DataFrames
  • Kolekce pozorování v paměti (pomocí konstruktu ObservationCollection )
  • Uživatelem definovaná čtecí zařízení (pomocí konstrukce TimeSeriesReader )

Následující příklad zobrazuje příjem dat ze seznamu v paměti:

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

Výstup bude následující:

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

Také můžete pracovat s mnoha časovými řadami současně s použitím konstrukce MultiTimeSeries . MultiTimeSeries je v podstatě slovník časové řady, kde každá časová řada má svůj vlastní jedinečný klíč. Časová řada není zarovnána v čase.

Konstrukce produktu MultiTimeSeries poskytuje podobné metody pro transformaci a příchozí sestavení jako jediný konstrukt časové řady:

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

Výstup je následující:

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

Interpretace času

Časová řada standardně používá datový typ produktu long k označení doby, kdy byl vytvořen daný pozorování, který je označován jako časový údaj. Referenční systém času se používá pro časovou řadu s časovými razítky, které jsou lidské interpretovatelné. Viz téma Použití referenčního systému času.

Následující příklad ukazuje, jak vytvořit jednoduchou časovou řadu, kde každý index označuje za den po začátku 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

Výstup bude následující:

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

Provedení jednoduchých transformací

Transformace jsou funkce, které při dané jedné nebo více časových řadách vrací novou časovou řadu.

Chcete-li například segmentovat časovou řadu do oken, kde každé okno je ve formátu size=3, posunete se o 2 záznamy, můžete použít následující metodu:

window_ts = ts.segment(3, 2)
window_ts

Výstup bude následující:

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

Tento příklad ukazuje přidání 1 ke každé hodnotě v časové řadě:

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

Výstup bude následující:

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

Nebo můžete dočasně ponechat spojení s časovou řadou, například ts s jinou časovou řadou ts2:

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

Výstup bude následující:

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]

Použití transformátorů

V sadě transformátorů je k dispozici bohatá sada vestavěných transformátorů. Naimportujte balík pro použití poskytnutých funkcí transformátoru:

from tspy.builders.functions import transformers

Po přidání balíku můžete data v časové řadě transformovat pomocí metody transform .

Chcete-li například provést rozdíl u časové řady, postupujte takto:

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

Zde je výstup:

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

Použití redukátorů

Podobně jako v transformátorech, můžete snížit časovou řadu pomocí metod poskytovaných reducers balíčku. Balík redukátorů můžete importovat takto:

from tspy.builders.functions import reducers

Po naimportování balíku použijte metodu produktu reduce k získání průměru za časovou řadu, například:

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

Tyto výstupy:

5.0

Omezovač má speciální vlastnost, která umožňuje jejich použití spolu s transformacemi segmentace (hodinová suma, průměr v okně před výskytem chyby a další). Vzhledem k tomu, že výstup segmentation + reducer je časová řada, je použita metoda transform .

Například pro segment do Windows o velikosti 3 a získání průměru přes každé okno, použijte:

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

To má za následek:

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

Grafování časových řad

Pomalé vyhodnocení se používá při vytváření grafů časových řad. Když vytvoříte graf časové řady, můžete provést jednu z následujících možností:

  • Shromažďovat pozorování časových řad, které vrací BoundTimeSeries
  • Zkraťte časovou řadu na hodnotu nebo kolekci hodnot.
  • Provést operace uložení nebo tisku

Chcete-li například shromáždit a vrátit všechny hodnoty časových řad, postupujte takto:

observations = ts.materialize()
observations

To má za následek:

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

Chcete-li shromáždit rozsah z časové řady, použijte:

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

Zde je výstup:

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

Všimněte si, že časová řada je optimalizována pro dotazy rozsahu, pokud je časová řada periodická v přírodě.

Pomocí produktu describe v aktuální časové řadě také graficky zobrazí časovou řadu:

describe_obj = ts.describe()
describe_obj

Výstup je:

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

Další informace

Nadřízené téma: Analýza časové řady

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