Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen

1. Zuallererst

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.

2. Datenerfassung

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. スクリーンショット 2020-04-21 15.21.23.png Ö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')

3. Verarbeitung der erfassten Daten

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

4. Speichern Sie die Daten

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

4. Überprüfen Sie die Daten

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

image.png

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.

5. Machen Sie die Daten leicht verständlich.

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. 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])

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

image.png

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.

6. Zusammenfassung

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

Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Versuchen Sie es mit Python.
2016 Todai Mathematik mit Python gelöst
Die Geschichte des Lesens von HSPICE-Daten in Python
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Schaben mit Selen in Python
Schaben mit Chromedriver in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Den Inhalt der Daten in Python nicht kennen
Verwenden wir die offenen Daten von "Mamebus" in Python
Anzeige von Positionsinformationsdaten in Python - Versuchen Sie, mit der Kartenanzeigebibliothek (Folium) zu zeichnen -
Versuchen Sie es mit Python + Beautiful Soup
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Scraping mit Selen in Python (Basic)
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Versuchen Sie, die stochastische Massenfunktion der Binomialverteilung in Python zu transkribieren
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Praxis der Datenanalyse durch Python und Pandas (Tokyo COVID-19 Data Edition)
Visualisieren Sie die Häufigkeit von Wortvorkommen in Sätzen mit Word Cloud. [Python]
Versuchen Sie, den kürzesten Weg mit Python + NetworkX + Social Data zu lösen
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Versuchen Sie, sich mit Python bei qiita anzumelden
Versuchen Sie es mit der Wunderlist-API in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Überprüfen Sie die Existenz der Datei mit Python
Zeigen Sie Python 3 im Browser mit MAMP an
Das Ergebnis der Installation von Python auf Anaconda
[Python] Probieren Sie pydash der Python-Version von lodash aus
Grundlagen zum Ausführen von NoxPlayer in Python
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
Empfehlung von Altair! Datenvisualisierung mit Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Scraping mit Python
Scraping mit Python
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
Zeigen Sie den Status der COVID 19-Infektion in Japan mit Splunk an (GitHub-Version).
Holen Sie sich den Schlüssel für die Migration von JSON-Daten auf der zweiten Ebene mit Python
Visualisieren Sie Korona-Infektionsdaten in Tokio mit matplotlib
Geben Sie die Anzahl der CPU-Kerne in Python aus
Test von emacs-org parser orgparse für Python
[Python] Holen Sie sich die Dateien mit Python in den Ordner
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor