[PYTHON] Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.

Einführung

Erstellen Sie Diagramme, Netzwerkdiagramme und Datentabellen basierend auf den Daten aus COVID-19-Infektionsstatus des Ministeriums für Gesundheit, Arbeit und Soziales und erstellen Sie eine Webanwendung. Hat. Die erstellte App ist die unten verlinkte.

App-Link: https://chomoku.herokuapp.com/covid-19

Unten sehen Sie den Bildschirm des Netzwerkdiagramms.

Image from Gyazo

Die verwendeten Daten stammen von der Website des Ministeriums für Gesundheit, Arbeit und Soziales. Beim Scraping wird nur die Funktion pandas read_html verwendet. Sie können es auch über den unten stehenden Github herunterladen, aber Sie können es auch wie unten beschrieben über die App herunterladen.

https://github.com/mazarimono/chomoku/blob/master/src/kosei.csv

Der Grund, warum ich diese App erstellt habe, war, dass ich [Toyokeizai.net/sp/visual/tko/covid19/] gesehen habe und so etwas selbst sehen wollte. Das war der Auslöser.

Die App ist in drei Teile unterteilt, indem Seiten mit Registerkarten gewechselt werden.

Die erste Seite zeigt normale Grafiken. Die zweite Seite zeigt das Netzwerkdiagramm an. Eine Seite, auf der Sie die vom Dritten verwendete CSV-Datei als Tabelle anzeigen und die Daten herunterladen können.

Die App wurde mit dem Web Framework Dash erstellt. Die Umgebung ist wie folgt.

Python 3.7.4 dash 1.9.0 dash-core-components 1.8.0 dash-html-components 1.0.2 dash-cytoscape 0.1.1 dash-table 4.6.0 plotly 4.5.0

Anzahl der engen Kontakte und Anzahl der Patienten

Als ich mir diesmal verschiedene Neuigkeiten ansah, fragte ich mich, ob ich mich anstecken könnte, wenn ich lange in der Nähe bleiben würde. Es war das. Wenn man sich die Zahlen auf der Website des Ministeriums für Gesundheit und Soziales ansieht, gibt es Daten zur Anzahl enger Kontakte und zum Auftreten von Patienten in der Umgebung (Übrigens wird das Auftreten von Patienten in der Umgebung nicht so stark aktualisiert, sodass die Daten die Situation genau wiedergeben. Es ist unklar, ob es welche gibt).

Deshalb habe ich mich entschlossen, zuerst die Daten zu visualisieren.

Das Diagramm befindet sich unten links auf der Diagrammseite des Patientenzählers. Die x-Achse ist die Anzahl der engen Kontakte und die y-Achse ist die Anzahl der Patienten.

graph.png

Für diese Visualisierung wird übrigens Plotly Express verwendet. Dash übergibt eine Figur an die Diagrammkomponente, um das Diagramm anzuzeigen. Der Code sieht folgendermaßen aus:


import dash_core_components as dcc 
import plotly.express as px 

dcc.Graph(
                    id="ratio_scatter",
                    figure=px.scatter(
                        df_covid,
                        x="contact_num",
                        y="infection_num",
                        title="Anzahl der Kontakte (x-Achse) und Auftreten des umgebenden Patienten (y-Achse)",
                        hover_data=["Neue Nr."],
                    ),
                    className="six columns",
                )

Netzwerkdiagramm

Als nächstes wird die Nummer des Patienten anstelle des "Auftretens umgebender Patienten" in die Daten geschrieben. Es gibt "neue Nr." Und "alte Nr." In den Originaldaten, und es ist ein heikler Ort, auf den man verweisen kann, aber wir werden ein Netzwerkdiagramm erstellen, vorausgesetzt, es zeigt auf "neue Nr.".

Die Dash-Cytoscape, die dieses Mal zum Erstellen des Netzwerkdiagramms verwendet wird, ist eine Komponente, die Cytoscape verwendet. Knoten werden unter Verwendung der neuen Nummer und des neuen Wohnorts erstellt, und die Kanten werden mit den Ausbruchsnummern der umgebenden Patienten verbunden. Dann wird Wählen als Art der Anordnung der Knoten ausgewählt. Dann werden die verbundenen Elemente auf eine schöne Weise nebeneinander angezeigt, wie unten gezeigt.

Image from Gyazo

