如何绘制巨大的dask dataframe框图,最好是holoviews?

时间:2019-07-02 12:22:37

标签: python dask holoviews

如何绘制巨大的Dask Dataframe框图?

我需要绘制DASK数据框,我这样做:

import holoviews as hv
from holoviews import opts
hv.extension('bokeh', 'matplotlib')

d = dd.read_parquet(dataset_dir+'/train/date*/*.parquet', 
engine='pyarrow', columns=numeric_columns[:3]).fillna(0)

hv.BoxWhisker(data=d, datatype=['dask'])

并给出:

~/anaconda3/lib/python3.6/site-packages/holoviews/core/data/interface.py in initialize(cls, eltype, data, kdims, vdims, datatype)
    247                                   % (intfc.__name__, e))
    248                 error = ' '.join([error, priority_error])
--> 249             raise DataError(error)
    250 
    251         return data, interface, dims, extra_kws

DataError: None of the available storage backends were able to support the supplied data format. DaskInterface raised following error:

 unsupported operand type(s) for +: 'NoneType' and 'int'

问题出在哪里?

1 个答案:

答案 0 :(得分:2)

在大多数情况下,无需指定数据类型,它会自动推断您正在提供一个模糊的数据帧。我不太清楚问题出在哪里,但我认为您需要告诉它要显示哪一列。 HoloViews通常假定使用平面(而不是宽)数据格式,这意味着它期望使用单个值列,而其他列可以“刻面”。如果您要处理“较宽”的数据,即需要绘制一个比较三列值分布的图表,建议您使用hvPlot

使用hvPlot应该很简单:

import hvplot.dask
d.hvplot.box()

总而言之,箱形图的快速集成尚未针对快速进行优化,因此它会将每一列全部加载到内存中。最终应将其作为this issue的一部分来解决。