加速 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)