注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

FoundryTS で時系列を扱う

FoundryTS は、時系列を直接絞り込んだり、アタッチされたオントロジープロパティから絞り込んだりするなど、時系列データに対してクエリを実行するための Python ライブラリです。FoundryTS ライブラリは、Code Repositories および Code Workbook と統合されています。

詳細については、FoundryTS API リファレンスを確認してください。

トランスフォームで FoundryTS ライブラリを使用した場合、出力はデータセットになります。新しい時系列を出力するには、時系列に必要なスキーマを持つデータセットを作成し、そのデータセットを元データセットとして Time Series Catalog または Pipeline Builder で新しい時系列を作成します。

Code Repositories:はじめに

はじめるには、Python コードリポジトリの設定がすでに完了していることを確認してください。

ライブラリペインを使用して、foundryts、transforms-timeseries、transforms-objects ライブラリをリポジトリに追加します。

コードリポジトリにライブラリを追加できるライブラリペイン。

次に、以下の手順に沿って、クエリ対象のオブジェクトタイプをリポジトリにインポートし、プロジェクト参照を更新します。

  1. リポジトリのリソースタブに移動します。
  2. オントロジーを選択します。
  3. オブジェクトタイプを追加します。

リソースをインポートする

プロジェクト参照により、FoundryTS はプロジェクト外のリソースにアクセスできます。このセクションでは、プロジェクト外にある場合にインポートする必要があるリソースについて説明します。

時系列プロパティを使用して時系列にアクセスする場合は、次のリソースをインポートする必要があります。

  • オブジェクトタイプの元データセット

時系列IDまたは検索クエリを使用して時系列にアクセスする場合は、次のリソースをインポートする必要があります。

  • 時系列同期(このリソースの RID は次の形式です: ri.time-series-catalog.main.sync.)
  • 時系列同期の元データセット

Code Workbook:はじめに

コードワークブックでは、右上のツールバーから環境、次に環境を設定を選択して、foundryts パッケージを環境に追加します。

Conda 環境で、プロファイルをカスタマイズを選択し、foundryts を検索して追加します。環境を更新を選択して変更を保存します。

foundryts パッケージを環境に追加します。

Code Workbook の環境設定について詳しくはこちら。

ワークブックの入力を設定する

クエリ対象のオブジェクトタイプ(時系列プロパティでアクセスするもの)または時系列カタログ同期(時系列IDまたは検索クエリでアクセスするもの)は、左側の内容パネルからワークブックの入力として追加する必要があります。

コードワークブックにワークブックの入力を追加します。

ワークブックの入力として追加したオブジェクトタイプまたは時系列カタログ同期は、その元データセットも含めて、ワークブックと同じプロジェクトにインポートする必要があります。インポートしないと、foundryts で記述したトランスフォームの実行時にエラーが発生します。プロジェクトの範囲内にないワークブックの入力がある場合は、ワークブックのツールバー右上にある設定ドロップダウンメニューのプロジェクトスコープの設定ダイアログに表示されます。

プロジェクトスコープの設定ダイアログに示されているように、プロジェクトに必要なワークブックの入力がありません。

例:株式データ

この例では、Ticker name プロパティを持つ Stock series オブジェクトタイプからはじめます。目的は、Technology セクターのすべての時系列を見つけ、その時間範囲を計算することです。

まず、トランスフォームの入力と出力を定義します。Stock series オブジェクトタイプをオブジェクト入力として、時系列同期を時系列入力として宣言します。

Copied!
1 2 3 4 5 6 7 8 9 @transform( output=Output("/Users/jdoe/foundryts-test-technology-sector"), ts=TimeSeriesInput('ri.time-series-catalog.main.sync.6bdbda27-29...'), objects=ObjectInput( object_type_rid='ri.ontology.main.object-type.4168ed49-00...', ontology_rid='ri.ontology.main.ontology.00000000-00...', ontology_branch_rid='ri.ontology.main.branch.00000000-00...' ) )

次に、トランスフォーム関数を定義し、FoundryTS のインスタンスを初期化します。この関数は、オブジェクトタイプ、時系列同期、出力を引数として受け取ります。

Copied!
1 2 def compute(ctx, ts, objects, output): fts = FoundryTS()

続いて、Technology セクターの timeseries-demo-stock-series オブジェクトを検索します。検索結果ごとに、時系列をその時間範囲(最も早い点と最も遅い点のタイムスタンプ)に対応付けます。

Copied!
1 2 3 4 search_result = fts.search.series( (ontology('sector') == 'Technology'), object_types=['timeseries-demo-stock-series'] ).map(F.time_extent())

最後に、データフレームを出力データセットに書き込みます。

Copied!
1 2 df = search_result.to_dataframe() output.write_dataframe(df)

すべてをまとめると、完成したトランスフォームは次のようになります。FoundryTS() 関数が入力時系列をコンテキストとして自動的に使用するため、トランスフォームのデコレーターでは入力時系列を参照するだけで済みます。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from transforms.api import transform, Output from transforms.timeseries import TimeSeriesInput from foundryts import FoundryTS from foundryts.search import ontology import foundryts.functions as F from transforms.objects import ObjectInput @transform( output=Output("/Users/jdoe/foundryts-test-technology-sector"), ts=TimeSeriesInput('ri.time-series-catalog.main.sync.6bdbda27-29...'), objects=ObjectInput( object_type_rid='ri.ontology.main.object-type.4168ed49-00...', ontology_rid='ri.ontology.main.ontology.00000000-00...', ontology_branch_rid='ri.ontology.main.branch.00000000-00...' ) ) def compute(ctx, ts, objects, output): fts = FoundryTS() search_result = fts.search.series( (ontology('sector') == 'Technology'), object_types=['timeseries-demo-stock-series'] ).map(F.time_extent()) df = search_result.to_dataframe() output.write_dataframe(df)

出力データセットは次のようになります。

FoundryTS トランスフォームの実行後に出力されたデータセット。