Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

KibanaのVisualizeでExcelっぽい表現をする

はじめまして、kareyamaです🍂

アップデートの度にオシャレなグラフが増えるKibanaのVisualizeですが、Excelに慣れ親しんだ日本人にはシンプルな表形式がウケるようで。
Data Tableに対して「全体に対する割合を見たい」「異常値を強調表示してほしい」などの要望が出て困っていました。

そんな時、弊社のElastic認定エンジニアの言葉が耳に入ってきました。
「Visual BuilderのTableで、Dashboardの一覧を…」

…Visual BuilderのTable??
さっそくElasticsearchのバージョンを上げて確認します。どうやら6.3からExperimentalとして追加されたようです。

見た目はこんな感じ。
f:id:acro-engineer:20180930020902p:plain

Data Tableとの比較

結論から言ってしまうと、Data tableに対し、Visual Builder Tableは以下の事ができました。

  1. aggregateの結果を変数として、スクリプトが使える ⇒ 四則演算できる
  2. 列単位でフィルタをかけられる
  3. 簡単な条件付書式が使える

逆に、Data tableと違い、以下の制約があります。

  1. Data tableはsplit rowを複数、かつAggregationを選んで指定できるが、Visual Builder Tableでは、行の数は単一のterms aggregationで決まる
  2. Data tableがTime Pickerで指定した期間のデータがテーブル化するのに対し、Visual Builder TableはTime Pickerで指定した期間を「interval」でBucketに分割した上で、 最後(最新)のBucketに含まれるデータのみをテーブル化する

実装

では、実際に使ってみます。
今回は気象データの「日照時間」と「天気」を使い、スクリプトで計算した日照率と、特定の天気の日数を都市ごとに表示します。

気象庁から北海道・大阪・沖縄の気象データを1月分取得し、logstashで取り込みました。
f:id:acro-engineer:20180930084011p:plain

VisualizeからTime Series Visual Builderを選択します。
f:id:acro-engineer:20180930022419p:plain


画面上部のリンクから「Table」を選択。

「Columns」タブの「Group By Field」にlocationフィールドを選択します。
f:id:acro-engineer:20181103124238p:plain


「panel option」を開き、index patternとintervalを設定します。
今回はデータ全体を見たいので、Bucketに分割されないようintervalを大きめに設定します。

ここで、time pickerよりintervalを長く設定して、31d、32d、33d、と試してみると、
値によって結果が変わるのはなぜか、よくわかりませんでした。
f:id:acro-engineer:20181104150204j:plain

「50d」で設定すると、全データが表示されたので、これで進みます。
f:id:acro-engineer:20181103124410p:plain

四則演算

まずは、各都市の平均日照時間を表示します。
これはUIが異なるだけで従来のData Tableと同じですね。
f:id:acro-engineer:20180930095204p:plain

f:id:acro-engineer:20180930095222p:plain

これだとお日様がどれくらい仕事してるかよく分からないので、日照率を計算してみます。

この月、日の出は大体5:30、日の入りが18:30だったようなので、13時間で割りましょう。
こんな感じのMetrics定義になります。
f:id:acro-engineer:20180930100452p:plain

Visuaizeはこんな感じに。
f:id:acro-engineer:20180930100732p:plain
ちゃんと計算できていますね(^o^ 三 ^o^)
今回はサンプルとして可照時間を固定値にしましたが、日の出・日の入り時刻のデータを入れれば日ごとに算出する事も可能ですね!

書式変更

単位の表示がなく、閲覧者からは数値の意味がわかりにくいです。
そのため、まず日照率は「%」を付けましょう。

また、異常に低い値と高い値に注目してもらうため、目立たせたいです。
日照率が30%を切っている場合は文字を青く、70%を超えている場合赤くします。
f:id:acro-engineer:20180930100520p:plain

f:id:acro-engineer:20180930100541p:plain

北海道はずいぶん天気が悪かったようです。
では、どれくらいの日数、曇りか雨だったのでしょう?
実際の数字を出してみようと思います。

フィルタ

「天気(日中)」のフィールドに「曇」または「雨」が含まれている日数を表示します。
MetricsをCountにし、以下のようにOptionを設定します。
f:id:acro-engineer:20180930101428p:plain

データをちゃんと加工していないので、「晴時々薄曇」みたいな天気までヒットしてしまうのが微妙です。
ただ、確かにこの月の北海道は三都市で一番天気が悪いようです。
f:id:acro-engineer:20180930101447p:plain

まとめ

Visual Builder Tableのスクリプトで「割合」を計算したり、計算結果に対して条件書式を付ける事で異常値を強調表示できました。

一見シンプルながら色々な可能性を感じるVisualizeになっています。
Experimental機能のため公式ドキュメントが整備されておらず、触りながら慣れる形になりますが、ぜひ一度試してみてください。

それでは。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com