Während ich auf Corona verzichte, lebe ich in Tokio und freue mich über die Anzahl der infizierten Menschen in Tokio, die jeden Tag angekündigt wird. Ich bin mir jedoch nicht sicher, warum die Anzahl der Infizierten gestiegen oder gesunken ist! Erstens nimmt die Anzahl der Tests von Tag zu Tag erheblich zu und ab, und der für die Tests erforderliche Zeitraum variiert. Daher denke ich, dass die Zunahme und Abnahme der Anzahl infizierter Personen von der Anzahl der Tests und dem Testzeitraum abhängt, auch wenn es sich um Amateure handelt. Wird enden Also fragte ich mich, ob ich die Zahlen etwas grafischer darstellen könnte.
Kontrollstelle für Infektionskrankheiten der Metropolregion New Corona in Tokio https://stopcovid19.metro.tokyo.lg.jp/ Die Daten von COVID 19 in Tokio werden hier täglich aktualisiert. (Bitte denken Sie daran, dass es eine leichte Zeitverzögerung gibt und es einen Tag zu spät ist.) Ich habe die Daten auf dieser Site abgekratzt und beschlossen, sie als Originaldaten für die grafische Darstellung zu verwenden.
Die Daten, die wir erhalten möchten, sind die Anzahl der getesteten Personen und die Anzahl der positiven Patienten. Anzahl der zu inspizierenden Personen https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-inspection-persons/ Anzahl positiver Patienten https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-confirmed-cases/
Verwenden Sie über die URL BeautifulSoup, um die Site-Daten herunterzuladen. Öffnen Sie die URL in Chrome, um die Entwicklertools anzuzeigen. Gehen Sie beim Befolgen der HTML-Tags zu dem Tag, an dem der numerische Zielwert (Anzahl der positiven Patienten) geschrieben ist. Für das Tag wird eine Klasse (Textende) festgelegt, und mit dieser Klasse werden Daten extrahiert. Laden Sie die URL-Informationen herunter, die Sie mit Anforderungen durchsuchen möchten, und extrahieren Sie mit BeautifulSoup alle Tags mit der daraus festgelegten Textende-Klasse.
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')
Mit Blick auf den Inhalt der extrahierten Liste waren die ersten beiden Köpfe. Ich fand auch heraus, dass die Daten und kumulierten Summen abwechselnd gespeichert wurden. Lassen Sie uns nur die notwendigen Teile extrahieren, um die Verwendung zu vereinfachen.
[<th aria-label="Anzahl der zu inspizierenden Personen(Tagsüber)" aria-sort="none" class="text-end" role="columnheader" scope="col"><span>Anzahl der zu inspizierenden Personen(Tagsüber)</span></th>,
<th aria-label="Anzahl der zu inspizierenden Personen(Kumulativ)" aria-sort="none" class="text-end" role="columnheader" scope="col"><span>Anzahl der zu inspizierenden Personen(Kumulativ)</span></th>,
<td class="text-end">304</td>,
<td class="text-end">8,683</td>,
<td class="text-end">339</td>,
-----Danach weggelassen-----
Speichern wir verschiedene Daten in der Liste. for i in range(2, len(kensa_data), 2): Verwenden Sie diese Option, um den Kopf zu vermeiden, und beginnen Sie die for-Anweisung in der dritten Zeile der Liste. Durch Extrahieren aus der Liste alle zwei wird nur der numerische Wert des Datums extrahiert. Lassen Sie uns das Datum zur gleichen Zeit erhalten. Laden Sie das Datum noch heute von datetime.today () herunter und verwenden Sie die for-Anweisung, um das Datum für jede Erfassung um einen Tag zurückzugeben. num_list wird auch zur Anzeige erstellt.
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)
Alle Daten sind in umgekehrter chronologischer Reihenfolge. Verwenden Sie daher .reverse (), um die Reihenfolge umzukehren.
Python
kensa_list.reverse()
yousei_list.reverse()
date_list.reverse()
Wenn Sie es speichern möchten, speichern Sie es hier in CSV.
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]])
Lassen Sie uns die Anzahl der getesteten Personen und die Anzahl der positiven Patienten überprüfen.
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()
Wie Sie der Grafik entnehmen können, ändert sich die Anzahl der Personen, die Inspektionen durchführen, je nach Tag drastisch. Auf den ersten Blick scheint es eine Korrelation zwischen der Anzahl der Tester und der Anzahl der positiven Patienten zu geben, aber bei etwa 80 erscheint es unnatürlich, wie die Anzahl der positiven Patienten sinkt, selbst wenn die Anzahl der Tester signifikant sinkt. Machen. Dies scheint darauf zurückzuführen zu sein, dass die Anzahl der täglichen Tests nicht immer der Anzahl der täglichen positiven Tests entspricht.
Erstellen wir daher Daten, indem wir die Gesamtzahl der Positiven bis zu diesem Tag durch die Gesamtzahl der Tests bis zum Tag vor diesem Tag dividieren. Durch Summieren können Sie unabhängig vom Testergebnisplan ein Diagramm mit dem Verhältnis der täglichen Gesamtsummen erstellen. Die Anzahl der Tests wurde am Vortag festgelegt, da sich die Ergebnisse am selben Tag der Tests anscheinend nicht in der Anzahl der positiven Tests widerspiegeln.
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])
Addiere die Summe von kensa_total und yousei_total, während du mit der for-Anweisung drehst. Fügen Sie beim Hinzufügen kensa_yousei_list hinzu, indem Sie kensa_total jedes Mal durch yousei_tota teilen.
Python
plt.plot(num_list, kensa_yousei_list, label="Average")
plt.legend()
plt.show()
Im ersten Teil ist der Teil, in dem der numerische Wert stark erhöht wird, darauf zurückzuführen, dass die Anzahl der Inspektionen am Anfang der Daten 0 war. Ignorieren Sie dies. Das Diagramm steigt, wenn Sie in die zweite Hälfte gehen. .. Es ist ersichtlich, dass der Prozentsatz positiver Zahlen in der Anzahl der Tests allmählich zunimmt. Ich konnte nicht sagen, ob der Prozentsatz der Anforderer wirklich nur durch den Fortschritt der Anzahl der Positiven anstieg, aber durch Teilen durch die Gesamtzahl der Tests auf diese Weise kann ein stabiles Diagramm erstellt werden, und wenn man dies betrachtet, ist es positiv. Es ist zu erkennen, dass auch der Anteil der Menschen zunimmt. Um den 21. April herum, als dieses Diagramm erstellt wurde, hat sich die Anzahl der Positiven etwas verringert, sodass sich das Ende des Diagramms etwas verringert hat.
Durch Berechnung des Verhältnisses der täglichen numerischen Daten durch Summieren bis zu diesem Punkt konnten wir ein leicht verständliches Diagramm erstellen. Wenn Sie sich das Diagramm ansehen, können Sie sehen, dass es relativ sauber zunimmt. Da dies nicht von der Zunahme oder Abnahme der Anzahl der täglichen Inspektionen abhängt, denke ich, dass die Anzahl nicht plötzlich zunimmt und Sie nicht überrascht sein werden. (Weil die Anzahl der Inspektionen zunehmen muss, bevor der Wert steigt)
Der Code für diese Zeit wird unten veröffentlicht. https://github.com/no-B-github/COVID19_Data_Scraping
Ich habe versucht, daraus eine Webanwendung zu machen, damit das Diagramm täglich aktualisiert werden kann. In Zukunft möchte ich dies im Auge behalten und mein Bestes tun, um auf COVID 19 zu verzichten.
https://covid-19-tokyo.herokuapp.com/
Recommended Posts