Il y avait une vidéo de conférence sur YouTube à l'étranger qui utilise Python pour analyser des données à l'aide de données telles que le nombre de personnes infectées par Covid-19 (Corona), alors je l'ai essayé.
Cliquez ici pour la vidéo source ↓ Analyzing Coronavirus with Python (COVID-19) by NeuralNine on Youtube
Particulièrement recommandé pour les débutants en Python qui veulent s'habituer aux Pandas et qui souhaitent analyser des données. La conférence est en anglais, mais c'est une explication très simple et polie, alors jetez un œil.
Analyzing Coronavirus with Python (COVID-19) by NeuralNine on Youtube
Téléchargez le jeu de données à partir du site suivant HDX(HUMANITARIAN DATA EXCHANGE)
Utilisez ce qui suit dans l'ensemble de données lié
Ce sont les données de [Infection (confirmation), nombre de décès, nombre de guérisseurs].
Le nom des données est long, changez-le comme suit.
Importer la bibliothèque
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
Lisez les données
confirmed = pd.read_csv("covid19_confirmed.csv")
deaths = pd.read_csv("covid19_deaths.csv")
recovered = pd.read_csv("covid19_recovered.csv")
Afficher les données de la personne infectée à titre d'essai (* Dans la vidéo originale, il s'agit des données du 22/03 au moment de la prise de vue, mais ce qui suit est jusqu'au 1/5)
confirmed.head()
Province/State | Country/Region | Lat | Long | 1/22/20 | 1/23/20 | 1/24/20 | 1/25/20 | 1/26/20 | 1/27/20 | ... | 4/22/20 | 4/23/20 | 4/24/20 | 4/25/20 | 4/26/20 | 4/27/20 | 4/28/20 | 4/29/20 | 4/30/20 | 5/1/20 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | NaN | Afghanistan | 33.0000 | 65.0000 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 1176 | 1279 | 1351 | 1463 | 1531 | 1703 | 1828 | 1939 | 2171 | 2335 |
1 | NaN | Albania | 41.1533 | 20.1683 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 634 | 663 | 678 | 712 | 726 | 736 | 750 | 766 | 773 | 782 |
2 | NaN | Algeria | 28.0339 | 1.6596 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 2910 | 3007 | 3127 | 3256 | 3382 | 3517 | 3649 | 3848 | 4006 | 4154 |
3 | NaN | Andorra | 42.5063 | 1.5218 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 723 | 723 | 731 | 738 | 738 | 743 | 743 | 743 | 745 | 745 |
4 | NaN | Angola | -11.2027 | 17.8739 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 25 | 25 | 25 | 25 | 26 | 27 | 27 | 27 | 27 | 30 |
5 rows × 105 columns
Cette fois, je n'ai pas tellement besoin de Provider et Lat / Long, donc je supprimerai chaque colonne.
confirmed = confirmed.drop(['Province/State','Lat','Long'],axis=1)
deaths = deaths.drop(['Province/State','Lat','Long'],axis=1)
recovered = recovered.drop(['Province/State','Lat','Long'],axis=1)
Agrégons ces données par pays / région
confirmed = confirmed.groupby(confirmed["Country/Region"]).aggregate("sum")
deaths = deaths.groupby(deaths["Country/Region"]).aggregate("sum")
recovered = recovered.groupby(recovered["Country/Region"]).aggregate("sum")
confirmed.head()
1/22/20 | 1/23/20 | 1/24/20 | 1/25/20 | 1/26/20 | 1/27/20 | 1/28/20 | 1/29/20 | 1/30/20 | 1/31/20 | ... | 4/22/20 | 4/23/20 | 4/24/20 | 4/25/20 | 4/26/20 | 4/27/20 | 4/28/20 | 4/29/20 | 4/30/20 | 5/1/20 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Country/Region | |||||||||||||||||||||
Afghanistan | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 1176 | 1279 | 1351 | 1463 | 1531 | 1703 | 1828 | 1939 | 2171 | 2335 |
Albania | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 634 | 663 | 678 | 712 | 726 | 736 | 750 | 766 | 773 | 782 |
Algeria | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 2910 | 3007 | 3127 | 3256 | 3382 | 3517 | 3649 | 3848 | 4006 | 4154 |
Andorra | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 723 | 723 | 731 | 738 | 738 | 743 | 743 | 743 | 745 | 745 |
Angola | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 25 | 25 | 25 | 25 | 26 | 27 | 27 | 27 | 27 | 30 |
5 rows × 101 columns
Et ensuite, la date est la quantité de caractéristiques, mais cette fois nous voulons faire du pays la quantité de caractéristiques, nous allons donc transposer (remplacer la matrice) les données.
confirmed = confirmed.T
deaths = deaths.T
recovered = recovered.T
confirmed.head()
Country/Region | Afghanistan | Albania | Algeria | Andorra | Angola | Antigua and Barbuda | Argentina | Armenia | Australia | Austria | ... | United Kingdom | Uruguay | Uzbekistan | Venezuela | Vietnam | West Bank and Gaza | Western Sahara | Yemen | Zambia | Zimbabwe |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1/22/20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1/23/20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
1/24/20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
1/25/20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
1/26/20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | ... | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
5 rows × 187 columns
À ce stade, les données sont prêtes. Passons au calcul.
Tout d'abord, regardons l'évolution du nombre de personnes infectées. Les données requises ici sont la différence entre le nombre de personnes infectées ce jour-là et la veille.
new_cases = confirmed.copy()
for day in range(1,len(confirmed)):
new_cases.iloc[day] = confirmed.iloc[day] - confirmed.iloc[day - 1]
Afficher les données des 10 derniers jours
new_cases.tail(10)
Country/Region | Afghanistan | Albania | Algeria | Andorra | Angola | Antigua and Barbuda | Argentina | Armenia | Australia | Austria | ... | United Kingdom | Uruguay | Uzbekistan | Venezuela | Vietnam | West Bank and Gaza | Western Sahara | Yemen | Zambia | Zimbabwe |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4/22/20 | 84 | 25 | 99 | 6 | 1 | 1 | 113 | 72 | 7 | 52 | ... | 4466 | 8 | 38 | 3 | 0 | 8 | 0 | 0 | 4 | 0 |
4/23/20 | 103 | 29 | 97 | 0 | 0 | 0 | 291 | 50 | 10 | 77 | ... | 4608 | 14 | 42 | 23 | 0 | 6 | 0 | 0 | 2 | 0 |
4/24/20 | 72 | 15 | 120 | 8 | 0 | 0 | 172 | 73 | 15 | 69 | ... | 5394 | 6 | 46 | 7 | 2 | 4 | 0 | 0 | 8 | 1 |
4/25/20 | 112 | 34 | 129 | 7 | 0 | 0 | 173 | 81 | 17 | 77 | ... | 4929 | 33 | 58 | 5 | 0 | -142 | 0 | 0 | 0 | 2 |
4/26/20 | 68 | 14 | 126 | 0 | 1 | 0 | 112 | 69 | 20 | 77 | ... | 4468 | 10 | 7 | 2 | 0 | 0 | 0 | 0 | 4 | 0 |
4/27/20 | 172 | 10 | 135 | 5 | 1 | 0 | 111 | 62 | 7 | 49 | ... | 4311 | 14 | 35 | 4 | 0 | 0 | 0 | 0 | 0 | 1 |
4/28/20 | 125 | 14 | 132 | 0 | 0 | 0 | 124 | 59 | 23 | 83 | ... | 4002 | 5 | 35 | 0 | 0 | 1 | 0 | 0 | 7 | 0 |
4/29/20 | 111 | 16 | 199 | 0 | 0 | 0 | 158 | 65 | 8 | 45 | ... | 4091 | 5 | 63 | 2 | 0 | 1 | 0 | 5 | 2 | 0 |
4/30/20 | 232 | 7 | 158 | 2 | 0 | 0 | 143 | 134 | 14 | 50 | ... | 6040 | 13 | 37 | 2 | 0 | 0 | 0 | 0 | 9 | 8 |
5/1/20 | 164 | 9 | 148 | 0 | 3 | 1 | 104 | 82 | 12 | 79 | ... | 6204 | 5 | 47 | 2 | 0 | 9 | 0 | 1 | 3 | 0 |
10 rows × 187 columns
Comparons avec les données des personnes infectées
confirmed.tail(10)
Country/Region | Afghanistan | Albania | Algeria | Andorra | Angola | Antigua and Barbuda | Argentina | Armenia | Australia | Austria | ... | United Kingdom | Uruguay | Uzbekistan | Venezuela | Vietnam | West Bank and Gaza | Western Sahara | Yemen | Zambia | Zimbabwe |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4/22/20 | 1176 | 634 | 2910 | 723 | 25 | 24 | 3144 | 1473 | 6652 | 14925 | ... | 134638 | 543 | 1716 | 288 | 268 | 474 | 6 | 1 | 74 | 28 |
4/23/20 | 1279 | 663 | 3007 | 723 | 25 | 24 | 3435 | 1523 | 6662 | 15002 | ... | 139246 | 557 | 1758 | 311 | 268 | 480 | 6 | 1 | 76 | 28 |
4/24/20 | 1351 | 678 | 3127 | 731 | 25 | 24 | 3607 | 1596 | 6677 | 15071 | ... | 144640 | 563 | 1804 | 318 | 270 | 484 | 6 | 1 | 84 | 29 |
4/25/20 | 1463 | 712 | 3256 | 738 | 25 | 24 | 3780 | 1677 | 6694 | 15148 | ... | 149569 | 596 | 1862 | 323 | 270 | 342 | 6 | 1 | 84 | 31 |
4/26/20 | 1531 | 726 | 3382 | 738 | 26 | 24 | 3892 | 1746 | 6714 | 15225 | ... | 154037 | 606 | 1869 | 325 | 270 | 342 | 6 | 1 | 88 | 31 |
4/27/20 | 1703 | 736 | 3517 | 743 | 27 | 24 | 4003 | 1808 | 6721 | 15274 | ... | 158348 | 620 | 1904 | 329 | 270 | 342 | 6 | 1 | 88 | 32 |
4/28/20 | 1828 | 750 | 3649 | 743 | 27 | 24 | 4127 | 1867 | 6744 | 15357 | ... | 162350 | 625 | 1939 | 329 | 270 | 343 | 6 | 1 | 95 | 32 |
4/29/20 | 1939 | 766 | 3848 | 743 | 27 | 24 | 4285 | 1932 | 6752 | 15402 | ... | 166441 | 630 | 2002 | 331 | 270 | 344 | 6 | 6 | 97 | 32 |
4/30/20 | 2171 | 773 | 4006 | 745 | 27 | 24 | 4428 | 2066 | 6766 | 15452 | ... | 172481 | 643 | 2039 | 333 | 270 | 344 | 6 | 6 | 106 | 40 |
5/1/20 | 2335 | 782 | 4154 | 745 | 30 | 25 | 4532 | 2148 | 6778 | 15531 | ... | 178685 | 648 | 2086 | 335 | 270 | 353 | 6 | 7 | 109 | 40 |
10 rows × 187 columns
Par exemple, l'Afghanistan, l'Algérie, l'Argentine et le Royaume-Uni ont un grand nombre absolu de personnes infectées, mais nous pouvons voir que le nombre de personnes nouvellement infectées est encore important.
Dans new_cases, nous avons examiné les "augmentations" quotidiennes du nombre de personnes infectées, mais regardons ensuite le "taux d'augmentation". (Augmentation de la journée / Nombre de personnes infectées la veille) * 100 peuvent être utilisées pour augmenter le taux.
growth_rate = confirmed.copy()
for day in range(1,len(growth_rate)):
growth_rate.iloc[day] = ( new_cases.iloc[day] / confirmed.iloc[day-1] ) * 100
growth_rate.tail(10)
Country/Region | Afghanistan | Albania | Algeria | Andorra | Angola | Antigua and Barbuda | Argentina | Armenia | Australia | Austria | ... | United Kingdom | Uruguay | Uzbekistan | Venezuela | Vietnam | West Bank and Gaza | Western Sahara | Yemen | Zambia | Zimbabwe |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4/22/20 | 7.692308 | 4.105090 | 3.521878 | 0.836820 | 4.166667 | 4.347826 | 3.728143 | 5.139186 | 0.105342 | 0.349627 | ... | 3.430845 | 1.495327 | 2.264601 | 1.052632 | 0.000000 | 1.716738 | 0.0 | 0.000000 | 5.714286 | 0.000000 |
4/23/20 | 8.758503 | 4.574132 | 3.333333 | 0.000000 | 0.000000 | 0.000000 | 9.255725 | 3.394433 | 0.150331 | 0.515913 | ... | 3.422511 | 2.578269 | 2.447552 | 7.986111 | 0.000000 | 1.265823 | 0.0 | 0.000000 | 2.702703 | 0.000000 |
4/24/20 | 5.629398 | 2.262443 | 3.990688 | 1.106501 | 0.000000 | 0.000000 | 5.007278 | 4.793171 | 0.225158 | 0.459939 | ... | 3.873720 | 1.077199 | 2.616610 | 2.250804 | 0.746269 | 0.833333 | 0.0 | 0.000000 | 10.526316 | 3.571429 |
4/25/20 | 8.290155 | 5.014749 | 4.125360 | 0.957592 | 0.000000 | 0.000000 | 4.796230 | 5.075188 | 0.254605 | 0.510915 | ... | 3.407771 | 5.861456 | 3.215078 | 1.572327 | 0.000000 | -29.338843 | 0.0 | 0.000000 | 0.000000 | 6.896552 |
4/26/20 | 4.647984 | 1.966292 | 3.869779 | 0.000000 | 4.000000 | 0.000000 | 2.962963 | 4.114490 | 0.298775 | 0.508318 | ... | 2.987250 | 1.677852 | 0.375940 | 0.619195 | 0.000000 | 0.000000 | 0.0 | 0.000000 | 4.761905 | 0.000000 |
4/27/20 | 11.234487 | 1.377410 | 3.991721 | 0.677507 | 3.846154 | 0.000000 | 2.852004 | 3.550974 | 0.104260 | 0.321839 | ... | 2.798678 | 2.310231 | 1.872659 | 1.230769 | 0.000000 | 0.000000 | 0.0 | 0.000000 | 0.000000 | 3.225806 |
4/28/20 | 7.339988 | 1.902174 | 3.753199 | 0.000000 | 0.000000 | 0.000000 | 3.097677 | 3.263274 | 0.342211 | 0.543407 | ... | 2.527345 | 0.806452 | 1.838235 | 0.000000 | 0.000000 | 0.292398 | 0.0 | 0.000000 | 7.954545 | 0.000000 |
4/29/20 | 6.072210 | 2.133333 | 5.453549 | 0.000000 | 0.000000 | 0.000000 | 3.828447 | 3.481521 | 0.118624 | 0.293026 | ... | 2.519864 | 0.800000 | 3.249097 | 0.607903 | 0.000000 | 0.291545 | 0.0 | 500.000000 | 2.105263 | 0.000000 |
4/30/20 | 11.964930 | 0.913838 | 4.106029 | 0.269179 | 0.000000 | 0.000000 | 3.337223 | 6.935818 | 0.207346 | 0.324633 | ... | 3.628914 | 2.063492 | 1.848152 | 0.604230 | 0.000000 | 0.000000 | 0.0 | 0.000000 | 9.278351 | 25.000000 |
5/1/20 | 7.554123 | 1.164295 | 3.694458 | 0.000000 | 11.111111 | 4.166667 | 2.348690 | 3.969022 | 0.177357 | 0.511261 | ... | 3.596918 | 0.777605 | 2.305051 | 0.600601 | 0.000000 | 2.616279 | 0.0 | 16.666667 | 2.830189 | 0.000000 |
10 rows × 187 columns
Soit dit en passant, le nombre de personnes infectées (confirmé) est ce que l'on appelle le nombre cumulatif, alors obtenons ici le nombre actuel de personnes infectées (actives). En soustrayant [décès et guérison] de [confirmé], il semble que [nombre actuellement progressif de personnes infectées (actif)] puisse être calculé.
active_cases = confirmed.copy()
for day in range(0,len(confirmed)):
active_cases.iloc[day] = confirmed.iloc[day] - deaths.iloc[day] - recovered.iloc[day]
Ensuite, utilisons les données de ce nombre actuellement progressif de personnes infectées active_cases pour étudier à nouveau le taux d'augmentation du nombre de personnes infectées en cours de progression. En examinant cela, il semble que nous pouvons voir s'il est susceptible de converger.
overall_growth_rate = confirmed.copy()
for day in range(0,len(confirmed)):
overall_growth_rate.iloc[day] = ((active_cases.iloc[day] - active_cases.iloc[day-1]) / active_cases.iloc[day-1]) * 100
overall_growth_rate.tail(10)
Country/Region | Afghanistan | Albania | Algeria | Andorra | Angola | Antigua and Barbuda | Argentina | Armenia | Australia | Austria | ... | United Kingdom | Uruguay | Uzbekistan | Venezuela | Vietnam | West Bank and Gaza | Western Sahara | Yemen | Zambia | Zimbabwe |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4/22/20 | 7.064018 | 5.462185 | 2.920284 | -5.276382 | 6.250000 | -15.384615 | 3.718200 | 6.250000 | -12.214551 | -9.498681 | ... | 3.270797 | -1.895735 | -4.258555 | -1.265823 | -13.461538 | 2.046036 | 0.000000 | 0.000000 | 12.500000 | -4.347826 |
4/23/20 | 9.072165 | 0.000000 | -4.524540 | -6.366048 | 0.000000 | 0.000000 | 10.896226 | 2.941176 | -6.836056 | -9.750567 | ... | 3.411790 | -7.729469 | -5.480540 | 12.179487 | -2.222222 | -3.759398 | -83.333333 | 0.000000 | 0.000000 | 0.000000 |
4/24/20 | 5.860113 | 2.390438 | 4.738956 | -1.699717 | 0.000000 | -9.090909 | 4.423650 | 0.119048 | -5.064935 | -4.199569 | ... | 3.743980 | -4.712042 | -1.260504 | 0.571429 | 13.636364 | 1.041667 | 0.000000 | -100.000000 | 22.222222 | 4.545455 |
4/25/20 | 9.642857 | 9.727626 | 4.141104 | 2.017291 | 0.000000 | 0.000000 | 4.480652 | 0.594530 | -15.321477 | -5.994755 | ... | 3.332975 | 16.483516 | -2.382979 | 2.840909 | -10.000000 | -36.082474 | 0.000000 | NaN | 0.000000 | 8.695652 |
4/26/20 | 3.745928 | 2.127660 | 6.701031 | 0.000000 | 5.882353 | 0.000000 | 1.091618 | 4.609929 | -11.954766 | -4.304504 | ... | 3.232666 | 1.886792 | -6.538797 | -1.657459 | 0.000000 | 3.629032 | 0.000000 | NaN | -2.272727 | 0.000000 |
4/27/20 | 11.930926 | -0.694444 | 5.383023 | -10.169492 | 5.555556 | 0.000000 | 2.815272 | 5.197740 | -3.669725 | -1.582674 | ... | 3.051680 | 1.388889 | -6.343284 | -0.561798 | 0.000000 | 0.000000 | 0.000000 | NaN | 0.000000 | -8.000000 |
4/28/20 | 8.134642 | 1.048951 | 2.226588 | -4.402516 | 0.000000 | 0.000000 | 3.450863 | 4.296455 | -5.714286 | -6.559458 | ... | 2.318102 | -1.369863 | -6.474104 | 0.000000 | 6.666667 | 5.058366 | 0.000000 | NaN | 16.279070 | 0.000000 |
4/29/20 | 5.512322 | -2.768166 | 9.032671 | -8.552632 | -5.263158 | 0.000000 | 4.387237 | 3.192585 | -4.444444 | -7.472826 | ... | 2.386758 | -6.018519 | -4.472843 | 1.129944 | 0.000000 | 0.370370 | 0.000000 | inf | -20.000000 | 0.000000 |
4/30/20 | 13.521819 | -3.202847 | 4.406580 | -15.467626 | 0.000000 | 0.000000 | 2.605071 | 10.279441 | -1.585624 | -4.013705 | ... | 3.845988 | 2.955665 | 0.000000 | -2.234637 | 6.250000 | -1.845018 | 0.000000 | -40.000000 | 20.000000 | 34.782609 |
5/1/20 | 5.955604 | -3.308824 | 5.796286 | -0.425532 | -5.555556 | -30.000000 | 2.064997 | 2.986425 | -2.255639 | -6.578276 | ... | 3.750518 | -6.220096 | -3.567447 | 1.142857 | 0.000000 | 3.383459 | 0.000000 | 33.333333 | -33.333333 | 0.000000 |
10 rows × 187 columns
Tout d'abord, la Chine, qui est considérée comme un pays touché par la couronne, semble avoir récemment convergé, alors jetons un coup d'œil aux données des 10 derniers jours de la Chine.
overall_growth_rate['China'].tail(10)
4/22/20 -3.314528
4/23/20 -7.731583
4/24/20 -8.774704
4/25/20 -4.852686
4/26/20 -9.107468
4/27/20 -9.118236
4/28/20 -2.866593
4/29/20 -5.448354
4/30/20 -4.441777
5/1/20 -5.904523
Name: China, dtype: float64
On constate que le taux d'augmentation est négatif, c'est-à-dire que le nombre de personnes atteintes d'infections en cours continue de diminuer → il se dirige vers la convergence.
Ensuite, qu'en est-il de l'Italie?
overall_growth_rate['Italy'].tail(10)
4/22/20 -0.009284
4/23/20 -0.790165
4/24/20 -0.300427
4/25/20 -0.638336
4/26/20 0.241859
4/27/20 -0.273319
4/28/20 -0.574599
4/29/20 -0.520888
4/30/20 -2.967790
5/1/20 -0.598714
Name: Italy, dtype: float64
Le taux de diminution est inférieur à 1%, il s'agit donc d'une légère diminution, mais il n'a pas augmenté.
overall_growth_rate['US'].tail(10)
4/22/20 3.470050
4/23/20 3.307839
4/24/20 2.102556
4/25/20 3.874078
4/26/20 2.536775
4/27/20 2.064644
4/28/20 2.166569
4/29/20 2.377575
4/30/20 -0.668941
5/1/20 2.583283
Name: US, dtype: float64
L'Amérique augmente encore de quelques pour cent.
overall_growth_rate['Japan'].tail(10)
4/22/20 2.512198
4/23/20 6.794937
4/24/20 3.868765
4/25/20 2.382691
4/26/20 0.401248
4/27/20 5.408526
4/28/20 -3.589182
4/29/20 -2.875120
4/30/20 0.755803
5/1/20 -2.884444
Name: Japan, dtype: float64
Au Japon également, il semble qu'il diminue petit à petit, mais il est en augmentation.
Le Japon est un gros problème, alors jetons un coup d'œil au taux moyen d'augmentation au cours des 10 derniers jours.
overall_growth_rate['Japan'].tail(10).mean()
1.277542288600591
C'est environ 1%, mais il semble augmenter. Eh bien, le nombre de personnes infectées est encore faible au Japon, on peut donc dire qu'il est relativement supprimé.
De là, nous ajouterons la visualisation.
Regardons d'abord le taux de mortalité. La mortalité est importante car elle est un indicateur de la gravité de la couronne par région.
Premièrement, la base de données sur la mortalité est similaire à la procédure précédente. Le taux de mortalité est exprimé en termes de morts / infectés.
death_rate = confirmed.copy()
for day in range(0,len(confirmed)):
death_rate.iloc[day] = (deaths.iloc[day] / confirmed.iloc[day]) * 100
Ensuite, calculez le nombre de lits dont vous avez besoin (et, inversement, la probabilité que vous soyez à court). Nous utilisons le taux d'hospitalisation «hospitalisation», qui est le pourcentage de personnes infectées qui ont besoin d'un hôpital. Je ne connais pas le bon numéro, je vais donc utiliser un numéro temporaire (0,05 dans ce cas). Vous pouvez le changer en n'importe quel nombre de votre choix. Dans cette conférence, nous nous concentrerons sur les méthodes d'analyse et de calcul, nous laisserons donc la précision pour le moment.
hospitalization_rate_estimate = 0.05
hospitalization_needed = confirmed.copy()
for day in range(0,len(confirmed)):
hospitalization_needed.iloc[day] = active_cases.iloc[day] * hospitalization_rate_estimate
hospitalization_needed.tail()
Country/Region | Afghanistan | Albania | Algeria | Andorra | Angola | Antigua and Barbuda | Argentina | Armenia | Australia | Austria | ... | United Kingdom | Uruguay | Uzbekistan | Venezuela | Vietnam | West Bank and Gaza | Western Sahara | Yemen | Zambia | Zimbabwe |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4/27/20 | 71.30 | 14.30 | 76.35 | 15.90 | 0.95 | 0.50 | 133.30 | 46.55 | 52.50 | 118.15 | ... | 6654.15 | 10.95 | 50.20 | 8.85 | 2.25 | 12.85 | 0.05 | 0.00 | 2.15 | 1.15 |
4/28/20 | 77.10 | 14.45 | 78.05 | 15.20 | 0.95 | 0.50 | 137.90 | 48.55 | 49.50 | 110.40 | ... | 6808.40 | 10.80 | 46.95 | 8.85 | 2.40 | 13.50 | 0.05 | 0.00 | 2.50 | 1.15 |
4/29/20 | 81.35 | 14.05 | 85.10 | 13.90 | 0.90 | 0.50 | 143.95 | 50.10 | 47.30 | 102.15 | ... | 6970.90 | 10.15 | 44.85 | 8.95 | 2.40 | 13.55 | 0.05 | 0.25 | 2.00 | 1.15 |
4/30/20 | 92.35 | 13.60 | 88.85 | 11.75 | 0.90 | 0.50 | 147.70 | 55.25 | 46.55 | 98.05 | ... | 7239.00 | 10.45 | 44.85 | 8.75 | 2.55 | 13.30 | 0.05 | 0.15 | 2.40 | 1.55 |
5/1/20 | 97.85 | 13.15 | 94.00 | 11.70 | 0.85 | 0.35 | 150.75 | 56.90 | 45.50 | 91.60 | ... | 7510.50 | 9.80 | 43.25 | 8.85 | 2.55 | 13.75 | 0.05 | 0.20 | 1.60 | 1.55 |
5 rows × 187 columns
Même si vous supprimez un pays ici, il est difficile de comprendre à quel point c'est grave, alors regardons la moyenne des 5 derniers jours.
hospitalization_needed.tail().mean().mean()
532.5691978609626
Nombre moyen de lits requis dans tous les pays au cours des 5 derniers jours. Bien sûr, il y a des variations, donc ce n'est pas une valeur de référence très idéale, mais j'y reviendrai une fois. Jetons un coup d'œil à la moyenne des 5 derniers jours en Italie.
hospitalization_needed['Italy'].tail().mean()
5181.6900000000005
En d'autres termes, ce chiffre était environ 10 fois supérieur à la moyenne mondiale. C'est assez sérieux.
Visualiser. Cependant, il y a trop de pays, alors choisissons des pays arbitraires cette fois. Ici, sélectionnez Italie, Amérique, Chine, Japon, Russie Espagne.
countries = ['Italy','US',"China","Japan","Russia","Spain"]
ax = plt.subplot()
ax.set_facecolor("black")
ax.figure.set_facecolor("#121212")
ax.tick_params(axis="x",colors="white")
ax.tick_params(axis="y",colors="white")
ax.set_title("covid-19 confirmed by countries",color="white")
for country in countries:
confirmed[country].plot(label=country)
plt.legend(loc="upper left")
plt.show()
Le nombre de personnes infectées aux États-Unis a considérablement augmenté depuis la fin du mois de mars. Voyons le nombre de morts.
La forme du graphique ne change pas beaucoup, et elle semble être associée au nombre de personnes infectées.
Ensuite, traçons le taux d'augmentation des personnes infectées.
Mais maintenant, je trace sur un graphique à barres. De plus, dans un graphique à barres, si le graphique se chevauche trop sur une figure, la visibilité sera faible, donc il sera affiché séparément.
for country in countries:
ax = plt.subplot()
ax.set_facecolor("black")
ax.figure.set_facecolor("#121212")
ax.tick_params(axis="x",colors="white")
ax.tick_params(axis="y",colors="white")
ax.set_title(f"covid-19 confirmed growth rate {country}",color="white")
growth_rate[country].plot.bar()
plt.show()
De la même manière, regardons le nombre de décès et le taux de mortalité (* Ce qui précède est le "taux d'augmentation des personnes infectées" et c'est le "taux de mortalité").
ax = plt.subplot()
ax.set_facecolor("black")
ax.figure.set_facecolor("#121212")
ax.tick_params(axis="x",colors="white")
ax.tick_params(axis="y",colors="white")
ax.set_title("covid-19 deaths by countries",color="white")
for country in countries:
deaths[country].plot(label=country)
plt.legend(loc="upper left")
plt.show()
for country in countries:
ax = plt.subplot()
ax.set_facecolor("black")
ax.figure.set_facecolor("#121212")
ax.tick_params(axis="x",colors="white")
ax.tick_params(axis="y",colors="white")
ax.set_title(f"covid-19 deaths rate {country}",color="white")
death_rate[country].plot.bar()
plt.show()
Vous pouvez voir que le taux de mortalité varie selon les pays.
Enfin, passons à la simulation des effets du virus corona à l'avenir. Comme valeur provisoire, supposons que le nombre de personnes infectées augmente de 1% sur une base quotidienne.
simulated_growth_rate = 0.01
Ajoutez maintenant les nouvelles données de date à venir pour vos prédictions. Utilisez la méthode date_range, qui vous permet de spécifier une plage et de générer des données de date. Les dernières données utilisées cette fois-ci sont le 05/01/20, elles seront donc à 40 jours du jour suivant.
dates = pd.date_range(start="05/02/2020",periods=40,freq='D')
dates = pd.Series(dates)
dates = dates.dt.strftime("%m/%d/%Y")
simulated = confirmed.copy()
simulated = simulated.append(pd.DataFrame(index=dates))
for day in range(len(confirmed),len(confirmed)+40):
simulated.iloc[day] = simulated.iloc[day-1] * (1 + simulated_growth_rate)
ax = plt.subplot()
ax.set_facecolor("black")
ax.figure.set_facecolor("#121212")
ax.tick_params(axis="x",colors="white")
ax.tick_params(axis="y",colors="white")
ax.set_title(f"covid-19 future for Japan",color="white")
simulated['Japan'].plot()
plt.show()
Recommended Posts