serverApplication.py
このプログラムは、Bokeh
サーバー上で実行される2つの時系列プロットを起動します。
このサーバは、データ生成クライアントから更新されているときにGridDBからデータを流します。
データの可視化フロー
- Web server アプリケーションを確立する
- コーヒーストア(serverApplication.pyおよびGridstoreMethods.py)の1日分のデータを含む初期の時系列プロットを作成する
- GridDBからデータを取得し、それをWebページの時系列プロットに挿入する
- 定期的なコールバックを使用して、ユーザーの操作に応じて、過去または最近のデータでフロントエンドのグラフを更新する
上段の時系列プロットは、ある瞬間のショット率を表しています。 コーヒーマシンが新しいレコードを作成してGridDBに挿入すると、データ視覚化プログラムはレコード間のタイムスタンプの差を使用して、その時のショットレートを決定します。 たとえば、レコード間の最近のタイムスパンが短くなった時は、ショット率が上昇していることを意味し、グラフ上ではより正のスロープを示します。 プログラムは、GridDBとTQLを使用して、新しい推定ショット率を計算して表示します。
下段の時系列プロットは、喫茶店の各コーヒーマシンの温度を表しています。 各行ごとに1台のコーヒーマシンを表します。 いずれかのプロットを左にパンすると、プログラムはGridDBにクエリーを送信して、過去のデータ(過去のショット率または温度を含む)を取得します。
初期プロットのデータ
プロットは、GridDBの最近のデータに基づいて2つのプロットをロードすることから始まります。 このデータは最大で過去1日分になります。
時系列プロットの各行は、コーヒー店のコレクション内のコーヒーマシンの時系列コンテナを表しています。 そこから、過去の日のタイムスタンプ行をTQLクエリで取得できます。 タイムスタンプ、温度および他のフィールドは、各行から抽出することができ、グラフに追加するデータを計算するために使用できます。
coffee_machine = gridstore.get_container(serial_number) tql = "select * where timestamp <= NOW() and timestamp >= TIMESTAMPADD(DAY,NOW(),{0}) \ order by timestamp asc".format(days * -1) query = coffee_machine.query(tql) rowSet = query.fetch(False) row = coffee_machine.create_row() while rowSet.has_next(): rowSet.get_next(row) timestamp = row.get_field_as_timestamp(0)
過去のショット率を取得するには、
shotRate = GridstoreMethods.get_instantaneous_rate(coffee_machine,int(timestamp))
過去の温度を得るためには、
temperature = row.get_field_as_float(2)
データポイントを追加する
x.append(datetime.fromtimestamp(int(timestamp) / 1000 )) y.append(temperature)
GridDBからデータポイントが抽出されると、各データポイントは、プロットラインの1つに追加できるデータポイントのx座標とy座標として追加できます。 これらは、プロット図の線のデータソースとなる線のx座標とy座標を形成する2つのリストを作成します。
x, y, machine = get_past_shot_rates(gridstore,serial_nums[idx],1) shot_line = timeseries.line("x","y",source = ColumnDataSource(data = \ dict(x = x, y = y)), color=LINE_COLORS[idx])
ソースコード
以下のリンクから、データ生成クライアントおよびデータ視覚化コンポーネントのアプリケーションおよびそのソースコードをダウンロードできます。
Download: datavisualisation_application.tar.gz