Erstellen Sie mit Python + Plotly eine animierte Zeitreihenkarte des Infektionsstatus des Corona-Virus

Animierte Zeitreihenkarte des Koronainfektionsstatus

ezgif.com-video-to-gif.gif

Ich habe eine einfache wöchentliche Zeitreihenkarte der Coronavirus-Infektion mit Plotly erstellt. Ich habe die Daten einzeln aus dem auf der WHO-Website veröffentlichten PDF mitgebracht (es war schwer ...). Coronavirus disease (COVID-2019) situation reports

Ich habe Angst, wie sich die Anzahl der asiatischen Regionen erhöhen wird. .. .. Obwohl es in Europa, den USA und Kanada weniger als 100 Menschen gibt, mache ich mir auch Sorgen, dass sie auftauchen.

[Hinweise zu Daten]

―― Ab dem 21. Februar 2020 gibt es in China etwa 140.000 Infizierte. Wenn die Skala jedoch gleich ist, werden Daten aus anderen Ländern nicht angezeigt. Teilen Sie sie durch 100 und verkleinern Sie sie auf 1000 Personen. ――Noch sind einige ein- und zweistellige Länder noch zu klein, um visualisiert zu werden. Daher vergrößern wir sie um das Zehnfache. ――Die Daten für Japan enthalten die Passagiere der Princess Diamond, daher sind es ungefähr 600. Wenn nicht enthalten, gibt es am 21. Februar 2020 21 Personen.

Code bei der Erstellung

Umgebung: Google Colab Sprache: Python

Modul

Visualisieren Sie mit plotly. Da plotly den Ländernamencode (JPN usw. für Japan) anstelle des Ländernamens behandelt, importieren Sie den country_converter, um ihn in den Ländernamencode zu konvertieren. Die Datenverarbeitung erfolgt mit "Pandas".

#Wenn nicht
!pip install plotly
!pip install country_converter
!pip install pandas

import country_converter as coco
import plotly.express as px
import pandas as pd

Daten lesen

All dies wurde aus dem PDF der WHO-Website kopiert und handgefertigt. Es tut mir leid, wenn ein Fehler vorliegt. .. .. Ich frage mich, ob es eine bessere Datenbank gibt. .. ..

Speichern Sie alle diese Daten in einem DataFrame.

dict_01_22 = {"2020/01/22":
              {"China": 310,
               "Japan": 1,
               "Republic of Korea": 1,
               "Thailand": 2}}
dict_01_30 = {"2020/01/30":
              {"China": 7737,
               "Japan": 11,
               "Republic of Korea": 4,
               "Vietnam": 2,
               "Singapore": 10,
               "Australia": 7,
               "Malaysia": 7,
               "Cambodia": 1,
               "Philippines": 1,
               "Nepal": 1,
               "Sri Lanka": 1,
               "India": 1,
               "United States of America": 5,
               "Canada": 3,
               "France": 5,
               "Finland": 1,
               "Germany": 4,
               "United Arab Emirates": 4,
               "Thailand": 14}}
dict_02_07 = {"2020/02/07":
              {"China": 31211,
               "Japan": 91,
               "Republic of Korea": 24,
               "Vietnam": 12,
               "Singapore": 30,
               "Australia": 15,
               "Malaysia": 14,
               "Cambodia": 1,
               "Philippines": 3,
               "Nepal": 1,
               "Sri Lanka": 1,
               "India": 3,
               "United States of America": 12,
               "Canada": 7,
               "France": 6,
               "Belgium": 1,
               "Italy": 3,
               "Finland": 1,
               "Spain": 1,
               "Sweden": 1,
               "Germany": 13,
               "The United Kingdom": 3,
               "United Arab Emirates": 5,
               "Russia": 2,
               "Thailand": 25}}
dict_02_14 = {"2020/02/14":
              {"China": 142823,
               "Japan": 251,
               "Republic of Korea": 28,
               "Vietnam": 16,
               "Singapore": 58,
               "Australia": 15,
               "Malaysia": 14,
               "Cambodia": 1,
               "Philippines": 3,
               "Nepal": 1,
               "Sri Lanka": 1,
               "India": 3,
               "United States of America": 15,
               "Canada": 7,
               "France": 11,
               "Belgium": 1,
               "Italy": 3,
               "Finland": 1,
               "Spain": 2,
               "Sweden": 1,
               "Germany": 16,
               "The United Kingdom": 9,
               "United Arab Emirates": 8,
               "Russia": 2,
               "Thailand": 33}}
dict_02_21 = {"2020/02/21":
              {"China": 142823,
               "Japan": 727,
               "Republic of Korea": 204,
               "Vietnam": 16,
               "Singapore": 85,
               "Australia": 17,
               "Malaysia": 22,
               "Cambodia": 1,
               "Philippines": 3,
               "Nepal": 1,
               "Sri Lanka": 1,
               "India": 3,
               "United States of America": 15,
               "Canada": 8,
               "France": 12,
               "Belgium": 1,
               "Italy": 3,
               "Finland": 1,
               "Spain": 2,
               "Sweden": 1,
               "Germany": 16,
               "The United Kingdom": 9,
               "United Arab Emirates": 9,
               "Iran": 5,
               "Egypt": 1,
               "Russia": 2,
               "Thailand": 35}}
