Slide 1

Slide 1 text

データフレームライブラリ徹底比較 (PyCon JP 2024) 桂川大輝

Slide 2

Slide 2 text

自己紹介 ● 名前:桂川大輝(GitHub:daikikatsuragawa[1]) ● 職業:機械学習エンジニア 2 [1] daikikatsuragawa (Daiki Katsuragawa)(https://github.com/daikikatsuragawa)

Slide 3

Slide 3 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 3

Slide 4

Slide 4 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 4

Slide 5

Slide 5 text

データフレームライブラリ ● データフレーム ○ 行と列から構成される表形式のデータ構造 5 名前(種) 界 … 科 … ジャイアントパンダ 動物界 … クマ科 … ホッキョクグマ 動物界 … クマ科 … … … … … …

Slide 6

Slide 6 text

● データフレームライブラリ ○ データフレームの機能を提供するライブラリ ○ データフレームで表現される大量のデータを効率的に操作・分析 ■ 例:CSVの読み込み、絞り込み、集計、結合、   機械学習ライブラリ、可視化ライブラリへの入力など データフレームライブラリ 6 名前(種) 界 … 科 … ジャイアントパンダ 動物界 … クマ科 … ホッキョクグマ 動物界 … クマ科 … … … … … … 名前(種) 界 … 科 … ジャイアントパンダ 動物界 … クマ科 … ホッキョクグマ 動物界 … クマ科 … 科がクマ科の 行に絞り込み

Slide 7

Slide 7 text

データフレームライブラリ ● データフレームライブラリのデファクトスタンダード ○ 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/)

Slide 8

Slide 8 text

データフレームライブラリ ● 状況に応じた適切なデータフレームライブラリの選定の重要性 ○ ある事例:特定の状況で適切なデータフレームライブラリを選定することで      約30倍〜50倍の処理速度の高速化を実現 [8] ○ 適切な選定は有効/裏を返すと無作為な選定はそれだけの機会損失のリスクに ● 技術選定の意思決定の難易度 ○ 様々な軸での比較が必要 (例:処理速度とソフトウェアエコシステムでの信頼度や実績のどちらを優先するか) 8 状況に応じた適切なデータフレームライブラリの選定を実現したい [8] Polars — TPCH Benchmark(https://pola.rs/posts/benchmarks/)

Slide 9

Slide 9 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 9

Slide 10

Slide 10 text

発表概要 ● 目的: ○ 参加者の皆様の状況に応じた適切なデータフレームライブラリの選定を実現すること (その機会となること) 10

Slide 11

Slide 11 text

発表概要 ● 結論: ○ データフレームライブラリによって特徴と有効な状況が異なる ○ 状況に応じた適切なデータフレームライブラリの選定を実現ために 徹底比較(様々な軸での比較)が必要 ■ 処理性能、実装機能、利用状況、開発状況、サポート状況、学習コストなど 11 本発表で紹介した比較軸を参考に、状況に応じた比較を実施し、 適切なデータフレームライブラリを選定しましょう!

Slide 12

Slide 12 text

発表概要 ● 注意: ○ 主に2024年09月01日時点での情報を参照 ○ 状況に応じた適切な技術選定を実現するための比較軸およびその内容の一部を紹介 (特定のデータフレームライブラリの推奨をするわけではない) 12

Slide 13

Slide 13 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 13

Slide 14

Slide 14 text

対象とするデータフレームライブラリ 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/) それぞれ特徴が異なる

Slide 15

Slide 15 text

対象とするデータフレームライブラリ ● 本発表で対象とする主要なデータフレームライブラリ 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は 近年リリースされている

Slide 16

Slide 16 text

対象とするデータフレームライブラリ ● 本発表で対象とする主要なデータフレームライブラリ 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 ※他にも存在していることにご留意ください 開発は継続

Slide 17

Slide 17 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 17

Slide 18

Slide 18 text

データフレームライブラリの比較 ● 状況に応じた適切なデータフレームライブラリの選定を 実現するための様々な比較軸 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト 18 本発表ではこれらの軸に基づく、 データフレームライブラリの比較を紹介

Slide 19

Slide 19 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 19

Slide 20

Slide 20 text

処理性能の比較 ● 目的:データフレームライブラリが導入する環境の要件を満たすか、    理想に近づくかの把握 ● 比較軸: ○ 処理性能:処理速度やメモリ効率など 20

Slide 21

Slide 21 text

処理性能の比較 21 ● 処理速度に関する定性的な評価(特徴に基づくpandasとの平均的な評価) ※網羅性に欠ける点があることにご留意ください データフレーム ライブラリ 処理速度と特徴 pandas - Polars 高速(Rust実装、列指向、遅延評価、最適化、並列処理) PySpark 高速(RDD、遅延評価、最適化、並列処理、分散処理) Dask 高速(データの分割、遅延評価、最適化、並列処理、分散処理) Modin 高速(データの分割、遅延評価、最適化、並列処理、分散処理) FireDucks 高速(列指向、遅延評価、最適化、並列処理) 基本的にはpandasよりも他 のライブラリの 処理速度は高速

