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

foundryts.NodeCollection

class foundryts.NodeCollection(*nodes, **kwargs)

FunctionNode または SummarizerNode のコレクション。

NodeCollection は、複数の time series を期待する関数に渡すことができるイテラブルであり、コレクション内の各ノードを関数にマッピングするために使用されます。

生の series とポイントセットの場合、NodeCollection のデータフレームには、ポイントが属する series を示す series という余分な列が含まれています。series の値は、time series の同期で設定されるか、もしくは foundryts.functions.points() のエイリアスを通じて設定される series ID になります。

注意

NodeCollection を、単一の入力 time series を期待する関数に直接渡さないようにしてください。これは操作をエラーにします。ノードのすべての要素に同じ関数を適用する場合は、NodeCollection.map() を使用してください。これにより、変換されたポイントまたは要約が最終的なデータフレームの series にマッピングされます。関数の入力数を確認するには、FoundryTS 関数ドキュメントを参照してください。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 >>> 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-1" という名前の時系列データを作成し、 # それを Pandas DataFrame に変換して表示しています。 # タイムスタンプは UNIX エポック (1970年1月1日) からのナノ秒単位で表示されています。 >>> 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 # 上記のコードは、"series-2" という名前の別の時系列データを作成し、 # それを Pandas DataFrame に変換して表示しています。 # こちらも同様にナノ秒単位のタイムスタンプで表示されています。
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 # NodeCollectionからPandas DataFrameに変換する例 nc = NodeCollection([series_1, series_2]) df = nc.to_pandas() # 結果のDataFrameの内容を表示 print(df)
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
  • is_truncated: データが切り捨てられているかどうかを示します。ここではすべて False なので、データは完全です。
  • points.first_valuepoints.second_value: 各時系列の最初と2番目の値を示します。
  • points.timestamp: 各データポイントのタイムスタンプを示します。
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)) # OK - コレクション内の各シリーズを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

columns()

このコレクションをデータフレームに評価すると生成されるpandas.DataFrameの列名を表す文字列のタプルを返します。

注意

ネストされたオブジェクトのキーは、ネストされたキーが . で結合されたタプルにフラット化されます。

非均一なコレクションは、コレクション内の各要素のすべての列の結合を含みます。

  • 戻り値: コレクションが評価される結果のデータフレーム内の列名を含むタプル。
  • 戻り値の型: Tuple[str]

Copied!
1 2 3 4 5 6 7 >>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") # series_1 は、(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") # series_2 は、(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 5 >>> dist = F.distribution()(nc) >>> dist.columns() # 返される列名のタプル ('delta', 'distribution_values.count', 'distribution_values.end', 'distribution_values.start', 'end', 'end_timestamp', 'start', 'start_timestamp')

このコードは、F.distribution() 関数を使用して生成された dist オブジェクトの列名を取得しています。列名は、データの時間範囲や分布に関連する情報を示しています。

Copied!
1 2 3 4 5 6 7 8 9 >>> mixed_nc = NodeCollection([F.distribution()(series_1), F.statistics()(series_2)]) # NodeCollectionに2つの関数の結果を渡して初期化しています。 # 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') # 出力は多くのメトリクスを含むタプルで、各要素はNodeCollectionに含まれるデータの属性を示しています。

map(func)

コレクション内の各 time series を入力関数の出力にマップします。

これは、同じクエリのセットを一連の time series にまとめて適用するのに便利です。

  • パラメーター: func ( ( ) -> FunctionNode | SummarizerNode) – コレクション内の各 time series に適用する FoundryTS 対応関数。
  • 返り値: 各アイテムが func を適用した結果にマップされた更新済みの NodeCollection。
  • 返り値の型: Iterable[NodeCollection]
こちらもご覧ください

NodeCollection.map_intervals()

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") # series_1という名前のポイントデータを作成します。ポイントは(1, 100.0)、(2, 200.0)、(3, 300.0)です。 >>> series_1.to_pandas() # series_1を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という名前のポイントデータを作成します。ポイントは(1, 200.0)、(2, 400.0)、(3, 600.0)です。 >>> series_2.to_pandas() # series_2を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]) # series_1とseries_2を含むNodeCollectionを作成します。
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 >>> scaled_nc = nc.map(F.scale(10)) # データに10を掛けてスケーリングしています >>> scaled_nc.to_pandas() # スケーリングされたデータを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 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 >>> mapped_summary_nc = nc.map(F.distribution()) # ncオブジェクトに対してdistribution関数を適用し、結果をmapped_summary_ncに格納します。 >>> mapped_summary_nc.to_pandas() # mapped_summary_ncの内容をPandasのDataFrameに変換して表示します。 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 # DataFrameの内容を表示。 # 各カラムは以下を示しています: # series: シリーズ名 # delta: 変化量 # distribution_values.count: 分布値のカウント # distribution_values.end: 分布値の終了値 # distribution_values.start: 分布値の開始値 # end: 終了値 # end_timestamp: 終了タイムスタンプ # start: 開始値 # start_timestamp: 開始タイムスタンプ

