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.
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.
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.
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 |
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.
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)
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)
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()
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.
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.
Zeit für gleitende Durchschnittsstatistiken WEB-Statistiken Berechnungsmethode für den WEB-Blog zum gleitenden Durchschnitt der Statistik
Einfache Visualisierung und Analyse offener Daten einer neuen Coronavirus-Infektion (COVID-19) mit Google Colaboratory Google Clobratory im obigen Artikel
Recommended Posts