入门指南#

注意

Estimated Reading Time: 10 minutes
You can follow along this tutorial in a Jupyter notebook here.

快速入门指南#

要安装Modin的最新稳定版本,请运行以下命令:

pip install "modin[all]"

有关如何使用conda安装Modin或针对特定平台或引擎的进一步说明,请参阅我们的详细安装指南

Modin 作为 pandas 的直接替代品,因此您只需将 pandas 的导入替换为 Modin 的导入,如下所示,以加速您的 pandas 工作流程:

# import pandas as pd
import modin.pandas as pd

示例:无需额外努力即可实现即时扩展性#

在处理大型数据集时,pandas 会变得非常慢或内存不足。Modin 通过并行化数据框操作自动扩展您的 pandas 工作流程,从而使您能够更有效地利用可用的计算资源。

为了演示的目的,我们将加载 modin 作为 pd 并将 pandas 加载为 pandas

import modin.pandas as pd
import pandas

#############################################
### For the purpose of timing comparisons ###
#############################################
import time
import ray
# Look at the Ray documentation with respect to the Ray configuration suited to you most.
ray.init()
#############################################

在这个玩具示例中,我们查看了纽约市出租车数据集,其大小约为200MB。您可以下载此数据集以在本地运行示例。

# This may take a few minutes to download
import urllib.request
dataset_url = "https://modin-datasets.intel.com/testing/yellow_tripdata_2015-01.csv"
urllib.request.urlretrieve(dataset_url, "taxi.csv")

使用read_csv更快地加载数据#

start = time.time()

pandas_df = pandas.read_csv(dataset_url, parse_dates=["tpep_pickup_datetime", "tpep_dropoff_datetime"], quoting=3)

end = time.time()
pandas_duration = end - start
print("Time to read with pandas: {} seconds".format(round(pandas_duration, 3)))

通过使用Modin运行相同的命令read_csv,我们通常可以获得大约4倍的加速,用于并行加载数据。

start = time.time()

modin_df = pd.read_csv(dataset_url, parse_dates=["tpep_pickup_datetime", "tpep_dropoff_datetime"], quoting=3)

end = time.time()
modin_duration = end - start
print("Time to read with Modin: {} seconds".format(round(modin_duration, 3)))

print("Modin is {}x faster than pandas at `read_csv`!".format(round(pandas_duration / modin_duration, 2)))

跨多个数据框的更快concat#

我们之前的 read_csv 示例操作的是一个相对较小的数据框。在下面的示例中,我们将相同的出租车数据集复制100次,然后将它们连接在一起,生成一个大约19GB大小的数据集。

start = time.time()

big_pandas_df = pandas.concat([pandas_df for _ in range(25)])

end = time.time()
pandas_duration = end - start
print("Time to concat with pandas: {} seconds".format(round(pandas_duration, 3)))
start = time.time()

big_modin_df = pd.concat([modin_df for _ in range(25)])

end = time.time()
modin_duration = end - start
print("Time to concat with Modin: {} seconds".format(round(modin_duration, 3)))

print("Modin is {}x faster than pandas at `concat`!".format(round(pandas_duration / modin_duration, 2)))

Modin 将 concat 操作的速度提高了超过 60 倍,创建大型数据帧只需不到一秒,而 pandas 则需要接近一分钟。

在单列上更快的 apply#

当我们操作大型千兆字节规模的数据集时,Modin 的性能优势变得明显。假设我们想通过 apply 操作对单个列中的值进行四舍五入。

start = time.time()
rounded_trip_distance_pandas = big_pandas_df["trip_distance"].apply(round)

end = time.time()
pandas_duration = end - start
print("Time to apply with pandas: {} seconds".format(round(pandas_duration, 3)))
start = time.time()

rounded_trip_distance_modin = big_modin_df["trip_distance"].apply(round)

end = time.time()
modin_duration = end - start
print("Time to apply with Modin: {} seconds".format(round(modin_duration, 3)))

print("Modin is {}x faster than pandas at `apply` on one column!".format(round(pandas_duration / modin_duration, 2)))

Modin 在应用单列数据时速度提高了30倍以上,每秒可操作超过1.3亿行数据。

简而言之,Modin 为各种操作提供了比 pandas 快几个数量级的速度,开箱即用。

../_images/quickstart_speedup.svg

摘要#

希望本教程展示了Modin如何在不需要任何额外努力的情况下显著加速pandas操作。在整个示例中,我们从处理100MB的数据扩展到20GB的数据,而无需更改任何内容或手动优化代码,即可实现Modin提供的可扩展性能水平。

请注意,在这个快速入门示例中,我们只展示了read_csvconcatapply,但这些并不是Modin优化的唯一pandas操作。实际上,Modin涵盖了超过90%的pandas API,为许多常见操作带来了显著的加速。