[PYTHON] Afficher dynamiquement les données épidémiques à l'aide du tableau de bord Grafana

Découvrez comment Alibaba Cloud a utilisé le tableau de bord Grafana pour afficher de manière dynamique des informations sur les épidémies de COVID-19.

Préparation du projet

Je souhaite personnaliser le tableau de bord qui affiche l'état de la tendance pour clarifier l'objectif. Étant donné que je suis actuellement à Shanghai, j'aimerais afficher le nombre de cas confirmés, de cas suspects, de guérisseurs et de décès dans tout le pays, et en même temps, afficher la courbe des cas pour observer la tendance de développement de l'épidémie, et chaque province et district de Shanghai. Je souhaite afficher l'état de.

Grafana n'est qu'un outil pour afficher des données, vous devez donc d'abord obtenir une source de données. Actuellement, les sources de données disponibles sur la peste ne peuvent pas être intégrées directement dans Grafana. Par conséquent, vous devez effectuer les opérations suivantes:

--Préparez le ** programme Grafana ** sur votre ordinateur portable ou votre cluster Kubernetes. Nous vous recommandons d'utiliser le conteneur Docker pour exécuter Grafana.

--Installez le ** plug-in SimpleJson ** qui peut convertir des données au format JSON en une source de données pour Grafana.

Développement de sources de données

Ici, nous développons une source de données utilisant Python Bottle. Une autre option est Flask, qui a la même fonctionnalité. J'ai décidé d'utiliser Bottle parce que je l'ai utilisé pour développer ma précédente source de données Grafana. Non seulement les paramètres de débogage, mais aussi le Dockerfile pour créer l'image Docker et le fichier deploy.yaml pour le déploiement de Kubernetes sont préparés et prêts à être utilisés. Développer une source de données Grafana à l'aide de Python est très simple. Assurez-vous simplement que vos données répondent aux exigences de formatage de SimpleJson. Blog de Oz Nahum Tiram sur l'utilisation de Python pour développer des sources de données pour Grafana Article "[Visualisez presque tout avec Grafana et Python](http://oz123.github.io/writings/2019-06-16-Visualize-almost-anything-with-Grafana-and-Python/index.html?spm=" Veuillez lire a2c65.11461447.0.0.2e7418faOcjQf4) ".

Il existe deux types de données disponibles pour personnaliser votre source de données:

Données de type série chronologique

Pour une vue en temps réel des tendances épidémiques en Chine, en particulier à Shanghai, vous pouvez afficher les cas confirmés, les cas suspects, les collectes, les décès et les modifications des données par rapport aux données précédentes. Vous pouvez également dessiner une courbe pour comparer les cas confirmés et suspects, ainsi que le nombre de collectes et de décès.

Pour les cas confirmés, renvoyez simplement les données en combinant le nombre de cas confirmés à l'échelle nationale «gntotal» avec l'horodatage actuel. D'autres métriques peuvent être traitées de la même manière.

@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'})

Données de type Table

Vous pouvez utiliser un tableau qui répertorie les cas confirmés, suspects, guéris et mortels dans chaque province de Chine, et un autre tableau qui présente les mêmes données pour chaque district de Shanghai.

Vous pouvez extraire les noms, les cas confirmés, les cas suspects, les récupérateurs et les morts des données et les ajouter à la ligne rows.

@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": "Économie", "type": "name"},
                {"text": "确 诊", " type": "conNum"},
                {"text": "pseudo", " type": "susNum"},
                {"text": "Guérir", "type": "cureNum"},
                {"text": "mort", "type": "deathNum"}
            ],
            "rows": rows,
            "type": "table"
        }],
            'sh': [{
                "columns": [
                    {"text": "Économie", "type": "name"},
                    {"text": "确 诊", " type": "value"},
                    {"text": "pseudo", " type": "susNum"},
                    {"text": "Guérir", "type": "cureNum"},
                    {"text": "mort", "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'})

Sélection du type de panneau

Quatre panneaux sont généralement utilisés pour afficher les données.

--Table est utilisé pour afficher le tableau.

--Le texte est utilisé pour le titre du texte.

Paramètres de la source de données

Maintenant, configurons la source de données.

Panneau des numéros de cas

Puisqu'il n'y a qu'une seule valeur ici, sélectionnez Premier.

image.png

Graphique des numéros de cas

Ces graphiques comparent le nombre de cas confirmés et suspects, le nombre de collectes et le nombre de décès.

image.png

Tableau de données

image.png

résultat

La finition générale est bonne et est utilisée comme tableau de bord tendance de l'entreprise. Ici, nous utilisons le téléviseur Xiaomi, qui a un écran relativement petit, nous avons donc élargi les polices et le panneau d'affichage pour améliorer la démo.

image.png

bâtiment

Après avoir empaqueté votre code dans une image Docker, vous pouvez exécuter votre code dans n'importe quel environnement ou dans un cluster Kubernetes. L'image a été téléchargée sur Docker Hub et peut être extraite de là pour une utilisation immédiate.

# 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"]

L'exécuter

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

Sélectionnez la source de données SimpleJson, cliquez sur Ajouter et entrez l'adresse de la source de données.

image.png

kubectl apply -f deploy.yaml

Aperçu

À la mi-février, lorsque j'ai écrit ceci, le nombre de cas confirmés en Chine continue d'augmenter rapidement, mais heureusement, le taux de croissance des cas suspects commence à baisser. On peut constater que le taux d'augmentation du nombre de cas confirmés augmente régulièrement et que le nombre de collectes augmente également. Par rapport à d'autres régions, le nombre de cas à Shanghai n'a pas augmenté de manière significative, même si de nombreuses personnes ont repris le travail. Dans ce cadre, des mesures de répression strictes contre les zones résidentielles commencent à prendre effet. Actuellement, il n'y a qu'un seul décès à Shanghai, car il a enregistré la première reprise de la Chine. En général, tant que nous prêtons attention à la prévention et restons à la maison, il ne fait aucun doute que nous surmonterons l'épidémie et surmonterons cette période difficile.

Le fichier JSON pour l'importation de tableaux de bord et le fichier YMAL pour le déploiement de Kubernetes se trouvent sur GitHub. L'adresse du projet est ici. https://github.com/sunny0826/wuhan2020-grafana

Tout en continuant à lutter contre les coronavirus qui se produisent dans le monde, Alibaba Cloud veut faire sa part et faire tout ce qui est en son pouvoir pour aider les autres dans la lutte contre les coronavirus. Je suis. Pour plus d'informations sur la prise en charge de la continuité de vos activités, consultez https://www.alibabacloud.com/campaign/fight-coronavirus-covid-19 Veuillez vérifier avec -covid-19).

Recommended Posts

Afficher dynamiquement les données épidémiques à l'aide du tableau de bord Grafana
Affichons la carte en utilisant Basemap
Exécuter du SQL brut avec redash à l'aide de la source de données Python et afficher le résultat
Vérifiez l'état des données à l'aide de pandas_profiling
Gratter les données gagnantes de Numbers à l'aide de Docker
Afficher l'image après l'augmentation des données avec Pytorch
Afficher le 邊
Analyse de Big Data à l'aide du framework de contrôle de flux de données Luigi
J'ai essayé de regrouper les données ECG en utilisant la méthode K-Shape
Écrire des données dans KINTONE à l'aide du module de requêtes Python
J'ai essayé d'utiliser l'API de Sakenowa Data Project