我是否正确调用了 Dask dataframe.corr() ?
Am I calling Dask dataframe.corr() correctly?
我正在尝试计算 Dask 数据帧上的相关矩阵。
- 数据非常庞大 - 大约
1 000 000
行,900
列。
- 我想根据相关矩阵创建热图。
- 我知道热图可能会完全混乱并且视觉效果不佳,但我仍然想这样做。
我正在使用 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
可视化的这个阶段卡了这么久:
- 我仍然可以看到每个工人的内存都在变化,但是
corr-chunk-read-csv
进度条的任务根本没有移动(中间的进度条)。
我的代码正确吗?
- 如果我打电话给
.persist()
和
.compute()
方法正确吗?
附加信息:
- 我正在使用 Jupyter Notebook。
- 我没有收到任何关于内存不足等的警告
- 我的笔记本有 16GB 的 RAM 内存
- 如果我只是读取
.csv
文件并将其存储到 Pandas dataframe
中,它可以放入我的 RAM 内存并占用大约 2.4GB
.
读取 .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()
我正在尝试计算 Dask 数据帧上的相关矩阵。
- 数据非常庞大 - 大约
1 000 000
行,900
列。 - 我想根据相关矩阵创建热图。
- 我知道热图可能会完全混乱并且视觉效果不佳,但我仍然想这样做。
我正在使用 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
可视化的这个阶段卡了这么久:
- 我仍然可以看到每个工人的内存都在变化,但是
corr-chunk-read-csv
进度条的任务根本没有移动(中间的进度条)。
我的代码正确吗?
- 如果我打电话给
.persist()
和.compute()
方法正确吗?
附加信息:
- 我正在使用 Jupyter Notebook。
- 我没有收到任何关于内存不足等的警告
- 我的笔记本有 16GB 的 RAM 内存
- 如果我只是读取
.csv
文件并将其存储到 Pandasdataframe
中,它可以放入我的 RAM 内存并占用大约2.4GB
.
读取 .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()