
これは、PythonとRのライブラリと同様のデータ分析用に設計されたC ++分析ライブラリです。たとえば、これをPandasまたはR Data.Frameと比較します。
さまざまな方法でデータをスライスできます。データに参加、マージ、グループごとにできます。データ上でさまざまな統計、要約、財務、およびMLアルゴリズムを実行できます。カスタムアルゴリズムを簡単に追加できます。マルチコラムソート、カスタムピック、データを削除できます。そしてもっと…
DataFrameには、訪問者の形での分析アルゴリズムの大規模なコレクションも含まれています。これらは、平均、 STD偏差、リターンなどの基本的な統計からのものです。…アフィニティ伝播、多項式適合、任意の長さの高速フーリエ変換など、より複雑な分析など、取引指標の優れたコレクションを含む。独自のアルゴリズムを簡単に追加することもできます。
DataFrameは、大規模なデータセットに対して、ほぼすべてのAPIで広範なマルチスレッドを採用しています。これにより、データフレームは特に大きなデータセットの分析に適しています。
基本的な操作を開始するには、Hello Worldをご覧ください。コードサンプルを備えた機能の完全なリストについては、ドキュメントを参照してください。
私はこのライブラリでいくつかの原則を守ってきました:
Polars DataFrameについて聞いたことがあるでしょう。錆で実装され、ゼロオーバーヘッドでPythonに移植されます(ループがない限り)。私は多くの人々から、データフレームとポーラーの比較を書くように頼まれました。それで、私はついにポーラーについて少し学び、非常にシンプルなベンチマークを書く時間を見つけました。
PolarsとC ++データフレーム(およびPandas)の両方について、次の同一のプログラムを書きました。 Polarsバージョン:0.19.14(Pandasバージョン:1.5.3、Numpyバージョン:1.24.2)を使用しました。また、-O3オプションを備えたC ++ 20 Clangコンパイラを使用しました。やや時代遅れのMacBook Pro(Intel Chip、96GB RAM)の両方で両方を走りました。
どちらの場合も、3つのランダム列を使用してデータフレームを作成しました。 C ++データフレームには、同じサイズの追加のインデックス列が必要でした。 Polarsはインデックス列を信じていません(それは独自の長所と短所を持っています。私はここでそれを経験していません)。各プログラムには3つの同一のパーツがあります。最初に、それぞれ300mの乱数で3つの列を生成して入力します(C ++データフレームの場合、同じサイズのシーケンシャルインデックス列も生成する必要があります)。それが私が興味を持っていない部分です。第2部では、最初の列の平均、2番目の列の分散、および第2列と3番目の列のピアソン相関を計算します。 3番目の部分では、列の1つでselect(またはPolarsが呼ぶようにフィルター)を行います。
結果:
Polarsにロードできる最大データセットは、列あたり300m行でした。より大きなデータセットがメモリを吹き飛ばし、OSがそれを殺しました。列あたり10列の列でC ++データフレームを実行しましたが、より大きなデータセットでも実行されたと確信しています。それで、私は比較するために300mの列で両方を走らざるを得ませんでした。私は各テストを4回実行し、最高の時間を取りました。 Polarsの数は、特に計算と選択の時間、走行から別の実行まで大きく異なりました。 C ++データフレーム番号は大幅に一貫性がありました。
| C ++データフレーム | ポーラー | パンダ | |
|---|---|---|---|
| データ生成/読み込み時間 | 26.945900秒 | 28.468640秒 | 36.678976秒 |
| 計算時間 | 1.260150秒 | 4.876561秒 | 40.326350秒 |
| 選択時間 | 0.742493秒 | 3.876561秒 | 8.326350秒 |
| 全体的な時間: | 28.948600秒 | 36.876345秒 | 85.845114秒 |
特に生産能力でそれを使用している場合は、スポンサーデータフレームを検討してください。それは感謝の最も強い形です