[PYTHON] Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Personen unter Berücksichtigung der Auswirkung des Verzichts auf das Ausgehen vorherzusagen

zunaechst

Ich bin kein Experte für Infektionskrankheiten. Bitte lesen Sie es nach dem Verständnis.

Die neue Koronapneumonie (Covid-19), die ab Dezember 2019 in Wuhan, Provinz Hubei, China, auftrat, hat sich auf Japan ausgeweitet und die Zahl der Infizierten nimmt zu. Am 7. April 2020 wurde auch in Japan eine Notfallerklärung abgegeben, in der gefordert wurde, nicht auszugehen. Obwohl die Arbeit von zu Hause aus immer weiter verbreitet ist, gibt es Berichte, dass es nicht ausreicht, nicht auszugehen. Daher möchte ich vorhersagen, wie viel Selbstbeherrschung ich ausüben kann oder wie sich die Zahl der Infizierten durch Selbstbeherrschung erhöht.

Vorhersagealgorithmus

Dieses Mal werden wir die Anzahl der Infizierten vorhersagen, indem wir zum maschinellen Lernen zurückkehren. Es gibt verschiedene Arten von Algorithmen für die Regression, diesmal jedoch die [Support Vector Regression] von scikit-learn (https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR). .html) wird verwendet.

Daten

Anzahl der Daten infizierter Personen

Ich habe covid_19_clean_complete.csv aus Kaggles COVID-19 Complete Dataset (alle 24 Stunden aktualisiert) verwendet. Diese Daten enthalten Daten aus der ganzen Welt, es wird jedoch nur die Anzahl der infizierten Personen in Japan verwendet. Für Japan liegen Daten von 2020/1/22 bis 2020/4/9 vor. Die folgende Abbildung zeigt die Anzahl der Infizierten und die Anzahl der täglichen Neuinfektionen. japan_confirmed.png

Selbstbeherrschungseffekt

Es gibt keine guten Daten darüber, wie viele Menschen in ganz Japan nicht ausgehen, weil sie nicht ausgehen. Die New Corona Virus Infectious Disease Control Site in Tokio enthält jedoch Daten zu Änderungen in der Anzahl der Benutzer der Toei-U-Bahn. Wir werden diese Daten in der Toei-U-Bahn in Tokio verwenden, obwohl sie auf wöchentliche Daten beschränkt sind. Diese Daten werden jedoch als PDF verteilt. Deshalb habe ich es manuell im CSV-Format eingegeben (Weinen). Die auf der neuen Website zur Kontrolle von Corona-Viren verteilten Daten infizierter Personen werden im CSV-Format verteilt. Daher wollte ich, dass die Anzahl der Benutzer der Toei-U-Bahn auch im CSV-Format verteilt wird. Unten sehen Sie eine grafische Darstellung der Zu- / Abnahmerate der Anzahl der Benutzer der Toei-U-Bahn.

Tag Shinjuku 7 Uhr Shinjuku 8 Uhr Shinjuku 9 Uhr Shibuya 7 Uhr Shibuya 8 Uhr Shibuya 9 Uhr 7 Uhr in Tokio Tokio 8 Uhr Tokio 9 Uhr
2020/1/31 1.88% -2.96% 0.39% 0.57% -4.58% -1.86% -1.49% -1.93% 0.44%
2020/2/7 0.18% -1.03% 2.06% -0.56% -4.05% 1.65% 1.15% 0.84% 1.97%
... ... ... ... ... ... ... ... ... ...

subway.png

Bewertungsmethoden

Einfache Vorhersage

Die folgenden Daten werden aus der Anzahl der infizierten Personen von Kaggle extrahiert.

Index Tag Anzahl der infizierten Personen
1 2020/1/22 2
2 2020/1/23 2
3 2020/1/24 2
4 2020/1/25 2
5 2020/1/26 4
6 2020/1/27 4
7 2020/1/28 7
8 2020/1/29 7
9 2020/1/30 11
10 2020/1/31 5
... ... ...
79 2020/4/9 4667

