Essayez de gratter les données COVID-19 Tokyo avec Python

1.Tout d'abord

Tout en m'abstenant de corona, je vis à Tokyo et je suis submergé par le nombre de personnes infectées à Tokyo qui est annoncé chaque jour. Cependant, je ne sais pas pourquoi le nombre de personnes infectées a augmenté ou diminué! En premier lieu, le nombre de tests augmente et diminue considérablement chaque jour, et la période requise pour les tests varie, donc je suppose que l'augmentation et la diminution du nombre de personnes infectées dépendent du nombre de tests et de la période de test, même s'il s'agit d'un amateur. Va finir Je me suis donc demandé si je pouvais représenter graphiquement les chiffres d'une manière un peu plus facile à comprendre.

2. Acquisition de données

Site métropolitain de contrôle des maladies infectieuses du nouveau virus Corona de Tokyo https://stopcovid19.metro.tokyo.lg.jp/ Les données du COVID 19 à Tokyo sont mises à jour quotidiennement ici. (Veuillez penser qu'il y a un léger décalage dans le temps et qu'il est un jour de retard) J'ai gratté les données sur ce site et j'ai décidé de les utiliser comme données d'origine pour la représentation graphique.

Les données que nous voulons obtenir sont le nombre de personnes testées et le nombre de patients positifs. Nombre de personnes à inspecter https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-inspection-persons/ Nombre de patients positifs https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-confirmed-cases/

À partir de l'URL, utilisez BeautifulSoup pour télécharger les données du site. スクリーンショット 2020-04-21 15.21.23.png Ouvrez l'URL dans Chrome pour voir les outils de développement. Tout en suivant les balises HTML, descendez à la balise où la valeur numérique cible (nombre de patients positifs) est écrite. Une classe (text-end) est définie pour la balise et les données sont extraites à l'aide de cette classe. Téléchargez les informations d'URL que vous souhaitez extraire avec les requêtes et, avec BeautifulSoup, extrayez toutes les balises avec la classe de fin de texte définie.

Python


import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt

kensa_url = 'https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-inspection-persons/'
yousei_url = 'https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-confirmed-cases/'

r = requests.get(kensa_url , timeout=10, params=None)
soup = BeautifulSoup(r.text,'html.parser')
kensa_data = soup.select('.text-end')

r = requests.get(yousei_url , timeout=10, params=None)
soup = BeautifulSoup(r.text,'html.parser')
yousei_data = soup.select('.text-end')

3. Traitement des données acquises

En regardant le contenu de la liste extraite, les deux premiers étaient des têtes. J'ai également constaté que les dates et les totaux cumulatifs étaient stockés en alternance. Extrayons uniquement les pièces nécessaires pour une utilisation facile.

[<th aria-label="Nombre de personnes à inspecter(De jour)" aria-sort="none" class="text-end" role="columnheader" scope="col"><span>Nombre de personnes à inspecter(De jour)</span></th>,
 <th aria-label="Nombre de personnes à inspecter(Cumulatif)" aria-sort="none" class="text-end" role="columnheader" scope="col"><span>Nombre de personnes à inspecter(Cumulatif)</span></th>,
 <td class="text-end">304</td>,
 <td class="text-end">8,683</td>,
 <td class="text-end">339</td>,
-----Omis par la suite-----

Sauvegardons diverses données dans la liste. for i in range(2, len(kensa_data), 2): Utilisez pour éviter la tête et démarrez l'instruction for à partir de la troisième ligne de la liste. De plus, en extrayant de la liste tous les deux, seule la valeur numérique de la date sera extraite. Obtenons la date en même temps. Obtenez le téléchargé aujourd'hui par datetime.today () et utilisez l'instruction for pour renvoyer la date d'un jour à chaque fois que vous obtenez les données. num_list est également créé pour l'affichage.

Python


kensa_list = []
yousei_list = []
date_list = []
num_list = []

num = 0
date = datetime.today()
date = date - timedelta(days=1)

for i in range(2, len(kensa_data), 2):
        kensa_list.append(kensa_data[i].string)
        yousei_list.append(yousei_data[i].string)
        date_list.append(datetime.strftime(date, '%Y/%m/%d'))
        date = date - timedelta(days=1)

Toutes les données sont dans l'ordre chronologique inverse, utilisez donc .reverse () pour inverser l'ordre.

Python


kensa_list.reverse()
yousei_list.reverse()
date_list.reverse()

4. Enregistrer les données

Si vous souhaitez l'enregistrer, enregistrez-le au format CSV ici.

Python


with open('COVID-19.csv','a') as f:
    writer = csv.writer(f)
    writer.writerow(['date', 'kensa', 'yousei'])
    for i in range(len(date_list)):
        writer.writerow([date_list[i], kensa_list[i], yousei_list[i]])

4. Vérifiez les données

Vérifions le nombre de personnes testées et le nombre de patients positifs.

Python


plt.subplot(2,1,1)
plt.plot(num_list, kensa_list, label="kensa-list")
plt.legend()
    
plt.subplot(2,1,2)
plt.plot(num_list, yousei_list, label="yousei-list")
plt.legend()

image.png

Comme vous pouvez le voir sur le graphique, le nombre de personnes effectuant des inspections change radicalement selon les jours. À première vue, il semble qu'il y ait une corrélation entre le nombre de testeurs et le nombre de patients positifs, mais en regardant autour de 80, même si le nombre de testeurs a considérablement baissé, il ne semble pas naturel de voir comment le nombre de patients positifs diminue. Faire. Cela semble venir du fait que le nombre de tests quotidiens ne correspond pas toujours au nombre de positifs sur une base quotidienne.

5. Rendez les données faciles à comprendre.

Par conséquent, créons des données en divisant le nombre total de positifs jusqu'à ce jour par le nombre total de tests jusqu'à la veille de ce jour. En totalisant, vous pouvez créer un graphique avec le rapport des totaux quotidiens quel que soit le calendrier des résultats du test. Le nombre de tests a été fixé la veille car il semble que les résultats du même jour des tests ne se reflètent pas dans le nombre de positifs. image.png

Python


kensa_total = 0
yousei_total = 0
kensa_yousei_list = []

for i in range(len(kensa_list)):
    yousei_total =  yousei_total + int(yousei_list[i])
    
    if kensa_total == 0:
        kensa_yousei_list.append(0)
    else:
        kensa_yousei_list.append(yousei_total/kensa_total)

    kensa_total =  kensa_total + int(kensa_list[i])

Ajoutez le total de kensa_total et yousei_total en tournant avec l'instruction for. Lors de l'ajout, ajoutez kensa_yousei_list en divisant à chaque fois kensa_total par yousei_tota.

Python


plt.plot(num_list, kensa_yousei_list, label="Average")
plt.legend()
plt.show()

image.png

Au début, la partie où la valeur numérique est fortement augmentée est parce que le nombre d'inspections au début des données était de 0, donc veuillez ignorer cela, le graphique augmente au fur et à mesure que vous passez à la seconde moitié. .. On constate que le pourcentage de nombres positifs dans le nombre de tests augmente progressivement. Je ne pouvais pas dire si le pourcentage de demandeurs augmentait vraiment simplement par la progression du nombre de positifs, mais en divisant par le nombre total de tests de cette manière, un graphique stable peut être créé, et en regardant cela, il est positif. On constate que la proportion de personnes augmente également. Vers le 21 avril, lorsque ce graphique a été créé, le nombre de positifs a un peu diminué, de sorte que la fin du graphique a un peu diminué.

6. Résumé

En calculant le ratio des données numériques quotidiennes en totalisant jusqu'à ce point, nous avons pu créer un graphique facile à comprendre. Si vous regardez le graphique, vous pouvez voir qu'il augmente de manière relativement propre. De plus, comme cela ne dépend pas de l'augmentation ou de la diminution du nombre d'inspections quotidiennes, je pense que le nombre n'augmentera pas soudainement et vous ne serez pas surpris. (Parce que le nombre d'inspections doit augmenter avant que la valeur augmente)

