J'ai recréé la requête en utilisant les données de Toyo Keizai Online.
Publié sur GitHub.
Ce sont les données du «2020/03/11». Par conséquent, Bubble Chart, etc. remplit les données manquantes avec la dernière valeur. : sweat: Que dois-je faire si je refuse d'utiliser les données NHK publiquement?
De plus, comme la forme des données avait changé avant que je ne le sache, le texte et le github ont également été révisés (2020/05/29).
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))
Un script simple qui affiche simplement les données récupérées depuis github Cette fois, j'ai essayé de le traiter au moment de la recherche. : sueur: le résultat est dur 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
Cette fois toutes les 12 heures CRON doit également être utilisable
Pour vérifier s'il a été exécuté
Confirmer l'exécution du script
index=_internal dl_toyo.py sourcetype=splunkd
Résultat d'exécution
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
Concernant l'heure, j'ai essayé d'utiliser la date de mise à jour des données au lieu de la date d'acquisition. Cependant, c'est bon ou mauvais car j'ai dû utiliser "all time" lors de la recherche.
Je pense que vous pouvez également dire DATETIME_CONFIG = CURRENT
.
J'ai essayé de mettre ʻINDEXED_EXTRACTIONS, mais je ne l'utilise pas après tout, donc il n'y a pas de problème avec
aucunavec
KV_MODE`.
Veuillez vous préparer en vous référant à Article précédent.
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 "Ici, il est créé une fois dans le champ du nom de la préfecture. Trié d'ici par ordre de Hokkaido"
</query>
</search>
<row>
<panel>
<html>Ce tableau de bord est Toyo Keizai Online(<a href="https://toyokeizai.net/sp/visual/tko/covid19/">https://toyokeizai.net/sp/visual/tko/covid19/</a>)J'utilise les données de.</html>
</panel>
</row>
<row>
<panel>
<title>dernière mise à jour: $lastUpdate$</title>
<single>
<title>Nombre de personnes infectées</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 "Temps ici+Tableau des noms de préfecture"
| 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>Augmentation du taux de personnes infectées</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Jusque-là, le nom de la préfecture et les données cumulées quotidiennes sont créés, et les requêtes NHK peuvent enfin être utilisées ici."
| 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éfectures", daily_incr as "Taux d'augmentation", daily_count as "Nombre de personnes infectées quotidiennement"
|préfecture de table*Augmentation du taux d'infections quotidiennes</query>
</search>
<option name="drilldown">none</option>
<option name="refresh.display">progressbar</option>
<format type="number" field="Taux d'augmentation">
<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>Taux d'infection quotidien</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 des personnes infectées Nombre de personnes infectées quotidiennement dans les préfectures * 2020/3/3 avant 11/Interpoler avec un nombre de 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 "Jusque-là, le nom de la préfecture et les données cumulées quotidiennes sont créés, et les requêtes NHK peuvent enfin être utilisées ici."
| 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 "Cela se fait depuis le jour où la première personne infectée est sortie."
| append [|makeresults
| eval _time = strptime("2020-01-16","%F")]
| makecontinuous _time span=1d
| reverse
| streamstats count(eval(isnull('Tokyo'))) as _count
| filldown
| foreach * [eval <<FIELD>> = if(_count=0,'<<FIELD>>', round('<<FIELD>>' / _count))]
| reverse
| rename COMMENT as "Le blanc est la première valeur, 2020/3/Il est rempli avec la valeur calculée à partir de la valeur 11."
| 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 "Ici, il est créé une fois dans le champ du nom de la préfecture. Trié d'ici par ordre de Hokkaido"
</query>
</search>
<row>
<panel>
<html>Ce tableau de bord est Toyo Keizai Online(<a href="https://toyokeizai.net/sp/visual/tko/covid19/">https://toyokeizai.net/sp/visual/tko/covid19/</a>)J'utilise les données de.</html>
</panel>
</row>
<row>
<panel>
<title>dernière mise à jour: $lastUpdate$</title>
<single>
<title>Nombre de personnes infectées</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 "Temps ici+Tableau des noms de préfecture"
| 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>Augmentation du taux de personnes infectées</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Jusque-là, le nom de la préfecture et les données cumulées quotidiennes sont créés, et les requêtes NHK peuvent enfin être utilisées ici."
| 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éfectures", daily_incr as "Taux d'augmentation", daily_count as "Nombre de personnes infectées quotidiennement"
|préfecture de table*Augmentation du taux d'infections quotidiennes</query>
</search>
<option name="drilldown">none</option>
<option name="refresh.display">progressbar</option>
<format type="number" field="Taux d'augmentation">
<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>Taux d'infection quotidien</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 des personnes infectées Nombre de personnes infectées quotidiennement dans les préfectures * 2020/3/3 avant 11/Interpoler avec un nombre de 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 "Jusque-là, le nom de la préfecture et les données cumulées quotidiennes sont créés, et les requêtes NHK peuvent enfin être utilisées ici."
| 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 "Cela se fait depuis le jour où la première personne infectée est sortie."
| append [|makeresults
| eval _time = strptime("2020-01-16","%F")]
| makecontinuous _time span=1d
| reverse
| streamstats count(eval(isnull('Tokyo'))) as _count
| filldown
| foreach * [eval <<FIELD>> = if(_count=0,'<<FIELD>>', round('<<FIELD>>' / _count))]
| reverse
| rename COMMENT as "Le blanc est la première valeur, 2020/3/Il est rempli avec la valeur calculée à partir de la valeur 11."
| 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 avec une hiérarchie profonde du point de vue de Splunk. Ce serait facile à gérer dans le monde du javascript qui récupère à l'aide d'un tableau, mais c'est presque un cauchemar de Splunk.
Liste des noms de préfecture
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
Je peux toujours le sortir docilement. D'autres données sont assez difficiles.
Voici une requête qui a la même forme que utilisant les données NHK
Statistiques quotidiennes(Valeur cumulée)
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 "Ici, il est créé une fois dans le champ du nom de la préfecture. Trié d'ici par ordre de Hokkaido"
| rename COMMENT as "Ceci est la recherche de base pour les autres panneaux "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
--Spécifiez uniquement les dernières données avec head 1
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]
spath
sont extraits par stats
.stats
――A ce stade, pref est à valeurs multiples, donc après mvexpand
, il est converti en données de 47 préfectures avec xyseries
. ..spath
et le numéroter pour le trier plus tard.transpose
, l'ordre vient d'Hokkaido.
Ce sera la requête de base pour le moment.De là, j'expliquerai chaque panneau du tableau de bord
La recherche de base est omise.
Nombre de personnes infectées et date de mise à jour
<panel>
<title>dernière mise à jour: $lastUpdate$</title>
<single>
<title>Nombre de personnes infectées</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 "Temps ici+Tableau des noms de préfecture"
| 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>
La valeur de Total est affichée
J'ai créé un autre champ pour afficher time sur le panneau.
Lorsque vous traitez avec l'heure d'époque, utilisez max`` min
au lieu de ʻearliest`` latest` car l'opération est stable. Je l'ai vérifié avant.
Augmentation du taux de personnes infectées
<table>
<title>Augmentation du taux de personnes infectées</title>
<search base="base1">
<query>| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Jusque-là, le nom de la préfecture et les données cumulées quotidiennes sont créés, et les requêtes NHK peuvent enfin être utilisées ici."
| 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éfectures", daily_incr as "Taux d'augmentation", daily_count as "Nombre de personnes infectées quotidiennement"
|préfecture de table*Augmentation du taux d'infections quotidiennes</query>
</search>
<option name="drilldown">none</option>
<option name="refresh.display">progressbar</option>
<format type="number" field="Taux d'augmentation">
<option name="unit">%</option>
</format>
</table>
: sueur: J'ai laissé un commentaire. Pour plus de détails, voir Article précédent. L'affichage est magnifique car le nom de champ japonais et «%» sont utilisés comme unité.
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
Cela peut être clairement affiché car les données contiennent les noms des préfectures en anglais et en japonais.
Daily Infection Rate
DailyInfectionRate
<panel>
<chart>
<title>Taux d'infection quotidien</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>
Taux d'infection quotidien affiché dans Honke
Fondamentalement, Area Chart superpose la valeur de Total Cases
avec Line Chart.
Bubble Chart
BubbleChart
<chart>
<title>Top 10 des personnes infectées Nombre de personnes infectées quotidiennement dans les préfectures * 2020/3/3 avant 11/Interpoler avec un nombre de 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 "Jusque-là, le nom de la préfecture et les données cumulées quotidiennes sont créés, et les requêtes NHK peuvent enfin être utilisées ici."
| 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 "Cela se fait depuis le jour où la première personne infectée est sortie."
| append [|makeresults
| eval _time = strptime("2020-01-16","%F")]
| makecontinuous _time span=1d
| reverse
| streamstats count(eval(isnull('Tokyo'))) as _count
| filldown
| foreach * [eval <<FIELD>> = if(_count=0,'<<FIELD>>', round('<<FIELD>>' / _count))]
| reverse
| rename COMMENT as "Le blanc est la première valeur, 2020/3/Il est rempli avec la valeur calculée à partir de la valeur 11."
| 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>
Une fois créée avec seulement certaines données, la sensation de montée soudaine a disparu. Par conséquent, nous avons créé une date à partir de «2020/01/16» où le nombre de personnes infectées a été confirmé, et avons progressivement réduit le blanc à partir de la dernière valeur (pas: transpiration :). La taille du cercle correspond au nombre de personnes infectées par jour.
Ce que j'ai essayé de faire mais arrêté en termes de mise en page Area Chart
Top 10 des préfectures en statistiques quotidiennes(Valeur cumulée)
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 "Ici, il est créé une fois dans le champ du nom de la préfecture. Trié d'ici par ordre de Hokkaido"
| transpose 0 header_field=_time column_name=pref
| sort pref
| eval pref = mvindex(split(pref,"_"),1)
| rename COMMENT as "Jusque-là, le nom de la préfecture et les données cumulées quotidiennes sont créés, et les requêtes NHK peuvent enfin être utilisées ici."
| rename pref as _pref
| foreach * [eval Check=max('<<FIELD>>')]
| sort 10 - Check
| fields - Check
| transpose 0 header_field=_pref column_name=_time
| sort _time
Ce serait bien de l'afficher en mode Pile du graphique en aires.
La structure des répertoires est la suivante
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 J'ai créé un référentiel et poussé tous les fichiers pour créer README.md.
: sueur: j'espère qu'il bouge sans aucun problème.
J'ai pu le faire pour le moment. Créer des applications et créer un dossier de recherche
dossier | Fichier |
---|---|
$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 (Fichier de tableau de bord) |
Cela devrait fonctionner lorsque vous placez. De plus, veuillez mettre japansimple.kml en premier.
En ce qui concerne JSON, j'utilise Splunk jusqu'à présent, donc c'était plutôt bien, mais je pense qu'il est plus facile de le traiter du côté Python.
Celui publié sur GitHub est entouré de japansimple.kml
.
Puisque je suis macosx, je ne travaille pas sous Windows.
Au moins la description dans le répertoire dans ʻinputs.conf` devra être modifiée.
: sueur: Que dois-je faire ici?
Recommended Posts