Die erklärende Variable X ist [0, 1 ,, 2, 3, ...., 79]. Das vorhergesagte Ziel Y ist die Anzahl der infizierten Personen [2, 2, 2, 2, 4, 4, 7, ...].

Von 2020/1/22 bis 2020/4/9 sind 90% der Vorderseite Trainingsdaten und 10% der Rückseite Testdaten. Das Regressionsmodell wurde mit den Trainingsdaten trainiert und mit den Testdaten ausgewertet. Der Trainingsdatenteil ist fast genau gleich, aber der Testdatenteil ist etwas anders. Eine einfache Regression allein kann nicht richtig vorhersagen. Wir haben auch 10 Tage in der Zukunft vorhergesagt. japan_redict1.png

Vorhersage unter Berücksichtigung der Selbstbeherrschung vom Ausgehen

Für die einfache Prognose haben wir nur Kaggle-Daten verwendet, aber wir werden die Abnahmerate der Anzahl der Toei-U-Bahn-Benutzer hinzufügen, um die Prognose zu erstellen. Es wird gesagt, dass die Wirkung der Selbstbeherrschung nach etwa zwei Wochen auftritt. Daher wird die Anzahl der Infizierten mit der Abnahmerate der Toei-U-Bahn-Nutzer vor zwei Wochen kombiniert, um eine Vorhersage zu treffen.

Von 2020/1/22 bis 2020/4/9 sind 90% der Vorderseite Trainingsdaten und 10% der Rückseite Testdaten. Das Regressionsmodell wurde mit den Trainingsdaten trainiert und mit den Testdaten ausgewertet. Der Trainingsdatenteil und der Testdatenteil sind ebenfalls genau gleich. Zusätzlich prognostizieren wir die zukünftigen 10 Tage und zeigen sie mit einer dicken roten Linie. Die Zahl der Infizierten wird in Zukunft rasch zunehmen. japan_redict2.png

Wir haben anhand eines Vorhersagemodells bewertet, wie der Effekt der Selbstbeherrschung in der Vorhersage auftritt. Die Zunahme / Abnahme der Nutzer der Toei-U-Bahn wird nach 2 Wochen beeinflusst. Wenn also die Zunahme / Abnahme der Nutzer der Toei-U-Bahn um 40% niedriger war als vor 2 Wochen (27. März), haben wir simuliert, was passieren würde. Ich versuchte es. Die Passagiere der U-Bahn nahmen am 3. April je nach Tageszeit um etwa 40% ab. Da es um 40% weiter reduziert wird, handelt es sich um eine Simulation, wenn es um etwa 80% reduziert wird.

japan_redict2A.png

Wenn wir vor zwei Wochen die Anzahl der U-Bahn-Nutzer um etwa 80% reduzieren könnten, könnten wir ab dem 27. März das Tempo des Anstiegs der Zahl der Infizierten erheblich reduzieren. Wenn Sie sehen können, wie sich das Unterlassen solcher Vorhersagen auswirkt, werden Sie das Gefühl haben, nicht auszugehen. Der Effekt ist jedoch nach mehr als zwei Wochen sichtbar, sodass Sie sich damit abfinden müssen.

Verweise

Kaggle : https://www.kaggle.com/imdevskp/corona-virus-report Neue Website zur Kontrolle von Koronavirusinfektionen in Tokio: https://stopcovid19.metro.tokyo.lg.jp/

Programm

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import numpy as np
import pandas as pd
from datetime import datetime
import copy
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVR

def read_confirmed():
    data = pd.read_csv('covid_19_clean_complete.csv')
    data_japan = data[data.loc[:, 'Country/Region']=='Japan']
    data_japan = data_japan.reset_index(drop=True)
    data_japan = data_japan.loc[:, ['Date', 'Confirmed', 'Deaths', 'Recovered']]
    data_japan['New_confirmed'] = (data_japan['Confirmed'] - data_japan['Confirmed'].shift(1)).fillna(0)
    return data_japan