Slide 22

Slide 22 text

処理性能の比較 ● 処理速度に関する定量的な評価(公開情報) ○ 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の 処理速度は高速 分散処理が活きる例 ではないことに注意

Slide 23

Slide 23 text

処理性能の比較 ● メモリ効率に関する定性的な評価(特徴に基づくpandasとの平均的な評価) 23 データフレーム ライブラリ メモリ効率 pandas - Polars 高い(Rust実装、列指向、遅延評価、最適化、並列処理) PySpark 高い(RDD、遅延評価、最適化、並列処理、分散処理) Dask 高い(データの分割、遅延評価、最適化、並列処理、分散処理) Modin 高い(データの分割、遅延評価、最適化、並列処理、分散処理) FireDucks 高い(列指向、遅延評価、最適化、並列処理) ※網羅性に欠ける点があることにご留意ください 基本的にはpandasよりも他 のライブラリの メモリ効率は高い

Slide 24

Slide 24 text

処理性能の比較 ● 目的:データフレームライブラリが導入する環境の要件を満たすか、    理想に近づくかの把握 ● 比較軸: ○ 処理性能:処理速度やメモリ効率など 24 処理性能の異なるデータフレームライブラリが存在しており、 導入する環境の要件を満たすか、理想に近づくかの把握が可能

Slide 25

Slide 25 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 25

Slide 26

Slide 26 text

実装機能の比較 ● 目的:データフレームライブラリが導入する環境の要件を満たすか、    リソースの有効な活用が可能かの把握 ● 比較軸: ○ 実装機能:分散処理、 GPU対応など 26

Slide 27

Slide 27 text

実装機能の比較 ● 実装機能(分散処理、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用の  代替ライブラリが存在

Slide 28

Slide 28 text

実装機能の比較 ● 目的:データフレームライブラリが導入する環境の要件を満たすか、    リソースの有効な活用が可能かの把握 ● 比較軸: ○ 実装機能:分散処理、 GPU対応など 28 実装機能の異なるデータフレームライブラリが存在しており、 導入する環境の要件を満たすか、リソースの有効な活用が可能かの把握が可能

Slide 29

Slide 29 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 29

Slide 30

Slide 30 text

利用状況の比較 ● 目的:データフレームライブラリの    ソフトウェアエコシステムにおける信頼性と実績の把握 ● 比較軸: ○ 利用状況:ソフトウェアエコシステムにおける人気、利用数、関連コンテンツ規模など 30

Slide 31

Slide 31 text

利用状況の比較 ● 利用状況(人気、利用数) 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も人気であり 利用数も多い

Slide 32

Slide 32 text

利用状況の比較 ● 利用状況(関連コンテンツの規模) 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の 関連コンテンツが最も多い

Slide 33

Slide 33 text

利用状況の比較 ● 目的:データフレームライブラリの    ソフトウェアエコシステムにおける信頼性と実績の把握 ● 比較軸: ○ 利用状況:ソフトウェアエコシステムにおける人気、利用数、関連コンテンツ規模など 33 利用状況の異なるデータフレームライブラリが存在しており、 ソフトウェアエコシステムにおける信頼性と実績の把握が可能

Slide 34

Slide 34 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 34

Slide 35

Slide 35 text

開発状況の比較 ● 目的:データフレームライブラリの    開発(新機能の追加や不具合修正)の活発さの把握 ● 比較軸: ○ 開発状況:リリース、コミット、コミッター、イシュー/プルリクエストの動きなど 35

Slide 36

Slide 36 text

開発状況の比較 ● 開発の活発さ(リリース)※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 のリリース回数が 最も多い

Slide 37

Slide 37 text

開発状況の比較 ● 開発の活発さ(コミット)※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のコ ミット回数が多い

Slide 38

Slide 38 text

開発状況の比較 ● 開発の活発さ(コミッター)※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も 多くのコミッターが存在

Slide 39

Slide 39 text

開発状況の比較 ● 開発の活発さ(イシュー/プルリクエスト)※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は非公開な要素があるため対象外と設定

Slide 40

Slide 40 text

開発状況の比較 ● 目的:データフレームライブラリの    開発(新機能の追加や不具合修正)の活発さの把握 ● 比較軸: ○ 開発状況:リリース、コミット、コミッター、イシュー/プルリクエストの動きなど 40 開発状況の異なるデータフレームライブラリが存在し、 開発(新機能の追加や不具合修正)の活発さの把握が可能

Slide 41

Slide 41 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 41

Slide 42

Slide 42 text

サポート状況の比較 ● 目的:導入先の環境に対するデータフレームライブラリの互換性の把握 ● 比較軸: ○ サポート状況:特定のライブラリが対象のデータフレームを入力として受け付けるかなど ● 備考: ○ (おそらく)多くの状況においてサポート状況が懸念になる例はない ■ pandasのデータフレームは多くのライブラリからサポートされている ■ 他のデータフレームライブラリでも pandasのデータフレームへの変換がなされる/可能であるため ○ 副次的に他プロジェクトからの評価の観測が可能 (サポートのための開発が計画されているか) 42

Slide 43

Slide 43 text

サポート状況の比較 ● サポート状況(機械学習) 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]