Le code de cette heure est publié ci-dessous. https://github.com/no-B-github/COVID19_Data_Scraping

J'ai essayé d'en faire une application Web afin que le graphique puisse être mis à jour quotidiennement. À l'avenir, j'aimerais garder un œil sur cela et faire de mon mieux pour m'abstenir de COVID 19.

https://covid-19-tokyo.herokuapp.com/

Recommended Posts

Essayez de gratter les données COVID-19 Tokyo avec Python
[Homologie] Comptez le nombre de trous dans les données avec Python
Essayez de travailler avec des données binaires en Python
Essayez de gratter avec Python.
Mathématiques Todai 2016 résolues avec Python
L'histoire de la lecture des données HSPICE en Python
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
Grattage au sélénium en Python
Grattage avec chromedriver en python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Ne pas être conscient du contenu des données en python
Utilisons les données ouvertes de "Mamebus" en Python
Affichage des données d'informations de position en Python --Essayez de tracer avec la bibliothèque d'affichage de carte (folium) -
Essayez de gratter avec Python + Beautiful Soup
Un diagramme de réseau a été créé avec les données du COVID-19.
Scraping avec Selenium en Python (Basic)
Calculez des millions de chiffres dans la racine carrée de 2 avec python
L'histoire du rubyiste aux prises avec Python :: Dict data with pycall
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Essayez d'extraire les caractéristiques des données de capteur avec CNN
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
Essayez de transcrire la fonction de masse stochastique de la distribution binomiale en Python
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
Pratique de l'analyse de données par Python et pandas (Tokyo COVID-19 data edition)
Visualisez la fréquence des occurrences de mots dans les phrases avec Word Cloud. [Python]
Essayez de résoudre l'itinéraire le plus court avec les données sociales Python + NetworkX +
Obtenez des données supplémentaires vers LDAP avec python
Essayez de vous connecter à qiita avec Python
Essayez d'utiliser l'API Wunderlist en Python
Vérifiez le comportement du destroyer en Python
Essayez d'utiliser l'API Kraken avec Python
Vérifier l'existence du fichier avec python
Afficher Python 3 dans le navigateur avec MAMP
Le résultat de l'installation de python sur Anaconda
[Python] Essayez pydash de la version Python de lodash
Principes de base pour exécuter NoxPlayer en Python
Essayez le scraping HTML avec la bibliothèque Python
Recommandation d'Altair! Visualisation des données avec Python
À la recherche du FizzBuzz le plus rapide en Python
[Pour les débutants] Essayez le web scraping avec Python
Grattage avec Python
Grattage avec Python
Recevez une liste des résultats du traitement parallèle en Python avec starmap
Tracer CSV de données de séries temporelles avec une valeur unixtime en Python (matplotlib)
Afficher le statut de l'infection COVID 19 au Japon avec Splunk (version GitHub)
Obtenez la clé pour la migration de la deuxième couche de données JSON avec python
Visualisez les données d'infection corona à Tokyo avec matplotlib
Sortie du nombre de cœurs de processeur en Python
Essai du parseur d'emacs-org orgparse pour python
[Python] Récupérez les fichiers dans le dossier avec Python
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Préparer l'environnement d'exécution de Python3 avec Docker