def read_subway(data_japan):
    subway = pd.read_csv('20200409_subway.csv')
    data_japan1 = pd.merge(data_japan, subway, left_on='Date', right_on='Date3', how="outer")
    data_japan1 = data_japan1.drop(["Date1", "Date2", "Date3"], axis=1)
    data_japan1 = data_japan1.loc[:78, :]
    data_japan1 = data_japan1.fillna(0)
    data_japan1["x"] = data_japan1.index
    return data_japan1

def plot1(data_japan):
    # x=data_japan.loc[:, 'Date']
    x = np.arange(len(data_japan))
    plt.plot(x, data_japan.loc[:, 'Confirmed'], label='confirmed')
    plt.plot(x, data_japan.loc[:, 'New_confirmed'], label='New_confirmed')
    plt.title('Japan')
    plt.legend()
    plt.savefig('japan_confirmed.png')
    plt.cla()

def predict_svr1(data_japan):
    y = data_japan['Confirmed']
    x = np.arange(len(data_japan)).reshape((-1,1))
    Xtrain, Xtest, Ytrain, Ytest = train_test_split(x, y, test_size=0.10, shuffle=False)
    svm_confirmed = SVR(shrinking=True, kernel='poly',gamma=0.01, epsilon=1,degree=5, C=0.1)
    svm_confirmed.fit(Xtrain, Ytrain)
    Ytrain_pred = svm_confirmed.predict(Xtrain)
    Ytest_pred = svm_confirmed.predict(Xtest)

    #Zukunftsprognose
    Xtest2 = np.arange(Xtest[-1]+1, Xtest[-1]+11).reshape((-1, 1))
    Ytest_pred2 = svm_confirmed.predict(Xtest2)

    #Handlung
    plt.plot(np.arange(len(data_japan)), data_japan.loc[:, 'Confirmed'], label="confirmed", color='blue')
    plt.plot(Xtrain, Ytrain_pred, '--', label="train_pred", color='red')
    plt.plot(Xtest, Ytest_pred, label="test_pred", color='red', linewidth=1)
    plt.plot(Xtest2, Ytest_pred2, label="pred2", color='red', linewidth=3)
    plt.legend()
    plt.title('Japan')
    plt.savefig('japan_redict1.png')
    plt.cla()