Slide 44

Slide 44 text

サポート状況の比較 ● サポート状況(機械学習) 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と対応する データフレーム

Slide 45

Slide 45 text

サポート状況の比較 ● サポート状況(可視化) 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と対応する データフレーム

Slide 46

Slide 46 text

サポート状況の比較 ● サポート状況(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と対応する データフレーム

Slide 47

Slide 47 text

サポート状況の比較 ● 目的:導入先の環境に対するデータフレームライブラリの互換性の把握 ● 比較軸: ○ サポート状況:特定のライブラリが対象のデータフレームを入力として受け付けるかなど ● 備考: ○ (おそらく)多くの状況においてサポート状況が懸念になる例はない ■ pandasのデータフレームは多くのライブラリからサポートされている ■ 他のデータフレームライブラリでも pandasのデータフレームへの変換がなされる/可能であるため ○ 副次的に他プロジェクトからの評価の観測が可能 (サポートのための開発が計画されているか) 47 サポート状況の異なるデータフレームライブラリが存在し、 導入先の環境に対する互換性の把握が可能

Slide 48

Slide 48 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 48

Slide 49

Slide 49 text

学習コストの比較 ● 目的:導入先のプロジェクトに関わる開発者の    データフレームライブラリを用いた実装のハードルの把握 ● 比較軸: ○ 学習コスト:pandasとの記述の差分、参考となる記事数など 49

Slide 50

Slide 50 text

学習コストの比較 ● 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) 全体的に差はない 別途必要な手続きが存在(難 しくはない)

Slide 51

Slide 51 text

学習コストの比較 ● 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の変更だけで 良いというコンセプト

Slide 52

Slide 52 text

学習コストの比較 ● 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) 全体的に差はない デフォルトの仕様が 異なるため明示的な 指定が必要

Slide 53

Slide 53 text

学習コストの比較 ● 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) 差はない

Slide 54

Slide 54 text

学習コストの比較 ● 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) 差はあるが、 読み替えコストは低い メソッドにより実現 (メソッドチェーンが  容易)  メソッドにより実現 (メソッドチェーンが  容易) 

Slide 55

Slide 55 text

学習コストの比較 ● 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) 差はない

Slide 56

Slide 56 text

学習コストの比較 ● 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) 差はあるが、 読み替えコストは低い

Slide 57

Slide 57 text

学習コストの比較 ● 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) 差はない

Slide 58

Slide 58 text

学習コストの比較 ● 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) ほとんど差はない

Slide 59

Slide 59 text

学習コストの比較 ● 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) ほとんど差はない

Slide 60

Slide 60 text

学習コストの比較 ● 学習時に参考となる記事の豊富さ(再掲) 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 参考となる記事数に 差があることから、 導入にあたって得られる 知見の量が異なる

Slide 61

Slide 61 text

学習コストの比較 ● 目的:導入先のプロジェクトに関わる開発者に対する    データフレームライブラリを用いた実装のハードルの把握 ● 比較軸: ○ 学習コスト:pandasとの記述の差分、参考となる記事数など 61 学習コストが異なるデータフレームライブラリが存在し、 導入先のプロジェクトに関わる開発者の実装のハードルの把握が可能

Slide 62

Slide 62 text

目次 ● データフレームライブラリ ● 発表概要 ● 対象とするデータフレームライブラリ ● データフレームライブラリの比較 ○ 処理性能 ○ 実装機能 ○ 利用状況 ○ 開発状況 ○ サポート状況 ○ 学習コスト ● まとめ 62

Slide 63

Slide 63 text

まとめ ● データフレームライブラリによって特徴と有効な状況が異なる ● 状況に応じた適切なデータフレームライブラリの選定を実現ために 徹底比較(様々な軸での比較)が必要 ○ 処理性能、実装機能、利用状況、開発状況、サポート状況、学習コストなど 63 本発表で紹介した比較軸を参考に、状況に応じた比較を実施し、 適切なデータフレームライブラリを選定しましょう!

Slide 64

Slide 64 text

まとめ ● 近年、複数のデータフレームライブラリが公開 ○ pandas、Polars、PySpark、Dask、Modin、FireDucksなど ● データフレームライブラリによって特徴が異なり、有効な状況が異なる ● 状況に応じた適切なデータフレームライブラリの選定を実現する目的で 様々な軸の比較が必要 ○ 処理性能、実装機能、利用状況、サポート状況、学習コストなど 64 ご意見があれば是非ともお声がけください!