map_intervals(intervals, interval_name=None)

コレクション内のすべてのtime seriesに対して、指定されたintervalsを使用して時間範囲を作成します。

各intervalは、入力されたtime series上でfoundryts.functions.time_range()を作成するために使用され、さらなるトランスフォームや分析に利用できます。これは、Intervalを手動で作成するか、foundryts.functions.time_range()の結果をIntervalに変換して使用するのが最適です。

結果のデータフレームには、interval.startinterval.endのための追加の列があります。

  • パラメーター:
    • intervals (Interval | List [Interval ]) – コレクション内のすべてのtime seriesの時間範囲を作成するための1つ以上のinterval。
    • interval_name (str , optional) – データフレーム内のintervals列のオプションの別名。
  • 戻り値: 各項目がfuncを適用した対応する出力にマップされた更新されたNodeCollection。
  • 戻り型: Iterable[NodeCollection]

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") # F.points関数を使用して、名前が"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 # to_pandasメソッドを使用して、時系列データをPandas DataFrame形式で表示します。 >>> series_2 = F.points((1, 200.0), (2, 400.0), (3, 600.0), name="series-2") # 名前が"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 # "series-2"のデータをPandas DataFrame形式で表示します。 >>> nc = NodeCollection([series_1, series_2]) # series_1とseries_2を含むNodeCollectionを作成します。 >>> from foundryts.core.interval import Interval >>> intervals = [Interval(1, 2), Interval(2, 3), Interval(3, 4), Intervals(1,3)] # Intervalクラスを使用して、異なる時間間隔を表すリストを作成します。
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

このコードは、ncオブジェクトに対してmap_intervalsメソッドを適用し、指定されたintervalsに基づいてデータをマッピングしています。interval_nameパラメータはintervalとして指定されています。その後、nc.to_pandas()メソッドを呼び出して、データをPandasのDataFrame形式に変換しています。DataFrameは、seriesintervalinterval.startinterval.endtimestampvalueの列を持つテーブルとして表示されます。各行は、異なるseriesintervalの組み合わせに対応するデータポイントを表しています。

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

to_dataframe(numPartitions=16)

コレクション内のすべてのtime seriesを評価し、結果をpyspark.sql.DataFrameに連結します。

PySpark DataFramesは、分散データ処理と並列化されたトランスフォームを可能にします。これは、たとえば生のシリーズ内のすべてのポイントをロードする場合や、FunctionNodeの結果、または複数のSummarizerNodeFunctionNodeの結果を一緒に評価する場合に役立ちます。

追加のseries列は、シリーズIDまたはfoundryts.functions.points()エイリアスを使用して、結果がどのシリーズに属するかを示します。

  • パラメーター: numPartitions (int , optional) – コレクション内のtime seriesデータをSparkエグゼキュータに分配するためのパーティションの数を指定し、並列データ処理を最適化します。エグゼキュータの数が多い場合には、高い値がパフォーマンスを向上させる可能性があり、エグゼキュータが少ない場合には、低い値がより効率的です。time seriesコレクションのサイズとSparkの設定(たとえば、エグゼキュータの数やエグゼキュータメモリ)に基づいて調整してください(デフォルトは 16)。
  • 戻り値: コレクション内のすべてのtime seriesと操作の出力が評価されたPySpark dataframe。
  • 戻り値の型: pyspark.sql.DataFrame
注意

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 25 26 27 28 29 30 >>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") # series_1というデータポイントの集合を作成。各ポイントは(タイムスタンプ, 値)の形式。 >>> series_1.to_pandas() # series_1を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という別のデータポイントの集合を作成。 >>> series_2.to_pandas() # series_2を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) # series_1とseries_2をNodeCollectionというコレクションにまとめる。 >>> nc.to_dataframe() # NodeCollectionをデータフレーム形式で表示。 +---------+-----------------------------+-----+ | 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| +---------+-----------------------------+-----+

to_pandas(parallel=4, mode='thread')