def predict_svr2(data_japan):
    y = data_japan["Confirmed"]
    x = data_japan[['Shinjyuku_7', 'Shinjyuku_8', 'Shinjyuku_9', 'Shibuya_7', 'Shibuya_8', 'Shibuya_9', 'Tokyo_7', 'Tokyo_8', 'Tokyo_9', 'x']]
    Xtrain, Xtest, Ytrain, Ytest = train_test_split(x, y, test_size=0.10, shuffle=False)
    Xtest = Xtest.reset_index(drop=True)
    svm_confirmed = SVR(shrinking=True, kernel='poly',gamma=0.01, epsilon=1,degree=5, C=0.1)
    svm_confirmed.fit(Xtrain, Ytrain)
    Ytrain_pred = svm_confirmed.predict(Xtrain)
    Ytest_pred = svm_confirmed.predict(Xtest)

    #Zukunftsvorhersage 1
    Xtest2 = copy.deepcopy(Xtest)
    last = len(Xtest) - 1
    Xtest2.loc[:, 'x'] = np.arange(Xtest.loc[last, 'x'] + 1, Xtest.loc[last, 'x'] + 1 + len(Xtest))
    last = len(Xtest) - 1
    Xtest2['Shinjyuku_7'] = Xtest.loc[last, 'Shinjyuku_7']
    Xtest2['Shinjyuku_8'] = Xtest.loc[last, 'Shinjyuku_8']
    Xtest2['Shinjyuku_9'] = Xtest.loc[last, 'Shinjyuku_9']
    Xtest2['Shibuya_7'] = Xtest.loc[last, 'Shibuya_7']
    Xtest2['Shibuya_8'] = Xtest.loc[last, 'Shibuya_8']
    Xtest2['Shibuya_9'] = Xtest.loc[last, 'Shibuya_9']
    Xtest2['Tokyo_7'] = Xtest.loc[last, 'Tokyo_7']
    Xtest2['Tokyo_8'] = Xtest.loc[last, 'Tokyo_8']
    Xtest2['Tokyo_9'] = Xtest.loc[last, 'Tokyo_9']
    Ytest_pred2 = svm_confirmed.predict(Xtest2)

    #Zukunftsvorhersage 2
    Xtest3 = copy.deepcopy(Xtest)
    Xtest3.loc[:, 'x'] = np.arange(Xtest.loc[last, 'x'] + 1, Xtest.loc[last, 'x'] + 1 + len(Xtest))
    reduce = -0.1
    num = len(Xtest3)
    diff = reduce / (num - 1)
    Xtest3.loc[:, 'Shinjyuku_7'] = [Xtest.loc[last, 'Shinjyuku_7'] + diff * i for i in range(num)]
    Xtest3.loc[:, 'Shinjyuku_8'] = [Xtest.loc[last, 'Shinjyuku_8'] + diff * i for i in range(num)]
    Xtest3.loc[:, 'Shinjyuku_9'] = [Xtest.loc[last, 'Shinjyuku_9'] + diff * i for i in range(num)]
    Xtest3.loc[:, 'Shibuya_7'] = [Xtest.loc[last, 'Shibuya_7'] + diff * i for i in range(num)]
    Xtest3.loc[:, 'Shibuya_8'] = [Xtest.loc[last, 'Shibuya_8'] + diff * i for i in range(num)]
    Xtest3.loc[:, 'Shibuya_9'] = [Xtest.loc[last, 'Shibuya_9'] + diff * i for i in range(num)]
    Xtest3.loc[:, 'Tokyo_7'] = [Xtest.loc[last, 'Tokyo_7'] + diff * i for i in range(num)]
    Xtest3.loc[:, 'Tokyo_8'] = [Xtest.loc[last, 'Tokyo_8'] + diff * i for i in range(num)]
    Xtest3.loc[:, 'Tokyo_9'] = [Xtest.loc[last, 'Tokyo_9'] + diff * i for i in range(num)]
    Ytest_pred3 = svm_confirmed.predict(Xtest3)

    #Handlung
    plt.plot(np.arange(len(data_japan)), data_japan.loc[:, 'Confirmed'], label="confirmed", color='blue')
    plt.plot(Xtrain['x'], Ytrain_pred, '--', label="train_pred", color='red')
    plt.plot(Xtest['x'], Ytest_pred, label="test_pred", color='red', linewidth=1)
    plt.plot(Xtest2['x'], Ytest_pred2, label="pred2", color='red', linewidth=3)
    plt.plot(Xtest2['x'], Ytest_pred3, label="pred3", color='green', linewidth=3)
    plt.legend()
    plt.title('Japan')
    plt.savefig('japan_redict2.png')

def main():
    #Daten infizierter Personen gelesen
    data_japan = read_confirmed()
    data_japan.to_csv('data_japan.csv', index=False)
    plot1(data_japan)
    #Vorhersage 1
    predict_svr1(data_japan)

    #Daten infizierter Personen gelesen
    data_japan = read_subway(data_japan)
    #Vorhersage 2
    predict_svr2(data_japan)

if __name__ == '__main__':
    main()

