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

foundryts.functions.interpolate

foundryts.functions.interpolate(before=None, internal=None, after=None, frequency=None, rename_columns_by=None, static_column_name=None)

1個以上の時系列を、入力系列ごとに列を持つ単一の時系列に結合する関数を返します。

↗ 補間は、ほかの系列にデータ点が存在するタイムスタンプについて、 系列内の欠損データ点の値を推定します。この関数は、設定された補間方法を使用して、 データ点が欠損している箇所の入力系列データをリサンプリングし、揃えます。

時系列の補間は、before、internal、after の3つの異なる時間範囲に分けられます。

それぞれの時間範囲では、時系列の異なる部分にある欠損値を補間します。

  • before:補間対象の系列の最初のデータ点より前にあるすべてのデータ点を補間します。たとえば、 :以下の external_interpolated_series の例では、補間によって系列2の最初のデータ点より前に 新しいデータ点が作成され、最も近い値で埋められます。
  • internal:補間対象の時系列内の既存のデータ点の間にある値を補間します。 :たとえば、以下の linear_interpolated_series の例では、補間によって両方の系列の time_extent() 内にあるデータ点の値が推定されます。
  • after:補間対象の系列の最後のデータ点より後にあるすべてのデータ点を補間します。たとえば、 :以下の external_interpolated_series の例では、補間によって系列1の最後のデータ点より後に 新しいデータ点が作成され、最も近い値で埋められます。

系列ごとに異なる方法を適用するには、上記の時間範囲に対するそれぞれの方法をリストとして渡すことができます。 各リスト要素は、対応する入力系列に使用する方法に対応します。単一の方法を渡した場合は、 すべての入力系列に同じ方法が適用されます。

内部補間でサポートされる補間方法は次のとおりです。

方法説明
LINEAR補間対象のタイムスタンプの直前と直後にある2個のデータ点に対する
最適な直線を使用して、データ点を線形補間します。
NEAREST入力系列のいずれかで、タイムスタンプが最も近いデータ点の値を使用します。
PREVIOUS入力時系列内で、直前に定義されているデータ点の値を使用します。
NEXT入力時系列内で、次に現れるデータ点の値を使用します。
NONE補間をスキップします。いずれの入力系列にもデータ点が存在しない
タイムスタンプでは、出力 df に null 値が使用されます。

外部補間(before、after)でサポートされる補間方法は次のとおりです。

方法説明
NEAREST最も近い定義済みデータ点の値を使用します(最初または最後のデータ点になります)。
NONE
(デフォルト)
最初のデータ点より前と最後のデータ点より後では補間しません。

任意で頻度を設定すると、指定した頻度のタイムスタンプのみを補間できます。頻度を指定すると、 入力系列全体がリサンプリングされ、指定した頻度でのみデータ点が作成され、 補間されます。リサンプリングされた出力については、以下の interpolated_every_10ns_series と multiple_interpolated_every_10ns_series の例を 参照してください。

  • パラメーター:
    • before (Union [str , List [str ] ] , 任意) – 系列の最初のデータ点より前のデータ点を補間する方法です。系列ごとのリストとして指定することもできます。 上記の外部補間テーブルにある有効な方法を使用してください(デフォルトは NONE)。
    • internal (Union [str , List [str ] ] , 任意) – 既存のデータ点の間にあるデータ点を補間する方法です。系列ごとのリストとして指定することもできます。 上記の内部補間テーブルにある有効な方法の値を使用してください(デフォルトは NONE)。 (デフォルトは NONE)。
    • after (Union [str , List [str ] ] , 任意) – 系列の最初のデータ点より後のデータ点を補間する方法です。系列ごとのリストとして指定することもできます。 上記の外部補間テーブルにある有効な方法を使用してください(デフォルトは NONE)。
    • frequency (Union [str , pandas.Timedelta ] , 任意) – 補間されたデータ点の出力頻度です。値は対応するヘルツとして処理されます。 たとえば、‘5ms’、‘1s’ です(デフォルトでは固定の頻度はなく、ほかの系列に存在するタイムスタンプのみが 補間されます)。
    • rename_columns_by (str | Callable [ *[*N.FunctionNode ] , str ] , 任意) – 結果内の系列の列を識別するメタデータキー、または各系列の名前を返す 呼び出し可能オブジェクトです(デフォルトは系列の識別子)。
    • static_column_name (str , 任意) – 値の列の固定名です。rename_columns_by をオーバーライドします。
  • 戻り値: 設定された方法を使用して補間された系列を返す関数です。
  • 戻り値の型: (Union[FunctionNode, NodeCollections]) -> Union[FunctionNode, NodeCollection]

