{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Incidence de la varicelle" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import isoweek" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les données de l'incidence du syndrome grippal sont disponibles du site Web du [Réseau Sentinelles](http://www.sentiweb.fr/). Nous les récupérons sous forme d'un fichier en format CSV dont chaque ligne correspond à une semaine de la période demandée. Nous téléchargeons toujours le jeu de données complet, qui commence en 1991 et se termine avec une semaine récente." ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "data_url = \"http://www.sentiweb.fr/datasets/incidence-PAY-7.csv\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour nous protéger contre une éventuelle disparition ou modification du serveur du Réseau Sentinelles, nous faisons une copie locale de ce jeux de données que nous préservons avec notre analyse. Il est inutile et même risquée de télécharger les données à chaque exécution, car dans le cas d'une panne nous pourrions remplacer nos données par un fichier défectueux. Pour cette raison, nous téléchargeons les données seulement si la copie locale n'existe pas." ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "data_file = \"varicelle.csv\"\n", "\n", "import os\n", "import urllib.request\n", "if not os.path.exists(data_file):\n", " urllib.request.urlretrieve(data_url, data_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Voici l'explication des colonnes données [sur le site d'origine](https://ns.sentiweb.fr/incidence/csv-schema-v1.json):\n", "\n", "| Nom de colonne | Libellé de colonne |\n", "|----------------|-----------------------------------------------------------------------------------------------------------------------------------|\n", "| week | Semaine calendaire (ISO 8601) |\n", "| indicator | Code de l'indicateur de surveillance |\n", "| inc | Estimation de l'incidence de consultations en nombre de cas |\n", "| inc_low | Estimation de la borne inférieure de l'IC95% du nombre de cas de consultation |\n", "| inc_up | Estimation de la borne supérieure de l'IC95% du nombre de cas de consultation |\n", "| inc100 | Estimation du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) |\n", "| inc100_low | Estimation de la borne inférieure de l'IC95% du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) |\n", "| inc100_up | Estimation de la borne supérieure de l'IC95% du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) |\n", "| geo_insee | Code de la zone géographique concernée (Code INSEE) http://www.insee.fr/fr/methodes/nomenclatures/cog/ |\n", "| geo_name | Libellé de la zone géographique (ce libellé peut être modifié sans préavis) |\n", "\n", "La première ligne du fichier CSV est un commentaire, que nous ignorons en précisant `skiprows=1`." ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
weekindicatorincinc_lowinc_upinc100inc100_lowinc100_upgeo_inseegeo_name
020211675472290880368412FRFrance
1202115711536768415388171123FRFrance
2202114711197799414400171222FRFrance
320211379714628913139151020FRFrance
4202112711520841514625171222FRFrance
520211179386667812094141018FRFrance
620211079056645211660141018FRFrance
7202109710988793814038171222FRFrance
8202108711281836114201171321FRFrance
92021077135611031516807211626FRFrance
10202106713401981016992201525FRFrance
11202105712210898815432181323FRFrance
12202104712026882615226181323FRFrance
132021037891363751145113917FRFrance
142021027779554301016012816FRFrance
15202101710525775013300161220FRFrance
16202053711978840615550181323FRFrance
17202052712012828515739181224FRFrance
18202051710564757413554161121FRFrance
19202050770634744938211715FRFrance
2020204975026314569078511FRFrance
21202048766834312905410614FRFrance
2220204774999296370358511FRFrance
232020467375219635541639FRFrance
242020457369620165376639FRFrance
2520204474391237564077410FRFrance
2620204374376250562477410FRFrance
272020427400019796021639FRFrance
282020417396120995823639FRFrance
29202040720786753481315FRFrance
.................................
15561991267176081130423912312042FRFrance
15571991257161691070021638281838FRFrance
15581991247161711007122271281739FRFrance
1559199123711947767116223211329FRFrance
1560199122715452995320951271737FRFrance
1561199121714903897520831261636FRFrance
15621991207190531274225364342345FRFrance
15631991197167391124622232291939FRFrance
15641991187213851388228888382551FRFrance
1565199117713462887718047241632FRFrance
15661991167148571006819646261834FRFrance
1567199115713975978118169251832FRFrance
1568199114712265768416846221430FRFrance
156919911379567604113093171123FRFrance
1570199112710864733114397191325FRFrance
15711991117155741118419964271935FRFrance
15721991107166431137221914292038FRFrance
1573199109713741878018702241533FRFrance
1574199108713289881317765231531FRFrance
1575199107712337807716597221529FRFrance
1576199106710877701314741191226FRFrance
1577199105710442654414340181125FRFrance
15781991047791345631126314820FRFrance
15791991037153871048420290271836FRFrance
15801991027162771104621508292038FRFrance
15811991017155651027120859271836FRFrance
15821990527193751329525455342345FRFrance
15831990517190801380724353342543FRFrance
1584199050711079666015498201228FRFrance
15851990497114302610205FRFrance
\n", "

1586 rows × 10 columns

\n", "
" ], "text/plain": [ " week indicator inc inc_low inc_up inc100 inc100_low \\\n", "0 202116 7 5472 2908 8036 8 4 \n", "1 202115 7 11536 7684 15388 17 11 \n", "2 202114 7 11197 7994 14400 17 12 \n", "3 202113 7 9714 6289 13139 15 10 \n", "4 202112 7 11520 8415 14625 17 12 \n", "5 202111 7 9386 6678 12094 14 10 \n", "6 202110 7 9056 6452 11660 14 10 \n", "7 202109 7 10988 7938 14038 17 12 \n", "8 202108 7 11281 8361 14201 17 13 \n", "9 202107 7 13561 10315 16807 21 16 \n", "10 202106 7 13401 9810 16992 20 15 \n", "11 202105 7 12210 8988 15432 18 13 \n", "12 202104 7 12026 8826 15226 18 13 \n", "13 202103 7 8913 6375 11451 13 9 \n", "14 202102 7 7795 5430 10160 12 8 \n", "15 202101 7 10525 7750 13300 16 12 \n", "16 202053 7 11978 8406 15550 18 13 \n", "17 202052 7 12012 8285 15739 18 12 \n", "18 202051 7 10564 7574 13554 16 11 \n", "19 202050 7 7063 4744 9382 11 7 \n", "20 202049 7 5026 3145 6907 8 5 \n", "21 202048 7 6683 4312 9054 10 6 \n", "22 202047 7 4999 2963 7035 8 5 \n", "23 202046 7 3752 1963 5541 6 3 \n", "24 202045 7 3696 2016 5376 6 3 \n", "25 202044 7 4391 2375 6407 7 4 \n", "26 202043 7 4376 2505 6247 7 4 \n", "27 202042 7 4000 1979 6021 6 3 \n", "28 202041 7 3961 2099 5823 6 3 \n", "29 202040 7 2078 675 3481 3 1 \n", "... ... ... ... ... ... ... ... \n", "1556 199126 7 17608 11304 23912 31 20 \n", "1557 199125 7 16169 10700 21638 28 18 \n", "1558 199124 7 16171 10071 22271 28 17 \n", "1559 199123 7 11947 7671 16223 21 13 \n", "1560 199122 7 15452 9953 20951 27 17 \n", "1561 199121 7 14903 8975 20831 26 16 \n", "1562 199120 7 19053 12742 25364 34 23 \n", "1563 199119 7 16739 11246 22232 29 19 \n", "1564 199118 7 21385 13882 28888 38 25 \n", "1565 199117 7 13462 8877 18047 24 16 \n", "1566 199116 7 14857 10068 19646 26 18 \n", "1567 199115 7 13975 9781 18169 25 18 \n", "1568 199114 7 12265 7684 16846 22 14 \n", "1569 199113 7 9567 6041 13093 17 11 \n", "1570 199112 7 10864 7331 14397 19 13 \n", "1571 199111 7 15574 11184 19964 27 19 \n", "1572 199110 7 16643 11372 21914 29 20 \n", "1573 199109 7 13741 8780 18702 24 15 \n", "1574 199108 7 13289 8813 17765 23 15 \n", "1575 199107 7 12337 8077 16597 22 15 \n", "1576 199106 7 10877 7013 14741 19 12 \n", "1577 199105 7 10442 6544 14340 18 11 \n", "1578 199104 7 7913 4563 11263 14 8 \n", "1579 199103 7 15387 10484 20290 27 18 \n", "1580 199102 7 16277 11046 21508 29 20 \n", "1581 199101 7 15565 10271 20859 27 18 \n", "1582 199052 7 19375 13295 25455 34 23 \n", "1583 199051 7 19080 13807 24353 34 25 \n", "1584 199050 7 11079 6660 15498 20 12 \n", "1585 199049 7 1143 0 2610 2 0 \n", "\n", " inc100_up geo_insee geo_name \n", "0 12 FR France \n", "1 23 FR France \n", "2 22 FR France \n", "3 20 FR France \n", "4 22 FR France \n", "5 18 FR France \n", "6 18 FR France \n", "7 22 FR France \n", "8 21 FR France \n", "9 26 FR France \n", "10 25 FR France \n", "11 23 FR France \n", "12 23 FR France \n", "13 17 FR France \n", "14 16 FR France \n", "15 20 FR France \n", "16 23 FR France \n", "17 24 FR France \n", "18 21 FR France \n", "19 15 FR France \n", "20 11 FR France \n", "21 14 FR France \n", "22 11 FR France \n", "23 9 FR France \n", "24 9 FR France \n", "25 10 FR France \n", "26 10 FR France \n", "27 9 FR France \n", "28 9 FR France \n", "29 5 FR France \n", "... ... ... ... \n", "1556 42 FR France \n", "1557 38 FR France \n", "1558 39 FR France \n", "1559 29 FR France \n", "1560 37 FR France \n", "1561 36 FR France \n", "1562 45 FR France \n", "1563 39 FR France \n", "1564 51 FR France \n", "1565 32 FR France \n", "1566 34 FR France \n", "1567 32 FR France \n", "1568 30 FR France \n", "1569 23 FR France \n", "1570 25 FR France \n", "1571 35 FR France \n", "1572 38 FR France \n", "1573 33 FR France \n", "1574 31 FR France \n", "1575 29 FR France \n", "1576 26 FR France \n", "1577 25 FR France \n", "1578 20 FR France \n", "1579 36 FR France \n", "1580 38 FR France \n", "1581 36 FR France \n", "1582 45 FR France \n", "1583 43 FR France \n", "1584 28 FR France \n", "1585 5 FR France \n", "\n", "[1586 rows x 10 columns]" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw_data = pd.read_csv(data_file, skiprows=1)\n", "raw_data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y a-t-il des points manquants dans ce jeux de données ? " ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
weekindicatorincinc_lowinc_upinc100inc100_lowinc100_upgeo_inseegeo_name
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [week, indicator, inc, inc_low, inc_up, inc100, inc100_low, inc100_up, geo_insee, geo_name]\n", "Index: []" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw_data[raw_data.isnull().any(axis=1)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Non. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nos données utilisent une convention inhabituelle: le numéro de\n", "semaine est collé à l'année, donnant l'impression qu'il s'agit\n", "de nombre entier. C'est comme ça que Pandas les interprète.\n", " \n", "Un deuxième problème est que Pandas ne comprend pas les numéros de\n", "semaine. Il faut lui fournir les dates de début et de fin de\n", "semaine. Nous utilisons pour cela la bibliothèque `isoweek`.\n", "\n", "Comme la conversion des semaines est devenu assez complexe, nous\n", "écrivons une petite fonction Python pour cela. Ensuite, nous\n", "l'appliquons à tous les points de nos donnés. Les résultats vont\n", "dans une nouvelle colonne 'period'." ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "def convert_week(year_and_week_int):\n", " year_and_week_str = str(year_and_week_int)\n", " year = int(year_and_week_str[:4])\n", " week = int(year_and_week_str[4:])\n", " w = isoweek.Week(year, week)\n", " return pd.Period(w.day(0), 'W')\n", "data = raw_data\n", "data['period'] = [convert_week(yw) for yw in data['week']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Il restent deux petites modifications à faire.\n", "\n", "Premièrement, nous définissons les périodes d'observation comme nouvel index de notre jeux de données. Ceci en fait une suite chronologique, ce qui sera pratique par la suite.\n", "\n", "Deuxièmement, nous trions les points par période, dans le sens chronologique." ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "sorted_data = data.set_index('period').sort_index()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous vérifions la cohérence des données. Entre la fin d'une période et\n", "le début de la période qui suit, la différence temporelle doit être\n", "zéro, ou au moins très faible. Nous laissons une \"marge d'erreur\"\n", "d'une seconde.\n", "\n", "Ceci s'avère tout à fait juste sauf pour deux périodes consécutives\n", "entre lesquelles il manque une semaine.\n", "\n", "Nous reconnaissons ces dates: c'est la semaine sans observations\n", "que nous avions supprimées !" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "periods = sorted_data.index\n", "for p1, p2 in zip(periods[:-1], periods[1:]):\n", " delta = p2.to_timestamp() - p1.end_time\n", " if delta > pd.Timedelta('1s'):\n", " print(p1, p2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Un premier regard sur les données !" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sorted_data['inc'].plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Un zoom sur les dernières années montre mieux la situation des pics en hiver et au début du printemps. Le creux des incidences se trouve à l'automne." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sorted_data['inc'][-180:].plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Etude de l'incidence annuelle" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Etant donné que le pic de l'épidémie se situe en hiver, à cheval\n", "entre deux années civiles, nous définissons la période de référence\n", "entre deux minima de l'incidence, du 1er septembre de l'année $N$ au\n", "1er septembre de l'année $N+1$.\n", "\n", "Notre tâche est un peu compliquée par le fait que l'année ne comporte\n", "pas un nombre entier de semaines. Nous modifions donc un peu nos périodes\n", "de référence: à la place du 1er septembre de chaque année, nous utilisons le\n", "premier jour de la semaine qui contient le 1er septembre.\n", "\n", "Comme l'incidence de la varicelle est très faible en automne, cette\n", "modification ne risque pas de fausser nos conclusions.\n", "\n", "Encore un petit détail: les données commencent an octobre 1990, ce qui\n", "rend la première année incomplète. \n", "Nous commençons donc l'analyse en 1991 et on l'arrête en 2020 car l'année 2021 est également incomplète. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "first_august_week = [pd.Period(pd.Timestamp(y, 9, 1), 'W')\n", " for y in range(1991,2019)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En partant de cette liste des semaines qui contiennent un 1er septembre, nous obtenons nos intervalles d'environ un an comme les périodes entre deux semaines adjacentes dans cette liste. Nous calculons les sommes des incidences hebdomadaires pour toutes ces périodes.\n", "\n", "Nous vérifions également que ces périodes contiennent entre 51 et 52 semaines, pour nous protéger contre des éventuelles erreurs dans notre code." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "year = []\n", "yearly_incidence = []\n", "for week1, week2 in zip(first_august_week[:-1],\n", " first_august_week[1:]):\n", " one_year = sorted_data['inc'][week1:week2-1]\n", " assert abs(len(one_year)-52) < 2\n", " yearly_incidence.append(one_year.sum())\n", " year.append(week2.year)\n", "yearly_incidence = pd.Series(data=yearly_incidence, index=year)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Voici les incidences annuelles." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "yearly_incidence.plot(style='*')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Une liste triée permet de plus facilement répérer les valeurs les plus élevées (à la fin)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "yearly_incidence.sort_values()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Enfin, un histogramme montre bien que les épidémies fortes, qui touchent environ 10% de la population\n", "française, sont assez fréquentes." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "yearly_incidence.hist(xrot=20)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }