注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
FoundryTS は time series データに対してクエリを実行するための Python ライブラリであり、Code Repositories や Code Workbook と統合されています。
詳細については、FoundryTS API リファレンス をご覧ください。
まず、Python コード リポジトリのセットアップが完了していることを確認してください。
Libraries ペインを使用して foundryts
、transforms-timeseries
、および transforms-objects
ライブラリをリポジトリに追加します。
次に、以下の手順に従って、クエリ対象のオブジェクト タイプをリポジトリにインポートし、プロジェクト リファレンスを更新します。
プロジェクト リファレンスにより、FoundryTS はプロジェクト外部のリソースにアクセスできます。このセクションでは、プロジェクト外部に存在するリソースをインポートする手順を説明します。
time series プロパティによってシリーズにアクセスする場合は、以下のリソースをインポートする必要があります。
シリーズ ID または検索クエリによってシリーズにアクセスする場合は、以下のリソースをインポートする必要があります。
Code Workbook では、右上のツールバーから Environment を選択し、次に Configure environment を選択して、環境に foundryts
パッケージを追加します。
Conda environment の下で Customize profile を選択し、foundryts を検索して追加します。Update environment を選択して変更を保存します。
Code Workbook の 環境構成 についてさらに学びましょう。
クエリ対象のオブジェクト タイプ (time series プロパティにアクセス) または time series カタログ同期 (シリーズ ID または検索クエリにアクセス) は、左側の Contents パネルから workbook 入力として追加する必要があります。
workbook 入力として追加されたオブジェクト タイプや time series カタログ同期は、元データセットを含む同じプロジェクトにインポートする必要があります。そうしないと、foundryts で記述されたトランスフォームの実行時にエラーが発生します。プロジェクト範囲にない workbook 入力がある場合は、ワークブック ツールバーの右上の設定ドロップダウン メニューにある Project scope settings ダイアログで表示されます。
この例では、Ticker name
プロパティを持つ Stock series
オブジェクト タイプから始めます。目的は、Technology
セクターのすべてのシリーズを見つけて、その time range を計算することです。
トランスフォームの入力と出力を定義することから始めます。Stock series
オブジェクト タイプをオブジェクト入力として、time series sync を time 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...', # オブジェクトタイプのリソースID ontology_rid='ri.ontology.main.ontology.00000000-00...', # オントロジーのリソースID ontology_branch_rid='ri.ontology.main.branch.00000000-00...' # オントロジーブランチのリソースID ) )
次に、トランスフォーム関数を定義し、FoundryTS のインスタンスを初期化します。この関数はオブジェクトタイプ、time series 同期、および出力を引数として受け取ります。
Copied!1 2 3
def compute(ctx, ts, objects, output): # FoundryTS クラスのインスタンスを作成 fts = FoundryTS()
次に、Technology
セクターの timeseries-demo-stock-series
オブジェクトを検索します。各検索結果に対して、その series を time 範囲(最初と最新のポイントのタイムスタンプ)にマップします。
Copied!1 2 3 4
search_result = fts.search.series( (ontology('sector') == 'Technology'), # 「sector」が「Technology」と一致するものを検索 object_types=['timeseries-demo-stock-series'] # 検索対象のオブジェクトタイプを指定 ).map(F.time_extent()) # 検索結果の時間範囲を取得
最後に、データフレームを出力データセットに書き込みます。
Copied!1 2
df = search_result.to_dataframe() # search_resultをデータフレームに変換 output.write_dataframe(df) # データフレームを出力に書き込む
すべてを組み合わせると、完成したトランスフォームは次のようになります:
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 28 29 30 31 32
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): # FoundryTSのインスタンスを作成 fts = FoundryTS() # "Technology"セクターのタイムシリーズを検索し、time_extent()関数をマッピング 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)
出力データセットは次のように表示されます。