L'autre jour, j'ai vu des tweets sur Twitter disant que je surveillais le nombre de personnes infectées par le nouveau virus corona sur une moyenne mobile pendant 7 jours. Je voulais tout faire, des données ouvertes à la visualisation par moi-même, alors j'ai essayé. Les données utilisées cette fois sont les données publiées par le gouvernement métropolitain de Tokyo.
Je pense qu'il est rapide de voir le graphique en premier. Le graphique à barres sur l'axe bleu est le nombre de patients positifs révélés ce jour-là, et le graphique linéaire rose est le nombre de patients positifs qui ont pris une moyenne mobile pendant 7 jours. Bien sûr, vous devez être prudent, et on ne peut pas dire que vous avez réussi à contenir Corona en regardant cela seul, mais le graphique de la ligne de pliage semble décliner vers la droite.
Utilisé dans les statistiques
Dans les données de séries chronologiques, la valeur moyenne de chaque section fixe est calculée en décalant la section.
Référence: https://bellcurve.jp/statistics/blog/15528.html
En d'autres termes, lorsqu'il y a les données suivantes, la moyenne mobile des trois termes calcule la moyenne d'une valeur avant et après chacune, donc
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|
Ce sera comme suit.
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
X | 2 | 3 | 4 | 5 | 6 | X |
Cette fois, nous avons pris une moyenne mobile sur 7 jours de ± 3 jours, donc nous avons pris la moyenne de 3 jours avant et après.
J'ai fait référence au site de ici.
Utilisez numpy.convolve
.
numpy.convolve(ndaaray, karnel, mode)
argument | Contenu |
---|---|
ndaaray | Tableau Numpy de données de séries chronologiques |
karnel | Fonction noyau(Déterminé par combien de points la moyenne mobile est calculée) |
mode | same:Sortie de résultat avec le même nombre d'éléments que les données de série chronologique, valid:Sortie de résultat avec moins d'éléments que les données de séries chronologiques |
J'ai utilisé l'intégralité de Google Colab publié dans [Article] de Karaage-san (https://qiita.com/karaage0703/items/0e24f332dcda7d7730b5). Merci beaucoup. L'histoire tourne mal, mais Karaage-san fait souvent référence à des articles même pour des personnes liées aux robots qui sont également dans son propre domaine de recherche. Je suis toujours reconnaissant de votre aide. (Soudain un croyant)
Seules les parties modifiées de celles de M. Karaage sont extraites et décrites ci-dessous. Premièrement, j'ai importé Seaborn avec une préférence tout à fait personnelle.
Je voulais nettoyer l'étiquette de l'axe des x ici, alors j'en ai fait un type datetime.
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)
La moyenne mobile ci-dessus est calculée en convertissant la séquence initiale positive du patient en une séquence numpy. De plus, ± 3 jours sont remplis avec «np.nan».
#Moyenne mobile sur 7 jours
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)
La moyenne mobile sur 7 jours ci-dessus est incluse dans le graphique linéaire.
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()
Voici ce programme. Puisque l'environnement est Google Colabratory, le premier bash est exécuté avec une commande magique (!). Vous n'êtes pas obligé d'être un Google Colabratory parce que vous allez simplement normalement.
!wget --no-check-certificate --output-document=covid19_tokyo.json 'https://raw.githubusercontent.com/tokyo-metropolitan-gov/covid19/development/data/data.json'
Voici le programme Python.
#Chargement de la bibliothèque et des données
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()
#Données de date
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]))
#Données patient positives
patients_data = []
for i in range(len(data['inspection_persons']['labels'])):
patients_data.append(data['patients_summary']['data'][i]['total'])
#Calcul de la moyenne mobile sur 7 jours
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')
#Remplir de nan
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)
#Visualisation
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()
Le résultat est le graphique ci-dessous.
Je sens que j'ai pu visualiser ce que j'ai vu sur Twitter immédiatement grâce au gouvernement métropolitain de Tokyo, qui publie les données, et à tous ceux qui publient la méthode de collecte de données et la méthode de moyenne mobile. J'étais capable de. Nous allons continuer! Je souhaite acquérir diverses connaissances pour pouvoir le faire dès que je pense.
Statistiques moyennes mobiles Durée des statistiques WEB Méthode de calcul du blog WEB de statistiques de moyenne mobile
Comment visualiser et analyser facilement les données ouvertes d'une nouvelle infection à coronavirus (COVID-19) avec Google Colaboratory Google Clobratory dans l'article ci-dessus
Recommended Posts