J'ai fait une simple carte de série chronologique hebdomadaire de l'infection à coronavirus avec complot. J'ai apporté les données une par une du pdf posté sur le site de l'OMS (c'était dur ...). Coronavirus disease (COVID-2019) situation reports
J'ai peur de l'augmentation du nombre de régions asiatiques. .. .. De plus, même s'il y a moins de 100 personnes en Europe, aux États-Unis et au Canada, je crains également qu'elles ne se manifestent.
――Au 21 février 2020, il y avait environ 140000 personnes infectées en Chine, mais si l'échelle est la même, les données d'autres pays ne seront pas visibles, alors divisez par 100 et réduisez à 1000 personnes. «Pourtant, certains pays à un ou deux chiffres sont encore trop petits pour être visualisés, nous multiplions donc par dix. ――Les données pour le Japon incluent les passagers du Princess Diamond, donc le nombre est d'environ 600. S'il n'est pas inclus, il y a 21 personnes au 21 février 2020.
Environnement: Google Colab Langage: python
Visualisez en utilisant plotly
. Puisque plotly
gère le code du nom du pays (JPN etc. pour le Japon) au lieu du nom du pays tel qu'il est, importez le country_converter
pour le convertir en code du nom du pays. Le traitement des données se fait avec des «pandas».
#Si non
!pip install plotly
!pip install country_converter
!pip install pandas
import country_converter as coco
import plotly.express as px
import pandas as pd
Tous ces éléments sont copiés et fabriqués à la main à partir du pdf du site de l'OMS, je suis donc désolé s'il y a une erreur. .. .. Je me demande s'il existe une meilleure base de données. .. ..
Stockez toutes ces données dans un 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)
Les cinq premières lignes de concated
ressemblent à ceci:
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 |
La conversion d'un nom de pays en code de pays et de manière graphique utilisera des données ordonnées, utilisez donc pd.melt pour convertir.
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)
Voici à quoi cela ressemble pour les «données» converties en données ordonnées.
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 |
Je veux visualiser les données ici,
Il y a un problème, alors ajustez l'échelle là-bas.
Cela a facilité la visibilité sur la carte (je ne sais pas vraiment si c'est éthique ...)
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()
Cela devrait vous donner une carte.
=======================Pareil qu'avant=======================
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()
Si tel est le cas, il est possible d'exclure le Japon, la Chine et la Corée du Sud, qui comptent de nombreuses personnes infectées, et de les visualiser. Dans ce cas, les données pour «2020/02/21» sont les suivantes.
L'Asie du Sud-Est, l'Europe et l'Amérique du Nord sont particulièrement visibles.
J'espère qu'il convergera le plus tôt possible. .. ..
Recommended Posts