データフレームのスキーマ

列名データ型説明
timestamppandas.Timestampデータ点のタイムスタンプ
valueUnion[float, str]データ点の値
注

列挙型の系列には LINEAR 補間を使用しないでください。使用すると、この操作に失敗します。

この関数の出力は、単一系列または複数系列のデータフレームになる場合があり、 それぞれに対応する入力を想定したほかの関数でのみ使用できます。

関連項目

scatter()

例

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 >>> series_1 = F.points((1, 1.0), (101, 2.0), (200, 4.0), (201, 8.0), name="series-1") >>> series_2 = F.points((2, 11.0), (102, 12.0), (201, 14.0), (202, 18.0), name="series-2") >>> series_1.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 1.0 1 1970-01-01 00:00:00.000000101 2.0 2 1970-01-01 00:00:00.000000200 4.0 3 1970-01-01 00:00:00.000000201 8.0 >>> series_2.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000002 11.0 1 1970-01-01 00:00:00.000000102 12.0 2 1970-01-01 00:00:00.000000201 14.0 3 1970-01-01 00:00:00.000000202 18.0 >>> nc = NodeCollection([series_1, series_2])
Copied!
1 2 3 4 5 6 7 8 9 10 >>> linear_interpolated_series = F.interpolate(internal="LINEAR")(nc) >>> linear_interpolated_series.to_pandas() timestamp series-1 series-2 0 1970-01-01 00:00:00.000000001 1.000000 NaN 1 1970-01-01 00:00:00.000000002 1.010000 11.000000 2 1970-01-01 00:00:00.000000101 2.000000 11.990000 3 1970-01-01 00:00:00.000000102 2.020202 12.000000 4 1970-01-01 00:00:00.000000200 4.000000 13.979798 5 1970-01-01 00:00:00.000000201 8.000000 14.000000 6 1970-01-01 00:00:00.000000202 NaN 18.000000
Copied!
1 2 3 4 5 6 7 8 9 10 >>> nearest_interpolated_series = F.interpolate(internal="NEAREST")(nc) >>> nearest_interpolated_series.to_pandas() timestamp series-1 series-2 0 1970-01-01 00:00:00.000000001 1.0 NaN 1 1970-01-01 00:00:00.000000002 1.0 11.0 2 1970-01-01 00:00:00.000000101 2.0 12.0 3 1970-01-01 00:00:00.000000102 2.0 12.0 4 1970-01-01 00:00:00.000000200 4.0 14.0 5 1970-01-01 00:00:00.000000201 8.0 14.0 6 1970-01-01 00:00:00.000000202 NaN 18.0
Copied!
1 2 3 4 5 6 7 8 9 10 >>> previous_interpolated_series = F.interpolate(internal="PREVIOUS")(nc) >>> previous_interpolated_series.to_pandas() timestamp series-1 series-2 0 1970-01-01 00:00:00.000000001 1.0 NaN 1 1970-01-01 00:00:00.000000002 1.0 11.0 2 1970-01-01 00:00:00.000000101 2.0 11.0 3 1970-01-01 00:00:00.000000102 2.0 12.0 4 1970-01-01 00:00:00.000000200 4.0 12.0 5 1970-01-01 00:00:00.000000201 8.0 14.0 6 1970-01-01 00:00:00.000000202 NaN 18.0
Copied!
1 2 3 4 5 6 7 8 9 10 >>> next_interpolated_series = F.interpolate(internal="NEXT")(nc) >>> next_interpolated_series.to_pandas() timestamp series-1 series-2 0 1970-01-01 00:00:00.000000001 1.0 NaN 1 1970-01-01 00:00:00.000000002 2.0 11.0 2 1970-01-01 00:00:00.000000101 2.0 12.0 3 1970-01-01 00:00:00.000000102 4.0 12.0 4 1970-01-01 00:00:00.000000200 4.0 14.0 5 1970-01-01 00:00:00.000000201 8.0 14.0 6 1970-01-01 00:00:00.000000202 NaN 18.0
Copied!
1 2 3 4 5 6 7 8 9 10 >>> none_interpolated_series = F.interpolate(internal="NONE")(nc) # 欠損している点をすべてスキップします >>> none_interpolated_series.to_pandas() timestamp series-1 series-2 0 1970-01-01 00:00:00.000000001 1.0 NaN 1 1970-01-01 00:00:00.000000002 NaN 11.0 2 1970-01-01 00:00:00.000000101 2.0 NaN 3 1970-01-01 00:00:00.000000102 NaN 12.0 4 1970-01-01 00:00:00.000000200 4.0 NaN 5 1970-01-01 00:00:00.000000201 8.0 14.0 6 1970-01-01 00:00:00.000000202 NaN 18.0
Copied!
1 2 3 4 5 6 7 8 9 10 >>> external_interpolated_series = F.interpolate(before="NEAREST", after="NEAREST")(nc) >>> external_interpolated_series.to_dataframe() timestamp series-1 series-2 0 1970-01-01 00:00:00.000000001 1.0 11.0 1 1970-01-01 00:00:00.000000002 NaN 11.0 2 1970-01-01 00:00:00.000000101 2.0 NaN 3 1970-01-01 00:00:00.000000102 12.0 4 1970-01-01 00:00:00.000000200 4.0 NaN 5 1970-01-01 00:00:00.000000201 8.0 14.0 6 1970-01-01 00:00:00.000000202 8.0 18.0
Copied!
1 2 3 4 5 6 7 8 9 10 >>> interpolated_series = F.interpolate(internal=["LINEAR", "NONE"])(nc) # 時系列ごとに異なる方式を使用します >>> interpolated_series.to_pandas() timestamp series-1 series-2 0 1970-01-01 00:00:00.000000001 1.000000 NaN 1 1970-01-01 00:00:00.000000002 1.010000 11.0 2 1970-01-01 00:00:00.000000101 2.000000 NaN 3 1970-01-01 00:00:00.000000102 2.020202 12.0 4 1970-01-01 00:00:00.000000200 4.000000 NaN 5 1970-01-01 00:00:00.000000201 8.000000 14.0 6 1970-01-01 00:00:00.000000202 NaN 18.0
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 >>> interpolated_every_10ns_series = F.interpolate(internal="NEAREST", frequency="10ns")(series_1) >>> interpolated_every_10ns_series.to_pandas() timestamp series-1 0 1970-01-01 00:00:00.000000010 1.0 1 1970-01-01 00:00:00.000000020 1.0 2 1970-01-01 00:00:00.000000030 1.0 3 1970-01-01 00:00:00.000000040 1.0 4 1970-01-01 00:00:00.000000050 1.0 5 1970-01-01 00:00:00.000000060 2.0 6 1970-01-01 00:00:00.000000070 2.0 7 1970-01-01 00:00:00.000000080 2.0 8 1970-01-01 00:00:00.000000090 2.0 9 1970-01-01 00:00:00.000000100 2.0 10 1970-01-01 00:00:00.000000110 2.0 11 1970-01-01 00:00:00.000000120 2.0 12 1970-01-01 00:00:00.000000130 2.0 13 1970-01-01 00:00:00.000000140 2.0 14 1970-01-01 00:00:00.000000150 2.0 15 1970-01-01 00:00:00.000000160 4.0 16 1970-01-01 00:00:00.000000170 4.0 17 1970-01-01 00:00:00.000000180 4.0 18 1970-01-01 00:00:00.000000190 4.0 19 1970-01-01 00:00:00.000000200 4.0
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 >>> multiple_interpolated_every_10ns_series = F.interpolate( ... internal="NEAREST", frequency="10ns" ... )(nc) >>> multiple_interpolated_every_10ns_series.to_pandas() timestamp series-1 series-2 0 1970-01-01 00:00:00.000000010 1.0 11.0 1 1970-01-01 00:00:00.000000020 1.0 11.0 2 1970-01-01 00:00:00.000000030 1.0 11.0 3 1970-01-01 00:00:00.000000040 1.0 11.0 4 1970-01-01 00:00:00.000000050 1.0 11.0 5 1970-01-01 00:00:00.000000060 2.0 12.0 6 1970-01-01 00:00:00.000000070 2.0 12.0 7 1970-01-01 00:00:00.000000080 2.0 12.0 8 1970-01-01 00:00:00.000000090 2.0 12.0 9 1970-01-01 00:00:00.000000100 2.0 12.0 10 1970-01-01 00:00:00.000000110 2.0 12.0 11 1970-01-01 00:00:00.000000120 2.0 12.0 12 1970-01-01 00:00:00.000000130 2.0 12.0 13 1970-01-01 00:00:00.000000140 2.0 12.0 14 1970-01-01 00:00:00.000000150 2.0 12.0 15 1970-01-01 00:00:00.000000160 4.0 14.0 16 1970-01-01 00:00:00.000000170 4.0 14.0 17 1970-01-01 00:00:00.000000180 4.0 14.0 18 1970-01-01 00:00:00.000000190 4.0 14.0 19 1970-01-01 00:00:00.000000200 4.0 14.0