[GO] [Python] Zeigen Sie Daten zu neuen Coronavirus-Infektionen im Durchschnitt von 7 Tagen an

Einführung

Neulich habe ich auf Twitter einige Tweets gesehen, die besagten, dass ich die Anzahl der mit dem neuen Koronavirus infizierten Personen im mobilen Durchschnitt 7 Tage lang beobachtet habe. Ich wollte alles von offenen Daten bis zur Visualisierung selbst machen, also habe ich es versucht. Die diesmal verwendeten Daten sind die von der Tokyo Metropolitan Government veröffentlichten Daten.

Graph

Ich denke, es ist schnell, zuerst die Grafik zu sehen. Das Balkendiagramm auf der blauen Achse gibt die Anzahl der an diesem Tag aufgedeckten positiven Patienten an, und das rosa Liniendiagramm gibt die Anzahl der positiven Patienten an, die 7 Tage lang einen gleitenden Durchschnitt genommen haben. Natürlich müssen Sie vorsichtig sein, und es kann nicht gesagt werden, dass es Ihnen gelungen ist, Corona einzudämmen, wenn Sie dies allein betrachten, aber das Diagramm der Faltlinie scheint nach rechts abzunehmen.

image.png

gleitender Durchschnitt

Wird in der Statistik verwendet

In Zeitreihendaten wird der Durchschnittswert für jeden festen Abschnitt berechnet, während der Abschnitt verschoben wird.

Referenz: https://bellcurve.jp/statistics/blog/15528.html

Mit anderen Worten, wenn die folgenden Daten vorliegen, berechnet der gleitende Durchschnitt der drei Terme den Durchschnitt eines Werts vor und nach jedem

1 2 3 4 5 6 7

Es wird wie folgt sein.

1 2 3 4 5 6 7
X 2 3 4 5 6 X

Dieses Mal haben wir einen gleitenden 7-Tage-Durchschnitt von ± 3 Tagen genommen, also haben wir den Durchschnitt von 3 Tagen vorher und nachher genommen.

Ermitteln eines gleitenden Durchschnitts mit numpy

