Splunk: データを塗り分け形式で世界地図上に表示する


###### 実施環境： Splunk Free 8.2.2

### 0. 概要

 Splunk にはデフォルトで、世界地図上にデータを表示できる視覚エフェクトが存在します。
今回は、名前を指定した国を世界地図上で塗りつぶす形式を紹介します。

![WS000041.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/e5961d57-0be7-22a5-3b9d-7d336c3469df.jpeg "概要")

### 1. SPL 文の組み方

例として、以下の SPL 文を使用します。
少々わかりにくいですが、日本が塗りつぶされています。

```Splunk:Splunk
| makeresults count=1
| eval CNT = 100
| eval NAME = "Japan"
| geom geo_countries featureIdField="NAME"
```

![WS000041.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/e5961d57-0be7-22a5-3b9d-7d336c3469df.jpeg "世界地図")

表としては以下のようになります。
なお、 stats コマンドを使うなど情報の取り方によっては「 _time 」列がない場合も多いです。

| - | - | _time | featureCollection | geom |
| --- | --- | --- | --- | --- |
| 値 | 国名 | ログ出力日時 | 地理情報取得元 | 地理情報 |
| 値 | 国名 | ログ出力日時 | 地理情報取得元 | 地理情報 |
| ... | ... | ... | ... | ... |

「 featureCollection 」と「 geom 」は geom コマンドにより生成されるフィールドです。
 geom コマンドは Splunk 上のルックアップを参照して地理情報を取得するコマンドで、基本的な文法は以下の通りです。

 geom ルックアップ名 featureIdField=国名

今回使用したルックアップは、 Splunk にデフォルトで入っている「 geo_countries 」という地理情報が記載されたルックアップです。
「 featureId 」に記載された国名と geom コマンドの「 featureIdField 」オプションで指定した項目に格納された国名を比較して、「 geom 」に入っている地理情報を返します。

![WS000051.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/cf345df1-f32e-8a23-5578-1571ed6d0a25.jpeg "geo_countries")

 Splunk デフォルトの地理情報ルックアップには「 geo_countries 」のほかに、「 geo_us_states 」があります。
こちらを使用すると、アメリカ合衆国の地理情報が取得できます。

![WS000050.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b282c6a1-c714-f9c3-c16f-6bc2aed2b533.jpeg "ルックアップ")

実はこの視覚エフェクトに関しては、表の形は結構崩しても表示できます。
究極、「値」と「地理情報」の2項目が入っていれば地図上に情報を表示できてしまったりします。

```Splunk:Splunk
| makeresults count=1
| eval CNT = 100
| eval NAME = "Japan"
| geom geo_countries featureIdField="NAME"
| fields - _time, NAME, featureCollection
| rename geom AS "地理情報"
```

| - | - |
| --- | --- |
| 値 | 地理情報 |
| 値 | 地理情報 |
| ... | ... |

![WS000042.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/a7a1ea61-8e3b-b1ba-e580-d75162a662c3.jpeg "世界地図2")

ただし、このような変形をした場合、地図上の塗りつぶしに補正が効かず、かなり不格好な形になります。
変形する意味もまずないので、 geom コマンドの後ろに処理をつなげるのは避けたほうがよいでしょう。

![WS000047.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/57289172-e6fc-9256-8f4c-0e3dc3809096.jpeg "塗りつぶし")

![WS000049.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/7bf5c8a7-d85b-f414-e552-e499967f57fe.jpeg "塗りつぶし2")

一方、「値」を2種類にするなど、余計な列を追加してしまうと表示できません。
「値」「国名」「ログ出力日時」「地理情報取得元」「地理情報」以外の情報は入れないようにしてください。

### 2. 使用方法

 Splunk 視覚エフェクトの「 Choropleth Map 」を選択することで使用できます。

![WS000043.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/8c8216be-c6f3-1226-31a6-b24b9ff311bc.jpeg "Choropleth Map")

### 3. 地図の移動/拡大/縮小

地図は、ドラッグすることで視点を移動させることが可能です。

拡大/縮小を行う場合は、地図の左上端にあるボタンを押します。

![WS000048.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/868c5f7b-f144-d34d-fa48-2581e68f5d46.jpeg "地図操作")

上の2つのボタンは、拡大/縮小を行います。
「 + 」が拡大、「 - 」が縮小です。

![WS000034.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/4b1c4888-df87-ffcb-6f1f-616e6246531a.jpeg "拡大縮小")

その下のボタンを押すと、デフォルトの視点に戻ります。

![WS000034 - コピー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/e70042aa-7348-1c78-5540-2dd58aec64ba.jpeg "デフォルト移動")

デフォルトの視点は、フォーマットの全般タブで指定します。

![WS000044.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/bf1396b0-fc20-8b1d-59c0-014d155d25f1.jpeg "全般")

例えば「緯度」を「35」、経度を「135」、ズームを「5」にすると以下の視点がデフォルトになります。

![WS000047.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/57289172-e6fc-9256-8f4c-0e3dc3809096.jpeg "日本")

### 4. 色分け

地図上での色分けの設定は、フォーマットの色タブで実施できます。

![WS000053.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9ddd9521-0d31-0266-fd71-949e751a14a4.jpeg "色")

「色モード」を設定することで、色分けの方法を変更できます。
具体的にどのような形で色分けされるかは、「プレビュー」で確認できます。

例えば「シーケンシャル」では、以下のように白から最大色へのグラデーションで表示されます。
色数は「倍率数」、色そのものは「最大色」で指定できます。

![WS000054.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/ba44b9f9-c8c2-4b2f-99c6-f94412975aa1.jpeg "シーケンシャル")

「ダイバージェント」では「倍率数」「最大色」に加えて「最小色」を選択でき、2色の間のグラデーションで表示されます。
2色のちょうど中間、白色となる値は、「中性点」で指定できます。

![WS000055.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/bc544423-11cc-d980-8702-b03239c7f036.jpeg "ダイバージェント")

前の2種類が値の大きさによりグラデーションを作る形の色分け方法なのに対し、「カテゴリ」は値をそのまま用いた色分け方法です。
値としては数値のほか、文字列も用いることができます。
例えば以下の例では、アメリカ合衆国の州について頭文字別に色分けしています。

```Splunk:Splunk
| inputlookup geo_us_states
| eval GROUP = substr(featureId, 1, 1)
| table GROUP, featureId
| geom geo_us_states featureIdField="featureId"
```

![WS000060.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/fd0b369e-64f6-0993-bce7-39547e80ad89.jpeg "カテゴリ")

### 5.  IP アドレスからの国名の取得方法

[データを点形式で世界地図上に表示する](https://qiita.com/frozencatpisces/items/241662b51b9dc2b37af3) で紹介した iplocation コマンドですが、実は今回の視覚エフェクトでも使用できます。

```Splunk:Splunk
| makeresults count=1
| eval ip = "8.8.8.8"
| iplocation ip
```

![WS000039.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/8d5992db-ce47-7281-0c01-bb5682300759.jpeg "iplocation")

「 Country 」を geom コマンドにかけると、ちょうどアメリカ合衆国が塗りつぶされることが確認できます。

```Splunk:Splunk
| makeresults count=1
| eval ip = "8.8.8.8"
| iplocation ip
| stats count BY Country
| geom geo_countries featureIdField="Country"
```

![WS000052.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/cce878cb-a790-7cb4-43c7-6f3a4c02e113.jpeg "世界地図3")