パンダは現在data.tableよりも高速ですか?


15

https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping

data.tableベンチマークは2014年以降更新されていません。それがどこPandasよりも速いと聞いたことがありdata.tableます。これは本当ですか?誰もベンチマークをしましたか?Pythonを使ったことがありませんpandasが、勝てるなら切り替えを検討しdata.tableますか?


7
それは、Pythonに切り替えるのは本当に悪い理由です。
マシュードゥルーリー

2
@MatthewDruryどうやって?データとその操作は、私の仕事の80%です。モデルとプレゼンテーションの適合率はわずか20%です。結果を最も早く得られるものを選択しないのはなぜですか?
-xiaodai

2
pythonとRは両方とも、巨大なエコシステムとコミュニティを持つ確立された言語です。単一のライブラリへの選択を減らすことは、広大な森の中で単一の木を崇拝することです。それでも、1つのライブラリであっても、多くの人にとって効率は単一の関心事です(インターフェイスの表現力、他のライブラリへの接続方法、コードベースの拡張性、開発者のオープン性)。私は、選択自体が誤った二分法であると主張します。どちらのコミュニティも異なる焦点を持っているため、言語に異なる長所があります。
マシュードゥルーリー

3
仕事の20%に適した巨大な森がありますか?あなたの仕事の80%に影響を与える選択をしないでください?パンダを使用してデータ準備を行い、R pythonまたはJuliaでモデリングすることを妨げるものは何もありません。私の考えは健全だと思います。パンダがメインツールとして選択するよりも高速な場合。
-xiaodai

1
興味のあるRの網状のパッケージを見つけることができます/使用します。また、Rをデータベースで動作/再生させるために、ますます多くの努力が注がれています(dbplyrなどの努力を参照)。
スラックライン

回答:


13

同僚と私は、pandasとdata.tableのパフォーマンスの違いについていくつかの予備調査を実施しました。私たちのブログで研究(2つの部分に分割されています)を見つけることができます(ここでパート2を見つけることができます)。

パンダがdata.tableより明らかに優れているタスクもあるが、data.tableの方がずっと速い場合もあると考えました。あなたはそれを自分でチェックして、結果についてどう思うかを私たちに知らせることができます。

編集:
ブログを詳細に読みたくない場合は、セットアップと調査結果の概要を以下に示します。

セットアップ

シナリオと呼ばれる次の操作(これまで)で、12の異なるシミュレーションデータセットを比較pandasdata.tableました。

  • 選択操作のようなデータ取得
  • 条件付き選択操作によるデータフィルタリング
  • データの並べ替え操作
  • データ集約操作

計算は、4つの物理コア、16GB RAM、SSDハードドライブを搭載したIntel i7 2.2GHzを搭載したマシンで実行されました。ソフトウェアバージョンは、OS X 10.13.3、Python 3.6.4およびR 3.4.2でした。使用されたそれぞれのライブラリバージョンは、パンダでは0.22、data.tableでは1.10.4-3でした。

一言で言えば

  • data.table列を選択するときの方が速いようです(pandas平均で50%時間がかかります)
  • pandas 行のフィルタリングが高速です(平均で約50%)
  • data.tableソート時にかなり高速であるようです(pandas時には100倍遅くなりました)
  • 新しい列の追加は、 pandas
  • 集計結果は完全に混在しています

結果をできるだけ単純化して、あなたを飽きさせないようにしたことに注意してください。より完全な視覚化については、研究をお読みください。ウェブページにアクセスできない場合は、メッセージを送信してください。コンテンツを転送します。GitHubで完全な調査のコードを見つけることができます。私たちの研究を改善するためのアイデアがあれば、私たちにメールを送ってください。GitHubで連絡先を見つけることができます。


1
あなたが私の答えを読んだかもしれませんが、私はすでに結果が混在していると言います。私の回答でより具体的にするかどうかを明確にしてください。いくつかの数字について詳しく説明します。
トバイアス

1
「このサイトへのアクセスは制限されています。」携帯電話でも職場のコンピューターでもサイトにアクセスできないようです。
-xiaodai

1
それを読んですみません。私は自分の電話でそれを自分でチェックしましたが、問題はありませんでした。接続しようとしている国と何か関係がありますか?
トバイアスクレイ

1
「4物理コア」= 8論理コア。また、どの特定のIntel i7 2.2GHz(どの世代?どのバリアント?-HQ?)とどのキャッシュサイズを言うのも役立ちます。また、SSDの読み取りおよび書き込み速度はどのくらいですか?
-smci

JuliaデータフレームやJuliaDBと比較してどうですか?
スカン

13

誰もベンチマークをしましたか?

はい。質問でリンクしたベンチマークは、data.tableとpandasの最新バージョン用に最近更新されました。さらに、他のソフトウェアが追加されました。更新されたベンチマークはhttps://h2oai.github.io/db-benchmarkにあります。
残念ながら、125GBのメモリマシンでスケジュールされています(元の244GBではありません)。その結果、パンダとダスクは次のことを試みることができません。groupbyデータの読み取り時にメモリが不足するため、1e9行(50GB csv)のデータを。したがって、pandasとdata.tableの場合、1e8行(5GB)のデータを調べる必要があります。

