はじめに
Pythonを使い始めてはや十数年。他の言語も覚えないと思いつつ、研究、PoC用途で使う、簡単な解析や簡単なシミュレーションに使ってきました。
表計算で広く使われるPandasですが、Pandasを最近あまり使わなくなったというSNSの投稿をみて、使用するライブラリが変化しているのかなと思い調べる事にしました。
現状困っていないのですが、早めに対応しておかないと後で困る事もあるかと、LLMを使いながら調べてみました。
最近は、LLMに聞けば使い方がすぐに出てくるので、新しいライブラリの参入コストも低くなってきていますよね。
単に整理しただけなので、速度比較はしていません。
※【Python】Pandas/Polars/duckDB/NumPyで簡単なベンチマークテストをしてみたという別記事で簡単なベンチマークテストを行いましたので、気になる方は見てください。
結論としては、データが増えない限り今までの
- NumPy
- Pandas
- Matplotlib
- scikit-learn
- PyTorch
あたりを使用していても、まだ困らない。
ただし、データ規模や用途によっては
新しいライブラリ(PolarsやDuckDBなど)を検討する価値はある。
数百万〜数千万行程度から、
PolarsやDuckDBなどを検討し始めるケースが多いようです。
というのが結論です。
表計算ライブラリの変化(Pandas周り)
近年はPandasに加えて、PolarsやDuckDBなどの高速データ処理ライブラリが登場している。
可視化の別ライブラリとの依存関係もあり、Pythonのデータ分析ではPandasが標準的な表計算ライブラリとして広く使われてきた。
小〜中規模のデータ分析ではPandasは依然として標準ツールと言える。
また、多くの可視化ライブラリや機械学習ライブラリが
PandasのDataFrameを前提としているため、
エコシステムの面でも依然として強い存在です。
一方で、大規模データや高速処理が必要な場合にはPolarsやDuckDBの利用も増えている。数百万〜数千万行から検討しだす人が多いらしい。
Polarsの方が高速であるというベンチマーク記事も多く見られます。
- Polars
- Rust実装
- 高速
- Pandasに近いAPI
- DuckDB
- SQLで分析
- CSV/Parquet直接分析
- ローカル分析に強い
行列計算ライブラリの変化(numpy周り)
Pythonの数値計算の基盤は依然としてNumPyである。
多くの科学技術計算ライブラリがNumPyを前提としている。
多くの研究・データ分析用途ではNumPyだけでも十分なケースが多い。
ただし高速化やGPU計算を行う場合はNumbaやJAXなどを併用するケースも増えている。
これも、NumPyの計算を何倍速くしてみたみたいな記事を見たことがある、気がします。
- JAX
- 自動微分
- GPU/TPU
- Numba
- JITコンパイル
- CuPy
- GPU Numpy互換
学術計算ライブラリの変化(scikit-learn、SciPy、PyTorch周り)
従来の機械学習ではscikit-learnが標準的なライブラリとして広く使われてきた。
近年は深層学習の普及によりPyTorchなどのディープラーニングフレームワークを使用するケースが増えている。
従来型の機械学習ではscikit-learnが依然として使いやすい。
一方で深層学習や研究用途ではPyTorchが広く使われている。
可視化ライブラリの変化(Matplotlib周り)
Pythonの可視化ライブラリとしてMatplotlibは長く使われている。
基本的な可視化ではMatplotlibやSeabornで十分なケースが多い。
インタラクティブな可視化やダッシュボード用途ではPlotlyなどの利用も増えている。
- Seaborn
- Matplotlibベースの統計可視化ライブラリ
- Plotly
- インタラクティブな可視化が可能
- Altair
- 宣言型可視化(APIの書き方が違う)
おわりに
大量データをあまり扱わなく、速度で困った時は、c++を使ってしまうので、真剣に考えてきませんでしたが、pythonでもいろいろ対応がなされていますね。
Pandas周りに関しては、arrow ecosystemなどもっと触れた方が、詳しい説明ができた可能性はありますが、今回は軽く触れるだけにしておきます。
また、機械学習のライブラリも手法別に、lightgbmなどのライブラリも触れていません。
用途やデータ規模によって使い分けるのが良さそうですが、
小〜中規模の分析では従来のPythonデータ分析スタックでも
まだ十分対応できると感じました。
こんなライブラリおすすめと言うコメントも歓迎します。
おまけ
- 個人で特許を取得して記事を書いています
- 日常の疑問をシミュレーションして考察する記事書いてます
- データ分析系の記事も書いています