このコレクション内のtime seriesクエリを評価し、結果をpandas.DataFrameに結合します。

データフレームの形状については、FunctionNode.to_pandas()SummarizerNode.to_pandas()を参照してください。

追加のseries列は、シリーズIDまたはfoundryts.functions.points()エイリアスを使用して、結果がどのシリーズに属するかを示します。

  • パラメーター:
    • parallel (int , optional) – time seriesクエリを評価するために使用される並列スレッドまたはプロセスの数。1に設定すると、マルチプロセッシングは行われません(デフォルトは4)。
    • mode (str , optional) – 有効なオプションはprocessまたはthreadであり、それぞれマルチプロセッシングのスレッドプールの種類を制御します。
  • 戻り値: コレクション内のtime seriesクエリを評価したPandasデータフレームの出力。
  • 戻り値の型: pd.DataFrame
Note

コレクション内の各time seriesクエリの結果は、最終的なデータフレームにローカルで保存および結合されるため、結果はメモリに収まる必要があります。

並列実行はメモリ使用量とリソース消費を増加させます。processモードを使用するとオーバーヘッドが発生する可能性があります。過度な並列化はパフォーマンスを低下させることがあります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >>> series_1 = F.points((1, 100.0), (2, 200.0), (3, 300.0), name="series-1") # シリーズ1のデータポイントを作成。各タプルは(タイムスタンプ, 値)を表す。 >>> series_1.to_pandas() # series_1をPandas DataFrameに変換して表示。 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") # シリーズ2のデータポイントを作成。各タプルは(タイムスタンプ, 値)を表す。 >>> series_2.to_pandas() # series_2をPandas DataFrameに変換して表示。 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) # series_1とseries_2をNodeCollectionとしてグループ化。
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

このコードは、ncオブジェクトからPandasデータフレームに変換する操作を行っています。データフレームの内容は以下の通りです:

  • series列はデータの系列を示しています。
  • timestamp列は、各データポイントのタイムスタンプを示しています。
  • value列は、各時点でのデータの値を示しています。

この例では、series-1series-2という2つの異なる系列があり、それぞれに異なるタイムスタンプと値が関連付けられています。

to_rdd(numPartitions=16)

非推奨

バージョン 1.0.0 以降非推奨。

このコレクション内のノードを評価して、(key, object) のRDDを返す。もしこのNodeCollection内のノードがグループ化またはウィンドウ操作の結果である場合、それぞれのキーは指定されたメタデータキーまたはインターバルを含む。それ以外の場合は、ノードのseries識別子になる。

  • パラメーター: numPartitions (int) – spark実行に使用するパーティションの数
  • 戻り値の型: pyspark.RDD

types()

コレクションをデータフレームに評価することで生成されるpandas.DataFrameの列の型のタプルを返す。

  • 戻り値: コレクションが評価される結果のデータフレーム内の列の型を含むタプル。
  • 戻り値の型: Tuple[Type]
注意

非均一なコレクションは、コレクション内の各要素のすべての型の集合を含む。

Copied!
1 2 3 4 5 6 7 >>> nc = NodeCollection(series_1, series_2) >>> nc.types() (<class 'str'>, <class 'int'>, <class 'float'>) # NodeCollection クラスのインスタンスを作成し、`types()` メソッドを呼び出しています。 # このメソッドは、コレクション内の各要素のデータ型を返します。 # 結果として、文字列、整数、浮動小数点数のデータ型を持つ要素が含まれていることが示されています。
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'>)

このコードは、F.distribution() 関数を呼び出して nc を引数として渡し、dist というオブジェクトを作成しています。その後、dist.types() を呼び出して、dist 内のデータ型を確認しています。出力結果は、dist に含まれる各要素のデータ型を示しています。

  • float: 浮動小数点数
  • int: 整数
  • pandas._libs.tslibs.timestamps.Timestamp: pandas のタイムスタンプ型

このように、dist オブジェクトは様々なデータ型を持つ要素を含んでいることがわかります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 >>> mixed_nc = NodeCollection([F.distribution()(series_1), F.statistics()(series_2)]) # `NodeCollection`は、`series_1`に対して`distribution()`関数を適用し、 # `series_2`に対して`statistics()`関数を適用した結果を保持します。 >>> print(mixed_nc.types()) # `mixed_nc.types()`は、NodeCollection内のデータ型を取得します。 # 出力される型情報は、NodeCollection内の各要素のデータ型を示しています。 (<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'>) # 出力には、文字列、浮動小数点数、整数、タイムスタンプなどのデータ型が含まれています。