Dieses Netzwerkdiagramm ist falsch, wenn die Ausbruchsdaten für umgebende Patienten mit der "alten Nummer" erstellt wurden. Wenn es mit "New No." gemacht wurde, schien es keinen Fehler zu geben, wenn man es mit den daneben angehängten Daten vergleicht.

Auf diese Weise schien es einen erheblichen Zusammenhang zwischen den Patienten zu geben. Übrigens ist die Erstellung dieses Teils wie die Erstellung von Knotendaten und Kantendaten mithilfe von CSV-Daten und deren Visualisierung mit Cytoscape. Der Code sieht folgendermaßen aus:


import dash_cytoscape as cyto
import pandas as pd 
import ast 

#CSV-Datei lesen
df_covid = pd.read_csv("./src/kosei.csv", index_col=0, parse_dates=["date"])

#Erstellen von Daten zur Weitergabe an Cytoscape-Elemente
covid_el = []
for i in range(len(df_covid)):
    covid_el.append(
        {
           #Knotendaten erstellen
            "data": {
                "id": f"No.{df_covid.iloc[i, 0]}",
                "label": f"No.{df_covid.iloc[i, 0]} / {df_covid.iloc[i, 5]}",
            }
        }
    )
    #Kantendaten erstellen
    contact_list = []
    for i2 in ast.literal_eval(df_covid.iloc[i, -2]):
        if i2.startswith("No."):
            covid_el.append(
                {"data": {"source": f"No.{df_covid.iloc[i, 0]}", "target": f"{i2}"}}
            )

network = html.Div(
    [
        html.Div(
            [
                html.H4("Netzwerkdiagramm der umgebenden Patientenausbrüche"),
                cyto.Cytoscape(
                    id="covid_cyto",
                    layout={"name": "cose"}, #Layout Cose Auswahl
                    elements=covid_el,   #Daten, die im Netzwerkdiagramm visualisiert werden sollen
                    style={
                        "width": "100%",
                        "height": "80vh",
                        "backgroundColor": "white",
                        "borderRadius": "10px",
                    },
                ),
            ],
            className="eight columns",
        ),])

CSV-Datei in Tabelle anzeigen

Es gibt verschiedene Möglichkeiten, eine Tabelle in Dash zu erstellen. Hier erstellen wir jedoch eine Tabelle mithilfe der Dash-Tabelle. Das Schöne an dieser Tabelle ist, dass sie auf verschiedene Arten bearbeitet werden kann und die Daten in der bearbeiteten Tabelle zur Visualisierung wiederverwendet und vom Benutzer als CSV-Datei heruntergeladen werden können. Die Daten sind übrigens CC, Sie können sie also gerne verwenden.

Wenn Sie beispielsweise andere Daten als "Alte Nr." Möchten, klicken Sie wie unten gezeigt auf den Papierkorb in der Kopfzeile der Tabelle und klicken Sie dann auf die Schaltfläche "Exportieren", um die CSV-Datei herunterzuladen.

Image from Gyazo

Um die Funktion zum Herunterladen der CSV-Datei in die Tabelle hinzuzufügen, übergeben Sie einfach "CSV" an das export_format der DataTable-Instanz des Dash-Table-Pakets. Der Code der hier erstellten Tabelle lautet wie folgt.


import dash_table

table = html.Div(
    [
        dash_table.DataTable(
            id="covid_table",
            columns=[{"name": i, "id": i, "deletable": True} for i in df_covid.columns],
            data=df_covid.to_dict("records"),
            fixed_rows={"headers": True, "data": 0},
            editable=True,
            filter_action="native",
            row_deletable=True,
            sort_action="native",
            export_format="csv",
            fill_width=False,
            virtualization=True,
            style_cell={"textAlign": "left"},
        ),
        html.Img(src="assets/cc.png "),
    ]
)

Zusammenfassung

Wie oben erwähnt, habe ich den Teil, an dem ich interessiert war, aus den Daten des Ministeriums für Gesundheit, Arbeit und Soziales extrahiert und als Anwendung visualisiert.

Letztes Jahr, als Sie an der Ethereum-Veranstaltung Devcon teilnahmen, hielt Audrey Tan aus Taiwan einen Vortrag. Zu dieser Zeit gab es die Frage: "In Japan wurde ein alter Mann, der nicht viel versteht, der für IT zuständige Minister, aber was denken Sie?" Es gibt so etwas wie derzeit realisiert der Bedenken der Menschen.

Aber gestern habe ich gerade angekündigt Tokio ist eine großartige Website, und die Datenmenge, die verwendet werden kann, nimmt zu, und nützliche Daten werden erneut erstellt. Es wäre schön, einen Zyklus zu haben, den Sie sein möchten.