Recommended Posts

Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Personen unter Berücksichtigung der Auswirkung des Verzichts auf das Ausgehen vorherzusagen
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Menschen in Japan nach der Methode des neuesten Papiers in China vorherzusagen
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Sagen Sie die Anzahl der mit COVID-19 infizierten Personen mit Prophet voraus
Ich habe versucht, die neuen mit dem Corona-Virus infizierten Menschen in Ichikawa City, Präfektur Chiba, zusammenzufassen
Ich habe versucht, die Eigenschaften der neuen Informationen über mit dem Corona-Virus infizierte Personen mit Wordcloud zu visualisieren
Stellen wir uns die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen vor
Ich habe versucht, den Trend der Anzahl der Schiffe in der Bucht von Tokio anhand von Satellitenbildern zu ermitteln.
Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ② Sortieren der Überlappungsnummern
In Anbetracht der Situation in Japan durch den Statistiker Nate Silver: "Die Anzahl der mit Coronavirus infizierten Personen ist bedeutungslos."
[Abgeschlossene Version] Versuchen Sie, die Anzahl der Einwohner der Stadt anhand der Adressliste mit Python herauszufinden
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich wollte die Anzahl der Zeilen in mehreren Dateien wissen und versuchte, sie mit einem Befehl abzurufen
Ich habe versucht, Objekte aus dem Bild des Steak-Sets zu sortieren
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, die Anzahl der Todesfälle pro Kopf von COVID-19 (neues Koronavirus) nach Ländern zu tabellieren
Verwenden Sie die Swagger-Benutzeroberfläche. Wenn Sie einen Swagger-UI-ähnlichen Stil wünschen, kopieren Sie einfach die gesamte Datei unter / dist unter https://github.com/swagger-api/swagger-ui. Danach schreiben Sie einfach hier in index.html die URL der yml-Datei um. Wenn Sie der Meinung sind, dass Sie @ApiModel oder @ApiModelProperty nicht finden können, wurden übrigens anscheinend alle Anmerkungen zur Schemadefinition in @Schema integriert. Emotionsanalyse mit Java, Swagger, OpenAPI, Micronaut Natural Language Processing! Ich habe versucht, die Bewertung anhand des Überprüfungstextes vorherzusagen
Ich habe versucht, das Musikgenre anhand des Songtitels im Recurrent Neural Network vorherzusagen
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ① Objekterkennung
Ich habe versucht, den Verkauf von Spielesoftware mit VARISTA anhand des Artikels von Codexa vorherzusagen
Einführung in die KI-Erstellung mit Python! Teil 1 Ich habe versucht, die Nummer anhand des handgeschriebenen Zahlenbildes zu klassifizieren und vorherzusagen
Ich habe versucht, den Datenverkehr mit WebSocket in Echtzeit zu beschreiben
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, die Exponentialfunktion und die Logistikfunktion an die Anzahl der COVID-19-positiven Patienten in Tokio anzupassen
Ich habe versucht, Objekte aus dem Bild des Steak-Set-Essens zu sortieren - Ähnliches Bild Wärmekartenerkennung
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, den Text des Romans "Wetterkind" mit Word Cloud zu visualisieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Ich habe versucht, den unter "Abrufen von Bildern von der Flickr-API mit Python" (Teil 2) veröffentlichten Vorlagencode zu überarbeiten.
Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ⑤ Ähnliche Erkennung von Bildmerkmalen
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ① analysiert
Einführung in die KI-Erstellung mit Python! Teil 2 Ich habe versucht, den Hauspreis in Boston mit einem neuronalen Netz vorherzusagen
Ich habe versucht, die Verschlechterung des Lithium-Ionen-Akkus mithilfe des Qore SDK vorherzusagen
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Erstellen Sie einen BOT, der die Anzahl der infizierten Personen in der neuen Corona anzeigt
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
[Python] Ich habe die gleiche Berechnung versucht wie die Vorhersage von LSTM von Grund auf [Keras]
Die Geschichte von soracom_exporter (Ich habe versucht, SORACOM Air mit Prometheus zu überwachen)
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen