3

我想绘制这样的数据

 |   |abstime                |hostname   |type   |id |cpu    |mem    |reltime|
 -----------------------------------------------------------------------------
 |0  |2017-06-21 02:45:39    |hw03       |ps     |0  |16.0   |0.0    |0:00.08|
 |1  |2017-06-21 02:45:43    |hw03       |ps     |0  |98.0   |0.1    |0:02.23|
 |2  |2017-06-21 02:45:48    |hw03       |ps     |0  |1591.0 |0.1    |0:21.09|
 |3  |2017-06-21 02:45:52    |hw03       |ps     |0  |0.0    |0.1    |0:38.35|
 |4  |2017-06-21 02:45:57    |hw03       |ps     |0  |0.0    |0.1    |1:01.41|

使用 Holoviews Python 包。

我正在尝试创建多个这样的小部件:

                                               下拉(主机名)
线图(abstime vs cpu)下拉(类型)
按 id 着色
                                               下拉(主机名)
线图(abstime vs cpu)下拉(类型)
                                               下拉(ID)
线图(abstime vs cpu)下拉(主机名)
按类型着色

我认为理想情况下是使用类似的东西hv.Table,然后使用.to.curveHoloviews 的其他技术对其进行切片和切块。

我正在尝试遵循示例和教程-但它们都没有在列中重复,所以我很困惑如何分组,我的 kdims、vdims 和 cdims 应该是什么......

例如:

table=hv.Table(df,kdims=['abstime','reltime','hostname','type','id'],vdims=['cpu','mem'])

print(table)
#:Table   [abstime,reltime,hostname,type,id]   (cpu,mem)

table[None,None,{'hw03'},{'ps'},None].to.curve('abstime','cpu')

这在最后一次调用时给了我一个错误:

AttributeError: 'DataFrame' object has no attribute 'itertuple'

任何相关的例子都非常感谢!

顺便说一句,我的表df是 Dask Dataframe(许多 CSV 文件),所以如果这很重要,我会依赖延迟计算......

谢谢!

4

1 回答 1

0

为了获得下拉列表,我扩展了您的数据集以包含具有另一个主机名的记录:

|abstime |主机名|类型|id|cpu |内存| 相对时间
0| 2017-06-2102:45:39|hw03 |ps |0 |16.0 |0.0| 0:00.08
1| 2017-06-2102:45:43|hw03 |ps |0 |98.0 |0.1| 0:02.23
2| 2017-06-2102:45:48|hw03 |ps |0 |1591.0|0.1| 0:21.09
3| 2017-06-2102:45:52|hw03 |ps |0 |0.0 |0.1| 0:38.35
4| 2017-06-2102:45:57|hw04 |ps |0 |0.0 |0.1| 1:01.41
5| 2017-06-2102:45:39|hw04 |ps |0 |16.0 |0.0| 0:00.08
6| 2017-06-2102:45:43|hw04 |ps |0 |98.0 |0.1| 0:02.23
7| 2017-06-2102:45:48|hw04 |ps |0 |1591.0|0.1| 0:21.09
8| 2017-06-2102:45:52|hw04 |ps |0 |0.0 |0.1| 0:38.35
9| 2017-06-2102:45:57|hw04 |ps |0 |0.0 |0.1| 1:01.41

我使用的是 Pandas 而不是 dask,但原理是一样的:

import pandas as pd
import holoviews as hv
hv.extension('bokeh')
d=pd.read_csv('so.csv')
# Create a holoviews dataset from any of a number of data structures.
ds=hv.Dataset(d)
display(ds.data)
#Now create a table from just the columns that we want. Otherwise
#You will get more dropdowns than you might want in the holomap.   
tb=hv.Table(ds,kdims=['abstime','hostname','type'],vdims='cpu')
display(tb)
#This is a dimensioned element.
hv.HoloMap(tb.to.curve(kdims=['abstime'],vdims='cpu'))

这将为您提供主机名下拉菜单,并将显示 abstime 与 cpu 的曲线。如果您的数据有不止一种类型,那么还会有第二个下拉小部件。

于 2018-01-07T06:19:34.170 回答