[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: Szenarioanalyse (Parametervergleich)

Introduction Dies ist ein Einführungsartikel über das Python-Paket CovsirPhy, mit dem Sie COVID-19-Daten (z. B. die Anzahl der PCR-Positiven) einfach herunterladen und analysieren können.

  1. SIR model
  2. SIR-F model
  3. Data loading
  4. S-R trend analysis
  5. Parameter estimation
  6. Optimierung der Phaseneinstellungen

** Dieses Mal werde ich die Szenarioanalyse (Parametervergleich) erläutern. ** ** **

Die englische Version des Dokuments lautet CovsirPhy: COVID-19-Analyse mit phasenabhängigen SIRs, [Kaggle: COVID-19-Daten mit SIR-Modell]( Weitere Informationen finden Sie unter https://www.kaggle.com/lisphilar/covid-19-data-with-sir-model.

1. Ausführungsumgebung

CovsirPhy kann mit der folgenden Methode installiert werden! Bitte verwenden Sie Python 3.7 oder höher oder Google Colaboratory.

--Stabile Version: pip install covsirphy --upgrade

import covsirphy as cs
cs.__version__
# '2.8.3'
Ausführungsumgebung
OS Windows Subsystem for Linux / Ubuntu
Python version 3.8.5

2. Vorbereitung

Klicken Sie hier für den Code [^ 2], um die tatsächlichen Daten von COVID-19 Data Hub [^ 1] herunterzuladen:

data_loader = cs.DataLoader("input")
jhu_data = data_loader.jhu()
population_data = data_loader.population()

In der Tabelle und Grafik dieses Artikels werden die Daten Japans zum 3. Oktober 2020 (vom Ministerium für Gesundheit, Arbeit und Soziales angekündigter nationaler Gesamtwert) vom folgenden Code verwendet [^ 3]. COVID-19 Data Hub [^ 1] enthält ebenfalls japanische Daten, scheint sich jedoch von dem vom Ministerium für Gesundheit, Arbeit und Soziales angekündigten nationalen Gesamtwert zu unterscheiden.

[^ 3]: [CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: S-R-Trendanalyse

# (Optional)Datenerfassung beim Ministerium für Gesundheit, Arbeit und Soziales
#Wenn Sie eine Fehlermeldung erhalten"pip install requests aiohttp"
japan_data = data_loader.japan()
jhu_data.replace(japan_data)
print(japan_data.citation)

Bestätigung der tatsächlichen Daten:

#Instanzgenerierung einer Klasse zur Analyse
snl = cs.Scenario(jhu_data, population_data, country="Japan")
#Grafische Anzeige der tatsächlichen Daten
snl.records(filename=None)

Einteilung in Phase durch S-R-Trendanalyse [^ 3] und Periodenanpassung [^ 4]:

[^ 4]: [CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: Optimieren der Phaseneinstellungen

# S-R trend analysis
snl.trend(filename=None)
# Separate 0th phase
snl.separate("01Apr2020")
#Listenanzeige
snl.summary()
Type Start End Population
0th Past 06Feb2020 31Mar2020 126529100
1st Past 01Apr2020 21Apr2020 126529100
2nd Past 22Apr2020 06Jul2020 126529100
3rd Past 07Jul2020 23Jul2020 126529100
4th Past 24Jul2020 01Aug2020 126529100
5th Past 02Aug2020 14Aug2020 126529100
6th Past 15Aug2020 28Aug2020 126529100
7th Past 29Aug2020 08Sep2020 126529100
8th Past 09Sep2020 19Sep2020 126529100
9th Past 20Sep2020 03Oct2020 126529100

Parameter estimation with SIR-F model[^5]:

[^ 5]: [CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: Parameterschätzung

# Parameter estimation
snl.estimate(cs.SIRF)
#Listenanzeige (Teil)
est_cols = ["Start", "End", "Rt", *cs.SIRF.PARAMETERS, "RMSLE"]
snl.summary(columns=est_cols)
Start End Rt theta kappa rho sigma RMSLE
0th 06Feb2020 31Mar2020 3.6 0.0197967 0.000781433 0.110404 0.0292893 0.693445
1st 01Apr2020 21Apr2020 13.53 0.00119307 0.000954275 0.119908 0.00789786 0.17892
2nd 22Apr2020 06Jul2020 0.37 0.090172 0.000858737 0.0264027 0.0636349 0.883253
3rd 07Jul2020 23Jul2020 1.93 0.000466376 8.04707e-05 0.133382 0.0689537 0.0318977
4th 24Jul2020 01Aug2020 1.78 7.63782e-05 0.000231109 0.135991 0.0760643 0.0193947
5th 02Aug2020 14Aug2020 1.4 0.00100709 0.000215838 0.100929 0.0716643 0.0797834
6th 15Aug2020 28Aug2020 0.82 0.000562179 0.000899694 0.0783473 0.0943161 0.021244
7th 29Aug2020 08Sep2020 0.7 0.00168729 0.00119958 0.0616905 0.0863032 0.0182731
8th 09Sep2020 19Sep2020 0.78 0.00293238 0.00132534 0.0793277 0.099966 0.0282502
9th 20Sep2020 03Oct2020 0.87 0.000463924 0.000984493 0.0793406 0.090479 0.0274187

3. Was ist ein Szenario?

In der Covsirphy-Klasse "Szenario" können Sie mehrere Arten von Phaseneinstellungen [^ 3] registrieren. "Phase [^ 3] Einstellungen" heißt "Szenario".

Wie in der folgenden Tabelle gezeigt, können beispielsweise "Hauptszenario" und "Medizin-Szenario" parallel eingestellt werden, um eine Szenarioanalyse durchzuführen. Die Daten werden unter der Annahme aufgeführt, dass die tatsächlichen Daten von 2020/2/6 bis 2020/10/3 vorliegen.

Name des Szenarios 0th-9th 10th 11th
Main 2/6 - 10/3 10/4 - 12/31 2021/1/1 - 2020/4/10
Medicine 2/6 - 10/3 10/4 - 12/31 2021/1/1 - 2020/4/10

Schätzen Sie die Parameter der 0.-9. Phase für jedes Szenario und simulieren Sie die Anzahl der Patienten unter der Annahme, dass die Parameter der 10. Phase gleich sind und sich $ \ sigma $ zwischen der 10. und 11. Phase für das Medizin-Szenario verdoppelt. .. Zu diesem Zeitpunkt kann durch Vergleich des Übergangs der Anzahl der Patienten zwischen 2021/1 / 1-2021 / 4/10 der Verdopplungseffekt von $ \ sigma $ geschätzt werden.

Es ist unwahrscheinlich, dass es sich aufgrund der Entwicklung neuer Medikamente sofort verdoppelt, aber bitte bezeichnen Sie es als Demonstration.

4. Szenarien erstellen und löschen

Um die Auswirkung von Parametern auf die Anzahl der Patienten zu untersuchen, erstellen Sie Szenarien mit unterschiedlichen Parametern, simulieren Sie die Anzahl der Patienten und vergleichen Sie sie. Zunächst wird das Szenario selbst wie folgt erstellt / initialisiert / gelöscht.

Erstelle neu

Sie können die Methode "Scenario.clear (name =" Name des neuen Szenarios ", template =" Name des Quellenszenarios ")" verwenden, um ein konfiguriertes Szenario zu kopieren und ein neues zu erstellen. Beim Erstellen eines "neuen" Szenarios mit dem Hauptszenario (Standard) als Kopierquelle

#Erstelle neu
snl.clear(name="New", template="Main")
#Listenanzeige
cols = ["Start", "End", "Rt", *cs.SIRF.PARAMETERS]
snl.summary(columns=cols)

(1.-8. Phase wird auf Papier weggelassen)

Start End Rt theta kappa rho sigma
('Main', '0th') 06Feb2020 31Mar2020 3.85 0.0185683 0.000768779 0.112377 0.027892
('Main', '9th') 20Sep2020 03Oct2020 0.87 0.000463924 0.000984493 0.0793406 0.090479
('New', '0th') 06Feb2020 31Mar2020 3.85 0.0185683 0.000768779 0.112377 0.027892
('New', '9th') 20Sep2020 03Oct2020 0.87 0.000463924 0.000984493 0.0793406 0.090479

Löschen

Verwenden Sie zum Löschen "Scenario.delete (name =" szenario name ")". Löschen Sie das "Neue" Szenario und bringen Sie nur das "Hauptszenario" in den registrierten Zustand zurück.

#Szenario löschen
snl.delete(name="New")
#Listenanzeige
snl.summary(columns=cols)

(1.-8. Phase wird auf Papier weggelassen)

Start End Rt theta kappa rho sigma
0th 06Feb2020 31Mar2020 3.85 0.0185683 0.000768779 0.112377 0.027892
9th 20Sep2020 03Oct2020 0.87 0.000463924 0.000984493 0.0793406 0.090479

5. [Hinzufügen] Geben Sie das letzte Datum an

Von hier aus werde ich erklären, wie eine Phase hinzugefügt wird. Sie können eine neue Phase hinzufügen, indem Sie das letzte Datum angeben, z. B. "Scenario.add (end_date =" 31Dec2020 ")".

# Main:Bis zu 31Dec2020 als 10. Phase hinzugefügt
snl.add(end_date="31Dec2020", name="Main")
#Listenanzeige
snl.summary(columns=cols, name="Main")

(1.-8. Phase wird auf Papier weggelassen)

Start End Rt theta kappa rho sigma
0th 06Feb2020 31Mar2020 3.61 0.0190222 0.00099167 0.110766 0.0290761
9th 20Sep2020 03Oct2020 0.87 0.000463924 0.000984493 0.0793406 0.090479
10th 04Oct2020 31Dec2020 0.87 0.000463924 0.000984493 0.0793406 0.090479

Da keine Parameter eingestellt wurden, haben die hinzugefügten Parameter der 10. Phase dieselben Werte wie die der 9. Phase.

6. [Hinzufügen] Geben Sie die Anzahl der Tage an

Sie können eine neue Phase hinzufügen, indem Sie die Anzahl der Tage angeben, z. B. "Scenario.add (Tage = 100)".

# main: 01Jan2021 (Der Tag nach dem letzten Tag des 10 ..)100 Tage als 11. hinzugefügt
snl.add(days=100, name="Main").summary(columns=cols)
#Listenanzeige
snl.summary(columns=cols, name="Main")

(1.-8. Phase wird auf Papier weggelassen)

Start End Rt theta kappa rho sigma
0th 06Feb2020 31Mar2020 3.61 0.0190222 0.00099167 0.110766 0.0290761
9th 20Sep2020 03Oct2020 0.87 0.000463924 0.000984493 0.0793406 0.090479
10th 04Oct2020 31Dec2020 0.87 0.000463924 0.000984493 0.0793406 0.090479
11th 01Jan2021 10Apr2021 0.87 0.000463924 0.000984493 0.0793406 0.090479

Da keine Parameter eingestellt wurden, haben die hinzugefügten Parameter der 11. Phase dieselben Werte wie die der 10. Phase.

7. Geben Sie den Parameter Hinzufügen an

Sie können eine neue Phase hinzufügen, indem Sie einen Parameterwert angeben, z. B. "Scenario.add (sigma = 0.18)".

Parameterschätzungen abrufen

In diesem Artikel wird zur Schätzung des Verdopplungseffekts von $ \ sigma $ der geschätzte Wert von $ \ sigma $ in der Phase des Hauptszenarios 11 (letzte Phase) mit der Methode "Scenario.get ()" ermittelt.

sigma_last = snl.get("sigma", phase="last", name="Main")
sigma_med = sigma_last * 2
print(round(sigma_last, 3), round(sigma_med, 3))
# -> 0.09 0.181

Einstellungen für das Arzneimittelszenario

Erstellen Sie ein Medizin-Szenario mit dem Hauptszenario als Kopierquelle. Zu diesem Zeitpunkt werden zukünftige Phasen (10., 11. Phase) gelöscht. Fügen Sie dann die 10. Phase (gleiche Parameter wie Main) und die 11. Phase ($ \ sigma $ wird verdoppelt) hinzu.

snl.clear(name="Medicine", template="Main")
snl.add(end_date="31Dec2020", name="Medicine")
# Medicine: 01Jan2021 (Der Tag nach dem letzten Tag des 10 ..)100 Tage als 11. hinzugefügt
snl.add(sigma=sigma_med, days=100, name="Medicine")
#Listenanzeige
snl.summary(columns=cols, name="Medicine")

(1.-8. Phase wird auf Papier weggelassen)

Start End Rt theta kappa rho sigma
0th 06Feb2020 31Mar2020 3.85 0.0185683 0.000768779 0.112377 0.027892
9th 20Sep2020 03Oct2020 0.87 0.000463924 0.000984493 0.0793406 0.090479
10th 04Oct2020 31Dec2020 0.87 0.000463924 0.000984493 0.0793406 0.090479
11th 01Jan2021 10Apr2021 0.44 0.000463924 0.000984493 0.0793406 0.180958

Da sich $ sigma $ verdoppelt hat, hat sich die effektive Anzahl der Reproduktionen $ Rt $ halbiert.

8. Phase löschen

Nebenbei können Sie eine Phase mit "Scenario.delete (phase = [" Phasenname "])" löschen. Fügen Sie hier die 12. Phase hinzu und löschen Sie sie.

#Phase hinzufügen
snl.add(days=30, name="Medicine")
#Phase löschen
snl.delete(phases=["last"], name="Medicine")

9. Überprüfen Sie den Parameterübergang

Überprüfen Sie das Diagramm, um festzustellen, ob die Parameterübergänge wie geplant eingestellt sind. Verwenden Sie "Scenario.history (Parametername)". Verwenden Sie den Szenarionamen als Seriennamen.

Übergang von Sigma

Ob $ \ sigma $ in der 11. Phase des Medizin-Szenarios (2021/1/1 --2021 / 4/1) verdoppelt wird:

snl.history("sigma", filename=None)

sigma.jpg

Übergang von Rt

Ob die effektive Reproduktionszahl $ Rt $ bis zur 11. Phase (2021/1/1 --2021 / 4/1) des Medizinszenarios halbiert wird:

snl.history("Rt", filename=None)

rt.jpg

10. Simulation der Anzahl der Patienten

Sie können auch das Simulationsergebnis der Anzahl der Patienten in "Scenario.history (Variablenname)" abrufen.

Grafikanzeige

snl.history("Infected", filename=None)

infected.jpg

Die Zahl der Infizierten nimmt aufgrund der Verdoppelung von $ \ sigma $ rapide ab. Es ist unwahrscheinlich, dass es sich aufgrund der Entwicklung neuer Medikamente sofort verdoppelt. Durch Ändern der Parameterwerte in realistische Werte und Durchführen von Simulationen ist es jedoch möglich, die Anzahl der infizierten Personen und die Endzeit in der Zukunft abzuschätzen.

Datenrahmenformat

Wenn Sie den Wert im Datenrahmenformat erhalten möchten, verwenden Sie bitte die Methode "Scenario.track ()".

snl.track().tail()
Scenario Date Confirmed Fatal Infected Recovered Population Rt theta kappa rho sigma 1/alpha2 [day] 1/gamma [day] alpha1 [-] 1/beta [day]
425 Medicine 2021-04-06 108463 1884 0 106579 126529100 0.44 0.000463924 0.000984493 0.0793406 0.180958 1015 5 0 12
426 Medicine 2021-04-07 108463 1884 0 106579 126529100 0.44 0.000463924 0.000984493 0.0793406 0.180958 1015 5 0 12
427 Medicine 2021-04-08 108463 1884 0 106579 126529100 0.44 0.000463924 0.000984493 0.0793406 0.180958 1015 5 0 12
428 Medicine 2021-04-09 108463 1884 0 106579 126529100 0.44 0.000463924 0.000984493 0.0793406 0.180958 1015 5 0 12
429 Medicine 2021-04-10 108463 1884 0 106579 126529100 0.44 0.000463924 0.000984493 0.0793406 0.180958 1015 5 0 12

11. Vergleich der Kennwerte

Vergleichen Sie die Merkmalswerte, um die Merkmale des Szenarios zu verstehen. Da es jedoch bedeutungslos ist, die durchschnittliche Anzahl infizierter Personen zu vergleichen, werden die charakteristischen Werte wie folgt festgelegt.

Klicken Sie hier für Code und Ausgabeergebnisse:

snl.describe()
max(Infected) argmax(Infected) Infected on 11Apr2021 Fatal on 11Apr2021 11th_Rt
Main 15154 21Apr2020 512 1970 0.87
Medicine 15154 21Apr2020 0 1884 0.44

Die effektive Reproduktionsnummer $ Rt $ wird nur für Phasen ausgegeben, deren Werte sich zwischen den Szenarien unterscheiden.

Wenn die aktuellen Parameter bis 2021/4/10 andauern, scheint die vorhergesagte Anzahl infizierter Personen selbst ab 4/11 bei etwa 512 zu liegen. Wenn sich $ \ sigma $ verdoppelt, infizieren sich die infizierten Personen Die vorhergesagte Zahl ist 0.

12. Nachtrag

Vielen Dank, dass Sie diesmal auch stöbern! Wir würden uns freuen, wenn Sie uns Ihre Meinung mitteilen könnten, beispielsweise das Hinzufügen charakteristischer Werte.

Nächstes Mal werde ich erklären, wie die Wirksamkeit von Impfstoffen bewertet werden kann.

Recommended Posts

[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: Szenarioanalyse (Parametervergleich)
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: Parameterschätzung
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: Laden von Daten
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: SIR-F-Modell
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: S-R-Trendanalyse
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: SIR-Modell
Python für die Datenanalyse Kapitel 4
Python für die Datenanalyse Kapitel 2
Python für die Datenanalyse Kapitel 3
Vorverarbeitungsvorlage für die Datenanalyse (Python)
Python-Visualisierungstool für die Datenanalyse
Datenanalyse Python
Datenanalyse mit Python 2
Datenanalyse Übersicht Python
Python-Datenanalysevorlage
Python Package Manager-Vergleich
Datenanalyse mit Python
Lassen Sie uns Covid-19 (Corona) -Daten mit Python analysieren [Für Anfänger]
[Für Anfänger] So studieren Sie den Python3-Datenanalysetest
Mein Python-Datenanalyse-Container
[Python] Hinweise zur Datenanalyse
[In kürzester Zeit verstehen] Python-Grundlagen für die Datenanalyse
Welches sollte ich für die Datenanalyse studieren, R oder Python?
Lernnotizen zur Python-Datenanalyse
<Python> Erstellen Sie einen Server für die Datenanalyse mit Jupyter Notebook
Datenanalyse mit Python-Pandas
Tipps und Vorsichtsmaßnahmen bei der Datenanalyse
Praxis der Datenanalyse durch Python und Pandas (Tokyo COVID-19 Data Edition)
Erstellen Sie ein USB-Boot-Ubuntu mit einer Python-Umgebung für die Datenanalyse
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Python-Kurs für datenwissenschaftlich-nützliche Techniken
Datenanalyse zur Verbesserung von POG 3 ~ Regressionsanalyse ~
Datenformatierung für Python / Farbdiagramme
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Python-E-Book-Zusammenfassung nützlich für die frei lesbare Datenanalyse
Vergleichstabelle für Python-Umgebungstools für Rubyist
Detaillierte Python-Techniken für die Datenformung (1)
[Python] Erste Datenanalyse / maschinelles Lernen (Kaggle)
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Verwendung von "deque" für Python-Daten
Detaillierte Python-Techniken für die Datenformung (2)
Ich habe ein Python-Datenanalysetraining aus der Ferne durchgeführt
Vorbereitung auf die von Python 3 Engineer zertifizierte Datenanalyseprüfung
JupyterLab Grundeinstellung 2 für die Datenanalyse (pip)
JupyterLab Basic Setup für die Datenanalyse (pip)
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten