Splunk で 相関マトリックスを作るには？


# はじめに

Splunk で相関マトリックスを作りたい！　でも標準コマンドやグラフでは用意されていないですよね（もしあったらすみません）今回は相関マトリックスを作るための２つの手法を見つけたのでご紹介します。

# 手法１：　MLTK + Algoを追加して利用する

こちらは、MLTK だけではアルゴリズムが足りず、追加のAppを入れます。

### 事前準備環境
- [MLTK](https://splunkbase.splunk.com/app/2890/) 
- [Python for Scientific Computing (for Linux 64-bit) (*)Linuxの場合](https://splunkbase.splunk.com/app/2882/)
- [Splunk MLTK Algorithms on GitHub](https://splunkbase.splunk.com/app/4403/#/details)

(*) ちなみに3つ目のAppは Splunk8でも問題なく動作しております。



### 使い方

MLTKのアルゴリズムとして呼び出すので、fit の後に CorrelationMatrix <field> とします。

```
| inputlookup diabetes.csv
| fit CorrelationMatrix *
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/6f60dfa2-2eda-d23d-a616-9b62605f11cd.png)


色の付け方は、以下のようにヒートマップを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/3c96ebcc-00bc-ec9f-2314-b9607442bb9b.png)

ヒートマップとしてはこれで十分かもしれませんが、もっと可視化して分析したいですよね。


# 手法２：　seaborn の相関マトリックスを使う

そんなときに DLTK (DeepLearning Toolkit)を使うと、seabornを使った可視化ダッシュボードが Splunk上でできるという[blog](https://www.splunk.com/en_us/blog/machine-learning/deep-learning-toolkit-3-2-graphics-rapids-spark-and-more.html)を見つけました。

完成したら、以下のようなイメージでダッシュボード上で可視化できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/d191f1af-4b2c-d874-14f4-c192ebcfabc5.png)



ということで早速使い方をみてみましょう。使うためにはちょっとした事前準備と工夫が必要です。

### 事前準備環境

- [MLTK](https://splunkbase.splunk.com/app/2890/) 
- [Python for Scientific Computing (for Linux 64-bit) (*)Linuxの場合](https://splunkbase.splunk.com/app/2882/)
- [DLTK](https://splunkbase.splunk.com/app/4607/)

DLTKのセットアップの仕方はこちらの記事をご覧ください。セットアップまででOKです。
https://qiita.com/maroon/items/5a8b027631a674d6d8be

DLTKの場合は、計算処理をコンテナ側で実施するため、コンテナを起動し、アルゴリズムとなる correlationmatrix.py を最初に作成しておく必要があります。　でも心配しないでください。すでにコードは用意されているので、コードを一度実行すればアルゴリズムは作成されます。あとは普通にSplunkから SPLを実行すればいいのです。　ただし可視化部分は seabornで作成したpng イメージをダッシュボードで表示するため、すこし工夫が必要です。

今回は、細かい仕組みは省いて、どう利用するかにフォーカスを当ててみたいと思います。

### 1) コンテナ起動

DLTKの場合、計算処理をコンテナ上で実行するため、起動しておく必要があります。起動は簡単です。
DLTKのContainers というタブに移動すると以下のような画面が表示されます。 DLTK3.2 の場合 Golden Image GPUというのがありますが、こちらが標準的な Docker Imageとして用意されているので、こちらを選択して、Startボタンで起動します。（これだけ）

初回は、このGolden Imageがダウンロードされて、起動するため少し時間がかかりますが、２回目からはすぐに起動できます。
(23GB 近くあるイメージなので、Disk容量などに注意!)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/a7601ffc-c6ce-228b-6888-11373d92dcfc.png)

### 2) correlatonmatrix アルゴリズム作成

コンテナ起動したら、[JUPTER LAB] というボタンをクリックしてログインしてください。( Pass: Splunk4DeepLearning)

DLTKの場合、アルゴリズムを自分で作成します。ただしすでにコードはいくつか用意されているので、１から作る必要はありません。

~~correlationmatrix のコードは、githubからダウンロードする必要があります。~~ 
~~https://github.com/splunk/splunk-mltk-container-docker~~
~~ダウンロードしたら、その中に /notebook/correlationmatrix.ipynb というファイルがあるので、jupyternotebookにドラック&ドロップします。~~
<font color="red">( ver 3.2以降の新規インストールであれば最初から入っております。バージョンアップした場合などは古いvolumeが残っているため存在しない場合があります。その場合は上記の方法で取得ください）</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/3716bede-11a4-d2ec-127d-0eef74da7892.png)

念の為 Stagingから実行しておきます。

Splunk 上で、以下のSPLをコピペして実行してください。( lookupファイルの権限が Privateになっているので、MLTKのサーチで実行してください。もしくはGlobal 権限を与えるか）

```
| inputlookup diabetes.csv
| fit MLTKContainer mode=stage algo=correlationmatrix plot="matrix,pairplot" response from BMI age blood_pressure diabetes_pedigree glucose_concentration number_pregnant serum_insulin skin_thickness into app:diabetes_correlation
```

その後、jupyter notebook に戻って、先ほどのcorrelationmatrix を全て実行します。
以下のように、Runから [Run All Cells]を選択するといいでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/9cc98c2d-7325-e1ee-a0ba-ab4d4efee6fd.png)

エラーなく、最後までいけば成功です。これで correlationmatrix のコードがコンテナ上に作成されました。


### 3) Splunk上で correlationmatrix が動作するか確認。

以下のサンプルコードを使って、先ほど作成したアルゴリズムが動作するかみてみましょう。

```
| inputlookup churn.csv
| table "Day Calls" "Eve Calls" "Night Calls" "Intl Calls" "Churn?"
| fit MLTKContainer algo=correlationmatrix plot="matrix,pairplot" "Churn?" from * into correlation_churn
```

エラーなく、以下のように表示されれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/04ba8749-8bcb-0e4b-82a2-45f35b44c7ea.png)

### 4) correlationmatrix の可視化

おまたせしました。ようやく可視化が出来ます。

仕組みとしては、上記の correlationmatrix が裏で seabornを使って可視化したものを imageとして保存しております。それを呼び出してダッシュボードで表示するという仕組みです。サンプルダッシュボードがありますので、そちらを複製して、利用することにします。

 DTLKの 「例(Sample)」 - 「基本」 - 「Correlation Matrix and pair plot」 をクリック 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/431f1f76-8dd1-b89c-ae4f-c211d699c2d8.png)

ダッシュボードを複製して、適当な名前を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/668629e4-6fba-ba29-da53-07cb83eb3c8a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/1ffc7cd9-92a4-a558-9068-2114abdd6bf0.png)

必要に応じて、権限を他のAppから参照できるようにしておいてください。

最後にダッシュボード内の SPLとトークンを修正します。

以下にように、「編集」ー「ソース」　から以下の２カ所を修正します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/37f3cf8b-1fcd-448c-104f-bc2e02557887.png)

これで保存すれば、OK!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/a934b0fd-2792-62ed-0607-cd9d1b4598a8.png)

上級者は、jupyternotebook のコードを編集すれば、他のseabornのオプションイメージも利用できます。

# 最後に

最初はちょっと面倒そうに見えますが、一度作ってしまうとあとはダッシュボード内の SPLを入れ替えるだけで再利用できます。
またこのようなイメージをダッシュボードに貼る方法も面白いですよね。

コンテナを利用することで、Splunkと計算ノードを分離出来るので、Splunk単体だとCPU/Memory などの制限に引っかかってしまうケースも多いですが、DLTKを使うことで回避することも可能です。

是非、お試しください。