Ich habe auf die Website von [hier] verwiesen (https://algorithm.joho.info/programming/python/numpy-convolve-moving-average/).

Verwenden Sie "numpy.convolve".

numpy.convolve(ndaaray, karnel, mode)
Streit Inhalt
ndaaray Numpy Array von Zeitreihendaten
karnel Kernelfunktion(Bestimmt durch wie viele Punkte der gleitende Durchschnitt berechnet wird)
mode same:Ergebnisausgabe mit der gleichen Anzahl von Elementen wie Zeitreihendaten, valid:Ergebnisausgabe mit weniger Elementen als Zeitreihendaten

Datenvisualisierung

Ich habe das gesamte Google Colab verwendet, das in Karaage-sans Artikel veröffentlicht wurde. Vielen Dank. Die Geschichte geht schief, aber Karaage-san bezieht sich oft auf Artikel, selbst für roboterbezogene Menschen, die sich ebenfalls in seinem eigenen Forschungsbereich befinden. Ich bin immer dankbar für Ihre Hilfe. (Plötzlich ein Gläubiger)

Nur die geänderten Teile von Herrn Karaage sind unten extrahiert und beschrieben. Zuerst habe ich Seaborn mit einem ganz persönlichen Geschmack importiert.

[Ändern] Datumsdaten lesen

Ich wollte hier die Beschriftung der x-Achse bereinigen, also habe ich sie zu einem Datum / Uhrzeit-Typ gemacht.

date_data = np.array([])
for i in range(len(data['inspection_persons']['labels'])):
    date_data = np.append(date_data, pd.to_datetime(data['inspection_persons']['labels'][i][0:10]))
print(date_data)

[Addition] Berechnung des gleitenden 7-Tage-Durchschnitts

Der obige gleitende Durchschnitt wird berechnet, indem die ursprüngliche positive Patientensequenz in eine Numpy-Sequenz umgewandelt wird. Außerdem sind ± 3 Tage mit "np.nan" gefüllt.

#7-tägiger gleitender Durchschnitt
n=7
patients_data_np_array = np.array(patients_data)
patients_data_move_ave = np.convolve(patients_data_np_array, np.ones(n)/float(n), 'valid')

nan_array = np.array([np.nan,np.nan,np.nan])
patients_data_move_ave = np.insert(patients_data_move_ave,0,nan_array)
patients_data_move_ave = np.insert(patients_data_move_ave,len(patients_data_move_ave),nan_array)

[Ändern] Datenvisualisierungsteil

Der obige gleitende 7-Tage-Durchschnitt ist im Liniendiagramm enthalten.

plt.figure(figsize=(9,6))
plt.bar(date_data, patients_data,label='number of patients')
plt.plot(date_data, patients_data_move_ave,color='salmon', linewidth = 3.0,label='moving average of number of patients')
plt.legend()

Alle Programme

Das Folgende ist dieses Programm. Da es sich bei der Umgebung um Google Colabratory handelt, wird die erste Bash mit einem magischen Befehl (!) Ausgeführt. Sie können es auch dann verwenden, wenn Sie nicht Google Colabratory sind, weil Sie nur normal arbeiten.

!wget --no-check-certificate --output-document=covid19_tokyo.json 'https://raw.githubusercontent.com/tokyo-metropolitan-gov/covid19/development/data/data.json'

Unten ist das Python-Programm.

#Laden von Bibliotheken und Daten
import pandas as pd
import numpy as np
data = pd.read_json('covid19_tokyo.json')
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

#Datumsdaten
date_data = np.array([])
for i in range(len(data['inspection_persons']['labels'])):
    date_data = np.append(date_data, pd.to_datetime(data['inspection_persons']['labels'][i][0:10]))

#Positive Patientendaten
patients_data = []
for i in range(len(data['inspection_persons']['labels'])):
    patients_data.append(data['patients_summary']['data'][i]['Zwischensumme'])

#Berechnung des gleitenden 7-Tage-Durchschnitts
n=7
patients_data_np_array = np.array(patients_data)
patients_data_move_ave = np.convolve(patients_data_np_array, np.ones(n)/float(n), 'valid')
#Mit nan füllen
nan_array = np.array([np.nan,np.nan,np.nan])
patients_data_move_ave = np.insert(patients_data_move_ave,0,nan_array)
patients_data_move_ave = np.insert(patients_data_move_ave,len(patients_data_move_ave),nan_array)

#Visualisierung
plt.figure(figsize=(9,6))
plt.bar(date_data, patients_data,label='number of patients')
plt.plot(date_data, patients_data_move_ave,color='salmon', linewidth = 3.0,label='moving average of number of patients')
plt.legend()

Das Ergebnis ist die folgende Grafik.

image.png

abschließend

Ich habe das Gefühl, dass ich dank der Tokyo Metropolitan Government, die die Daten veröffentlicht, und allen, die die Datenerhebungsmethode und die mobile Mittelungsmethode veröffentlichen, sofort visualisieren konnte, was ich auf Twitter gesehen habe. Ich war in der Lage. Lass uns weitermachen! Ich möchte verschiedene Kenntnisse erwerben, damit ich es tun kann, sobald ich denke.

Die Seite, die ich als Referenz verwendet habe

gleitender Durchschnitt

Zeit für gleitende Durchschnittsstatistiken WEB-Statistiken Berechnungsmethode für den WEB-Blog zum gleitenden Durchschnitt der Statistik

Visualisierung

Einfache Visualisierung und Analyse offener Daten einer neuen Coronavirus-Infektion (COVID-19) mit Google Colaboratory Google Clobratory im obigen Artikel

Recommended Posts

[Python] Zeigen Sie Daten zu neuen Coronavirus-Infektionen im Durchschnitt von 7 Tagen an
Folium: Visualisieren Sie Daten auf einer Karte mit Python
Führen Sie Python auf Apache aus, um InfluxDB-Daten anzuzeigen
So erstellen Sie eine neue virtuelle Python-Umgebung unter Ubuntu
[Schatzdaten] [Python] Führen Sie mit dem TD-Client eine Abfrage zu Schatzdaten aus.
Erstellen Sie eine Python-Datenanalyseumgebung auf einem Mac (El Capitan).
[Python] Hinweise zur Datenanalyse
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
Erstellen einer Python-Umgebung auf einem Mac
Erstellen einer Python-Umgebung unter Ubuntu
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Erstellen Sie eine Python-Umgebung in Centos
Erstellen Sie eine Python3-Umgebung unter CentOS7