Der Anwendungscode ist übrigens auf Github. Ich werde die Anwendung nach und nach aktualisieren.

https://github.com/mazarimono/chomoku/blob/master/app.py#L837

Nachtrag

Vielen Dank für viele LGTM. Eine einfache praktische Anwendung von Dash, dem Framework, das Anwendungen unterstützt, erfolgt mit "Hannari Python". Wenn Sie interessiert sind, tun Sie bitte!

https://hannari-python.connpass.com/event/170431/

Recommended Posts

Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Das Ergebnis war besser, als die Trainingsdaten des Mini-Batches als Hybrid aus fest und zufällig mit einem neuronalen Netzwerk erstellt wurden.
Rufen Sie die URL des von der Jira-Python-Bibliothek erstellten JIRA-Tickets ab
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Link zu den Datenpunkten des von jupyterlab & matplotlib erstellten Diagramms
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Trainieren Sie MNIST-Daten mit PyTorch mithilfe eines neuronalen Netzwerks
Machen Sie LCD-Screenshots mit Python-LEGO Mindstorms
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Sagen Sie die Anzahl der mit COVID-19 infizierten Personen mit Prophet voraus
Visualisieren Sie das charakteristische Vokabular eines Dokuments mit D3.js.
Berechnen Sie das Produkt von Matrizen mit einem Zeichenausdruck?
Vorhersage der Zielzeit eines vollständigen Marathons mit maschinellem Lernen - Visual: Visualisierung von Daten mit Python-
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
Mit der Docker-Version der Nginx-Einheit war es ein wenig schwierig, eine Flasche zu machen
Mit Python erstellte Beispieldaten
Erstellen Sie sofort ein Diagramm mit 2D-Daten mit der matplotlib von Python
Messen Sie die Wichtigkeit von Features mit einem zufälligen Gesamtstrukturwerkzeug
[Einführung in das SIR-Modell] Prognostizieren Sie die Endzeit jedes Landes mit der COVID-19-Datenanpassung ♬
Holen Sie sich die ID einer GPU mit geringer Speichernutzung
Holen Sie sich UNIXTIME zu Beginn des heutigen Tages mit einem Befehl
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Eine Sammlung von Methoden, die beim Aggregieren von Daten mit Pandas verwendet werden
Erstellen Sie ein Korrelationsdiagramm aus dem Konversationsverlauf von Twitter
[Kausale Suche / kausale Folgerung] Implementieren Sie ein basianisches Netzwerk mit Titanic-Daten
Analysieren Sie das Themenmodell, mit GensimPy3 Romanautor zu werden
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Sie können es mit Kopie versuchen! Lassen Sie uns ein cooles Netzwerkdiagramm mit networkx von Python zeichnen
Verwalten Sie die Überlappung, wenn Sie ein Streudiagramm mit einer großen Datenmenge zeichnen (Matplotlib, Pandas, Datashader).
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Speichern Sie das Ergebnis des Crawls mit Scrapy im Google Data Store
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
[Statistik] Erfassen Sie das Bild der zentralen Polbegrenzungstheorie mit einem Diagramm
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
[Maschinelles Lernen] Überprüfen Sie die Leistung des Klassifikators anhand handgeschriebener Zeichendaten
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Ist die neue Corona wirklich eine Bedrohung? Validiert mit Stan (war)
Zählen Sie mit NetworkX den maximal verketteten Teil eines zufälligen Diagramms
Fehler mit pip: Beim Bestätigen des SSL-Zertifikats ist ein Problem aufgetreten
Die Idee, die Konfigurationsdatei mit einer Python-Datei anstelle von yaml zu füttern
Ein Befehl zum einfachen Überprüfen der Netzwerkgeschwindigkeit auf der Konsole
Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
[NNabla] So entfernen Sie die mittlere Ebene eines vorgefertigten Netzwerks
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter des Faltungs-Neuronalen Netzes
Implementierung eines zweischichtigen neuronalen Netzwerks 2
[TF2.0-Anwendung] Ein Fall, in dem die allgemeine Datenerweiterung mit der starken Datensatzfunktion des TF-Beispiels parallelisiert und mit hoher Geschwindigkeit realisiert wurde.
Schreiben Sie ein Restnetzwerk mit TFLearn
Installieren Sie die Datendatei mit setup.py
Berühren Sie das Objekt des neuronalen Netzes