concated = pd.concat([
                      pd.DataFrame(dict_01_22),
                      pd.DataFrame(dict_01_30),
                      pd.DataFrame(dict_02_07),
                      pd.DataFrame(dict_02_14),
                      pd.DataFrame(dict_02_21)], axis=1, sort=True).fillna(0)

Die ersten fünf Zeilen von "concated" sehen folgendermaßen aus:

2020/01/22 2020/01/30 2020/02/07 2020/02/14 2020/02/21
Australia 0.0 7.0 15.0 15.0 17
Belgium 0.0 0.0 1.0 1.0 1
Cambodia 0.0 1.0 1.0 1.0 1
Canada 0.0 3.0 7.0 7.0 8
China 310.0 7737.0 31211.0 142823.0 142823

Datenverarbeitung

Wenn Sie einen Ländernamen in einen Ländercode konvertieren und Plotly verwenden, werden ordentliche Daten verwendet. Verwenden Sie daher pd.melt zum Konvertieren.

time_periods = [column for column in concated.columns]
df = concated.reset_index().rename(columns={"index": "country"})
df["ISO"] = df["country"].apply(lambda x: coco.convert(x))
data = pd.melt(df, id_vars=["ISO"], value_vars=time_periods)

So sieht es aus, wenn die Daten in ordentliche Daten konvertiert werden.

ISO variable value
0 AUS 2020/01/22 0.0
1 BEL 2020/01/22 0.0
2 KHM 2020/01/22 0.0
3 CAN 2020/01/22 0.0
4 CHN 2020/01/22 310.0

Endlich Datenvisualisierung

Ich möchte die Daten hier visualisieren,

Es liegt ein Problem vor. Passen Sie die Skala dort an.

Dies machte es einfacher, auf der Karte zu sehen (ich weiß nicht wirklich, ob es ethisch ist ...).


data_for_map = data
for ind in data[(data["ISO"] != "CHN") & (data["ISO"] != "JPN") & (data["ISO"] != "KOR")].index:
  data_for_map.at[ind, "value"] = data_for_map.at[ind, "value"] * 10
for ind in data[data["ISO"] == "CHN"].index:
  data_for_map.at[ind, "value"] = data_for_map.at[ind, "value"] // 100
fig = px.scatter_geo(data_for_map, locations="ISO",size="value",
                     animation_frame="variable",
                     projection="natural earth")
fig.show()

Dies sollte Ihnen eine Karte geben.

==============================================
time_periods = [column for column in concated.columns]
df = concated.reset_index().rename(columns={"index": "country"})
df["ISO"] = df["country"].apply(lambda x: coco.convert(x))
data = pd.melt(df, id_vars=["ISO"], value_vars=time_periods)
==========================================================

data_for_map = data[(data["ISO"] != "CHN") & (data["ISO"] != "JPN") & (data["ISO"] != "KOR")]

fig = px.scatter_geo(data_for_map, locations="ISO",size="value",
                     animation_frame="variable",
                     projection="natural earth")
fig.show()

ezgif.com-video-to-gif (1).gif

Recommended Posts

Erstellen Sie mit Python + Plotly eine animierte Zeitreihenkarte des Infektionsstatus des Corona-Virus
Lassen Sie uns den Infektionsstatus des Corona-Virus mit Plotly [für Anfänger] visualisieren.
Erstellen Sie mit Python + Flask einen animierten lokalen GIF-Server
[Zeitreihen mit Handlung] Dynamische Visualisierung mit Handlung [Python, Aktienkurs]
Erstellen Sie schnell eine Excel-Datei mit Python #python
[Python] Beschleunigt das Laden von Zeitreihen-CSV
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
[Python] Erstellen Sie schnell eine API mit Flask
Erstellen Sie eine englische Wort-App mit Python
Erstellen Sie eine App, die Schüler mit Python errät
Erstellen Sie eine Umgebung mit 64-Bit-Windows + Python 2.7 + MeCab 0.996
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
Erstellen Sie schnell einen API-Server mit Python + Falcon
Implementierung der Clustering-K-Form-Methode für Zeitreihendaten [Unüberwachtes Lernen mit Python Kapitel 13]
Visualisieren Sie mit Plotly die Zeitreihenvorhersagen des Propheten klarer
Python 3.4 Windows7-64bit-Umgebung erstellen (für die Analyse finanzieller Zeitreihen)
Holen Sie sich mit Python den Betriebsstatus von JR West
"Zeitreihenanalyse von Wirtschafts- und Finanzdaten messen" Das Problem am Ende des Kapitels mit Python lösen
Python: Zeitreihenanalyse
Python-Zeitreihenfrage
Kartenfunktion - Grundlegende Python-Grammatik, die mit einem interessanten Beispielprogramm gelernt wurde
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
Formatieren Sie die Zeitachse des Pandas-Zeitreihendiagramms mit matplotlib neu
[Python Kivy] So erstellen Sie mit pyinstaller eine exe-Datei
[Django] Memo zum Erstellen einer Umgebung von Django + MySQL + Vue.js [Python]
Drehen Sie ein Array von Zeichenfolgen mit einer for-Anweisung (Python3).
[Python] Erstellen Sie mit Django einen Bildschirm für den HTTP-Statuscode 403/404/500