python - 我是否正确调用 Dask dataframe.corr()?
问题描述
我正在尝试计算 Dask 数据帧上的相关矩阵。
- 数据非常庞大 - 围绕
1 000 000
行和900
列。 - 我想从相关矩阵创建一个热图。
- 我知道热图可能会完全令人困惑并且视觉上不令人愉悦,但我仍然想这样做。
我正在使用 Daskdataframe
来利用它,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
但是在可视化的这个阶段已经卡了这么久了:
我的代码正确吗?
- 如果我正确调用
.persist()
and.compute()
方法,我会感到困惑吗?
附加信息:
- 我正在使用 Jupyter 笔记本。
- 我没有收到任何关于内存不足等的警告。
- 我的笔记本有 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()
推荐阅读
- twilio - Twilio Studio 使用 TwiML Bin 收集多语言调用小部件的输入
- xml - 加载不包含命名空间的 XML
- python - 鹡鸰渲染页面树
- asp.net - 如何使用 linq 方法将 Ckeditor 数据添加到 sql server
- x86 - Yocto 使用 boot-efi-ia32 但 x64 linux 内核
- mysql - Nach Umzug auf neuen 服务器身份验证失败
- wordpress - woocommerce 为未登录用户隐藏字段
- angular - 使用自定义事件触发点击事件监听器
- android - cordova 安装 Android 目标:未安装(使用 sdkmanager)
- generics - Kotlin 中的使用站点差异