Visdomによるチャート表示

タグ:

https://github.com/fossasia/visdom/

データ可視化アプリのひとつです。主な目的は機械学習の進捗状況を可視化するのにしようします。言ってしまうとTensorboardです。

使い方はPython3が導入されている環境で以下の様にするだけ。

# install
pip install visdom
# use ([default] http://localhost:8097)
visdom

Tensorboardに比べると表示出来るものの柔軟性が高いのですが、どうやってチャートを管理したり更新していくのかがやや判りづらかったので以下にサンプルコードを。

チャートの管理方法

チャートの追加削除は別のプログラムで行います。

Visdomのインスタンスは、標準でローカルホストに起動しているVisdomサーバーに対してメッセージを送受信します。

情報の更新をするには、引数のwinにユニークな名称を指定しておく事でデータの差し替えが行えます。

この機能は利用しているVisdomのビジュアライズ機能によって若干異なり、例えばチャート系ですと、updateに”append”を指定しておくと最新のデータのみが反映されるようになります。

import visdom
import numpy as np
import time
import datetime
import random

pp = [
    {"type": "text", "name": "Input_1", "value": "initial"},
    {
        "type": "select",
        "name": "Input_2",
        "values": ["Red", "Green", "Blue"],
    },
]

vis = visdom.Visdom()


def evt_testcallback(v):
    print(v)


id_window = vis.properties(pp, win="TEST_2")
vis.register_event_handler(evt_testcallback, id_window)

vis.bar(
    X=np.abs(np.random.rand(5, 3)),
    win="TEST_4",
    opts=dict(
        stacked=False,
        legend=["One", "Two", "Three"],
        rownames=["A", "B", "C", "D", "E"],
    ),
)


counter = 0
while True:
    vis.text(
        "<h1>%s</h1>" % datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        win="TEST_1",
    )

    vis.line(
        X=np.array([counter]),
        Y=np.array([random.randint(-256, 255)]),
        win="TEST_3",
        update="append",
    )

    vis.histogram(X=np.random.rand(10000), opts=dict(numbins=20), win="TEST_BAR")

    time.sleep(1)

    counter += 1

機械学習関係の情報表示だとTensorboardの方が向いている気がするのですけど、簡易のダッシュボードやチャート表示として利用するなら、なかなか使えそうな気がします。