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.
―― 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.
Umgebung: Google Colab Sprache: Python
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
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 |
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 |
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()
Recommended Posts