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

foundryts.functions.dsl

foundryts.functions.dsl(program, return_type=None, labels=None, before='nearest', internal='default', after='nearest')

1 つ以上の入力時系列に DSL 公式を適用して新しい時系列を生成する関数を返します。

公式は入力時系列の各タイムスタンプに適用されます。指定された補間戦略は、入力時系列の 1 つに値が欠けているタイムスタンプに使用されます。利用可能な戦略のリストについては、interpolate()を参照してください。

DSL 公式は単項、二項、または n 項のオペランドに適用できます。DSL のすべての操作は合成可能であり、より単純なものを組み合わせて複雑な表現を構築することができます。

↗ Timeseries DSL Syntax の完全なリファレンスはこちらを参照してください。

  • パラメーター:
    • program (str) – ↗ Timeseries DSL リファレンス ドキュメントの構文を使用して 1 つ以上の入力時系列に適用する公式。
    • return_type (Type , optional) – (非推奨) 変換されたシリーズの値に使用する型。
    • labels (List [str ] , optional) – 公式内で各入力時系列を参照するためのラベルの順序付きリスト (デフォルトは [‘a’, ‘b’, …, ‘aa’, ‘ab’, …])。
    • before (Union [str , List [str ] ] , optional) – シリーズの最初のポイント前の補間戦略。シリーズごとにリストを使用でき、interpolate()から有効な戦略を使用します (デフォルトは NEAREST)。
    • internal (Union [str , List [str ] ] , optional) – 既存のポイント間の補間戦略。シリーズごとにリストを使用でき、interpolate()から有効な戦略を使用します (数値の場合はデフォルトで LINEAR、列挙型時系列の場合は PREVIOUS)。
    • after (Union [str , List [str ] ] , optional) – シリーズの最初のポイント後の補間戦略。シリーズごとにリストを使用でき、interpolate()から有効な戦略を使用します (デフォルトは NEAREST)。
  • 戻り値: 1 つ以上の時系列を取り、入力時系列に公式を適用して単一の更新された時系列を返す関数。
  • 戻り値の型: (FunctionNode) -> FunctionNode

データフレームスキーマ

