0 / 0
資料の 英語版 に戻る
時系列ライブラリーの使用
最終更新: 2024年10月07日
時系列ライブラリーの使用

時系列ライブラリーでの作業を開始するには、ライブラリーを Python ノートブックまたはアプリケーションにインポートします。

このコマンドを使用して、時系列ライブラリーをインポートします。

# Import the package
import tspy

時系列の作成

時系列を作成してライブラリーの関数を使用するには、データ・ソースを決定する必要があります。 サポートされるデータ・ソースを以下に示します:

  • メモリー内リスト
  • pandas DataFrames
  • 観測のメモリー内コレクション(ObservationCollection構成体を使用)
  • ユーザー定義のリーダー(TimeSeriesReader構成体を使用)

以下の例は、メモリー内リストからのデータの取り込みを示しています。

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

出力は以下のとおりです。

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

MultiTimeSeries構成体を使用して、多数の時系列を同時に操作することもできます。 MultiTimeSeriesは基本的に時系列の辞書であり、各時系列に固有のキーがあります。 時系列は、時間で整列されません。

MultiTimeSeries構成体は、単一の時系列構成体として変換および取り込みを行うための類似のメソッドを提供します:

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

出力は以下のとおりです。

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

時間の解釈

デフォルトでは、時系列はlongデータ型を使用して、特定の観測がいつ作成されたかを示します。これは、時間目盛りと呼ばれます。 時間参照システムは、人間が解釈できるタイム・スタンプを持つ時系列に使用されます。 時間参照システムの使用を参照してください。

以下の例は、各索引が1990-01-01の開始時刻の1日後を示す単純な時系列を作成する方法を示しています:

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

出力は以下のとおりです。

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

単純な変換の実行

変換とは、1 つまたは複数の時系列が指定されている場合に、新しい時系列を返す関数です。

例えば、各ウィンドウがsize=3であるウィンドウに時系列をセグメント化し、2つのレコードでスライディングするには、以下の方法を使用できます:

window_ts = ts.segment(3, 2)
window_ts

出力は以下のとおりです。

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

次の例は、時系列内の各値に 1 を追加する方法を示しています。

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

出力は以下のとおりです。

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

または、次のようにして、時系列を一時的に左結合することもできます。例えば、tsを別の時系列ts2で結合できます:

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

出力は以下のとおりです。

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]

変換の使用

豊富な組み込みトランスフォーマー・スイートが、トランスフォーマー・パッケージで提供されています。 次のように、パッケージをインポートして、提供されているトランスフォーマー関数を使用します。

from tspy.builders.functions import transformers

パッケージを追加した後、transformメソッドを使用して、時系列のデータを変換できます。

例えば、時系列で差分 (difference) を実行するには、以下のようにします。

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

出力は以下のようになります:

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

レデューサーの使用

トランスフォーマー・パッケージと同様に、レデューサー・パッケージで提供されているメソッドを使用して、時系列を減らすことができます。 以下のようにして、レデューサー・パッケージをインポートできます。

from tspy.builders.functions import reducers

パッケージをインポートした後、reduceメソッドを使用して、時系列の平均を取得します。以下に例を示します:

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

出力は以下のようになります。

5.0

レデューサーには、毎時の合計、エラー発生前のウィンドウ内の平均など、レデューサーをセグメンテーション変換とともに使用できるようにする特殊なプロパティーがあります。 segmentation + reducerの出力は時系列であるため、transformメソッドが使用されます。

例えば、サイズ 3 のウィンドウにセグメント化して、各ウィンドウの平均を取得するには、以下を使用します。

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

この結果は、以下のようになります:

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

時系列のグラフ化

時系列をグラフ化する場合、遅延評価が使用されます。 時系列をグラフ化する場合、以下のいずれかを行うことができます。

  • BoundTimeSeriesを返す時系列の観測値を収集します
  • 時系列を 1 つの値または値のコレクションに減らす
  • 保存操作または出力操作を実行する

例えば、時系列のすべての値を収集して返すには、以下のようにします。

observations = ts.materialize()
observations

この結果は、以下のようになります:

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

時系列から範囲を収集するには、以下を使用します。

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

出力は以下のようになります:

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

時系列が周期的である場合は、時系列は範囲照会用に最適化されることに注意してください。

現在の時系列でdescribeを使用すると、時系列もグラフ化されます:

describe_obj = ts.describe()
describe_obj

出力は以下のとおりです:

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

もっと見る

親トピック: 時系列分析

生成 AI の検索と回答
これらの回答は、製品資料の内容に基づいて、 watsonx.ai のラージ言語モデルによって生成されます。 詳細