非ElasticsearchユーザーにもおススメなKibanaで地味に便利な機能を紹介したい

この記事は[ZOZOテクノロジーズ #1 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/zozo_tech)16日目の記事です。

昨日は[@r-tezuka](https://qiita.com/r-tezuka)さんの[国内アパレル製造業向けCADフォーマットTIIPの仕様について調査してみた](https://qiita.com/r-tezuka/items/b9700a8473a5a8c819a8)でした。


本記事では普段Elasticsearchを利用していない方にも便利でぜひ使っていただきたいKibanaの機能を紹介します。


## Kibanaとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/ef72c828-de1f-ea09-41ac-cc2cb5231e07.png)

[Kibana](https://www.elastic.co/jp/products/kibana)とは、Elasticsearch上にあるデータを可視化するためのツールですが、その可視化だけの役割を超えて様々な機能が搭載されています。
Elasticsearchと同様にOSSの為、自由にインストールして利用することが可能です。(一部機能は有料ライセンスが必要ですが…)
また、各OS向けのインストーラがElastic社から公開されている為、簡単にローカルPCにインストールし試すことも可能です。

今回はElasticCloudの無料1週間トライアルを用いて紹介します。
なお、この際の注意点として、今回紹介しているML機能を利用するためにはデフォルトではOffになっているMLノードを設定からオンにする必要があります。


### 実行環境
| | バージョン |
| --- | --- |
| Elasticsearch | 7.5.0 |
| Kibana | 7.5.0 |


# 非Elasticsearchユーザ向けにもおススメしたい機能紹介

## File Data Visualizer機能
KibanaはElasticsearch上にあるデータを可視化するためのツールですが、GUI経由でElasticsearch上にデータを取り込む方法として[File Data Visualizer](https://www.elastic.co/jp/blog/importing-csv-and-log-data-into-elasticsearch-with-file-data-visualizer)が6.5より提供されています。
サポートされている形式は以下の通りです。
> "区切り"を含むファイル（例：CSV）やNDJSON、準構造化テキスト（例：ログファイル）

これを持ちいたデータの取り込みにはML機能が用いられているそうで、同時にElastsearchへのデータ取り込みとmappingの提案まで行ってくれる優れものです。

## Data Frame機能
[DataFrame機能](https://www.elastic.co/guide/en/kibana/current/xpack-ml-dfanalytics.html)はML機能の中の一部として搭載されている機能ですが、かなり高機能で個人的にはすごく好きな機能です。
CSVのような構造化されたテキストの中で、それぞれの要素について分析を行い可視化まで行ってくれます。


# ためししてみる
試しに、Kaggleのhttps://www.kaggle.com/c/titanic/overview のデータをサンプルにこの機能をやってみます。

## データの取り込み
Kibanaを開き、右側のMachine Learningを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/fe4cba07-02d5-7dfa-0e77-0c69f25aee11.png)

Data Visualizerを開き、データを画面上にドラッグ&ドロップで移動させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/4cbd45dd-2269-316e-2789-46c76959c88d.png)


するとデータの内容を解析し、可視化してくれます。
左下のimportをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/6633b60f-ee7e-05cc-f20a-5b7f53433590.png)

インデックス名の設定は、今回はtitanic号のデータだったのでtitanicにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/f6ff3aa7-42ba-f89d-eea7-8d58b1c0bc08.png)

すると、下記のようにデータの内容を可視化してくれます。右上のfilterからデータを絞り込むと任意のデータのみを分析することも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/1c9462eb-2602-fcd6-6d8e-5a5976ff5f3a.png)

また、文字列カラムに関しては下記のようにどのようなデータがどのような割合で含まれているのかを可視化してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/5085720e-d1ad-1411-81c6-6ee53c64eb73.png)

普段の業務ではこの機能を用いてログにどのような属性のデータが多いのか、どこに対してアプローチすれば値が改善されるのかを見ています。

----

以下の機能は7.5から出た機能だったので、試しに使用してみました。
## Analyzeしてみる(outlier detection)
上のData Frame Analyticsを押し、右側のCreate Analytics Jobを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/4046455b-a011-194a-0a80-e919ab6a1086.png)

設定は以下の通りです。

| 名前 | 設定 |
| --- | --- |
| Job type | outlier detection |
| Source index | titanic |
| Destination index | titanic-analyzed |

そのままジョブをCreateしStartすると、画面上に以下のような表示が出てくるので、Viewを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/ed1bb3e4-edcc-1047-6117-c69dea0f0f52.png)

すると、下記のように分析結果が出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/8b2ff684-4628-d362-2e63-b55e1a223191.png)

このような形で、どのデータが外れ値で、どのカラムが起因しているかを可視化された状態で見ることができます。

## Analyzeしてみる(regression)
先ほどと同様にData Frame Analyticsから新規ジョブを発行します。
titanicデータセットでは定番の生存の予測を行ってみます。
設定は以下の通りです。

| 名前 | 設定 |
| --- | --- |
| Job type | regression |
| Source index | titanic | 
| Destination index | titanic-regression | 
| Dependent variable | Survived |

すると下記の通り、ジョブが実行され結果が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245174/80d663ae-15a4-b7a6-6eac-3093814ac6ef.png)

という想定だったのですが、先ほどと違いViewボタンがグレーアウトされています…Dev Tools上から直接インデックスの中身を覗くことは可能でしたが、可視化はもう少し先なのかもしれません。


# 最後に
以上Kibanaの最近のリリースで追加されたMLのData Frame Analitics機能と、普段から使用しているFile Data Visualizer機能を紹介してみました。

明日は[@AmatsukiKu](https://qiita.com/AmatsukiKu)さんです！お楽しみに！