Ich habe die Abfrage mit den Daten von Toyo Keizai Online neu erstellt.
Veröffentlicht auf GitHub.
Es sind die Daten von "2020/03/11". Daher füllt Blasendiagramm usw. die fehlenden Daten mit dem neuesten Wert. : Schweiß: Was soll ich tun, wenn ich mich weigere, NHK-Daten öffentlich zu verwenden?
Da sich die Form der Daten geändert hat, bevor ich es wusste, habe ich auch den Text und den Github (2020/05/29) überarbeitet.
dl_toyo.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
headers={'accept': 'application/json', 'content-type': 'application/json'}
response = json.loads(requests.get('https://raw.githubusercontent.com/kaz-ogiwara/covid19/master/data/data.json', headers=headers).text)
print(json.dumps(response))
Ein einfaches Skript, das einfach anzeigt, was Sie von Github erhalten Diesmal habe ich versucht, es zum Zeitpunkt der Suche zu verarbeiten. : Schweiß: Das Ergebnis ist hart inputs.conf
inputs.conf
[script://$SPLUNK_HOME/etc/apps/covid19_japan/bin/dl_toyo.py]
disabled = false
python.version = python3
interval = 43200
sourcetype = toyo_json
source = toyodata.json
Diesmal einmal alle 12 Stunden CRON sollte auch verwendbar sein
Um zu überprüfen, ob es ausgeführt wurde
Bestätigen Sie die Skriptausführung
index=_internal dl_toyo.py sourcetype=splunkd
Ausführungsergebnis
04-26-2020 06:38:33.161 +0900 INFO ExecProcessor - New scheduled exec process: /Applications/Splunk/bin/python3.7 /Applications/Splunk/etc/apps/covid19_japan/bin/dl_toyo.py
props.conf
props.conf
[toyo_json]
TIME_PREFIX = Last\supdated:\s
TIME_FORMAT = %d %B %Y
INDEXED_EXTRACTIONS = json
KV_MODE = none
LINE_BREAKER = ([\r\n]+)
NO_BINARY_CHECK = true
category = Structured
description = json
disabled = false
pulldown_type = true
SHOULD_LINEMERGE = false
TRUNCATE = 0
In Bezug auf die Uhrzeit habe ich versucht, das Datenaktualisierungsdatum anstelle des Erfassungsdatums zu verwenden. Es ist jedoch gut oder schlecht, weil ich bei der Suche "all time" verwenden musste.
Ich denke, Sie können auch "DATETIME_CONFIG = CURRENT" sagen. Ich habe versucht, "INDEXED_EXTRACTIONS" zu setzen, aber ich benutze es doch nicht, daher gibt es kein Problem mit "none" zusammen mit "KV_MODE".
Bitte bereiten Sie sich unter Bezugnahme auf [Vorheriger Artikel] vor (https://qiita.com/toshikawa/items/d7c6f43016fd440508ed#choropleth-map).
covid19_in_japan.xml
<dashboard theme="dark">
<label>COVID-19 in Japan</label>
<search id="base">
<query>sourcetype=toyo_json
| head 1</query>
<earliest>0</earliest>
<latest></latest>
</search>
<search base="base" id="base1">
<query>
| rex "prefectures-data.*?(?<data>{.*?})"
| rex field=data "carriers.*?\[(?<carriers>\[.*?\])\]"
| rex max_match=0 field=carriers "(?<daily>\[[^\[\]]+\])"
| spath prefectures-map{} output=prefectures_map
| eval sorter=mvrange(0,mvcount(daily))
| eval daily=mvzip(sorter,daily)
| stats list(prefectures_map) as prefectures_map by daily
| mvexpand prefectures_map
| spath input=prefectures_map
| table daily code ja
| eval ja=code."_".ja
| xyseries daily ja code
| foreach *_* [ eval <<FIELD>> = mvindex(split(daily,","),'<<FIELD>>')]
| untable daily pref count
| eval daily=mvindex(split(daily,","),0)
| sort daily pref
| eval _time = if(daily=0,strptime("2020-03-11","%F"),relative_time(strptime("2020-03-11","%F"),("+".daily."d@d")))
| rex field=count "(?<count>\d+)"
| xyseries _time pref count
| rename COMMENT as "Hier wird es einmal im Feld des Präfekturnamens erstellt. Sortiert von hier in der Reihenfolge von Hokkaido"
</query>
</search>
<row>
<panel>
<html>Dieses Dashboard ist Toyo Keizai Online(<a href="https://toyokeizai.net/sp/visual/tko/covid19/">https://toyokeizai.net/sp/visual/tko/covid19/</a>)Ich benutze die Daten von.</html>
</panel>
</row>
<row>
<panel>
<title>zuletzt aktualisiert: $lastUpdate$</title>
<single>
<title>Anzahl der infizierten Personen</title>
<search base="base1" id="base2">
<query>
| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| transpose 0 header_field=pref column_name=_time
| rename COMMENT as "Zeit hier+Tabelle der Präfekturnamen"
| addtotals
| eventstats max(_time) as time
| eval time=strftime(time,"%F")
| fields _time Total time</query>
<done>
<set token="lastUpdate">$result.time$</set>
</done>
</search>
<option name="drilldown">none</option>
</single>
<table>
<title>Zunehmende Infektionsrate</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Bis zu diesem Zeitpunkt werden der Name der Präfektur und die täglichen kumulativen Daten erstellt, und NHK-Abfragen können hier endlich verwendet werden."
| rename pref as _pref
| transpose 0 header_field=_pref column_name=_time
| sort _time
| tail 2
| reverse
| eval _time=strftime(_time,"%F")
| transpose 0 header_field=_time column_name=_pref
| foreach * [eval tmp=mvappend(tmp,'<<FIELD>>'), first = max(tmp) , second = min(tmp)
| eval daily_incr = if(isnull(nullif(second,0)), round(first * 100.00,2), round((first -second) / second * 100,2))]
| eval daily_count = first - second
| sort - daily_incr
| fields - first second tmp
| rename _pref as "Präfekturen", daily_incr as "Zunahme", daily_count as "Anzahl der täglich infizierten Personen"
|Tischpräfektur*Zunehmende Rate an täglichen Infektionen</query>
</search>
<option name="drilldown">none</option>
<option name="refresh.display">progressbar</option>
<format type="number" field="Zunahme">
<option name="unit">%</option>
</format>
</table>
</panel>
<panel>
<map>
<search>
<query>sourcetype=toyo_json
| head 1
| spath prefectures-map{} output=prefectures_map
| stats count by prefectures_map
| spath input=prefectures_map
| table code ja en value
| sort - value
| geom japansimple featureIdField=en
| fields - code ja</query>
<earliest>0</earliest>
<latest></latest>
<sampleRatio>1</sampleRatio>
</search>
<option name="drilldown">none</option>
<option name="height">600</option>
<option name="mapping.choroplethLayer.colorMode">categorical</option>
<option name="mapping.map.center">(38.62,137.55)</option>
<option name="mapping.map.zoom">5</option>
<option name="mapping.type">choropleth</option>
</map>
</panel>
</row>
<row>
<panel>
<chart>
<title>Tägliche Infektionsrate</title>
<search base="base2">
<query>
| streamstats count(_time) as days
| fields _time Total days
| rename "Total" as "Total Cases"
| eval "Overall Infection Rate"='Total Cases'/days
| eventstats max("Overall Infection Rate") as "Maximum Infection Rate"
| rename "Total Cases" as "TotalCases"
| streamstats current=f window=2 last(TotalCases) as last
| eval perc_incr=((TotalCases-last)/last)*100
| rename TotalCases as "Total Cases", perc_incr as "Daily Infection Rate"
| fields - last
| fields _time "Total Cases" "Daily Infection Rate"</query>
</search>
<option name="charting.axisY2.enabled">1</option>
<option name="charting.chart">area</option>
<option name="charting.chart.overlayFields">"Total Cases"</option>
<option name="charting.drilldown">none</option>
<option name="charting.legend.placement">bottom</option>
<option name="height">600</option>
</chart>
</panel>
<panel>
<chart>
<title>Top 10 Infizierte Anzahl der täglich Infizierten in Präfekturen * 2020/3/3 vor 11/Interpolieren Sie mit einer Zahl von 11</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Bis zu diesem Zeitpunkt werden der Name der Präfektur und die täglichen kumulativen Daten erstellt, und NHK-Abfragen können hier endlich verwendet werden."
| rename pref as _pref
| foreach * [eval Check=max('<<FIELD>>')]
| sort 10 - Check
| fields - Check
| transpose 0 header_field=_pref column_name=_time
| rename COMMENT as "Ich mache es seit dem Tag, als die erste infizierte Person herauskam."
| append [|makeresults
| eval _time = strptime("2020-01-16","%F")]
| makecontinuous _time span=1d
| reverse
| streamstats count(eval(isnull('Tokio'))) as _count
| filldown
| foreach * [eval <<FIELD>> = if(_count=0,'<<FIELD>>', round('<<FIELD>>' / _count))]
| reverse
| rename COMMENT as "Leer ist der erste Wert, 2020/3/Es wird mit dem berechneten Wert aus dem Wert 11 gefüllt."
| untable _time pref count
| sort _time
| streamstats count as days by pref
| streamstats current=f max(count) as prev by pref
| eval daily_count = count - prev
| table pref days count daily_count
| sort 0 - count</query>
</search>
<option name="charting.chart">bubble</option>
<option name="charting.chart.bubbleMaximumSize">30</option>
<option name="charting.chart.bubbleMinimumSize">5</option>
<option name="charting.drilldown">none</option>
<option name="charting.legend.placement">bottom</option>
<option name="height">600</option>
<option name="refresh.display">progressbar</option>
</chart>
</panel>
</row>
</dashboard>
covid19_in_japan.xml
<dashboard theme="dark">
<label>COVID-19 in Japan</label>
<search id="base">
<query>sourcetype=toyo_json
| head 1</query>
<earliest>0</earliest>
<latest></latest>
</search>
<search base="base" id="base1">
<query>
| rex "prefectures-data.*?(?<data>{.*?})"
| rex field=data "carriers.*?\[(?<carriers>\[.*?\])\]"
| rex max_match=0 field=carriers "(?<daily>\[[^\[\]]+\])"
| spath prefectures-map{} output=prefectures_map
| stats count list(prefectures_map) as pref by daily
| eval date=mvindex(split(trim(daily,"[]"),","),0,2) , data=mvindex(split(trim(daily,"[]"),","),3,-1)
| eval _time=strptime(mvjoin(date,""),"%Y%m%d")
| mvexpand data
| table _time data count pref
| streamstats count
| eval count = nullif(count % 47,0) | fillnull count value=47
| eval data=trim(data) ,pref=mvindex(pref,count-1)
| spath input=pref
| eval ja=code."_".ja
| table _time ja data
| sort 0 - _time data
| xyseries _time ja data
| rename COMMENT as "Hier wird es einmal im Feld des Präfekturnamens erstellt. Sortiert von hier in der Reihenfolge von Hokkaido"
</query>
</search>
<row>
<panel>
<html>Dieses Dashboard ist Toyo Keizai Online(<a href="https://toyokeizai.net/sp/visual/tko/covid19/">https://toyokeizai.net/sp/visual/tko/covid19/</a>)Ich benutze die Daten von.</html>
</panel>
</row>
<row>
<panel>
<title>zuletzt aktualisiert: $lastUpdate$</title>
<single>
<title>Anzahl der infizierten Personen</title>
<search base="base1" id="base2">
<query>
| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| transpose 0 header_field=pref column_name=_time
| rename COMMENT as "Zeit hier+Tabelle der Präfekturnamen"
| addtotals
| eventstats max(_time) as time
| eval time=strftime(time,"%F")
| fields _time Total time</query>
<done>
<set token="lastUpdate">$result.time$</set>
</done>
</search>
<option name="drilldown">none</option>
</single>
<table>
<title>Zunehmende Infektionsrate</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Bis zu diesem Zeitpunkt werden der Name der Präfektur und die täglichen kumulativen Daten erstellt, und NHK-Abfragen können hier endlich verwendet werden."
| rename pref as _pref
| transpose 0 header_field=_pref column_name=_time
| sort _time
| tail 2
| reverse
| eval _time=strftime(_time,"%F")
| transpose 0 header_field=_time column_name=_pref
| foreach * [eval tmp=mvappend(tmp,'<<FIELD>>'), first = max(tmp) , second = min(tmp)
| eval daily_incr = if(isnull(nullif(second,0)), round(first * 100.00,2), round((first -second) / second * 100,2))]
| eval daily_count = first - second
| sort - daily_incr
| fields - first second tmp
| rename _pref as "Präfekturen", daily_incr as "Zunahme", daily_count as "Anzahl der täglich infizierten Personen"
|Tischpräfektur*Zunehmende Rate an täglichen Infektionen</query>
</search>
<option name="drilldown">none</option>
<option name="refresh.display">progressbar</option>
<format type="number" field="Zunahme">
<option name="unit">%</option>
</format>
</table>
</panel>
<panel>
<map>
<search>
<query>sourcetype=toyo_json
| head 1
| spath prefectures-map{} output=prefectures_map
| stats count by prefectures_map
| spath input=prefectures_map
| table code ja en value
| sort - value
| geom japansimple featureIdField=en
| fields - code ja</query>
<earliest>0</earliest>
<latest></latest>
<sampleRatio>1</sampleRatio>
</search>
<option name="drilldown">none</option>
<option name="height">600</option>
<option name="mapping.choroplethLayer.colorMode">categorical</option>
<option name="mapping.map.center">(38.62,137.55)</option>
<option name="mapping.map.zoom">5</option>
<option name="mapping.type">choropleth</option>
</map>
</panel>
</row>
<row>
<panel>
<chart>
<title>Tägliche Infektionsrate</title>
<search base="base2">
<query>
| streamstats count(_time) as days
| fields _time Total days
| rename "Total" as "Total Cases"
| eval "Overall Infection Rate"='Total Cases'/days
| eventstats max("Overall Infection Rate") as "Maximum Infection Rate"
| rename "Total Cases" as "TotalCases"
| streamstats current=f window=2 last(TotalCases) as last
| eval perc_incr=((TotalCases-last)/last)*100
| rename TotalCases as "Total Cases", perc_incr as "Daily Infection Rate"
| fields - last
| fields _time "Total Cases" "Daily Infection Rate"</query>
</search>
<option name="charting.axisY2.enabled">1</option>
<option name="charting.chart">area</option>
<option name="charting.chart.overlayFields">"Total Cases"</option>
<option name="charting.drilldown">none</option>
<option name="charting.legend.placement">bottom</option>
<option name="height">600</option>
</chart>
</panel>
<panel>
<chart>
<title>Top 10 Infizierte Anzahl der täglich Infizierten in Präfekturen * 2020/3/3 vor 11/Interpolieren Sie mit einer Zahl von 11</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Bis zu diesem Zeitpunkt werden der Name der Präfektur und die täglichen kumulativen Daten erstellt, und NHK-Abfragen können hier endlich verwendet werden."
| rename pref as _pref
| foreach * [eval Check=max('<<FIELD>>')]
| sort 10 - Check
| fields - Check
| transpose 0 header_field=_pref column_name=_time
| rename COMMENT as "Ich mache es seit dem Tag, als die erste infizierte Person herauskam."
| append [|makeresults
| eval _time = strptime("2020-01-16","%F")]
| makecontinuous _time span=1d
| reverse
| streamstats count(eval(isnull('Tokio'))) as _count
| filldown
| foreach * [eval <<FIELD>> = if(_count=0,'<<FIELD>>', round('<<FIELD>>' / _count))]
| reverse
| rename COMMENT as "Leer ist der erste Wert, 2020/3/Es wird mit dem berechneten Wert aus dem Wert 11 gefüllt."
| untable _time pref count
| sort _time
| streamstats count as days by pref
| streamstats current=f max(count) as prev by pref
| eval daily_count = count - prev
| table pref days count daily_count
| sort 0 - count</query>
</search>
<option name="charting.chart">bubble</option>
<option name="charting.chart.bubbleMaximumSize">30</option>
<option name="charting.chart.bubbleMinimumSize">5</option>
<option name="charting.drilldown">none</option>
<option name="charting.legend.placement">bottom</option>
<option name="height">600</option>
<option name="refresh.display">progressbar</option>
</chart>
</panel>
</row>
</dashboard>
JSON mit einer tiefen Hierarchie aus Splunks Sicht. In der Welt des Javascript, das mit einem Array abgerufen wird, wäre es leicht zu handhaben, aber es ist fast ein Albtraum von Splunk.
Liste der Präfekturnamen
sourcetype=toyo_json
| head 1
| spath prefectures-map{} output=prefectures_map
| stats count by prefectures_map
| spath input=prefectures_map
| table code ja en
| sort code
Ich kann es immer noch gehorsam herausnehmen. Andere Daten sind ziemlich schwierig.
Hier ist eine Abfrage, die dieselbe Form hat wie unter Verwendung von NHK-Daten.
Tägliche Statistiken(Kumulativer Wert)
sourcetype=toyo_json
| head 1 | rex "prefectures-data.*?(?<data>{.*?})"
| rex field=data "carriers.*?\[(?<carriers>\[.*?\])\]"
| rex max_match=0 field=carriers "(?<daily>\[[^\[\]]+\])"
| spath prefectures-map{} output=prefectures_map
| eval sorter=mvrange(0,mvcount(daily))
| eval daily=mvzip(sorter,daily)
| stats list(prefectures_map) as prefectures_map by daily
| mvexpand prefectures_map
| spath input=prefectures_map
| table daily code ja
| eval ja=code."_".ja
| xyseries daily ja code
| foreach *_* [ eval <<FIELD>> = mvindex(split(daily,","),'<<FIELD>>')]
| untable daily pref count
| eval daily=mvindex(split(daily,","),0)
| sort daily pref
| eval _time = if(daily=0,strptime("2020-03-11","%F"),relative_time(strptime("2020-03-11","%F"),("+".daily."d@d")))
| rex field=count "(?<count>\d+)"
| xyseries _time pref count
| rename COMMENT as "Hier wird es einmal im Feld des Präfekturnamens erstellt. Sortiert von hier in der Reihenfolge von Hokkaido"
| rename COMMENT as "Dies ist die Basissuche nach anderen Panels "base1""
| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| transpose 0 header_field=pref column_name=_time
data
[118, 0, 0, 1, 2, 0, 1, 0, 2, 1, 12, 25, 73, 43, 11, 0, 7, 0, 2, 3, 2, 2, 104, 2, 1, 15, 81, 35, 8, 14, 0, 0, 0, 1, 3, 1, 0, 2, 12, 3, 0, 0, 6, 1, 1, 0, 3]
--Diese Daten und der durch "spath" ausgeschnittene Präfekturname werden mit "stats" extrahiert.
mvexpand
in Daten von 47 Präfekturen mit xyseries
konvertiert. ..Von hier aus erkläre ich jedes Panel des Dashboards
Die Basissuche entfällt.
Anzahl der infizierten Personen und Aktualisierungsdatum
<panel>
<title>zuletzt aktualisiert: $lastUpdate$</title>
<single>
<title>Anzahl der infizierten Personen</title>
<search base="base1" id="base2">
<query>
| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| transpose 0 header_field=pref column_name=_time
| rename COMMENT as "Zeit hier+Tabelle der Präfekturnamen"
| addtotals
| eventstats max(_time) as time
| eval time=strftime(time,"%F")
| fields _time Total time</query>
<done>
<set token="lastUpdate">$result.time$</set>
</done>
</search>
<option name="drilldown">none</option>
</single>
Der Wert von Total wird angezeigt Ich habe ein weiteres Feld erstellt, um time im Bedienfeld anzuzeigen. Wenn Sie sich mit der Epochenzeit befassen, verwenden Sie "max" "min" anstelle von "frühestens" "spätestens", da der Betrieb stabil ist. Ich habe es vorher überprüft.
Zunehmende Infektionsrate
<table>
<title>Zunehmende Infektionsrate</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Bis zu diesem Zeitpunkt werden der Name der Präfektur und die täglichen kumulativen Daten erstellt, und NHK-Abfragen können hier endlich verwendet werden."
| rename pref as _pref
| transpose 0 header_field=_pref column_name=_time
| sort _time
| tail 2
| reverse
| eval _time=strftime(_time,"%F")
| transpose 0 header_field=_time column_name=_pref
| foreach * [eval tmp=mvappend(tmp,'<<FIELD>>'), first = max(tmp) , second = min(tmp)
| eval daily_incr = if(isnull(nullif(second,0)), round(first * 100.00,2), round((first -second) / second * 100,2))]
| eval daily_count = first - second
| sort - daily_incr
| fields - first second tmp
| rename _pref as "Präfekturen", daily_incr as "Zunahme", daily_count as "Anzahl der täglich infizierten Personen"
|Tischpräfektur*Zunehmende Rate an täglichen Infektionen</query>
</search>
<option name="drilldown">none</option>
<option name="refresh.display">progressbar</option>
<format type="number" field="Zunahme">
<option name="unit">%</option>
</format>
</table>
: Schweiß: Ich habe einen Kommentar hinterlassen. Weitere Informationen finden Sie unter Vorheriger Artikel. Die Anzeige ist wunderschön, da der japanische Feldname und "%" als Einheit verwendet werden.
Cholopreth Map
Choloprethmap
sourcetype=toyo_json
| head 1
| spath prefectures-map{} output=prefectures_map
| stats count by prefectures_map
| spath input=prefectures_map
| table code ja en value
| sort - value
| geom japansimple featureIdField=en
| fields - code ja
Dies kann übersichtlich angezeigt werden, da die Daten die Namen der Präfekturen in Englisch und Japanisch enthalten.
Daily Infection Rate
DailyInfectionRate
<panel>
<chart>
<title>Tägliche Infektionsrate</title>
<search base="base2">
<query>
| streamstats count(_time) as days
| fields _time Total days
| rename "Total" as "Total Cases"
| eval "Overall Infection Rate"='Total Cases'/days
| eventstats max("Overall Infection Rate") as "Maximum Infection Rate"
| rename "Total Cases" as "TotalCases"
| streamstats current=f window=2 last(TotalCases) as last
| eval perc_incr=((TotalCases-last)/last)*100
| rename TotalCases as "Total Cases", perc_incr as "Daily Infection Rate"
| fields - last
| fields _time "Total Cases" "Daily Infection Rate"</query>
</search>
<option name="charting.axisY2.enabled">1</option>
<option name="charting.chart">area</option>
<option name="charting.chart.overlayFields">"Total Cases"</option>
<option name="charting.drilldown">none</option>
<option name="charting.legend.placement">bottom</option>
<option name="height">600</option>
</chart>
</panel>
Tägliche Infektionsrate in Honke
Grundsätzlich überlagert Area Chart den Wert von Total Cases
mit Line Chart.
Bubble Chart
BubbleChart
<chart>
<title>Top 10 Infizierte Anzahl der täglich Infizierten in Präfekturen * 2020/3/3 vor 11/Interpolieren Sie mit einer Zahl von 11</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Bis zu diesem Zeitpunkt werden der Name der Präfektur und die täglichen kumulativen Daten erstellt, und NHK-Abfragen können hier endlich verwendet werden."
| rename pref as _pref
| foreach * [eval Check=max('<<FIELD>>')]
| sort 10 - Check
| fields - Check
| transpose 0 header_field=_pref column_name=_time
| rename COMMENT as "Ich mache es seit dem Tag, als die erste infizierte Person herauskam."
| append [|makeresults
| eval _time = strptime("2020-01-16","%F")]
| makecontinuous _time span=1d
| reverse
| streamstats count(eval(isnull('Tokio'))) as _count
| filldown
| foreach * [eval <<FIELD>> = if(_count=0,'<<FIELD>>', round('<<FIELD>>' / _count))]
| reverse
| rename COMMENT as "Leer ist der erste Wert, 2020/3/Es wird mit dem berechneten Wert aus dem Wert 11 gefüllt."
| untable _time pref count
| sort _time
| streamstats count as days by pref
| streamstats current=f max(count) as prev by pref
| eval daily_count = count - prev
| table pref days count daily_count
| sort 0 - count</query>
</search>
<option name="charting.chart">bubble</option>
<option name="charting.chart.bubbleMaximumSize">30</option>
<option name="charting.chart.bubbleMinimumSize">5</option>
<option name="charting.drilldown">none</option>
<option name="charting.legend.placement">bottom</option>
<option name="height">600</option>
<option name="refresh.display">progressbar</option>
</chart>
Einmal mit nur bestimmten Daten erstellt, ist das Gefühl eines plötzlichen Anstiegs verschwunden. Aus diesem Grund haben wir ein Datum ab "2020/01/16" erstellt, an dem die Anzahl der infizierten Personen bestätigt wurde, und den Rohling schrittweise vom neuesten Wert (nicht: Schweiß :) gesenkt. Die Größe des Kreises ist die Anzahl der infizierten Personen pro Tag.
Was ich versucht habe zu machen, aber in Bezug auf das Layout gestoppt Area Chart
Top 10 Präfekturen in der täglichen Statistik(Kumulativer Wert)
sourcetype=toyo_json
| head 1
| rex "prefectures-data.*?(?<data>{.*?})"
| rex field=data "carriers.*?\[(?<carriers>\[.*?\])\]"
| rex max_match=0 field=carriers "(?<daily>\[[^\[\]]+\])"
| spath prefectures-map{} output=prefectures_map
| stats count list(prefectures_map) as pref by daily
| eval date=mvindex(split(trim(daily,"[]"),","),0,2) , data=mvindex(split(trim(daily,"[]"),","),3,-1)
| eval _time=strptime(mvjoin(date,""),"%Y%m%d")
| mvexpand data
| table _time data count pref
| streamstats count
| eval count = nullif(count % 47,0) | fillnull count value=47
| eval data=trim(data) ,pref=mvindex(pref,count-1)
| spath input=pref
| eval ja=code."_".ja
| table _time ja data
| sort 0 - _time data
| xyseries _time ja data
| rename COMMENT as "Hier wird es einmal im Feld des Präfekturnamens erstellt. Sortiert von hier in der Reihenfolge von Hokkaido"
| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Bis zu diesem Zeitpunkt werden der Name der Präfektur und die täglichen kumulativen Daten erstellt, und NHK-Abfragen können hier endlich verwendet werden."
| rename pref as _pref
| foreach * [eval Check=max('<<FIELD>>')]
| sort 10 - Check
| fields - Check
| transpose 0 header_field=_pref column_name=_time
| sort _time
Es wäre schön, es im Stapelmodus des Flächendiagramms anzuzeigen.
Die Verzeichnisstruktur ist wie folgt
Covid19_in_japan
.
├── bin
│ ├── README
│ └── dl_toyo.py
├── default
│ ├── app.conf
│ └── data
│ └── ui
│ ├── nav
│ │ └── default.xml
│ └── views
│ └── README
├── local
│ ├── app.conf
│ ├── data
│ │ └── ui
│ │ └── views
│ │ └── covid19_in_japan.xml
│ ├── inputs.conf
│ ├── props.conf
│ └── transforms.conf
├── lookups
│ ├── japansimple
│ │ ├── grid.key
│ │ ├── grid.val
│ │ ├── ray.key
│ │ ├── ray.t.key
│ │ ├── ray.t.val
│ │ ├── ray.val
│ │ ├── seg.key
│ │ ├── seg.t.key
│ │ ├── seg.t.val
│ │ └── seg.val
│ └── japansimple.kml
└── metadata
├── default.meta
└── local.meta
https://github.com/to4kawa/Covid19_in_japan Ich habe ein Repository erstellt und alle Dateien verschoben, um README.md zu erstellen.
: Schweiß: Ich hoffe es bewegt sich ohne Probleme.
Ich konnte es vorerst tun. Erstellen Sie Apps und erstellen Sie einen Suchordner
Ordner | Datei |
---|---|
$SPLUNK_HOME/etc/apps/{app_name}/local/ | inputs.conf props.conf |
$SPLUNK_HOME/etc/apps/{app_name}/bin | dl_toyo.py |
$SPLUNK_HOME/etc/apps/{app_name}/lookups | prefecture.csv |
$SPLUNK_HOME/etc/apps/{app_name}/local/data/ui/views | covid19_in_japan.xml (Dashboard-Datei) |
Es sollte funktionieren, wenn Sie platzieren. Bitte setzen Sie außerdem zuerst japansimple.kml.
Was JSON betrifft, habe ich Splunk bisher verwendet, es war also ziemlich gut, aber ich denke, dass es einfacher ist, es auf der Python-Seite zu verarbeiten.
Die auf GitHub veröffentlichte ist "japansimple.kml" beigefügt. Da ich Macosx bin, arbeite ich nicht unter Windows. Zumindest die Beschreibung im Verzeichnis "inputs.conf" muss geändert werden. : Schweiß: Was soll ich hier machen?
Recommended Posts