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.
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. 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')
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()
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]])
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()
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.
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.
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()
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é.
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