Share
Embed
Transcript
64 slides
-
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 3 -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 4 -
データフレームライブラリ • データフレーム ◦ 行と列から構成される表形式のデータ構造 5 名前(種) 界 … 科
… ジャイアントパンダ 動物界 … クマ科 … ホッキョクグマ 動物界 … クマ科 … … … … … … -
• データフレームライブラリ ◦ データフレームの機能を提供するライブラリ ◦ データフレームで表現される大量のデータを効率的に操作・分析 ▪ 例:CSVの読み込み、絞り込み、集計、結合、 機械学習ライブラリ、可視化ライブラリへの入力など データフレームライブラリ
6 名前(種) 界 … 科 … ジャイアントパンダ 動物界 … クマ科 … ホッキョクグマ 動物界 … クマ科 … … … … … … 名前(種) 界 … 科 … ジャイアントパンダ 動物界 … クマ科 … ホッキョクグマ 動物界 … クマ科 … 科がクマ科の 行に絞り込み -
データフレームライブラリ • データフレームライブラリのデファクトスタンダード ◦ pandas[2] • 様々なデータフレームライブラリ ◦ Polars[3]、PySpark[4]、Dask[5]、Modin[6]、FireDucks[7]など ◦
デファクトスタンダードである pandasと比較して、それぞれの特徴とそれに基づく、 有効な状況(導入先のプロジェクトにおける使用目的など)が異なる 7 [2] pandas - Python Data Analysis Library(https://pandas.pydata.org/) [3] Polars — DataFrames for the new era(https://pola.rs/) [4] PySpark Overview — PySpark 3.5.3 documentation(https://spark.apache.org/docs/latest/api/python/index.html#pyspark-overview) [5] Dask | Scale the Python tools you love(https://www.dask.org/) [6] Scale your pandas workflow by changing a single line of code — Modin 0.32.0+0.g3e951a6.dirty documentation(https://modin.readthedocs.io/en/stable/) [7] FireDucks(https://fireducks-dev.github.io/ja/) -
データフレームライブラリ • 状況に応じた適切なデータフレームライブラリの選定の重要性 ◦ ある事例:特定の状況で適切なデータフレームライブラリを選定することで 約30倍〜50倍の処理速度の高速化を実現 [8] ◦ 適切な選定は有効/裏を返すと無作為な選定はそれだけの機会損失のリスクに •
技術選定の意思決定の難易度 ◦ 様々な軸での比較が必要 (例:処理速度とソフトウェアエコシステムでの信頼度や実績のどちらを優先するか) 8 状況に応じた適切なデータフレームライブラリの選定を実現したい [8] Polars — TPCH Benchmark(https://pola.rs/posts/benchmarks/) -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 9 -
発表概要 • 結論: ◦ データフレームライブラリによって特徴と有効な状況が異なる ◦ 状況に応じた適切なデータフレームライブラリの選定を実現ために 徹底比較(様々な軸での比較)が必要 ▪ 処理性能、実装機能、利用状況、開発状況、サポート状況、学習コストなど
11 本発表で紹介した比較軸を参考に、状況に応じた比較を実施し、 適切なデータフレームライブラリを選定しましょう! -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 13 -
対象とするデータフレームライブラリ 14 • 本発表で対象とする主要なデータフレームライブラリ データフレーム ライブラリ 概要 pandas デファクトスタンダードとして位置付けられるデータフレームライブラリ。 Polars
Rust実装の単一マシン上でも高速な処理を実現するライブラリ。 PySpark Apache Spark[9](分散処理システム)を操作するための Pythonのライブラリ。 Dask 並列処理や分散処理により高速な処理を実現するライブラリ。 Modin pandasと同様の操作で高速な処理を実現するライブラリ。 FireDucks pandasと同様の操作で高速な処理を実現する日本製のライブラリ。 ※他にも存在していることにご留意ください [9] Apache Spark™ - Unified Engine for large-scale data analytics(https://spark.apache.org/) それぞれ特徴が異なる -
対象とするデータフレームライブラリ • 本発表で対象とする主要なデータフレームライブラリ 15 データフレーム ライブラリ PyPI[10]での識別子 初回リリース日 (PyPIへの登録) pandas
pandas 2009年12月26日 Polars polars 2021年3月15日 PySpark pyspark 2017年5月7日 Dask dask 2015年1月29日 Modin modin 2018年6月25日 FireDucks fireducks 2023年9月1日 [10] PyPI · The Python Package Index(https://pypi.org/) ※他にも存在していることにご留意ください pandasの歴史が最も長い PolarsやFireDucksは 近年リリースされている PolarsやFireDucksは 近年リリースされている -
対象とするデータフレームライブラリ • 本発表で対象とする主要なデータフレームライブラリ 16 データフレーム ライブラリ 最新バージョン (PyPIへの登録) ライセンス pandas
2.2.2(2024年4月11日) BSD-3-Clause license Polars 1.6.0(2024年8月29日) MIT license PySpark 3.5.2(2024年8月12日) Apache-2.0 license Dask 2024.8.2(2024年8月31日) BSD-3-Clause license Modin 0.31.0(2024年6月26日) Apache-2.0 license FireDucks 1.0.2(2024年8月30日) BSD-3-Clause license ※他にも存在していることにご留意ください 開発は継続 -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 17 -
データフレームライブラリの比較 • 状況に応じた適切なデータフレームライブラリの選定を 実現するための様々な比較軸 ◦ 処理性能 ◦ 実装機能 ◦ 利用状況
◦ 開発状況 ◦ サポート状況 ◦ 学習コスト 18 本発表ではこれらの軸に基づく、 データフレームライブラリの比較を紹介 -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 19 -
処理性能の比較 21 • 処理速度に関する定性的な評価(特徴に基づくpandasとの平均的な評価) ※網羅性に欠ける点があることにご留意ください データフレーム ライブラリ 処理速度と特徴 pandas -
Polars 高速(Rust実装、列指向、遅延評価、最適化、並列処理) PySpark 高速(RDD、遅延評価、最適化、並列処理、分散処理) Dask 高速(データの分割、遅延評価、最適化、並列処理、分散処理) Modin 高速(データの分割、遅延評価、最適化、並列処理、分散処理) FireDucks 高速(列指向、遅延評価、最適化、並列処理) 基本的にはpandasよりも他 のライブラリの 処理速度は高速 -
処理性能の比較 • 処理速度に関する定量的な評価(公開情報) ◦ Polarsの開発元による処理速度の比較 [8](2024年4月16日に公開) ▪ TPC-H[11]のベンチマークに含まれる複数種のクエリで Polars、pandas、PySpark、DuckDB[12]、Dask、Modinを比較 ▪
Polarsは複数種のクエリに対して一貫して最速 ◦ FireDucksの開発元による処理速度の比較 [13](2024年6月5日に公開) ▪ TPC-Hのベンチマークに含まれる複数種のクエリで pandas、Modin、Polars、FireDucksを比較 ▪ FireDucksは複数種のクエリのほとんどにおいて Polarsよりも高速 22 [11] TPC-H Homepage(https://www.tpc.org/tpch/) [12] DuckDB – An in-process SQL OLAP database management system(https://duckdb.org/) [13] Benchmark Archive | FireDucks(https://fireducks-dev.github.io/docs/benchmarks/archive/#2024-06-05) PolarsやFireDucksの 処理速度は高速 分散処理が活きる例 ではないことに注意 -
処理性能の比較 • メモリ効率に関する定性的な評価(特徴に基づくpandasとの平均的な評価) 23 データフレーム ライブラリ メモリ効率 pandas - Polars
高い(Rust実装、列指向、遅延評価、最適化、並列処理) PySpark 高い(RDD、遅延評価、最適化、並列処理、分散処理) Dask 高い(データの分割、遅延評価、最適化、並列処理、分散処理) Modin 高い(データの分割、遅延評価、最適化、並列処理、分散処理) FireDucks 高い(列指向、遅延評価、最適化、並列処理) ※網羅性に欠ける点があることにご留意ください 基本的にはpandasよりも他 のライブラリの メモリ効率は高い -
処理性能の比較 • 目的:データフレームライブラリが導入する環境の要件を満たすか、 理想に近づくかの把握 • 比較軸: ◦ 処理性能:処理速度やメモリ効率など 24 処理性能の異なるデータフレームライブラリが存在しており、
導入する環境の要件を満たすか、理想に近づくかの把握が可能 -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 25 -
実装機能の比較 • 実装機能(分散処理、GPU) 27 データフレーム ライブラリ 分散処理 GPU pandas -
- (cuDF[14]により代替が可能) Polars - 対応 PySpark 対応 対応 Dask 対応 - (Dask-cuDF[15]により代替が可能) Modin 対応 対応 (Dask-cuDFの使用により可能) FireDucks - - [14] cuDF Pandas | RAPIDS | GPU Accelerated Data Science(https://rapids.ai/cudf-pandas/) [15] Welcome to dask-cudf’s documentation! — dask-cudf 24.08.00 documentation(https://docs.rapids.ai/api/dask-cudf/stable/) 分散処理が可能な状況で有 効なライブラリが存在 GPUの使用が可能な状況で 有効なライブラリが存在 ※一部はGPU用の 代替ライブラリが存在 -
実装機能の比較 • 目的:データフレームライブラリが導入する環境の要件を満たすか、 リソースの有効な活用が可能かの把握 • 比較軸: ◦ 実装機能:分散処理、 GPU対応など 28
実装機能の異なるデータフレームライブラリが存在しており、 導入する環境の要件を満たすか、リソースの有効な活用が可能かの把握が可能 -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 29 -
利用状況の比較 • 利用状況(人気、利用数) 31 データフレーム ライブラリ GitHub[16]におけるスター数(累積) PyPIでのダウンロード数(月間) ※Libraries.io[17]により取得 pandas
43.3k 269,670,112 Polars 29.4k 7,994,878 PySpark 39.4k 31,093,921 Dask 12.4k 11,481,362 Modin 9.8k 1,502,526 FireDucks - 11,904 ※PySparkはApache Sparkにて観測/FireDucksは本体のリポジトリが公開されていないため除外 [16] GitHub: Let’s build from here · GitHub(https://github.com/) [17] Libraries.io - security & maintenance data for open source software(https://libraries.io/) pandasが 最も人気で利用数も多い Polars、PySpark、Dask、 Modinも人気であり 利用数も多い -
利用状況の比較 • 利用状況(関連コンテンツの規模) 32 データフレーム ライブラリ Qiita[18]での記事数 Zenn[19]での記事数 note[20]での記事数 pandas
3,526 199 517 Polars 78 44 16 PySpark 252 33 16 Dask 28 1 1 Modin - - 1 FireDucks 12 1 12 ※タグ・ハッシュタグが設定されている記事の数を集計 [18] Qiita(https://qiita.com/) [19] Zenn|エンジニアのための情報共有コミュニティ (https://zenn.dev/) [20] note ――つくる、つながる、とどける。 (https://note.com/) Polars、PySpark、 Dask、FireDucksの 関連コンテンツも公開 pandasの 関連コンテンツが最も多い -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 34 -
開発状況の比較 • 開発の活発さ(リリース)※PyPIより取得 36 データフレーム ライブラリ 直近1年のリリース回数 リリース回数 リリース頻度 (日数/リリース回数)
pandas 8 109 47.88 Polars 69 353 3.58 PySpark 7 45 57.49 Dask 29 206 17.00 Modin 20 100 21.93 FireDucks 47 47 7.72 直近1年でも累積でもpolars のリリース回数が 最も多い -
開発状況の比較 • 開発の活発さ(コミット)※GitHub REST API[21]より取得 • 37 ※PySparkはApache Sparkにて観測/FireDucksは非公開 [21]
GitHub REST API に関するドキュメント - GitHub Docs( https://docs.github.com/ja/rest?apiVersion=2022-11-28) データフレーム ライブラリ 直近1年のコミット回数 コミット回数 コミット頻度 (日数/コミット回数) pandas 2,228 35,447 0.16 Polars 3,453 10,676 0.15 PySpark 4,087 42,032 0.13 Dask 453 8,301 0.43 Modin 382 2,968 0.76 FireDucks - - - Polarsは直近の コミット回数が多い 歴史がある分、pandasのコ ミット回数が多い -
開発状況の比較 • 開発の活発さ(コミッター)※GitHub REST API[21]より取得 • 38 ※PySparkはApache Sparkにて観測/FireDucksは非公開 データフレーム
ライブラリ 直近1年のコミットの コミッター数 コミットの コミッター数 pandas 367 3,244 Polars 244 454 PySpark 271 2,041 Dask 45 557 Modin 30 130 FireDucks - - [21] GitHub REST API に関するドキュメント - GitHub Docs( https://docs.github.com/ja/rest?apiVersion=2022-11-28) 歴史がある分、pandasのコ ミッターの人数が多い Polars、PySparkも 多くのコミッターが存在 -
開発状況の比較 • 開発の活発さ(イシュー/プルリクエスト)※GitHub REST API[21]より取得 • 39 データフレーム ライブラリ 直近1年のイシュー
/プルリクエストのクローズ率 イシュー/プルリクエストの クローズ率 pandas 84.12%(3,915/4,654) 93.91%(55,527/59,130) Polars 81.04%(6,083/7,506) 89.25%(16,229/18,184) PySpark - - Dask 77.43%(638/824) 90.41%(9,888/10,937) Modin 88.73%(732/825) 90.93%(6,549/7,202) FireDucks - - [21] GitHub REST API に関するドキュメント - GitHub Docs( https://docs.github.com/ja/rest?apiVersion=2022-11-28) どれも安定してイシューがク ローズされている ※PySparkとFireDucksは非公開な要素があるため対象外と設定 -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 41 -
サポート状況の比較 • 目的:導入先の環境に対するデータフレームライブラリの互換性の把握 • 比較軸: ◦ サポート状況:特定のライブラリが対象のデータフレームを入力として受け付けるかなど • 備考: ◦
(おそらく)多くの状況においてサポート状況が懸念になる例はない ▪ pandasのデータフレームは多くのライブラリからサポートされている ▪ 他のデータフレームライブラリでも pandasのデータフレームへの変換がなされる/可能であるため ◦ 副次的に他プロジェクトからの評価の観測が可能 (サポートのための開発が計画されているか) 42 -
サポート状況の比較 • サポート状況(機械学習) 43 データフレーム ライブラリ scikit-learn[22] LightGBM[23] pandas サポート
サポート Polars サポート - PySpark - - Dask (pandasと同様) (pandasと同様) Modin (pandasと同様) (pandasと同様) FireDucks (pandasと同様) (pandasと同様) [22] scikit-learn: machine learning in Python — scikit-learn 1.5.2 documentation(https://scikit-learn.org/stable/) [23] Welcome to LightGBM’s documentation! — LightGBM 4.0.0 documentation(https://lightgbm.readthedocs.io/en/stable/) [24] [python-package] Adding support for polars for input data · Issue #6204 · microsoft/LightGBM · GitHub(https://github.com/microsoft/LightGBM/issues/6204) ※サポート:直接入力が可能 サポートに向けた 議論がなされている[24] -
サポート状況の比較 • サポート状況(機械学習) 44 データフレーム ライブラリ scikit-learn[22] LightGBM[23] pandas サポート
サポート Polars サポート - PySpark - - Dask (pandasと同様) (pandasと同様) Modin (pandasと同様) (pandasと同様) FireDucks (pandasと同様) (pandasと同様) ※サポート:直接入力が可能 [22] scikit-learn: machine learning in Python — scikit-learn 1.5.2 documentation(https://scikit-learn.org/stable/) [23] Welcome to LightGBM’s documentation! — LightGBM 4.0.0 documentation(https://lightgbm.readthedocs.io/en/stable/) [24] [python-package] Adding support for polars for input data · Issue #6204 · microsoft/LightGBM · GitHub(https://github.com/microsoft/LightGBM/issues/6204) 取り扱う際はpandasのデー タフレームに変換 遅延評価時にpandasのデー タフレームに変換 pandasの データフレームとして出力 pandasと対応する データフレーム -
サポート状況の比較 • サポート状況(可視化) 45 データフレーム ライブラリ Matplotlib[25] seaborn[26] Plotly[27] pandas
サポート サポート サポート Polars サポート サポート サポート PySpark - - - Dask (pandasと同様) (pandasと同様) (pandasと同様) Modin (pandasと同様) (pandasと同様) (pandasと同様) FireDucks (pandasと同様) (pandasと同様) (pandasと同様) [25] Matplotlib — Visualization with Python(https://matplotlib.org/) [26] seaborn: statistical data visualization — seaborn 0.13.2 documentation(https://seaborn.pydata.org/) [27] Plotly Python Graphing Library(https://plotly.com/python/) ※サポート:直接入力が可能 取り扱う際はpandasのデー タフレームに変換 遅延評価時にpandasのデー タフレームに変換 pandasの データフレームとして出力 pandasと対応する データフレーム -
サポート状況の比較 • サポート状況(Webアプリケーション) 46 データフレーム ライブラリ Streamlit[28] pandas サポート Polars
サポート PySpark - Dask (pandasと同様) Modin (pandasと同様) FireDucks (pandasと同様) [28] Streamlit • A faster way to build and share data apps(https://streamlit.io/) ※サポート:直接入力が可能 取り扱う際はpandasのデー タフレームに変換 遅延評価時にpandasのデー タフレームに変換 pandasの データフレームとして出力 pandasと対応する データフレーム -
サポート状況の比較 • 目的:導入先の環境に対するデータフレームライブラリの互換性の把握 • 比較軸: ◦ サポート状況:特定のライブラリが対象のデータフレームを入力として受け付けるかなど • 備考: ◦
(おそらく)多くの状況においてサポート状況が懸念になる例はない ▪ pandasのデータフレームは多くのライブラリからサポートされている ▪ 他のデータフレームライブラリでも pandasのデータフレームへの変換がなされる/可能であるため ◦ 副次的に他プロジェクトからの評価の観測が可能 (サポートのための開発が計画されているか) 47 サポート状況の異なるデータフレームライブラリが存在し、 導入先の環境に対する互換性の把握が可能 -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 48 -
学習コストの比較 • pandasとの記述の差分(参考[29]) 50 データフレーム ライブラリ 準備 pandas import pandas
as pd Polars import polars as pl PySpark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('app-name').getOrCreate() [29] Index - Polars user guide(https://docs.pola.rs/#example) 全体的に差はない 別途必要な手続きが存在(難 しくはない) -
学習コストの比較 • pandasとの記述の差分(参考[29]) • • 51 データフレーム ライブラリ 準備 pandas
import pandas as pd Dask import dask.dataframe as dd Modin import modin.pandas as pd FireDucks import fireducks.pandas as pd [29] Index - Polars user guide(https://docs.pola.rs/#example) 全体的に差はない importの変更だけで 良いというコンセプト importの変更だけで 良いというコンセプト -
学習コストの比較 • pandasとの記述の差分(参考[29]) • 52 データフレーム ライブラリ CSVの読み込み pandas df
= pd.read_csv('iris.csv') Polars df = pl.read_csv('iris.csv') # 遅延評価を使用する場合 df = pl.scan_csv('iris.csv') PySpark df = spark.read.csv('iris.csv', header=True, inferSchema=True) [29] Index - Polars user guide(https://docs.pola.rs/#example) 全体的に差はない デフォルトの仕様が 異なるため明示的な 指定が必要 -
学習コストの比較 • pandasとの記述の差分(参考[29]) 53 データフレーム ライブラリ CSVの読み込み pandas df =
pd.read_csv('iris.csv') Dask df = dd.read_csv('iris.csv') Modin df = pd.read_csv('iris.csv') FireDucks df = pd.read_csv('iris.csv') [29] Index - Polars user guide(https://docs.pola.rs/#example) 差はない -
学習コストの比較 • pandasとの記述の差分(参考[29]) 54 データフレーム ライブラリ 絞り込み pandas df[df['sepal length
(cm)'] > 5] # メソッドを使用する場合( query) df.query('`sepal length (cm)` > 5') Polars df.filter(pl.col('sepal length (cm)') > 5) PySpark from pyspark.sql.functions import col df.filter(col('sepal length (cm)') > 5) [29] Index - Polars user guide(https://docs.pola.rs/#example) 差はあるが、 読み替えコストは低い メソッドにより実現 (メソッドチェーンが 容易) メソッドにより実現 (メソッドチェーンが 容易) -
学習コストの比較 • pandasとの記述の差分(参考[29]) 55 データフレーム ライブラリ 絞り込み pandas df[df['sepal length
(cm)'] > 5] # メソッドを使用する場合( query) df.query('`sepal length (cm)` > 5') Dask df[df['sepal length (cm)'] > 5] # メソッドを使用する場合( query) df.query('`sepal length (cm)` > 5') Modin df[df['sepal length (cm)'] > 5] # メソッドを使用する場合( query) df.query('`sepal length (cm)` > 5') FireDucks df[df['sepal length (cm)'] > 5] # メソッドを使用する場合( query) df.query('`sepal length (cm)` > 5') [29] Index - Polars user guide(https://docs.pola.rs/#example) 差はない -
学習コストの比較 • pandasとの記述の差分(参考[29]) 56 データフレーム ライブラリ 集計(平均) pandas df.groupby('species').mean() Polars
df.group_by('species').agg(pl.all().mean()) PySpark from pyspark.sql.functions import avg df.groupBy('species').agg( avg('sepal length (cm)').alias('sepal length (cm)'), avg('sepal width (cm)').alias('sepal width (cm)'), avg('petal length (cm)').alias('petal length (cm)'), avg('petal width (cm)').alias('petal width (cm)') ) [29] Index - Polars user guide(https://docs.pola.rs/#example) 差はあるが、 読み替えコストは低い -
学習コストの比較 • pandasとの記述の差分(参考[29]) 57 データフレーム ライブラリ 集計(平均) pandas df.groupby('species').mean() Dask
df.groupby('species').mean() Modin df.groupby('species').mean() FireDucks df.groupby('species').mean() [29] Index - Polars user guide(https://docs.pola.rs/#example) 差はない -
学習コストの比較 • pandasとの記述の差分(参考[29]) 58 データフレーム ライブラリ 出力(遅延評価) pandas df.head() Polars
df.head() # 遅延評価を使用する場合 df.collect().head() PySpark df.show() [29] Index - Polars user guide(https://docs.pola.rs/#example) ほとんど差はない -
学習コストの比較 • pandasとの記述の差分(参考[29]) 59 データフレーム ライブラリ 出力(遅延評価) pandas df.head() Dask
df.compute().head() Modin df.head() FireDucks df.head() [29] Index - Polars user guide(https://docs.pola.rs/#example) ほとんど差はない -
学習コストの比較 • 学習時に参考となる記事の豊富さ(再掲) 60 ※タグ・ハッシュタグが設定されている記事の数を集計 データフレーム ライブラリ Qiitaでの記事数 Zennでの記事数 noteでの記事数
pandas 3,526 199 517 Polars 78 44 16 PySpark 252 33 16 Dask 28 1 1 Modin - - 1 FireDucks 12 1 12 参考となる記事数に 差があることから、 導入にあたって得られる 知見の量が異なる -
目次 • データフレームライブラリ • 発表概要 • 対象とするデータフレームライブラリ • データフレームライブラリの比較 ◦
処理性能 ◦ 実装機能 ◦ 利用状況 ◦ 開発状況 ◦ サポート状況 ◦ 学習コスト • まとめ 62 -
まとめ • 近年、複数のデータフレームライブラリが公開 ◦ pandas、Polars、PySpark、Dask、Modin、FireDucksなど • データフレームライブラリによって特徴が異なり、有効な状況が異なる • 状況に応じた適切なデータフレームライブラリの選定を実現する目的で 様々な軸の比較が必要
◦ 処理性能、実装機能、利用状況、サポート状況、学習コストなど 64 ご意見があれば是非ともお声がけください!