我是否正确调用了 Dask dataframe.corr() ?

Am I calling Dask dataframe.corr() correctly?

我正在尝试计算 Dask 数据帧上的相关矩阵。

  1. 数据非常庞大 - 大约 1 000 000 行,900 列。
  2. 我想根据相关矩阵创建热图。
  3. 我知道热图可能会完全混乱并且视觉效果不佳,但我仍然想这样做。

我正在使用 Dask dataframe 来利用 parallelism 以便可以更快地计算它:

from dask.distributed import Client
import dask.dataframe as df

#Create cluster on local machine
client = Client(n_workers = 4, threads_per_worker = 1, memory_limit = '4GB')
client

#Get the data to RAM memory
dataframe_numerical = df.read_csv(numerical_path, engine = 'c', low_memory = False, dtype = dtypes)
dataframe_numerical = dataframe_numerical.persist()

#Calculate the correlation matrix:
corelation = dataframe_numerical.corr().compute()

但是在Dask可视化的这个阶段卡了这么久:

我的代码正确吗?


附加信息:

读取 .csv 文件并将其存储到 Pandas dataframe 的代码(这需要大约 2 分钟):

dataframe_numerical_lazy = df.read_csv(numerical_path, engine = 'c', low_memory = False, dtype = dtypes)
dataframe_numerical = dataframe_numerical_lazy.compute()

计算相关矩阵的最简单方法是 numpy(大约 20 秒内完成):

import pandas as pd
import numpy as np
num_cols = 10**3
num_rows = 10**6
df = pd.DataFrame(np.random.rand(num_rows, num_cols), columns=map(str, range(num_cols)))
data = df.to_numpy()
corrmat = np.corrcoef(data.T)

更重要的问题是为什么 dask 难以完成这项任务...我希望有答案,但如果列数较小,则 dask 会计算相关性,请尝试设置低num_cols 的值,然后查看您的机器在哪个点停止:

import pandas as pd
import numpy as np
num_cols = 10
df = pd.DataFrame(np.random.rand(10**6, num_cols), columns=map(str, range(num_cols)))

import dask.dataframe as dd
ddf = dd.from_pandas(df, npartitions=10)

from distributed import Client
client = Client()
client

ddf.corr().compute()