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.
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.
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.
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% |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
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.
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.
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.
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.
Kaggle : https://www.kaggle.com/imdevskp/corona-virus-report Neue Website zur Kontrolle von Koronavirusinfektionen in Tokio: https://stopcovid19.metro.tokyo.lg.jp/
#!/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