[PYTHON] Zeigen Sie Epidemiedaten mithilfe des Grafana-Dashboards dynamisch an

Erfahren Sie, wie Alibaba Cloud das Grafana-Dashboard verwendet hat, um Informationen zu COVID-19-Ausbrüchen dynamisch anzuzeigen.

Projektvorbereitung

Ich möchte das Dashboard anpassen, das den Trendstatus anzeigt, um den Zweck zu verdeutlichen. Da ich mich derzeit in Shanghai befinde, möchte ich die Anzahl der bestätigten Fälle, Verdachtsfälle, Geneser und Todesfälle im ganzen Land anzeigen und gleichzeitig die Fallkurve anzeigen, um den Entwicklungstrend der Epidemie sowie jede Provinz und jeden Bezirk in Shanghai zu beobachten. Ich möchte den Status von anzeigen.

Grafana ist nur ein Tool zum Anzeigen von Daten, daher müssen Sie zuerst eine Datenquelle abrufen. Derzeit können die verfügbaren Pestdatenquellen nicht direkt in Grafana integriert werden. Daher müssen Sie Folgendes tun:

--Installieren Sie das ** SimpleJson-Plug-In **, mit dem JSON-formatierte Daten in eine Datenquelle für Grafana konvertiert werden können.

Datenquellenentwicklung

Hier entwickeln wir eine Datenquelle mit Python Bottle. Es gibt auch die Option Flask, die dieselbe Funktion hat. Ich habe mich für Bottle entschieden, weil ich damit meine vorherige Grafana-Datenquelle entwickelt habe. Nicht nur die Debug-Einstellungen, sondern auch die Docker-Datei zum Erstellen des Docker-Images und die Datei "deploy.yaml" zum Bereitstellen von Kubernetes sind vorbereitet und einsatzbereit. Das Entwickeln einer Grafana-Datenquelle mit Python ist sehr einfach. Stellen Sie einfach sicher, dass Ihre Daten den Formatierungsanforderungen von "SimpleJson" entsprechen. Oz Nahum Tirams Blog über die Verwendung von Python zur Entwicklung von Datenquellen für Grafana Artikel "[Visualisiere fast alles mit Grafana und Python](http://oz123.github.io/writings/2019-06-16-Visualize-almost-anything-with-Grafana-and-Python/index.html?spm=" Bitte lesen Sie a2c65.11461447.0.0.2e7418faOcjQf4) ".

Zum Anpassen Ihrer Datenquelle stehen zwei Datentypen zur Verfügung:

Daten vom Typ "Zeitreihen"

Für eine Echtzeitansicht der epidemischen Trends in China, insbesondere in Shanghai, können Sie bestätigte Fälle, Verdachtsfälle, Sammlungen, Todesfälle und Datenänderungen im Vergleich zu früheren Daten anzeigen. Sie können auch eine Kurve zeichnen, um bestätigte und vermutete Fälle sowie die Anzahl der Sammlungen und Todesfälle zu vergleichen.

Für bestätigte Fälle geben Sie einfach die Daten zurück, indem Sie die Anzahl der bundesweit bestätigten Fälle "gntotal" mit dem aktuellen Zeitstempel kombinieren. Andere Metriken können auf die gleiche Weise verarbeitet werden.

@app.post('/query')
def query():
    print(request.json)
    body = []
    all_data = getDataSync()
    time_stamp = int(round(time.time() * 1000))
    for target in request.json['targets']:
    name = target['target']
    if name == 'gntotal':
        body.append({'target': 'gntotal', 'datapoints': [[all_data['gntotal'], time_stamp]]})
    body = dumps(body)
    return HTTPResponse(body=body, headers={'Content-Type': 'application/json'})

Daten vom Typ "Tabelle"

Sie können eine Tabelle verwenden, in der bestätigte, vermutete, wiederhergestellte und tödliche Fälle in jeder Provinz in China abgebildet sind, und eine andere Tabelle, in der die gleichen Daten für jeden Distrikt in Shanghai angezeigt werden.

Sie können Namen, bestätigte Fälle, Verdachtsfälle, Wiederhersteller und Tote aus den Daten extrahieren und sie der Zeile "Zeilen" "Anhängen" hinzufügen.

@app.post('/query')
def query():
    print(request.json)
    body = []
    all_data = getDataSync()
    sh_data = getShDataSync()
    if request.json['targets'][0]['type'] == 'table':
        rows = []
        for data in all_data['list']:
            row = [data['name'], data['value'], data['susNum'], data['cureNum'], data['deathNum']]
            rows.append(row)
        sh_rows = []
        for data in sh_data['city']:
            row = [data['name'], data['conNum'], data['susNum'], data['cureNum'], data['deathNum']]
            sh_rows.append(row)
        bodies = {'all': [{
            "columns": [
                {"text": "Sparen", "type": "name"},
                {"text": "确 诊", " type": "conNum"},
                {"text": "Pseudo-", " type": "susNum"},
                {"text": "Heilen", "type": "cureNum"},
                {"text": "Tod", "type": "deathNum"}
            ],
            "rows": rows,
            "type": "table"
        }],
            'sh': [{
                "columns": [
                    {"text": "Sparen", "type": "name"},
                    {"text": "确 诊", " type": "value"},
                    {"text": "Pseudo-", " type": "susNum"},
                    {"text": "Heilen", "type": "cureNum"},
                    {"text": "Tod", "type": "deathNum"}
                ],
                "rows": sh_rows,
                "type": "table"
            }]}

        series = request.json['targets'][0]['target']
        body = dumps(bodies[series])
  return HTTPResponse(body=body, headers={'Content-Type': 'application/json'})