列名説明
timestamppandas.Timestampポイントのタイムスタンプ
valueUnion[float, str]ポイントの値

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 33 34 >>> series_1 = F.points( ... (10, 6.0), ... (20, 11.0), ... (30, 24.0), ... (40, float("inf")), # 無限大を表す ... (50, 45.0), ... (60, 96.0), ... name="series-1", ... ) >>> series_2 = F.points( ... (10, 8.0), ... (20, 12.0), ... (30, 24.0), ... (40, 48.0), ... (50, float("NaN")), # 非数(NaN)を表す ... (60, 196.0), ... name="series-2", ... ) >>> series_1.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000010 6.0 1 1970-01-01 00:00:00.000000020 11.0 2 1970-01-01 00:00:00.000000030 24.0 3 1970-01-01 00:00:00.000000040 inf # 無限大 4 1970-01-01 00:00:00.000000050 45.0 5 1970-01-01 00:00:00.000000060 96.0 >>> series_2.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000010 8.0 1 1970-01-01 00:00:00.000000020 12.0 2 1970-01-01 00:00:00.000000030 24.0 3 1970-01-01 00:00:00.000000040 48.0 4 1970-01-01 00:00:00.000000050 NaN # 非数(NaN) 5 1970-01-01 00:00:00.000000060 196.0
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 >>> sum_formula = "a+b" >>> sum_series = F.dsl(sum_formula)([series_1, series_2]) # `F.dsl`関数を使用して、`series_1`と`series_2`の和を計算しています。 >>> sum_series.to_pandas() # 結果をPandasのDataFrame形式で表示しています。 timestamp value 0 1970-01-01 00:00:00.000000010 14.0 1 1970-01-01 00:00:00.000000020 23.0 2 1970-01-01 00:00:00.000000030 48.0 3 1970-01-01 00:00:00.000000040 inf 4 1970-01-01 00:00:00.000000050 NaN 5 1970-01-01 00:00:00.000000060 292.0 # `inf`は無限大を示し、`NaN`は数値が存在しないことを示します。
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 >>> even_only_formula = "a % 2 == 0 ? a : skip" # この式は、変数aが偶数である場合にはそのままaを返し、奇数の場合にはスキップするという条件を表しています。 >>> even_series_1 = F.dsl(even_only_formula)(series_1) # F.dsl関数を使用して、series_1に対してeven_only_formulaを適用し、新しいシリーズeven_series_1を作成します。 >>> even_series_1.to_pandas() # even_series_1をPandasデータフレームに変換して表示します。 timestamp value 0 1970-01-01 00:00:00.000000010 6.0 1 1970-01-01 00:00:00.000000030 24.0 2 1970-01-01 00:00:00.000000060 96.0 # 出力結果は、元のデータから偶数の値のみをフィルタリングしたものです。
Copied!
1 2 3 4 5 6 7 8 9 10 >>> argmin_formula = "argmin(a,b)" >>> argmin_series = F.dsl(argmin_formula)([series_1, series_2]) >>> argmin_series.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000010 0.0 1 1970-01-01 00:00:00.000000020 0.0 2 1970-01-01 00:00:00.000000030 0.0 3 1970-01-01 00:00:00.000000040 1.0 # 無限大(inf)は48より大きい 4 1970-01-01 00:00:00.000000050 0.0 5 1970-01-01 00:00:00.000000060 0.0

このコードは、2つの時系列データ series_1series_2 の各要素を比較し、どちらが小さいかを判断するための argmin 関数を使用しています。argmin 関数は、各ペアの要素に対して小さい方の値のインデックスを返します。to_pandas() メソッドは、結果をPandasのデータフレーム形式で表示します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >>> pow_formula = "pow(a, 2)" # 変数 `pow_formula` に "pow(a, 2)" という文字列を格納。 # これは、各要素を2乗するための数式を表します。 >>> pow2_series = F.dsl(pow_formula)([series_1]) # `F.dsl` 関数を用いて、`pow_formula` に基づく変換を `series_1` に適用。 # 結果は `pow2_series` という変数に格納されます。 >>> pow2_series.to_pandas() # `pow2_series` をPandas DataFrameに変換し、結果を出力します。 timestamp value # 出力されたデータには各要素のタイムスタンプとその2乗された値が含まれます。 0 1970-01-01 00:00:00.000000010 36.0 1 1970-01-01 00:00:00.000000020 121.0 2 1970-01-01 00:00:00.000000030 576.0 3 1970-01-01 00:00:00.000000040 inf 4 1970-01-01 00:00:00.000000050 2025.0 5 1970-01-01 00:00:00.000000060 9216.0 # ここで、`inf` は無限大を示し、元のデータに無限大の値が含まれていた可能性があります。
Copied!
1 2 3 4 5 6 7 8 9 10 >>> non_nan_formula = "isnan(b) ? a : b" >>> non_nan_series = F.dsl(non_nan_formula)([series_1, series_2]) >>> non_nan_series.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000010 8.0 1 1970-01-01 00:00:00.000000020 12.0 2 1970-01-01 00:00:00.000000030 24.0 3 1970-01-01 00:00:00.000000040 48.0 4 1970-01-01 00:00:00.000000050 45.0 # series-1からの値のみ 5 1970-01-01 00:00:00.000000060 196.0

このコードは、non_nan_formula という条件を使用して series_1series_2 から値を選択しています。isnan(b) ? a : b は、もし b がNaNであれば a を選択し、そうでなければ b を選択するという条件を示しています。non_nan_series は、この条件に基づいて生成された結果のシリーズを表し、.to_pandas() メソッドでPandasデータフレームとして出力しています。

Copied!
1 2 3 4 5 6 7 8 9 10 >>> non_inf_formula = "isfinite(a) ? a : b" >>> non_inf_series = F.dsl(non_inf_formula)([series_1, series_2]) >>> non_inf_series.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000010 6.0 1 1970-01-01 00:00:00.000000020 11.0 2 1970-01-01 00:00:00.000000030 24.0 3 1970-01-01 00:00:00.000000040 48.0 # series_2からの値のみ 4 1970-01-01 00:00:00.000000050 45.0 5 1970-01-01 00:00:00.000000060 96.0

このコードは、non_inf_formulaという式を使用して、series_1series_2の二つのシリーズを結合しています。式 "isfinite(a) ? a : b" は、aが有限である場合はaを、そうでない場合はbを選択します。non_inf_series.to_pandas()は、この処理の結果をPandasのデータフレーム形式で表示します。行3は、series_2からの値のみを持っていることを示しています。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 >>> assignment_formula = ''' ... var doubled_shifted = a * 2; // すべての値を2倍にする ... doubled_shifted += 10; // すべての2倍にした値に10を加える ... doubled_shifted - b // 2倍にして10を加えた値とbの差を計算する ... ''' >>> var_assigned_series = F.dsl(assignment_formula)([series_1, series_2]) >>> var_assigned_series.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000010 14.0 1 1970-01-01 00:00:00.000000020 20.0 2 1970-01-01 00:00:00.000000030 34.0 3 1970-01-01 00:00:00.000000040 inf 4 1970-01-01 00:00:00.000000050 NaN 5 1970-01-01 00:00:00.000000060 6.0

このコードでは、assignment_formulaという文字列で一連の計算を定義しています。まず、aの値を2倍にし、その結果に10を足し、最終的にbとの差を計算しています。結果はvar_assigned_seriesに格納され、to_pandas()メソッドを使ってPandasデータフレーム形式で表示されます。