注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
FunctionNode または SummarizerNode のコレクションです。
NodeCollection は反復可能なオブジェクトで、複数の時系列を受け取る関数に渡したり、 コレクション内の各ノードを関数にマッピングしたりできます。
生の系列およびポイントセットの場合、NodeCollection のデータフレームには、ポイントが属する系列を示す
series という追加の列が含まれます。series の値は、時系列の同期で設定された系列ID、または
foundryts.functions.points() のエイリアスで設定された系列IDになります。
単一の入力時系列を受け取る関数に NodeCollection を直接渡さないでください。操作でエラーが発生します。
ノードのすべての要素に同じ関数を適用するには、
NodeCollection.map() を使用します。このメソッドは、変換されたポイントまたは概要を、最終的な
データフレーム内の系列にマッピングします。関数の入力数を確認するには、FoundryTS 関数のドキュメントを参照してください。
Copied!1 2 3 4 5 6 7 8 9 10 11 12>>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") >>> series_1.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 100.0 1 1970-01-01 00:00:00.000000002 200.0 2 1970-01-01 00:00:00.000000003 300.0 >>> series_2 = F.points((1, 200.0), (2, 400.0), (3, 600.0), name="series-2") >>> series_2.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 200.0 1 1970-01-01 00:00:00.000000002 400.0 2 1970-01-01 00:00:00.000000003 600.0
Copied!1 2 3 4 5 6 7 8 9>>> nc = NodeCollection([series_1, series_2]) >>> nc.to_pandas() series timestamp value 0 series-1 1970-01-01 00:00:00.000000001 100.0 1 series-1 1970-01-01 00:00:00.000000002 200.0 2 series-1 1970-01-01 00:00:00.000000003 300.0 3 series-2 1970-01-01 00:00:00.000000001 200.0 4 series-2 1970-01-01 00:00:00.000000002 400.0 5 series-2 1970-01-01 00:00:00.000000003 600.0
Copied!1 2 3 4 5 6>>> scatter_plt = F.scatter()(nc) # scatter() は入力時系列をちょうど2個使用します >>> scatter_plt.to_pandas() is_truncated points.first_value points.second_value points.timestamp 0 False 100.0 200.0 1970-01-01 00:00:00.000000001 1 False 200.0 400.0 1970-01-01 00:00:00.000000002 2 False 300.0 600.0 1970-01-01 00:00:00.000000003
Copied!1 2 3 4 5 6 7 8 9 10>>> scaled_nc = F.scale(10)(nc) # エラー - scale() は単一の入力系列に対して動作します >>> scaled_nc = nc.map(F.scale(10)) # 正常 - 集合内の各系列を scale() の結果にマッピングしています >>> scaled_nc.to_pandas() series timestamp value 0 series-1 1970-01-01 00:00:00.000000001 1000.0 1 series-1 1970-01-01 00:00:00.000000002 2000.0 2 series-1 1970-01-01 00:00:00.000000003 3000.0 3 series-2 1970-01-01 00:00:00.000000001 2000.0 4 series-2 1970-01-01 00:00:00.000000002 4000.0 5 series-2 1970-01-01 00:00:00.000000003 6000.0
このコレクションをデータフレームとして評価したときに生成される pandas.DataFrame
の列名を表す文字列のタプルを返します。
ネストされたオブジェクトのキーは、ネストされたキーを . で結合したタプルにフラット化されます。
構造が均一でないコレクションには、コレクション内の各要素のすべての列の和集合が含まれます。
Copied!1 2>>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") >>> series_2 = F.points((1, 200.0), (2, 400.0), (3, 600.0), name="series-2")
Copied!1 2 3>>> nc = NodeCollection(series_1, series_2) >>> nc.columns() # series 列が追加されていることに注目してください ('series', 'timestamp', 'value')
Copied!1 2 3 4>>> dist = F.distribution()(nc) >>> dist.columns() ('delta', 'distribution_values.count', 'distribution_values.end', 'distribution_values.start', 'end', 'end_timestamp', 'start', 'start_timestamp')
Copied!1 2 3 4 5 6>>> mixed_nc = NodeCollection([F.distribution()(series_1), F.statistics()(series_2)]) ('series', 'delta', 'distribution_values.count', 'distribution_values.end', 'distribution_values.start', 'end', 'end_timestamp', 'start', 'start_timestamp', 'count', 'earliest_point.timestamp', 'earliest_point.value', 'largest_point.timestamp', 'largest_point.value', 'latest_point.timestamp', 'latest_point.value', 'mean', 'smallest_point.timestamp', 'smallest_point.value')
コレクション内の各時系列を、入力関数の出力にマッピングします。
時系列のコレクションに同じクエリをまとめて適用する場合に便利です。
func の適用による対応する出力にマッピングされた、
更新後の NodeCollection。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13>>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") >>> series_1.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 100.0 1 1970-01-01 00:00:00.000000002 200.0 2 1970-01-01 00:00:00.000000003 300.0 >>> series_2 = F.points((1, 200.0), (2, 400.0), (3, 600.0), name="series-2") >>> series_2.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 200.0 1 1970-01-01 00:00:00.000000002 400.0 2 1970-01-01 00:00:00.000000003 600.0 >>> nc = NodeCollection([series_1, series_2])
Copied!1 2 3 4 5 6 7 8 9>>> scaled_nc = nc.map(F.scale(10)) >>> scaled_nc.to_pandas() series timestamp value 0 series-1 1970-01-01 00:00:00.000000001 1000.0 1 series-1 1970-01-01 00:00:00.000000002 2000.0 2 series-1 1970-01-01 00:00:00.000000003 3000.0 3 series-2 1970-01-01 00:00:00.000000001 2000.0 4 series-2 1970-01-01 00:00:00.000000002 4000.0 5 series-2 1970-01-01 00:00:00.000000003 6000.0
Copied!1 2 3 4 5 6 7 8 9>>> mapped_summary_nc = nc.map(F.distribution()) >>> mapped_summary_nc.to_pandas() series delta distribution_values.count distribution_values.end distribution_values.start end end_timestamp start start_timestamp 0 series-1 20.0 1 120.0 100.0 300.0 2262-01-01 100.0 1677-09-21 00:12:43.145225216 1 series-1 20.0 1 200.0 180.0 300.0 2262-01-01 100.0 1677-09-21 00:12:43.145225216 2 series-1 20.0 1 300.0 280.0 300.0 2262-01-01 100.0 1677-09-21 00:12:43.145225216 3 series-2 40.0 1 240.0 200.0 600.0 2262-01-01 200.0 1677-09-21 00:12:43.145225216 4 series-2 40.0 1 400.0 360.0 600.0 2262-01-01 200.0 1677-09-21 00:12:43.145225216 5 series-2 40.0 1 600.0 560.0 600.0 2262-01-01 200.0 1677-09-21 00:12:43.145225216
区間を使用して、コレクション内のすべての時系列に時間範囲を作成します。
各区間は、入力時系列に foundryts.functions.time_range() を作成するために使用され、
さらに変換や分析を行うことができます。これは、Interval
を手動で作成する場合、または foundryts.functions.time_range() の結果を
Interval に変換して作成する場合に最適です。
結果のデータフレームには、interval.start および interval.end の追加の列が含まれます。
func の適用による対応する出力にマッピングされた、
更新後の NodeCollection。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15>>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") >>> series_1.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 100.0 1 1970-01-01 00:00:00.000000002 200.0 2 1970-01-01 00:00:00.000000003 300.0 >>> series_2 = F.points((1, 200.0), (2, 400.0), (3, 600.0), name="series-2") >>> series_2.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 200.0 1 1970-01-01 00:00:00.000000002 400.0 2 1970-01-01 00:00:00.000000003 600.0 >>> nc = NodeCollection([series_1, series_2]) >>> from foundryts.core.interval import Interval >>> intervals = [Interval(1, 2), Interval(2, 3), Interval(3, 4), Interval(1, 3)]
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13>>> nc = nc.map_intervals(intervals, interval_name="interval") >>> nc.to_pandas() series interval interval.start interval.end timestamp value 0 series-1 1 2 1970-01-01 00:00:00.000000001 100.0 1 series-1 2 3 1970-01-01 00:00:00.000000002 200.0 2 series-1 3 4 1970-01-01 00:00:00.000000003 300.0 3 series-1 1 3 1970-01-01 00:00:00.000000001 100.0 4 series-1 1 3 1970-01-01 00:00:00.000000002 200.0 5 series-2 1 2 1970-01-01 00:00:00.000000001 200.0 6 series-2 2 3 1970-01-01 00:00:00.000000002 400.0 7 series-2 3 4 1970-01-01 00:00:00.000000003 600.0 8 series-2 1 3 1970-01-01 00:00:00.000000001 200.0 9 series-2 1 3 1970-01-01 00:00:00.000000002 400.0
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13>>> scaled_nc = nc.map(F.scale(1000)) >>> scaled_nc.to_pandas() # 区間から作成された各時間範囲に scale() 関数を適用します series interval interval.start interval.end timestamp value 0 series-1 1 2 1970-01-01 00:00:00.000000001 100000.0 1 series-1 2 3 1970-01-01 00:00:00.000000002 200000.0 2 series-1 3 4 1970-01-01 00:00:00.000000003 300000.0 3 series-1 1 3 1970-01-01 00:00:00.000000001 100000.0 4 series-1 1 3 1970-01-01 00:00:00.000000002 200000.0 5 series-2 1 2 1970-01-01 00:00:00.000000001 200000.0 6 series-2 2 3 1970-01-01 00:00:00.000000002 400000.0 7 series-2 3 4 1970-01-01 00:00:00.000000003 600000.0 8 series-2 1 3 1970-01-01 00:00:00.000000001 200000.0 9 series-2 1 3 1970-01-01 00:00:00.000000002 400000.0
コレクション内のすべての時系列を評価し、結果を pyspark.sql.DataFrame に連結します。
PySpark のデータフレームでは、分散データ処理と並列変換が可能です。行数が多いデータフレームを
扱う場合に便利です。たとえば、生の系列のすべてのポイントや
FunctionNode の結果を読み込む場合、または複数の SummarizerNode や
FunctionNode の結果をまとめて評価する場合などです。
追加の series 列には、系列IDまたは
foundryts.functions.points() のエイリアスを使用して、結果が属する系列が示されます。
大きなコレクションでは、numPartitions を適切な値に設定してください。
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>>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") >>> series_1.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 100.0 1 1970-01-01 00:00:00.000000002 200.0 2 1970-01-01 00:00:00.000000003 300.0 >>> series_2 = F.points((1, 200.0), (2, 400.0), (3, 600.0), name="series-2") >>> series_2.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 200.0 1 1970-01-01 00:00:00.000000002 400.0 2 1970-01-01 00:00:00.000000003 600.0 >>> nc = NodeCollection(series_1, series_2) >>> nc.to_dataframe() +---------+-----------------------------+-----+ | series | timestamp |value| +---------+-----------------------------+-----+ |series-1 |1970-01-01 00:00:00.000000001|100.0| |series-1 |1970-01-01 00:00:00.000000002|200.0| |series-1 |1970-01-01 00:00:00.000000003|300.0| |series-2 |1970-01-01 00:00:00.000000001|200.0| |series-2 |1970-01-01 00:00:00.000000002|400.0| |series-2 |1970-01-01 00:00:00.000000003|600.0| +---------+-----------------------------+-----+
このコレクション内の時系列クエリを評価し、結果を
pandas.DataFrame に連結します。
データフレームの形式の詳細については、FunctionNode.to_pandas() および SummarizerNode.to_pandas() を
参照してください。
追加の series 列には、系列IDまたは
foundryts.functions.points() のエイリアスを使用して、結果が属する系列が示されます。
コレクション内の各時系列クエリの結果はローカルに保存され、最終的なデータフレームに連結されるため、 結果がメモリーに収まる必要があります。
並列実行では、メモリー使用量とリソース消費量が増加します。process モードを使用すると、
オーバーヘッドが発生する場合があります。並列度が高すぎると、パフォーマンスが低下する可能性があります。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13>>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") >>> series_1.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 100.0 1 1970-01-01 00:00:00.000000002 200.0 2 1970-01-01 00:00:00.000000003 300.0 >>> series_2 = F.points((1, 200.0), (2, 400.0), (3, 600.0), name="series-2") >>> series_2.to_pandas() timestamp value 0 1970-01-01 00:00:00.000000001 200.0 1 1970-01-01 00:00:00.000000002 400.0 2 1970-01-01 00:00:00.000000003 600.0 >>> nc = NodeCollection(series_1, series_2)
Copied!1 2 3 4 5 6 7 8>>> nc.to_pandas() series timestamp value 0 series-1 1970-01-01 00:00:00.000000001 100.0 1 series-1 1970-01-01 00:00:00.000000002 200.0 2 series-1 1970-01-01 00:00:00.000000003 300.0 3 series-2 1970-01-01 00:00:00.000000001 200.0 4 series-2 1970-01-01 00:00:00.000000002 400.0 5 series-2 1970-01-01 00:00:00.000000003 600.0
バージョン 1.0.0 以降は非推奨です。
このコレクション内のノードを評価して、(key, object) の RDD を返します。
この NodeCollection 内のノードがグループ化またはウィンドウ操作によって生成された場合、対応するキーには指定されたメタデータキーまたは区間が含まれます。
それ以外の場合は、ノードの系列識別子になります。
pyspark.RDDコレクションをデータフレームとして評価したときに生成される pandas.DataFrame
の列のデータ型をタプルで返します。
均一でないコレクションには、コレクション内の各要素のすべてのデータ型の和集合が含まれます。
Copied!1 2>>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") >>> series_2 = F.points((1, 200.0), (2, 400.0), (3, 600.0), name="series-2")
Copied!1 2 3>>> nc = NodeCollection(series_1, series_2) >>> nc.types() (<class 'str'>, <class 'int'>, <class 'float'>)
Copied!1 2 3 4 5>>> dist = F.distribution()(nc) >>> dist.types() (<class 'float'>, <class 'int'>, <class 'float'>, <class 'float'>, <class 'float'>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>, <class 'float'>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>)
Copied!1 2 3 4 5 6 7 8 9>>> mixed_nc = NodeCollection([F.distribution()(series_1), F.statistics()(series_2)]) >>> print(mixed_nc.types()) (<class 'str'>, <class 'float'>, <class 'int'>, <class 'float'>, <class 'float'>, <class 'float'>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>, <class 'float'>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>, <class 'int'>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>, <class 'float'>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>, <class 'float'>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>, <class 'float'>, <class 'float'>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>, <class 'float'>)