Auswahl des Paneltyps

In der Regel werden vier Felder zur Anzeige von Daten verwendet.

--Tabelle wird verwendet, um die Tabelle anzuzeigen.

Datenquelleneinstellungen

Nun richten wir die Datenquelle ein.

Fallnummerntafel

Da es hier nur einen Wert gibt, wählen Sie Zuerst.

image.png

Fallnummerndiagramm

Diese Grafiken vergleichen die Anzahl der bestätigten und vermuteten Fälle, die Anzahl der Sammlungen und die Anzahl der Todesfälle.

image.png

Datentabelle

image.png

Ergebnis

Das Gesamtfinish ist in Ordnung und wird als trendiges Dashboard des Unternehmens verwendet. Hier verwenden wir den Xiaomi-Fernseher mit einem relativ kleinen Bildschirm. Daher haben wir die Schriftarten und das Anzeigefeld erweitert, um die Demo zu verbessern.

image.png

Gebäude

Nachdem Sie Ihren Code in ein Docker-Image gepackt haben, können Sie Ihren Code in einer beliebigen Umgebung oder in einem Kubernetes-Cluster ausführen. Das Bild wurde in Docker Hub hochgeladen und kann von dort zur sofortigen Verwendung abgerufen werden.

# Dockerfile
FROM python:3.7.3-alpine3.9

LABEL maintainer="[email protected]"

COPY . /app

RUN echo "https://mirrors.aliyun.com/alpine/v3.9/main/" > /etc/apk/repositories \
    && apk update \
    && apk add --no-cache gcc g++ python3-dev python-dev linux-headers libffi-dev openssl-dev make \
    && pip3 install -r /app/requestments.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

WORKDIR /app

ENTRYPOINT ["uwsgi","--ini","uwsgi.ini"]

Laufen lassen

docker pull guoxudongdocker/feiyan-datasource
docker run -d --name datasource -p 8088:3000 guoxudongdocker/feiyan-datasource

Wählen Sie die SimpleJson-Datenquelle aus, klicken Sie auf Hinzufügen und geben Sie die Adresse der Datenquelle ein.

image.png

kubectl apply -f deploy.yaml

Überblick

Ab Mitte Februar, als ich dies schrieb, steigt die Zahl der bestätigten Fälle in China immer noch rapide an, aber glücklicherweise beginnt die Wachstumsrate der Verdachtsfälle zu sinken. Es ist ersichtlich, dass die Rate der bestätigten Fälle stetig zunimmt und auch die Anzahl der Sammlungen zunimmt. Im Vergleich zu anderen Regionen hat die Zahl der Fälle in Shanghai nicht wesentlich zugenommen, obwohl viele Menschen zur Arbeit zurückgekehrt sind. Als Teil davon beginnen strenge Razzien in Wohngebieten in Kraft zu treten. Derzeit gibt es in Shanghai nur einen Todesfall, da Chinas erste Genesung verzeichnet wurde. Im Allgemeinen besteht kein Zweifel daran, dass wir die Epidemie überwinden und diese schwierige Zeit überwinden werden, solange wir auf Prävention achten und zu Hause bleiben.

Die JSON-Datei zum Importieren von Dashboards und die YMAL-Datei zum Bereitstellen von Kubernetes befinden sich auf GitHub. Die Adresse des Projekts finden Sie hier. https://github.com/sunny0826/wuhan2020-grafana

Während Alibaba Cloud weiterhin gegen die weltweit vorkommenden Coronaviren kämpft, möchte sie ihren Beitrag leisten und alles tun, um anderen im Kampf gegen Coronaviren zu helfen. Ich bin. Informationen zur Unterstützung Ihrer Geschäftskontinuität finden Sie unter https://www.alibabacloud.com/campaign/fight-coronavirus-covid-19. Bitte erkundigen Sie sich bei -covid-19).

Recommended Posts

Zeigen Sie Epidemiedaten mithilfe des Grafana-Dashboards dynamisch an
Lassen Sie uns die Karte mit der Grundkarte anzeigen
Führen Sie Raw SQL mit Redash unter Verwendung der Python-Datenquelle aus und zeigen Sie das Ergebnis an
Überprüfen Sie den Status der Daten mit pandas_profiling
Scraping der Gewinndaten von Zahlen mit Docker
Zeigen Sie das Bild nach der Datenerweiterung mit Pytorch an
Zeigen Sie das 邊 an
Big-Data-Analyse mit dem Datenflusskontroll-Framework Luigi
Ich habe versucht, EKG-Daten mit der K-Shape-Methode zu gruppieren
Schreiben Sie Daten mit dem Python-Anforderungsmodul in KINTONE
Ich habe versucht, die API von Sakenowa Data Project zu verwenden