あなたが求めているコンテンツをリンクするだけでなく、これらのソリューションの最近のタイミングを貼り付けています。

これらのタイミングは古くなっていることに注意してください。更新されたタイミングについては、https://h2oai.github.io/db-benchmarkに
アクセスしてください。

| in_rows|question              | data.table| pandas|
|-------:|:---------------------|----------:|------:|
|   1e+07|sum v1 by id1         |      0.140|  0.414|
|   1e+07|sum v1 by id1:id2     |      0.411|  1.171|
|   1e+07|sum v1 mean v3 by id3 |      0.574|  1.327|
|   1e+07|mean v1:v3 by id4     |      0.252|  0.189|
|   1e+07|sum v1:v3 by id6      |      0.595|  0.893|
|   1e+08|sum v1 by id1         |      1.551|  4.091|
|   1e+08|sum v1 by id1:id2     |      4.200| 11.557|
|   1e+08|sum v1 mean v3 by id3 |     10.634| 24.590|
|   1e+08|mean v1:v3 by id4     |      2.683|  2.133|
|   1e+08|sum v1:v3 by id6      |      6.963| 16.451|
|   1e+09|sum v1 by id1         |     15.063|     NA|
|   1e+09|sum v1 by id1:id2     |     44.240|     NA|
|   1e+09|sum v1 mean v3 by id3 |    157.430|     NA|
|   1e+09|mean v1:v3 by id4     |     26.855|     NA|
|   1e+09|sum v1:v3 by id6      |    120.376|     NA|

5つの質問のうち4つで、data.tableの方が高速であり、スケーリングが向上していることがわかります。
このタイミングは今の時点であることに注意してください。ここでid1id2およびid3は文字フィールドです。それらはまもなくカテゴリカル DONEに変更されます。さらに、近い将来それらのタイミングに影響を与える可能性のある他の要因があります(並列 DONEでのグループ化など)。また、NAさまざまなカーディナリティ DONEを持つデータの個別のベンチマークも追加します。

あなたがに興味があるので、もし他のタスクは、この連続ベンチマークプロジェクトに来ているjoinsortreadそして他の人が後でそれを確認してください。
そしてもちろん、プロジェクトリポジトリでフィードバックを提供することを歓迎します!


1
JuliaDBはどうですか?
スカン

1
あなたはその中のステータスを追跡することができます@skan github.com/h2oai/db-benchmark/issues/63
jangorecki

1
良い答え-あなたがリンクしたベンチマークはすべて同じVMで実行されたのですか?つまり、同じ条件下で、パンダとダスクは50GBテーブルに128GB以上のRAMを必要としますが、他はこの制約の下で実行できますか?そうだとすれば、パンダが中程度(〜10GB)のテーブルにある通常の多くのものに対して非常にRAM効率が悪いという私の経験も反映しており、ほとんどの場合、実行速度よりもはるかに大きな問題です。(特定のワークロードに応じて、いずれにせよ、はるかに近く、トレードオフになります。)
jkf

@jkfはい、正確に。500 GBデータセット(10e9行)でmem処理をテストする予定であるため、マシンは128 GBメモリです。現在、sparkとpydatatableのみがこれをサポートしており、まもなくクリックハウスも追加されます。
jangorecki

@jangoreckiは非常に便利なベンチマークです。努力に感謝します。私は、50GBデータセットを消化しないことについて、少し戸惑っています。DASKは、パラメータ(例えばの一つとして、パーティションサイズを持っていますblocksizeread_csv)。呼び出しを避けcompute()、出力をディスクにダンプして、出力テーブル全体をメモリにアセンブルしないようにしましたか?
ムカイロリソビイ

3

いや、実際、データセットのサイズが大きすぎてパンダがクラッシュする場合、基本的には暗闇で立ち往生します。これはひどくて、単純なグループバイサムもできません。dplyrは高速ではないかもしれませんが、混乱することはありません。

私は現在、いくつかの小さな2Gデータセットに取り組んでいますが、簡単にprint(df.groupby(['INCLEVEL1'])["r"].sum())クラッシュします。

dplyrではこのエラーは発生しませんでした。

したがって、パンダがデータセットを処理できる場合はパンダを使用し、そうでない場合はRデータテーブルに固執します。

そして、はい、あなたはシンプルでダスクをパンダのデータフレームに戻すことができますがdf.compute() 、かなり長い時間がかかりますので、パンダが読み込まれるか、データテーブルを読み込むのを辛抱強く待つだけです。


1
ダスクがそんなに悪いことを知らなかった。おそらく、Rのdisk.frameを試してみたいですか?github.com/xiaodaigh/disk.frame私は作者午前
xiaodai

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.