Построение табличных данных с помощью holoviews

Я хотел бы построить данные, как это

 |   |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|

используя пакет Python Holoviews.

Я пытаюсь создать несколько виджетов, как это:

                                               DROPDOWN (имя хоста)
ЛИНЕЙНЫЕ УЧАСТКИ (abstime vs cpu) DROPDOWN (тип)
окрашены по id
                                               DROPDOWN (имя хоста)
ЛИНИЙНЫЙ УЧАСТОК (abstime vs cpu) Падение (тип)
                                               DROPDOWN (id)
LINE PLOT (abstime vs cpu) DROPDOWN (имя хоста)
по цвету

Я думаю, что в идеале было бы использовать что-то вроде hv.Table а затем нарезать и нарезать кубиками, используя .to.curve и другие техники холовьев.

Я пытаюсь следовать примерам и учебникам - но ни у одного из них нет повторений в столбцах, поэтому я не совсем понимаю, как группировать, какими должны быть мои 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-файлов), поэтому я полагаюсь на задержку вычислений, если это имеет значение...

Спасибо!

1 ответ

Чтобы получить раскрывающийся список, я расширил ваш набор данных, включив в него записи с другим именем хоста:

 | abstime | имя хоста | тип | id | процессор | mem | reltime
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

Я использую панды, а не напиток, но принцип тот же:

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 против процессора. Если бы у ваших данных было более одного типа, был бы и второй выпадающий виджет.

Другие вопросы по тегам