Post

加速 Pandas | Modin 安裝

一行加速 pandas,一步一步帶你安裝 Modin

加速 Pandas | Modin 安裝

加速 Pandas | Modin 安裝

前言

在資料科學的世界裡,Pandas 是一個不可或缺的工具,它以其強大的數據處理能力深受數據科學家和工程師的喜愛。然而,隨著數據集的不斷增大,Pandas 的性能有時候會成為一個瓶頸。這時,Modin 就派上了用場。

什麼是 Modin?

Modin 是一個開源的 Python 庫,旨在加速 Pandas 的數據處理操作。它通過在分佈式計算環境中平行處理數據來實現這一目標。簡單來說,Modin 能讓你用和 Pandas 相同的 API 更快地處理更大的數據集。

為什麼選擇 Modin?

  • 易於使用:Modin 設計的初衷是與 Pandas 完全兼容,這意味著你可以在不改變現有代碼的情況下提高性能。
  • 自動化的優化:Modin 能夠自動地對數據進行分割,並在多個處理器上平行處理,從而提高效率。
  • 靈活性:Modin 支持多種後端,如 Ray 和 Dask,讓用戶可以根據自己的需求選擇最合適的工具。

如何開始使用 Modin?

安裝

安裝 Modin 非常簡單,使用 pip 或 conda 都可以,可以依造你的需求選擇不同的後端:

1
2
3
4
5
6
7
8
9
10
pip install "modin[all]" # (Recommended) Install Modin with Ray and Dask engines.
pip install "modin[ray]" # Install Modin dependencies and Ray.
pip install "modin[dask]" # Install Modin dependencies and Dask.
pip install "modin[mpi]" # Install Modin dependencies and MPI through unidist.

conda install -c conda-forge modin-all  #conda
conda install -c conda-forge modin-ray  # Install Modin dependencies and Ray.
conda install -c conda-forge modin-dask # Install Modin dependencies and Dask.
conda install -c conda-forge modin-mpi # Install Modin dependencies and MPI through unidist.
conda install -c conda-forge modin-hdk # Install Modin dependencies and HDK.

也可以用 conda-libmamba-solver,但我自己安裝用 libmamba 安裝 modin 遇到一些奇怪的 BUG,大家可以斟酌一下。libmamba-solver 的安裝可以參考我之前的 文章

1
2
3
4
conda install -c conda-forge modin-ray modin-hdk --experimental-solver=libmamba

# or starting from conda 22.11 and libmamba solver 22.12 versions:
conda install -c conda-forge modin-ray modin-hdk --solver=libmamba

使用 Modin 加速 Pandas

使用 Modin 替代 Pandas 只需要更改導入語句:

1
import modin.pandas as pd

如此你就可以像平常一樣使用 Pandas 的 API,但速度會更快,不過有一些函式功能 modin 目前還沒有支援,大家有發現 BUG 可以去 github 貢獻,一起讓 modin 越好越好。

性能對比

我們來看一個簡單的例子,比較 Modin 和 Pandas 在處理大型數據集時的性能差異。假設我們有 5 G 左右的 CSV 文件,測試一下他們 read_csv 的效能:

1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
import modin.pandas as mpd

start_time = time.time()
pd.read_csv('large_dataset.csv')
pandas_time = time.time() - start_time

start_time = time.time()
mpd.read_csv('large_dataset.csv')
modin_time = time.time() - start_time

print(pandas_time)
print(modin_time)

Pandas: 48.838 seconds

Modin: 34.447 seconds

Modin 處理相同的數據集比 Pandas 快了約 1.42 倍。我在 github 專案 上有更細節的比較,大家有興趣可以去看一下。

BUG 問題

如果遇到以下BUG:

1
distributed.nanny.memory - WARNING - Worker tcp://127.0.0.1:38255 (pid=4356) exceeded 95% memory budget. Restarting...

可以設定 client,將記憶體空間上限調大。

1
2
3
from dask.distributed import Client, LocalCluster
cluster = LocalCluster(memory_limit='10GB')
client = Client(cluster)

Buy Me A Coffee

This post is licensed under CC BY 4.0 by the author.