interactive Splunk COVID-19 Dashboard について(その2 Coronavirus dashboard)

[Bringing Data to COVID-19](https://www.splunk.com/en_us/blog/leadership/bringing-data-to-covid-19.html)で紹介されたDashboard、[interactive Splunk COVID-19 Dashboard](https://covid-19.splunkforgood.com/coronavirus__covid_19_)が何をやっているのかを確認してみる。

[その１](https://qiita.com/toshikawa/items/7b90db86d99a965f22b7)の続き

#corona_virus/default/data/ui/views/
-  confirmed_cases_location_overlay.xml 
-  corona_virus.xml
-  coronavirus_timelapse.xml 
-  covid-19.xml 

ダッシュボードが４つある。その１でやった`covid-19.xml`以外を確認する
##corona_virus.xml
https://github.com/splunk/corona_virus/blob/master/default/data/ui/views/corona_virus.xml

- confirmed.csv

| 1/22/20 | .... | Country/Region | Lat | Long | Province/State |
|:--|:--|:--|:--|:--|:--|
感染者数の日付データと国・州の位置情報のCSV

他の `deaths.csv` `recoverd.csv`も同様な形式

###<title>Last Update</title>
CSVの最終アップデート日を表示

###<title>Confirmed Cases</title>
感染者数統計を表示

###<title>Deaths</title>
死亡者数統計を表示

###<title>Recovered</title>
快癒者数統計を表示

###<title>Corona Virus Cases</title>
感染者数、死亡者数、快癒者数を`appendcols`でくっつけて
`| geostats latfield=Lat longfield=Long  sum(Confirmed) sum(Recovered) sum(Deaths)  by Country globallimit=0`でまとめている。
_Cluster Map_用

###<title>Total Cases by Country</title>

| Country | Confirmed | Deaths | Recovered | # Confirmed/Day |
|:--|:--|:--|:--|:--|
| China | 81156 | 3249 | 70535 | 1376 |
| Italy | 41035 | 3405 | 4440 | 696 |
| Iran | 18407 | 1284 | 5710 | 312 |
| Spain | 17963 | 830 | 1107 | 304 |
| Germany | 15320 | 44 | 113 | 260 |
| US | 13677 | 200 | 0 | 232 |

最終的な出力が上の表

集計する際

```
| stats sum(Confirmed) as Confirmed sum(Deaths) as Deaths sum(Recovered) as Recovered max(# Confirmed/Day) as "# Confirmed/Day" max(num_data_points) as num_data_points by Country
```

| Country | Confirmed | Deaths | Recovered | # Confirmed/Day | num_data_points |
|:--|--:|--:|--:|--:|--:|
| Afghanistan | 22 | 0 | 1 |   | 59 |
`eval`であとで追加するのではなく、`max`を使ってフィールドを作っているのは初めてみました。
_num_data_points_は何日間のデータかということ。

###<title>Top 25 Countries with Reported Cases (Over Time)</title>

| _time | China | Italy | Iran | Korea, South | Spain | Germany | France | US | Cruise Ship | Switzerland | United Kingdom | Japan | Netherlands | Norway | Sweden | Belgium | Austria | Denmark | Malaysia | Singapore | Australia | Canada | Qatar | Israel | Greece |
|:--|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|
| 2020/01/22 | 548 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2020/01/23 | 643 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
日付ごと集計して`transpose`したもの

###| <title>Top 25 Countries with Confirmed Cases (By Day Since January 01, 2020) - Colored By Country, Size of Bubble by Death Count</title>

| Country | days | count | death_count |
|:--|--:|--:|--:|
| China | 79 | 81156 | 3249 |
| Italy | 79 | 41035 | 3405 |
| Iran | 79 | 18407 | 1284 |
| Korea, South | 79 | 8565 | 91 |
| Spain | 79 | 17963 | 830 |

```
<option name="charting.chart">area</option> 
<option name="charting.chart.bubbleMaximumSize">50</option> 
<option name="charting.chart.bubbleMinimumSize">10</option> 
<option name="charting.chart.bubbleSizeBy">area</option> 
```
で綺麗な_Area Chart_になっている
Bubbleの大きさは４列目*death_count*になっている。

reference:https://docs.splunk.com/Documentation/SplunkCloud/latest/Viz/ChartConfigurationReference#Area.2C_Bubble.2C_Bar.2C_Column.2C_Line.2C_and_Scatter_charts

###<title>Total Confirmed Cases (With Overall Infection Rate Calculated Each Day)</title>

| _time | Total Cases | Maximum Infection Rate | Overall Infection Rate |
|:--|--:|--:|--:|
| 2020/01/22 | 555 | 4184.62 | 555.00 |
| 2020/01/23 | 653 | 4184.62 | 326.50 |

`| eval "Overall Infection Rate"=round('Total Cases'/num,2)`
`num`は何日目ということ
`| eventstats max("Overall Infection Rate") as "Maximum Infection Rate"`
と計算している。

ここら辺で、ChartやSPLは使い回していて、いらない計算も混じっていることに気づく。

###      <title>Daily Infection Rate</title>

| _time | Total Cases | Daily Infection Rate |
|:--|--:|--:|
| 2020/01/22 | 555 |   |
| 2020/01/23 | 653 | 17.66 |

```
| streamstats current=f window=2 last(TotalCases) as last 
| eval perc_incr=round(((TotalCases-last)/last)*100, 2)
| rename TotalCases as "Total Cases", perc_incr as "Daily Infection Rate" 
```
で差分をパーセント表記で出している。

#まとめ
10個のパネルを表示しているなか、SPLやsimpleXMLをいい感じで使い回しているのが参考になった。
自分だと、すぐに専用に作ってしまうので。

とりあえずはここまで