[Python] Affichez les données sur les nouvelles infections à coronavirus sur une moyenne mobile de 7 jours

introduction

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.

Graphique

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.

image.png

moyenne mobile

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.

Obtenir une moyenne mobile en utilisant numpy

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

Visualisation de données

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.

[Modifier] Lecture des données de date

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)

[Ajout] Calcul de la moyenne mobile sur 7 jours

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)

[Modifier] Partie visualisation des données

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()

Tous les programmes

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.

image.png

en conclusion

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.

Le site que j'ai utilisé comme référence

moyenne mobile

Statistiques moyennes mobiles Durée des statistiques WEB Méthode de calcul du blog WEB de statistiques de moyenne mobile

Visualisation

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

[Python] Affichez les données sur les nouvelles infections à coronavirus sur une moyenne mobile de 7 jours
Folium: Visualisez les données sur une carte avec Python
Exécutez Python sur Apache pour afficher les données InfluxDB
Comment créer un nouvel environnement virtuel Python sur Ubuntu
[Treasure Data] [Python] Exécutez une requête sur Treasure Data à l'aide du client TD.
Créer un environnement d'analyse de données python sur Mac (El Capitan)
[Python] Notes sur l'analyse des données
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Construire un environnement Python sur Mac
Construire un environnement Python sur Ubuntu
Créer un environnement Python sur Mac (2017/4)
Créer un environnement python dans centos
Créer un environnement python3 sur CentOS7