diff --git a/module3/ressources/analyse-syndrome-grippal-jupyter.ipynb b/module3/ressources/analyse-syndrome-grippal-jupyter.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..01e5fc867ef92995fd6f131d719c5e32997f2451 --- /dev/null +++ b/module3/ressources/analyse-syndrome-grippal-jupyter.ipynb @@ -0,0 +1,2529 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Incidence du syndrome grippal" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "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 1984 et se termine avec une semaine récente." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "data_url = \"http://www.sentiweb.fr/datasets/incidence-PAY-3.csv\"" + ] + }, + { + "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": 3, + "metadata": { + "collapsed": false + }, + "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
0201842378325145.010519.0128.016.0FRFrance
1201841380485098.010998.0128.016.0FRFrance
2201840374094717.010101.0117.015.0FRFrance
3201839371744235.010113.0117.015.0FRFrance
4201838361273482.08772.095.013.0FRFrance
5201837346442200.07088.073.011.0FRFrance
6201836332151349.05081.052.08.0FRFrance
720183531506239.02773.020.04.0FRFrance
820183431368116.02620.020.04.0FRFrance
9201833319625.03919.030.06.0FRFrance
1020183231839183.03495.030.06.0FRFrance
1120183132048242.03854.030.06.0FRFrance
1220183031951202.03700.030.06.0FRFrance
1320182931951252.03650.030.06.0FRFrance
142018283165452.03256.031.05.0FRFrance
15201827332691145.05393.052.08.0FRFrance
16201826337581493.06023.063.09.0FRFrance
17201825345802220.06940.073.011.0FRFrance
18201824332231351.05095.052.08.0FRFrance
1920182331207136.02278.020.04.0FRFrance
20201822332021330.05074.052.08.0FRFrance
2120182132537763.04311.041.07.0FRFrance
2220182032694967.04421.041.07.0FRFrance
23201819310250.02098.020.04.0FRFrance
24201818335411416.05666.052.08.0FRFrance
25201817325731003.04143.042.06.0FRFrance
26201816348182724.06912.074.010.0FRFrance
2720181531631112168.020454.02519.031.0FRFrance
2820181432266618092.027240.03528.042.0FRFrance
2920181333268025536.039824.05039.061.0FRFrance
.................................
174319852132609619621.032571.04735.059.0FRFrance
174419852032789620885.034907.05138.064.0FRFrance
174519851934315432821.053487.07859.097.0FRFrance
174619851834055529935.051175.07455.093.0FRFrance
174719851733405324366.043740.06244.080.0FRFrance
174819851635036236451.064273.09166.0116.0FRFrance
174919851536388145538.082224.011683.0149.0FRFrance
17501985143134545114400.0154690.0244207.0281.0FRFrance
17511985133197206176080.0218332.0357319.0395.0FRFrance
17521985123245240223304.0267176.0445405.0485.0FRFrance
17531985113276205252399.0300011.0501458.0544.0FRFrance
17541985103353231326279.0380183.0640591.0689.0FRFrance
17551985093369895341109.0398681.0670618.0722.0FRFrance
17561985083389886359529.0420243.0707652.0762.0FRFrance
17571985073471852432599.0511105.0855784.0926.0FRFrance
17581985063565825518011.0613639.01026939.01113.0FRFrance
17591985053637302592795.0681809.011551074.01236.0FRFrance
17601985043424937390794.0459080.0770708.0832.0FRFrance
17611985033213901174689.0253113.0388317.0459.0FRFrance
176219850239758680949.0114223.0177147.0207.0FRFrance
176319850138548965918.0105060.0155120.0190.0FRFrance
176419845238483060602.0109058.0154110.0198.0FRFrance
1765198451310172680242.0123210.0185146.0224.0FRFrance
17661984503123680101401.0145959.0225184.0266.0FRFrance
1767198449310107381684.0120462.0184149.0219.0FRFrance
176819844837862060634.096606.0143110.0176.0FRFrance
176919844737202954274.089784.013199.0163.0FRFrance
177019844638733067686.0106974.0159123.0195.0FRFrance
17711984453135223101414.0169032.0246184.0308.0FRFrance
177219844436842220056.0116788.012537.0213.0FRFrance
\n", + "

1773 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " week indicator inc inc_low inc_up inc100 inc100_low \\\n", + "0 201842 3 7832 5145.0 10519.0 12 8.0 \n", + "1 201841 3 8048 5098.0 10998.0 12 8.0 \n", + "2 201840 3 7409 4717.0 10101.0 11 7.0 \n", + "3 201839 3 7174 4235.0 10113.0 11 7.0 \n", + "4 201838 3 6127 3482.0 8772.0 9 5.0 \n", + "5 201837 3 4644 2200.0 7088.0 7 3.0 \n", + "6 201836 3 3215 1349.0 5081.0 5 2.0 \n", + "7 201835 3 1506 239.0 2773.0 2 0.0 \n", + "8 201834 3 1368 116.0 2620.0 2 0.0 \n", + "9 201833 3 1962 5.0 3919.0 3 0.0 \n", + "10 201832 3 1839 183.0 3495.0 3 0.0 \n", + "11 201831 3 2048 242.0 3854.0 3 0.0 \n", + "12 201830 3 1951 202.0 3700.0 3 0.0 \n", + "13 201829 3 1951 252.0 3650.0 3 0.0 \n", + "14 201828 3 1654 52.0 3256.0 3 1.0 \n", + "15 201827 3 3269 1145.0 5393.0 5 2.0 \n", + "16 201826 3 3758 1493.0 6023.0 6 3.0 \n", + "17 201825 3 4580 2220.0 6940.0 7 3.0 \n", + "18 201824 3 3223 1351.0 5095.0 5 2.0 \n", + "19 201823 3 1207 136.0 2278.0 2 0.0 \n", + "20 201822 3 3202 1330.0 5074.0 5 2.0 \n", + "21 201821 3 2537 763.0 4311.0 4 1.0 \n", + "22 201820 3 2694 967.0 4421.0 4 1.0 \n", + "23 201819 3 1025 0.0 2098.0 2 0.0 \n", + "24 201818 3 3541 1416.0 5666.0 5 2.0 \n", + "25 201817 3 2573 1003.0 4143.0 4 2.0 \n", + "26 201816 3 4818 2724.0 6912.0 7 4.0 \n", + "27 201815 3 16311 12168.0 20454.0 25 19.0 \n", + "28 201814 3 22666 18092.0 27240.0 35 28.0 \n", + "29 201813 3 32680 25536.0 39824.0 50 39.0 \n", + "... ... ... ... ... ... ... ... \n", + "1743 198521 3 26096 19621.0 32571.0 47 35.0 \n", + "1744 198520 3 27896 20885.0 34907.0 51 38.0 \n", + "1745 198519 3 43154 32821.0 53487.0 78 59.0 \n", + "1746 198518 3 40555 29935.0 51175.0 74 55.0 \n", + "1747 198517 3 34053 24366.0 43740.0 62 44.0 \n", + "1748 198516 3 50362 36451.0 64273.0 91 66.0 \n", + "1749 198515 3 63881 45538.0 82224.0 116 83.0 \n", + "1750 198514 3 134545 114400.0 154690.0 244 207.0 \n", + "1751 198513 3 197206 176080.0 218332.0 357 319.0 \n", + "1752 198512 3 245240 223304.0 267176.0 445 405.0 \n", + "1753 198511 3 276205 252399.0 300011.0 501 458.0 \n", + "1754 198510 3 353231 326279.0 380183.0 640 591.0 \n", + "1755 198509 3 369895 341109.0 398681.0 670 618.0 \n", + "1756 198508 3 389886 359529.0 420243.0 707 652.0 \n", + "1757 198507 3 471852 432599.0 511105.0 855 784.0 \n", + "1758 198506 3 565825 518011.0 613639.0 1026 939.0 \n", + "1759 198505 3 637302 592795.0 681809.0 1155 1074.0 \n", + "1760 198504 3 424937 390794.0 459080.0 770 708.0 \n", + "1761 198503 3 213901 174689.0 253113.0 388 317.0 \n", + "1762 198502 3 97586 80949.0 114223.0 177 147.0 \n", + "1763 198501 3 85489 65918.0 105060.0 155 120.0 \n", + "1764 198452 3 84830 60602.0 109058.0 154 110.0 \n", + "1765 198451 3 101726 80242.0 123210.0 185 146.0 \n", + "1766 198450 3 123680 101401.0 145959.0 225 184.0 \n", + "1767 198449 3 101073 81684.0 120462.0 184 149.0 \n", + "1768 198448 3 78620 60634.0 96606.0 143 110.0 \n", + "1769 198447 3 72029 54274.0 89784.0 131 99.0 \n", + "1770 198446 3 87330 67686.0 106974.0 159 123.0 \n", + "1771 198445 3 135223 101414.0 169032.0 246 184.0 \n", + "1772 198444 3 68422 20056.0 116788.0 125 37.0 \n", + "\n", + " inc100_up geo_insee geo_name \n", + "0 16.0 FR France \n", + "1 16.0 FR France \n", + "2 15.0 FR France \n", + "3 15.0 FR France \n", + "4 13.0 FR France \n", + "5 11.0 FR France \n", + "6 8.0 FR France \n", + "7 4.0 FR France \n", + "8 4.0 FR France \n", + "9 6.0 FR France \n", + "10 6.0 FR France \n", + "11 6.0 FR France \n", + "12 6.0 FR France \n", + "13 6.0 FR France \n", + "14 5.0 FR France \n", + "15 8.0 FR France \n", + "16 9.0 FR France \n", + "17 11.0 FR France \n", + "18 8.0 FR France \n", + "19 4.0 FR France \n", + "20 8.0 FR France \n", + "21 7.0 FR France \n", + "22 7.0 FR France \n", + "23 4.0 FR France \n", + "24 8.0 FR France \n", + "25 6.0 FR France \n", + "26 10.0 FR France \n", + "27 31.0 FR France \n", + "28 42.0 FR France \n", + "29 61.0 FR France \n", + "... ... ... ... \n", + "1743 59.0 FR France \n", + "1744 64.0 FR France \n", + "1745 97.0 FR France \n", + "1746 93.0 FR France \n", + "1747 80.0 FR France \n", + "1748 116.0 FR France \n", + "1749 149.0 FR France \n", + "1750 281.0 FR France \n", + "1751 395.0 FR France \n", + "1752 485.0 FR France \n", + "1753 544.0 FR France \n", + "1754 689.0 FR France \n", + "1755 722.0 FR France \n", + "1756 762.0 FR France \n", + "1757 926.0 FR France \n", + "1758 1113.0 FR France \n", + "1759 1236.0 FR France \n", + "1760 832.0 FR France \n", + "1761 459.0 FR France \n", + "1762 207.0 FR France \n", + "1763 190.0 FR France \n", + "1764 198.0 FR France \n", + "1765 224.0 FR France \n", + "1766 266.0 FR France \n", + "1767 219.0 FR France \n", + "1768 176.0 FR France \n", + "1769 163.0 FR France \n", + "1770 195.0 FR France \n", + "1771 308.0 FR France \n", + "1772 213.0 FR France \n", + "\n", + "[1773 rows x 10 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "raw_data = pd.read_csv(data_url, skiprows=1)\n", + "raw_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Y a-t-il des points manquants dans ce jeux de données ? Oui, la semaine 19 de l'année 1989 n'a pas de valeurs associées." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "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", + "
weekindicatorincinc_lowinc_upinc100inc100_lowinc100_upgeo_inseegeo_name
153619891930NaNNaN0NaNNaNFRFrance
\n", + "
" + ], + "text/plain": [ + " week indicator inc inc_low inc_up inc100 inc100_low inc100_up \\\n", + "1536 198919 3 0 NaN NaN 0 NaN NaN \n", + "\n", + " geo_insee geo_name \n", + "1536 FR France " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "raw_data[raw_data.isnull().any(axis=1)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nous éliminons ce point, ce qui n'a pas d'impact fort sur notre analyse qui est assez simple." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "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
0201842378325145.010519.0128.016.0FRFrance
1201841380485098.010998.0128.016.0FRFrance
2201840374094717.010101.0117.015.0FRFrance
3201839371744235.010113.0117.015.0FRFrance
4201838361273482.08772.095.013.0FRFrance
5201837346442200.07088.073.011.0FRFrance
6201836332151349.05081.052.08.0FRFrance
720183531506239.02773.020.04.0FRFrance
820183431368116.02620.020.04.0FRFrance
9201833319625.03919.030.06.0FRFrance
1020183231839183.03495.030.06.0FRFrance
1120183132048242.03854.030.06.0FRFrance
1220183031951202.03700.030.06.0FRFrance
1320182931951252.03650.030.06.0FRFrance
142018283165452.03256.031.05.0FRFrance
15201827332691145.05393.052.08.0FRFrance
16201826337581493.06023.063.09.0FRFrance
17201825345802220.06940.073.011.0FRFrance
18201824332231351.05095.052.08.0FRFrance
1920182331207136.02278.020.04.0FRFrance
20201822332021330.05074.052.08.0FRFrance
2120182132537763.04311.041.07.0FRFrance
2220182032694967.04421.041.07.0FRFrance
23201819310250.02098.020.04.0FRFrance
24201818335411416.05666.052.08.0FRFrance
25201817325731003.04143.042.06.0FRFrance
26201816348182724.06912.074.010.0FRFrance
2720181531631112168.020454.02519.031.0FRFrance
2820181432266618092.027240.03528.042.0FRFrance
2920181333268025536.039824.05039.061.0FRFrance
.................................
174319852132609619621.032571.04735.059.0FRFrance
174419852032789620885.034907.05138.064.0FRFrance
174519851934315432821.053487.07859.097.0FRFrance
174619851834055529935.051175.07455.093.0FRFrance
174719851733405324366.043740.06244.080.0FRFrance
174819851635036236451.064273.09166.0116.0FRFrance
174919851536388145538.082224.011683.0149.0FRFrance
17501985143134545114400.0154690.0244207.0281.0FRFrance
17511985133197206176080.0218332.0357319.0395.0FRFrance
17521985123245240223304.0267176.0445405.0485.0FRFrance
17531985113276205252399.0300011.0501458.0544.0FRFrance
17541985103353231326279.0380183.0640591.0689.0FRFrance
17551985093369895341109.0398681.0670618.0722.0FRFrance
17561985083389886359529.0420243.0707652.0762.0FRFrance
17571985073471852432599.0511105.0855784.0926.0FRFrance
17581985063565825518011.0613639.01026939.01113.0FRFrance
17591985053637302592795.0681809.011551074.01236.0FRFrance
17601985043424937390794.0459080.0770708.0832.0FRFrance
17611985033213901174689.0253113.0388317.0459.0FRFrance
176219850239758680949.0114223.0177147.0207.0FRFrance
176319850138548965918.0105060.0155120.0190.0FRFrance
176419845238483060602.0109058.0154110.0198.0FRFrance
1765198451310172680242.0123210.0185146.0224.0FRFrance
17661984503123680101401.0145959.0225184.0266.0FRFrance
1767198449310107381684.0120462.0184149.0219.0FRFrance
176819844837862060634.096606.0143110.0176.0FRFrance
176919844737202954274.089784.013199.0163.0FRFrance
177019844638733067686.0106974.0159123.0195.0FRFrance
17711984453135223101414.0169032.0246184.0308.0FRFrance
177219844436842220056.0116788.012537.0213.0FRFrance
\n", + "

1772 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " week indicator inc inc_low inc_up inc100 inc100_low \\\n", + "0 201842 3 7832 5145.0 10519.0 12 8.0 \n", + "1 201841 3 8048 5098.0 10998.0 12 8.0 \n", + "2 201840 3 7409 4717.0 10101.0 11 7.0 \n", + "3 201839 3 7174 4235.0 10113.0 11 7.0 \n", + "4 201838 3 6127 3482.0 8772.0 9 5.0 \n", + "5 201837 3 4644 2200.0 7088.0 7 3.0 \n", + "6 201836 3 3215 1349.0 5081.0 5 2.0 \n", + "7 201835 3 1506 239.0 2773.0 2 0.0 \n", + "8 201834 3 1368 116.0 2620.0 2 0.0 \n", + "9 201833 3 1962 5.0 3919.0 3 0.0 \n", + "10 201832 3 1839 183.0 3495.0 3 0.0 \n", + "11 201831 3 2048 242.0 3854.0 3 0.0 \n", + "12 201830 3 1951 202.0 3700.0 3 0.0 \n", + "13 201829 3 1951 252.0 3650.0 3 0.0 \n", + "14 201828 3 1654 52.0 3256.0 3 1.0 \n", + "15 201827 3 3269 1145.0 5393.0 5 2.0 \n", + "16 201826 3 3758 1493.0 6023.0 6 3.0 \n", + "17 201825 3 4580 2220.0 6940.0 7 3.0 \n", + "18 201824 3 3223 1351.0 5095.0 5 2.0 \n", + "19 201823 3 1207 136.0 2278.0 2 0.0 \n", + "20 201822 3 3202 1330.0 5074.0 5 2.0 \n", + "21 201821 3 2537 763.0 4311.0 4 1.0 \n", + "22 201820 3 2694 967.0 4421.0 4 1.0 \n", + "23 201819 3 1025 0.0 2098.0 2 0.0 \n", + "24 201818 3 3541 1416.0 5666.0 5 2.0 \n", + "25 201817 3 2573 1003.0 4143.0 4 2.0 \n", + "26 201816 3 4818 2724.0 6912.0 7 4.0 \n", + "27 201815 3 16311 12168.0 20454.0 25 19.0 \n", + "28 201814 3 22666 18092.0 27240.0 35 28.0 \n", + "29 201813 3 32680 25536.0 39824.0 50 39.0 \n", + "... ... ... ... ... ... ... ... \n", + "1743 198521 3 26096 19621.0 32571.0 47 35.0 \n", + "1744 198520 3 27896 20885.0 34907.0 51 38.0 \n", + "1745 198519 3 43154 32821.0 53487.0 78 59.0 \n", + "1746 198518 3 40555 29935.0 51175.0 74 55.0 \n", + "1747 198517 3 34053 24366.0 43740.0 62 44.0 \n", + "1748 198516 3 50362 36451.0 64273.0 91 66.0 \n", + "1749 198515 3 63881 45538.0 82224.0 116 83.0 \n", + "1750 198514 3 134545 114400.0 154690.0 244 207.0 \n", + "1751 198513 3 197206 176080.0 218332.0 357 319.0 \n", + "1752 198512 3 245240 223304.0 267176.0 445 405.0 \n", + "1753 198511 3 276205 252399.0 300011.0 501 458.0 \n", + "1754 198510 3 353231 326279.0 380183.0 640 591.0 \n", + "1755 198509 3 369895 341109.0 398681.0 670 618.0 \n", + "1756 198508 3 389886 359529.0 420243.0 707 652.0 \n", + "1757 198507 3 471852 432599.0 511105.0 855 784.0 \n", + "1758 198506 3 565825 518011.0 613639.0 1026 939.0 \n", + "1759 198505 3 637302 592795.0 681809.0 1155 1074.0 \n", + "1760 198504 3 424937 390794.0 459080.0 770 708.0 \n", + "1761 198503 3 213901 174689.0 253113.0 388 317.0 \n", + "1762 198502 3 97586 80949.0 114223.0 177 147.0 \n", + "1763 198501 3 85489 65918.0 105060.0 155 120.0 \n", + "1764 198452 3 84830 60602.0 109058.0 154 110.0 \n", + "1765 198451 3 101726 80242.0 123210.0 185 146.0 \n", + "1766 198450 3 123680 101401.0 145959.0 225 184.0 \n", + "1767 198449 3 101073 81684.0 120462.0 184 149.0 \n", + "1768 198448 3 78620 60634.0 96606.0 143 110.0 \n", + "1769 198447 3 72029 54274.0 89784.0 131 99.0 \n", + "1770 198446 3 87330 67686.0 106974.0 159 123.0 \n", + "1771 198445 3 135223 101414.0 169032.0 246 184.0 \n", + "1772 198444 3 68422 20056.0 116788.0 125 37.0 \n", + "\n", + " inc100_up geo_insee geo_name \n", + "0 16.0 FR France \n", + "1 16.0 FR France \n", + "2 15.0 FR France \n", + "3 15.0 FR France \n", + "4 13.0 FR France \n", + "5 11.0 FR France \n", + "6 8.0 FR France \n", + "7 4.0 FR France \n", + "8 4.0 FR France \n", + "9 6.0 FR France \n", + "10 6.0 FR France \n", + "11 6.0 FR France \n", + "12 6.0 FR France \n", + "13 6.0 FR France \n", + "14 5.0 FR France \n", + "15 8.0 FR France \n", + "16 9.0 FR France \n", + "17 11.0 FR France \n", + "18 8.0 FR France \n", + "19 4.0 FR France \n", + "20 8.0 FR France \n", + "21 7.0 FR France \n", + "22 7.0 FR France \n", + "23 4.0 FR France \n", + "24 8.0 FR France \n", + "25 6.0 FR France \n", + "26 10.0 FR France \n", + "27 31.0 FR France \n", + "28 42.0 FR France \n", + "29 61.0 FR France \n", + "... ... ... ... \n", + "1743 59.0 FR France \n", + "1744 64.0 FR France \n", + "1745 97.0 FR France \n", + "1746 93.0 FR France \n", + "1747 80.0 FR France \n", + "1748 116.0 FR France \n", + "1749 149.0 FR France \n", + "1750 281.0 FR France \n", + "1751 395.0 FR France \n", + "1752 485.0 FR France \n", + "1753 544.0 FR France \n", + "1754 689.0 FR France \n", + "1755 722.0 FR France \n", + "1756 762.0 FR France \n", + "1757 926.0 FR France \n", + "1758 1113.0 FR France \n", + "1759 1236.0 FR France \n", + "1760 832.0 FR France \n", + "1761 459.0 FR France \n", + "1762 207.0 FR France \n", + "1763 190.0 FR France \n", + "1764 198.0 FR France \n", + "1765 224.0 FR France \n", + "1766 266.0 FR France \n", + "1767 219.0 FR France \n", + "1768 176.0 FR France \n", + "1769 163.0 FR France \n", + "1770 195.0 FR France \n", + "1771 308.0 FR France \n", + "1772 213.0 FR France \n", + "\n", + "[1772 rows x 10 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = raw_data.dropna().copy()\n", + "data" + ] + }, + { + "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": 6, + "metadata": { + "collapsed": false + }, + "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", + "\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\n", + "comme nouvel index de notre jeux de données. Ceci en fait\n", + "une suite chronologique, ce qui sera pratique par la suite.\n", + "\n", + "Deuxièmement, nous trions les points par période, dans\n", + "le sens chronologique." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "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": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1989-05-01/1989-05-07 1989-05-15/1989-05-21\n" + ] + } + ], + "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": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n3Rn8aq5t29z3RjO5lStr9d9pp8YdprfXLetUhbe9zW1LErZt29xAPG1atmhs3w4nnui+H3mkm5HH\nz3FfX+0O86lTYcECt73+uN6/O3ZstqXx1a+6tvMzzKSbMl9+eaCl0Wjwq7c0kvIBZ3F6ktyAvh1m\nzHADUSPrFmqWi++/9cfets0Nrnvv7dphzJj0gcCLk/ffJw2kDz/sPt/4xmz31JQpjWMtns2b4aST\n3GA1Zgy8+92NYylr1tTiaIcd5m4a9Dz2mDsXfgIwZ47rL14EG+Hdf5AuGv/0T+7zk59MtjReeMG1\nmV95tNdeybGZJ55w40PafTqbNrk/P3lNm8S9+GJNTJPGgQ0bwsaJuPCmCVUSbSUa4GIR9TO3etHY\nbTc3wL34ovtftRZziD92ut7SeOgh9/nXfz0wv112GXjMl15yx/AzrqSLLX7BTJuWviIK3EX+7nfD\nF7/o/vcXgueXv3QxAk+jhQHg3sH85je7mahn0iR3s2I9fsXJrFmDra56xo51g+ehh7oZe0fHQKGJ\nxwymTYMlS9z2+iW1L71U6/TTpqV3ej9IPPKI+5w5c6D7qK/P7f/887VBvNHa9Z12cu0av5enUVv4\nwSY+qI8f75bCelSdi7S3180ed90VDjrI9Z9Gs+ZVq1yZ/NNr6weFRYvcp+/H++xTu58ozvLlLt72\n8svOAoLGA+T998PXvgbXXQef+Yzrv5MmJbts1q937bDnnq7PNqrDunU1V6cva6NJxtNPu/KDs5qW\nLq25eQ8+2OXtZ8kirk7vf3/jcsFAEUqzhL72Nfe5ww7JE6TVq2sCBC7fpBtLf/YzdyNw2pMjnnrK\n1dV7JNJE42Mfq4ljozvloRbIT1v9BW5c80LVdqIhIseLyOMi8oSIfC5kn/e+F/77v+HHP65t852w\nlq9zn/iBZvlyN8ivX+86lGf33d3MXQRuvrnWuS+7bGB+s2YNtBrigx64i63eZQVuH3+hTZ3qZjYL\nFsB55w1Mt2aNc3U8+aT7/cwzXf3+8i8HpvODvh8Qk1ax+EH69a+vbXviicHuk23b4IEHXF1e97qa\naDYifnH5hQL+/HlWrar5bVevdoPXEUcMzvf552sz+b33hueea3wRPflkzS30mc+4z333defVz3K/\n+EV38a9bVxt0G81Iu7tdXbNWzviL/tvfrm078kj4yU/cMbu7XZmOO84NVJ/9rOs/c+a43+utDVX4\n1a9cv/2zP3Pb6kXj6afh0592M3iAt7zF/dUP3n/1V/CmN7nvl15aq2v94P3Vr9YmHP/4j+7zgAPc\npCSepyp87nNu0Jk2zQ3yO+ww2GWzerWzeuM3HSatevMDKbjYTV/fwMlIo/fa33vv4G3gyvXii9mW\nxj/8g/v88z93n43a9g9/gJ//3PU3T5Jo3H47XHihc+36R6vUP2Ty29+G004bWJ9Gk7gtW2pi4ds3\naaB/+mn32047pVv9q1fXJoQ775z9Kt96WlY0RGQM8G/AXOC1wOkicmBS+q5omjZtmuskH/iA2540\nUzj0UPje99z3Rx5xIuLNw3gab3k89pjL673vrS0J9LzjHc536Rs/bh4CvOY1znd8/PEDG/upp5y5\n3NPjXDYbN7o6fPObA/P/0Y/cKrA99qi5T/bYwwVZ4zOX1avd/Sg/+Yn7/9WvbmzaP/II/Od/usC6\n57zzasFkz9FH16ymt7wFfvrTwXlt2gR/8zdw9tnwrnfBr37V9Yp/e/LkmjXxwANu4PQitmiRiyGd\ne647d3Gee642wE+a5AT1wAMHXugrVrj6XXONCyL7QXz2bPf9oIPc/17AZs2quR122WXwRe7F+ze/\ncX3Ji8/KlQPdNi+84D5vuKG27dxz3fF+/3vX1n7ghlrMSMSdnwUL4KqranU44AD41recO9NT7556\n8MHazBFqg3NcuKA2CQInfl1dXey3n4uZxYlbuH6Wvscerg8+91zttz/+ES66yLnG/CN4DjpocJB+\n113hlltcHp4kd2Z8oiTi2vDxx2sLCX7724Hpv//9rgEWjOfFF13Z778/3dK4+mr4539236+7zn3O\nmuXaMb4a8IgjXDvE9/eice65tfL19NTGliOOcGPByScP7A8AX/6ya49dd62NTbvtNnhBzLve5foM\n1Npzr70GTzIffdSJ2gknuOtq8+bBK9m6u107/OEPtf5SP4kKoWVFAzgKWKaqz6hqL7AAOCkpsW8Y\ncLMAT3zwjnPkka6hFy6EL3yhNgOOE1+m+8QTbsZzwAG1bT5gtuOOLhj6f/+vCwLffHNtFRbUlvEu\nXuyOc+KJbib50EOuUb0I/f73XfzsZy5NT09ttuFdET//eS3PN7zBDaYXXlgbAJ95xpm5b3lLrfw3\n3+xMaU9Pj7Mojj9+oPjtvLO7iDZscJ2vv98N9J/+tCv/Kae4watehO++G/7rv5xQnX8+3Hln1yu/\ndXTULAAfj5kzx30ecoizCI88Eu66qzazvu02d37irrKFC91FFF/QcPPNte/xR4T4875smRuU/Bsb\n/+ZvamnqraZf/MJdWH7frq4utmxxQe/Zs2uzelV3rh9+uBa78Zx4onNJrVnjxMD3Jz+ggZt1XnKJ\nW32n6gZZPwB3dtbSTZniJgB+Rv+rXzl3oufYY93n3/+9E9+lS93/e+8Nf/d3bvDz9dhvP1dmfx7A\n/X/jjQPPIbj+dNtttf+9uL3jHTVB2GcfN4B6UfOWSUcHnHpqbd+ZMwdOWFRdP/yP/xh4bfzFX7hB\neO5c93/cPQTwwgtddHfX4i9+4hDvHz6/Qw4Z7GL1Y8E3v1m7DqdMce3jJzB9fbV28oIAbtvq1fAv\n/+ImJwAf/KAT1o9/vJbfYYcNFOyXX3bX0Pvf7yw5PzYdcECtrcAd37vFb73VLZYAJxpx8e7pcZPa\nzZvdeDFmjBNlXybPRRfV+oZ3xU6a5OobtzZUBwv/AFS1Jf+A/wP8Z+z/vwa+1yCdqqrOmzdP4zz1\nlLvM49x6662vfN+0SfWMM/xQoHrttY3TPfSQ6kUX1dLdfrvb3t+vessttXRPPllLA6q/+93A/Hp6\nVM8/f2AaUL3//lo6X4fp02u/P/ec6tFHq9522+DyXXllLd0jj6hOnar67LMD01x1lft9991VOzvd\n94kTG9e1o6OW38EHq06ePDDdm9/sfpszR/VVr1L9+tfd/52dqn/608A6qKr29amOHat62WWq55yj\n+oUvND7u296m+slPql53nercuS7PeD36+lT33Vf1oINUjz3WnTNQ/djHVN/+9oH5PfHE4HPc3z8w\nzebNbvuUKao77VRL19Xl2nrevHm6dOnAPC67TPXv/m5gn4rX4fLLB6b/6EdV164dmO7nPx9cNlDt\n6RmY7oUXBqfZvn3gcS+9dODvBx7o6uLzireFT9PRoXrkkY3PSTzdRz6i2tur+pa3qO64o+pdd9XS\nfeUrtXTXX6/63e+6fH35fLpnnnFpPv95105+n09+0h3bp3v44dpvP/2pDmLevHn65S+7tjrsMJfu\nmGNcfb/4RdWvfa123Pvuc79/8IOq3/iGK9vUqY3re8QRg8/x5s0Dz/G2bbXfZs5U/fCH3feTTlJd\nt66W10031dIdd5zq6ae771u3DmyHRYvc9q9+1Y0rn/qUq1N9f9qyxaV74xtV3/1u1bPOcmPCjTfW\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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. Le creux des incidences se trouve en été." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEbCAYAAAAxukhGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYXFWd//H3NytJSGLCEsjGmiDIomEIyDIWa0BHYJ4Z\nEIVJkDjjCI7jjDMj0ZEk8hsQfBQUBVFRAoYlMirIliamWwfZErYAwWwkkHQWQpLuLGTv7++Pc4tU\nurq6blXXXp/X8+RJ9alzb5+6XVXf+z3n3HPN3REREUnVrdwNEBGRyqPgICIiaRQcREQkjYKDiIik\nUXAQEZE0Cg4iIpImVnAws4Fm9msze9PM3jCzk81skJk1mNkCM5tpZgNT6k8ys0VR/fNSyseY2Twz\nW2hmt6aU9zKzB6JtnjWzkSnPTYjqLzCz8YV64SIiklnczOEHwOPufjRwAvAX4FpglrsfBcwGJgGY\n2THApcDRwAXA7WZm0X7uACa6+2hgtJmNi8onAuvdfRRwK3BztK9BwHXAScDJwOTUICQiIsWRNTiY\n2QDgDHf/JYC773L3VuAiYFpUbRpwcfT4QuCBqN4yYBEw1swOAvq7+5yo3j0p26Tu6yHgrOjxOKDB\n3VvdvQVoAM7P65WKiEhscTKHw4D3zOyXZvaSmf3UzPoCQ9x9DYC7rwYOjOoPA5anbN8clQ0DVqSU\nr4jK9trG3XcDrWY2uJN9iYhIEcUJDj2AMcCP3X0MsIXQpdR+3Y1CrsNh2auIiEix9IhRZwWw3N3n\nRj//LyE4rDGzIe6+Juoyejd6vhkYkbL98KgsU3nqNivNrDswwN3Xm1kzkGi3TWP7BpqZFogSEcmD\nu3d4Mp41c4i6jpab2eio6GzgDeAR4MqobALwcPT4EeCyaAbSYcCRwAtR11OrmY2NBqjHt9tmQvT4\nEsIAN8BM4NxottQg4NyorKN2MnnyZNy9w3/5PleubYux32z7rLQ2daW9xXqtxWpTufZbSe/PYu63\nGG2qtvdYR3U6EydzAPgKMN3MegJvAZ8HugMzzOwq4G3CDCXcfb6ZzQDmAzuBq31PK64B7gb2Icx+\nejIqvwu418wWAeuAy6J9bTCz64G5hG6rqR4GpnOWSCTyeq5c2xZjv9n2GbdOPtvm06autLerr7UY\n++3Ksc13v9X0/izmfrMpx+epXO+x2McpW5Sphn/hZbhPnjzZpXh0fItHx7b4dIzTRd+dHX6v1tQV\n0l09M5PO6fgWj45t8ekY58Y8S79TNTAzr4XXISJSSmaG5zsgLSIi9UfBQURE0ig4iIhIGgUHERFJ\no+AgIiJpFBxERCSNgoOIiKRRcBARkTQKDiIikkbBQURE0ig4iIhIGgUHERFJo+AgIiJpFBxERCSN\ngoOIiKRRcBARkTQKDiIikkbBQURE0tRVcJg0CbZvL3crREQqX93cQ7qtDXr0gIYGOOecEjVMRKSC\n6R7SwKZN4A6PP17uloiIVL66CQ4tLdCtGzz2WLlbIiJS+eomOLS2wtFHw8aNsHhxuVsjIlLZ6io4\nfOhD8MlPwhNPlLs1IiKVrW6CQ0tLCA7jxsGsWeVujYhIZaub4NDaCgMHwsEHw7p15W6NiEhlixUc\nzGyZmb1qZi+b2QtR2SAzazCzBWY208wGptSfZGaLzOxNMzsvpXyMmc0zs4VmdmtKeS8zeyDa5lkz\nG5ny3ISo/gIzG5/vC012K/XrB1u25LsXEZH6EDdzaAMS7v4xdx8blV0LzHL3o4DZwCQAMzsGuBQ4\nGrgAuN3MkvNo7wAmuvtoYLSZjYvKJwLr3X0UcCtwc7SvQcB1wEnAycDk1CCUi5aWkDn07Qvvv5/P\nHkRE6kfc4GAd1L0ImBY9ngZcHD2+EHjA3Xe5+zJgETDWzA4C+rv7nKjePSnbpO7rIeCs6PE4oMHd\nW929BWgAzo/Z5r0ku5WUOYiIZBc3ODjwlJnNMbMvRGVD3H0NgLuvBg6MyocBy1O2bY7KhgErUspX\nRGV7bePuu4FWMxvcyb5ylhyQVnAQEcmuR8x6p7n7KjM7AGgwswWEgJGqkOtwdHg5d1cocxARiS9W\ncHD3VdH/a83sd8BYYI2ZDXH3NVGX0btR9WZgRMrmw6OyTOWp26w0s+7AAHdfb2bNQKLdNo0dtXHK\nlCkfPE4kEiQSib2eTwaHXr1g927YuRN69ozz6kVEakNTUxNNTU2x6mZdeM/M+gLd3H2zmfUj9PtP\nBc4mDCLfZGZfBwa5+7XRgPR0wgDyMOApYJS7u5k9B3wFmAM8BvzQ3Z80s6uBY939ajO7DLjY3S+L\nBqTnAmMIXWBzgROj8YfUNmZdeO+UU+CWW+DjH4cBA2D58hAsRETqVWcL78XJHIYAvzUzj+pPd/cG\nM5sLzDCzq4C3CTOUcPf5ZjYDmA/sBK5O+ea+Brgb2Ad43N2fjMrvAu41s0XAOuCyaF8bzOx6QlBw\nYGr7wBBXMnOAPV1LCg4iIh2rmyW7hw6FOXNg2DA48siwhMaoUSVqoIhIBdKS3eyZrQS61kFEJJu6\nCA47d4Z/ffuGnzVjSUSkc3URHFpbwyB08jptBQcRkc7VRXBI7VICBQcRkWzqIjikzlQCjTmIiGRT\nl8FBmYOISOfqIjioW0lEJDd1ERyUOYiI5KYugkPyXg5JGnMQEelcXQSH5F3gkpQ5iIh0rm6Cg7qV\nRETiq4vg0L5bScFBRKRzdREc3n9/z9IZoDEHEZFs6iI4bN8OvXvv+VmZg4hI5xQcREQkjYKDiIik\nqcvgoDEHEZHO1WVwUOYgItI5BQcREUlTl8Ghb98QHGrg9tkiIkVRl8GhV69wV7idO8vXJhGRSlaX\nwQHUtSQi0hkFBxERSVO3wSE57iAiIunqNjj066drHUREMqn54LB7d5iV1KPH3uXqVhIRyazmg0My\nazDbu1zBQUQks7oJDu1pzEFEJLO6DQ4acxARySx2cDCzbmb2kpk9Ev08yMwazGyBmc00s4EpdSeZ\n2SIze9PMzkspH2Nm88xsoZndmlLey8weiLZ51sxGpjw3Iaq/wMzG5/oCOwsOyhxERDqWS+bwr8D8\nlJ+vBWa5+1HAbGASgJkdA1wKHA1cANxu9kGP/x3ARHcfDYw2s3FR+URgvbuPAm4Fbo72NQi4DjgJ\nOBmYnBqE4sgUHHr3Ds+JiEi6WMHBzIYDnwR+nlJ8ETAtejwNuDh6fCHwgLvvcvdlwCJgrJkdBPR3\n9zlRvXtStknd10PAWdHjcUCDu7e6ewvQAJwf/+UpOIiI5CNu5nAL8J9A6lJ1Q9x9DYC7rwYOjMqH\nActT6jVHZcOAFSnlK6KyvbZx991Aq5kN7mRfsSk4iIjkrke2Cmb2KWCNu79iZolOqhZyjVPLXmVv\nU6ZM+eBxIpEgkUgACg4iIklNTU00NTXFqps1OACnARea2SeBPkB/M7sXWG1mQ9x9TdRl9G5UvxkY\nkbL98KgsU3nqNivNrDswwN3Xm1kzkGi3TWNHjUwNDqk6Cw6bN2d4xSIiNSj1xBlg6tSpGetm7VZy\n92+4+0h3Pxy4DJjt7v8A/B64Mqo2AXg4evwIcFk0A+kw4EjghajrqdXMxkYD1OPbbTMhenwJYYAb\nYCZwrpkNjAanz43KYssUHHr1gh07ctmTiEj9iJM5ZPIdYIaZXQW8TZihhLvPN7MZhJlNO4Gr3T+4\nrc41wN3APsDj7v5kVH4XcK+ZLQLWEYIQ7r7BzK4H5hK6raZGA9OxqVtJRCR3OQUHd/8j8Mfo8Xrg\nnAz1bgRu7KD8ReC4Dsq3EwWXDp67mxBQ8qLgICKSu7q9QlrBQUQks7oNDhpzEBHJrG6DgzIHEZHM\nFBxERCSNgoOIiKSp6+CgMQcRkY7VbXDo1UuZg4hIJnUbHNStJCKSmYKDiIikqevgoDEHEZGO1W1w\n0JiDiEhmdRsc1K0kIpKZgoOIiKSp6+CgMQcRkY7VbXDo0QPcYffu0rdJRKTS1W1wAA1Ki4hkUtfB\nQeMOIiIdq/vgoHEHEZF0dR8clDmIiKSr6+CgMQcRkY7VdXBQ5iAi0rG6Dw4acxARSVf3wUGZg4hI\nupoODu4hM9CYg4hIbmo6OOzcCd27Q7cMr1KZg4hIx2o6OHTWpQQKDiIimdR9cNCAtIhIuroPDsoc\nRETSZQ0OZtbbzJ43s5fN7DUzmxyVDzKzBjNbYGYzzWxgyjaTzGyRmb1pZuellI8xs3lmttDMbk0p\n72VmD0TbPGtmI1OemxDVX2Bm43N5cdmCgwakRUQ6ljU4uPt24Ex3/xjwUeACMxsLXAvMcvejgNnA\nJAAzOwa4FDgauAC43cws2t0dwER3Hw2MNrNxUflEYL27jwJuBW6O9jUIuA44CTgZmJwahLJR5iAi\nkp9Y3Uru/n70sDfQA3DgImBaVD4NuDh6fCHwgLvvcvdlwCJgrJkdBPR39zlRvXtStknd10PAWdHj\ncUCDu7e6ewvQAJwf98VpzKHyLFwITzxR7laISDaxgoOZdTOzl4HVwFPRF/wQd18D4O6rgQOj6sOA\n5SmbN0dlw4AVKeUrorK9tnH33UCrmQ3uZF+xKHOoPI89BrfdVu5WiEg2cTOHtqhbaTghC/gIIXvY\nq1oB22XZq2SnMYfKs2IFLF5c7lZIPfn5z2HXrnK3ovr0yKWyu280syZC184aMxvi7muiLqN3o2rN\nwIiUzYZHZZnKU7dZaWbdgQHuvt7MmoFEu20aO2rblClTPnicSCRIJBLKHCpQczMsXRo+rD1yeveJ\n5OerX4Wzz4bDDit3S8qvqamJpqamWHWzfjzNbH9gp7u3mlkf4FzgO8AjwJXATcAE4OFok0eA6WZ2\nC6EL6EjgBXd3M2uNBrPnAOOBH6ZsMwF4HriEMMANMBP4n2gQulv0u6/tqJ2pwSEpTnDYtCnbEZBC\nam4OgWH5cn1Ypfh27oQtW2D9er3fYM+Jc9LUqVMz1o1z7nYwMM3MuhG+oB9098fN7DlghpldBbxN\nmKGEu883sxnAfGAncLW7J7ucrgHuBvYBHnf3J6Pyu4B7zWwRsA64LNrXBjO7HphL6LaaGg1Mx6LM\nofI0N8OIEaFrSR9WKbaW6Nti/frytqMaZQ0O7v4aMKaD8vXAORm2uRG4sYPyF4HjOijfThRcOnju\nbkJAydm2bbDPPpmfV3AoLXdYuRIuuSQEh3PPLXeLpNZt2BD+V3DIXU1fIb1tG/Tpk/l5DUiX1rp1\n0LcvHHccLFlS7tZIPUhmDuvWlbcd1aimg8PWrdkzB13nUDrNzTB8OBxxhGYsSWkoc8hfTQeHbJmD\nupVKq7kZhg2DI49UcJDSUHDIX00HhziZg4JD6axYEYLDEUfAW29BW1u5WyS1rqUlfM4VHHJX08Eh\n24C0xhxKK5k57LsvDBwIq1aVu0VS6zZsCLPiFBxyV/PBIVu3ksYcSicZHEBdS1IaLS0hU9WAdO5q\nOjioW6mypAaHIUNg7drytkdq34YNITgoc8hdTQcHXedQWVKDQ79+sHlzedtTyf70J7jjjnK3ovop\nOOSvple32bpVs5UqSWpw2HffsKyBpGtpgcsvD8Hziiugf/9yt6h6tbTA4YeH4OAOVpAlPetDXWcO\nvXppzKFUtm4NwWD//cPPyhwy++pX4dOfDovF/epX5W5NdduwIXRh9u6t91uuaj44KHOoDEuXwiGH\n7DlzU+bQsR/9CJ57Dm6+Ga6+Gn7843DGK/nZsAEGDYL99tOgdK5qOjhoQLpyLF4Mo0bt+blfPwWH\n9n77W7jxxnCnvH33hTPPDNeCPPNMuVtWvVpa4EMfgsGDNe6Qq5oODhqQrhyLFoXpq0nqVkr33e/C\nz362Z7VaMzj5ZFiwoLztqlZtbdDaquCQr5oPDtkW3tOYQ2ksXrx3cFC3UrqFC+HEE/cuGzxY3SH5\n2rQpfP579FBwyEdNBwd1K1WOjrqVlDnssX59OFE58MC9y/fbT19q+WppCeMNoDGHfNR0cMjWrdS9\ne0jddX/Z4uuoW0mZwx6LFoXg2X6qpTKH/CUHo0GZQz5qOjhku84BlD2UwvbtsHp1mK2UpG6lvSWD\nQ3vKHPKXHIwGBYd81HRwyJY5gBbfK4WlS2HkyND3m6Rupb0tWgSjR6eX60stf8ocuqbmg0O2zKFP\nn1BPiqf9YDQoc2ivs8xB3Ur52bBhT+agDCx3NRscdu8OYwk9e3ZeT19Sxdd+vAGUObSXKTjojDd/\nqQPSgwfDe++Vtz3VpmaDQ7JLKdtaKvvuG6a8SfG0n6kEGpBO5R6msWbqVlLmkJ/UzGH4cFi+vLzt\nqTY1GxziDEZDCA46gy2uxYvDypip+vaF99/X3eAgLF2enIvfXr9+IQveurX07ap2qZnD8OFhUsTO\nneVtUzWp2eAQZzAaFBxK4a230oND9+7h76MvvcxdShAyX3Ut5WfjRhgwIDzu2TMswNfcXN42VZOa\nDg7KHMpv9+6QzqdOY03SeE/QWXAADabma8uWkHklHXIIvP12+dpTbWo2OGS7OjpJwaG4Vq4MX24d\n/S00KB0sWxbuOZCJxh3ys3lz+HwnKTjkpmaDQ9xupf79NSBdTG+9tWchufY0KB0sW9ZxZpWkzCE/\nyhy6pqaDg7qVym/p0szBQcc+ePttOPTQzM8rc8iPMoeuqdngoG6lytBZcFDmEChzKI4tWxQcuiJr\ncDCz4WY228zeMLPXzOwrUfkgM2swswVmNtPMBqZsM8nMFpnZm2Z2Xkr5GDObZ2YLzezWlPJeZvZA\ntM2zZjYy5bkJUf0FZjY+7gvTbKXKsHRp5v50DUiHCzVXroQRIzLXUeaQn82b1a3UFXEyh13Av7v7\nR4CPA9eY2YeBa4FZ7n4UMBuYBGBmxwCXAkcDFwC3m31wKdodwER3Hw2MNrNxUflEYL27jwJuBW6O\n9jUIuA44CTgZmJwahDqj6xzKZ9cuaGwMj7ONOdT7sV+5Eg44IKzxlYmmsuanfbfSyJFh5pxuuxpP\n1uDg7qvd/ZXo8WbgTWA4cBEwLao2Dbg4enwh8IC773L3ZcAiYKyZHQT0d/c5Ub17UrZJ3ddDwFnR\n43FAg7u3unsL0ACcH+eF5ZI5aEC6sB5+GM45J3zxqVupc9m6lEDdSvlwTx+Q7tcvfN7ffbd87aom\nOY05mNmhwEeB54Ah7r4GQgABkrcpGQakXqjeHJUNA1aklK+Iyvbaxt13A61mNriTfWUVd0C6f3+d\nvRbanXfC0KHwi1+E9WyGZfiLKWvLPhgN6lbKx7Zt4cK31JWAQV1LuYgdHMxsX8JZ/b9GGUT75KyQ\nyVqWFZGy04B0eSxeDC+/DHfdBbfcEvrSu3fvuK4yB2UOxdJ+MDpJwSG+HtmrgJn1IASGe9394ah4\njZkNcfc1UZdRMllrBlKH14ZHZZnKU7dZaWbdgQHuvt7MmoFEu20aO2rjlClTPnicSCTYti2h4FAG\nP/sZTJgQupUGDMjcpQTh2Le0lK5tlejtt2Hs2M7rKHPIXfvB6KTDDgsnMPWqqamJpqamWHVjBQfg\nF8B8d/9BStkjwJXATcAE4OGU8ulmdguhC+hI4AV3dzNrNbOxwBxgPPDDlG0mAM8DlxAGuAFmAv8T\nDUJ3A84lDISnSQ0OEAZENSBdWu7w4IPw6KPQrRtceWVYVC6Tfv1gxYrMz9eDZcvgkks6r5PMHNyz\nrzIsQabM4aST4L77St+eSpFIJEgkEh/8PHXq1Ix1swYHMzsNuBx4zcxeJnQffYMQFGaY2VXA24QZ\nSrj7fDObAcwHdgJXu38wP+Aa4G5gH+Bxd38yKr8LuNfMFgHrgMuifW0ws+uBudHvnRoNTGe1bdue\nFRk7owHpwlmyJKx6+ZGPhJ+/+c3O78+tbqV4Yw59+oTAEHccTTJnDqedBl/+sgJtHFmDg7v/GcjQ\na8w5Gba5Ebixg/IXgeM6KN9OFFw6eO5uQkDJia5zKL0//AHOPnvPh65Hj/QBwVT1fuzb2sLUypEj\ns9dNXhOi4BBP+2msScOHh+XiM92WVfao6Suk43yQ+vYNdXfvLn6bat0f/hDGGuKq98xh7dowWy7O\n+7Tej1WuMnUrAZx6Kvz5z6VtTzWq2eAQN3Po1i188N5/v/htqmVtbTB7dsgc4qr3i+Deew/23z9e\n3XrPsnKVqVsJQteSgkN2NR0c4qbg+uB13auvhit9M13T0JF6Xz5j3bow2ByHMofcdJY5nHYaPPNM\nadtTjWo2OMS9zgE0KF0IjY1w1lnZ66Wq9y+8XIKDTmBy01nmcNxxYZbc88+Xtk3VpmaDQ9xuJdAH\nrxDmz4fjj89tm3o/7sociqezzKFHD/j5z+HCC+H660vbrmpSs8Eh7oA06EuqEPKZ/VHvX3jKHIqn\ns8wB4NJLw5X83/0u7NhRunZVk5oNDsocSmvhwtyDQ/K41+sqmQoOxZNpKmuqoUPDe/aFF0rTpmqj\n4IAW3+uqjRvDmM3Qoblt16tXmC22bVtx2lXp1K1UPJ11K6U666wwy07S1WxwyLVbSQPS+Vu0CEaN\nyu+K04EDobW18G2qBsociidbt1LSmWcqOGRSs8FB3Uqlk0+XUpKCQ7y6yhxyEzdzOP10mDs3nEzK\n3mo2OGhAunS6Ghw2bixse6qFMofiiZs59O8PJ5yg6x46UrPBQZlD6ShzyI8yh+KJmzlA6Fpq7PBG\nAPWtJoNDcgVLBYfSUHDInXtYhnvw4Hj19R7NTZzZSklnnAH/93/FbU81qsng0NoazrQy3YGsvf79\nNSCdL/cQHEaNym/7AQPqMzhs3Ai9e4d/cdT7UiO5itutBPDxj8OLL8L27cVtU7WpyeCwZg0cdFD8\n+jory9+774YpqXHPgNur18whly4l0CKFucqlW2nAADjqqDAwLXvUbHAYMiR+fQWH/K1alfv1Danq\nNTisX59bcNB7ND733DIHUNdSRxQcCB+8ep0x01UtLfHuuJdJvQaHfDIHdSvFs2NH6FLu2TP+NgoO\n6WoyOKxenVtwGDIkdI9I7lpa4EMfyn/7ep3KmmtwUOYQXy6D0Umnnx7u8XDbbXD55eH+JPWuJoND\nrmMOBx8MK1fW7xo/XdHaGr7g86XMIR4NSMe3ZUtuXUoQThBHjoSZM2HePHjkkeK0rZrUbHDIJXPo\n3z8s41uPX1Jd1dXMoV5nK2lAunjyyRwAXnkFHn00LON9/fU6WVRwiAwdGrIHyU0hupUUHLLr1Sus\nXaXlpbPLdTA6qVv0bXjhhbBzJzzxRGHbVW1qMjjkOuYACg75UnDIT67BAZQ9xJXLNNaOdOsGX/oS\nPPhg4dpUjWoyOChzKB0Fh/zkExw07hBPa2voruyKsWPDzYDqWc0FB3cFh1LSgHR+1q6F/ffPbRtl\nDvFs2JD/RZlJxx4LixfX771GoAaDw8aNYX5zrn2OCg756Wrm0Ldv6N+tt770fE5gNJ01nlzWrMqk\nd++wXthrrxWmTdWo5oJDPh86UHDIV1eDg1noAqinax3a2kLmcOCBuW2nbqV41q/v2oWZSR/7WH13\nLdVccMhnMBoUHPLV1eAA9de1tGFDyJjirhqcpG6leArRrQQwZgy89FLX91Otai445HoBXJKCQ35a\nWro25gD1FxzyzW6VOcSjzKEwsgYHM7vLzNaY2byUskFm1mBmC8xsppkNTHlukpktMrM3zey8lPIx\nZjbPzBaa2a0p5b3M7IFom2fNbGTKcxOi+gvMbHycF5TvB+/gg8MicvV+4Usu3EN3kIJDbvJ9jypz\niKcQYw4Q7hD3+uthTKwexckcfgmMa1d2LTDL3Y8CZgOTAMzsGOBS4GjgAuB2sw9uO38HMNHdRwOj\nzSy5z4nAencfBdwK3BztaxBwHXAScDIwOTUIZZLvB69Pn/DhW7cu923r1ebN4bj16NG1/Sg4xKPM\nIZ5CdSv17w8jRsCbb3Z9X9Uoa3Bw96eBDe2KLwKmRY+nARdHjy8EHnD3Xe6+DFgEjDWzg4D+7j4n\nqndPyjap+3oIOCt6PA5ocPdWd28BGoDzs7U33zEHUNdSrgox3gAKDnEpc4inUN1KAIkENDQUZl/V\nJt8xhwPdfQ2Au68GkvMuhgHLU+o1R2XDgBUp5Suisr22cffdQKuZDe5kX51atSq/MQcIwWHVqvy2\nrUeFCg71Nlsp33ExTWWNp1DdSgCf/jT8/veF2Ve1KdSAdCF76i17lczeegsOPzy/bZU55KYQg9Gg\nzCEudStlt3t3uOVvId6XAGedFRbkq8fu5nx7i9eY2RB3XxN1GSXvhtAMjEipNzwqy1Seus1KM+sO\nDHD39WbWDCTabdOYqUFTpkz54H7Gzc0Jjj8+kalqRiNGwNtv57xZ3Spkt9J773V9P9VC3UrF09oa\nxgri3j8+mz594MwzwyJ8V1xRmH2WU1NTE01NTbHqxg0Oxt5n9I8AVwI3AROAh1PKp5vZLYQuoCOB\nF9zdzazVzMYCc4DxwA9TtpkAPA9cQhjgBpgJ/E80CN0NOJcwEN6hKVOmsGIF3HknXHBBzFfVzlFH\nwWOP5bdtPSpkcFiypOv7qRbKHIqnkF1KScmupVoIDolEgkQi8cHPU6dOzVg3zlTW+4BnCDOM3jGz\nzwPfAc41swXA2dHPuPt8YAYwH3gcuNr9g8mh1wB3AQuBRe7+ZFR+F7C/mS0CvkoUANx9A3A9MJcQ\nOKZGA9MZLVkCRxyR7RVldtRR8Je/5L99vWltLVxwaOn0L1tb8g0OAweGmTiS2YYNhRuMTrrgApg1\nq/6muWfNHNz9cxmeOidD/RuBGzsofxE4roPy7YTprx3t627g7mxtTCpEcFi4MCxv0K3mLg8svEJl\nDvV0m1b38FrzCQ6HHgpLlxa8STWlGJnD0KFhmZd8/27Vqqa+ArsaHAYMCF92K1ZkryuFG5Cup4kA\nra3hxj19+uS+7WGHwTvvhEFX6VihrnFo7+ij6+96h5oKDl2ZqZR01FGwYEFh2lPrCpU5DB0Kzc31\nkbZ35TqcffYJy3w3N2evW68KeY1Dqg9/WMGhqnU1c4DwJtC4QzyFvM6hW7f6uNYh3/GGpMMPDydB\n0rFidCuBMoeqV4jgoMwhvkIFB6ifriUFh+JSt1Lh1ExwaGmB7dtzXyO/PWUO8RVqthIoOMSl4NC5\nYnUrKTiBNze3AAATbElEQVRUsWTWYF26vlqZQy5Wr4YDDijMvuolOCxfDiNHZq+XiYJD54rVrTRy\nZMhK6qHrM6lmgsP8+V3vUoLwJli3TleiZrNlS7iqecSI7HXjqJfgsHRpmJKaLwWHzhXjOgcIY2Kj\nR9fXiWPNBIcbb4QJE7q+n27d4JhjYN687HXr2eLF4YuqUMsUDBtWH7Nwli1TcCimYmUOUH9dSzUT\nHIYPhwsvLMy+TjkFnnuuMPuqVYsWhTOpQqmXzGHZsnC9Qr6GDAlZ26ZNBWtSTSl2cJg/vzj7rkQ1\nExxuvbXr4w1JH/84PPtsYfZVqxYuVHDI1ebN4Yu9K5MmzEJw0ZXS6XbvLm5wOOMMmDmzOPuuRDUT\nHI45pnD7UnDITsEhd8uWwSGHdP0k5vDD62uhwriWLAm3+83n6vM4zjgjzDarl9mMNRMcCumww2DH\nDi2j0ZliBIdav4d3V8cbko48UsGhI6+/DsceW7z9d+8Ol14KDz5YvN9RSRQcOmCm7CGbQgeHffYJ\nS1LX8k1VujrekFRvs2biev11OC5tac/C+uxn4f77a/skJknBIYNTTlFwyGT9+pBZdfWCw/aSayzV\nqkJlDqNHh+Aseyt25gAwdmx479fDbEYFhwyUOWSWnKlUqAkASbU+7lCo4KALNTtWiuBgBuefD3/4\nQ3F/TyVQcMhg7Fh47TV4//1yt6TyFLpLKemww8L1E7WqqxfAJQ0dGmY+1dN9t7PZvj0c36OOKv7v\nOv10ePrp4v+eclNwyKBvXzj+eF3v0N6LL8KPf1ycvt0xY8L+a1WhxhzM1LXU3oIF4dj27l3833X6\n6fDnP9f+uIOCQyc+8Qn405/K3YrK8eKLMG4c/MM/wNe+Vvj9n3hi7QaHjRth27ZwP4ZCUHDYWym6\nlJJGjgxBqJazXFBw6NRf/7WCQ6onnghLlFxzTbibWaEde2yYolmLXXnz5oUrbAs1TqNxh72VYqZS\nqnroWlJw6MSpp8KcOWF2gsDs2XD22cXbf+/e4Qv01VeL9zvK5Y9/DJlooShz2FtTE5x0Uul+32mn\nKTjUtYEDw4dw7txyt6T8tm4NgfKMM4r7e048EV56qbi/oxyamiCRKNz+lDnssWRJ+FfME5f2Tj8d\n/u//Svf7ykHBIYu//uv6mLbWnnvoI0965pkwQN+/f3F/by2OO+zYAc8/X9jAOnp0mFJc64OicUyf\nDp/5DPTsWbrfeeyxsHNnbU9YUXDI4jOfgXvuqa8P4c6dMHEifPSjYTEzCF1KZ51V/N9dizOW5s4N\nS14U6q55EO67fcAB9bPOTybu8KtfwRVXlPb3du8OX/0qfO97pf29paTgkMXJJ4elHZqayt2S0mhp\ngYsuCguMDRwIv/lN+AA++WRpgsPxx4dZILV0x61CdyklnXsuNDQUfr/VZM6c8H8pxxuSrroKGhtr\n9/4aCg5ZmME//iP87GflbknxvfFG+JAdcQQ8/DB885vhJkpTp0KPHmEQrth69w5fev/7v8X/XcXW\n1hbmw8+YUdjB6KTzzquvJaQ78otfwPjxhb9aP47+/cN3w3e+U/rfXQrmNdBfYmZezNexfn1YJnnR\nosLdM7kUtm0LbR86NHvdJUtCn3jqHfXa2sKZ/KZN8MIL4UYzpfCb38APf1jd2drOnfB3fxeyoMsu\ng2uvLfz03w0bwhLga9eW5uKvSrNlS7hN7WuvhTsJlsOGDXDCCfDTn4ZlNaqNmeHuHYZWZQ4xDB4c\nvjC/8Y1ytyS+bdvCm3XUKPj7v888cOYevvjPPx8mT977VqvdusF994XxhlIFBoBPfSrMW1+2rHS/\ns1Dcw9LjV14ZHr/6Klx3XXGuCxk0CD7ykdqfUpnJr38dstlyBQYIf4N77gljdGvXlq8dxaDgENO3\nvw2PPx5m7VSyNWvC7KrPfS58oa9aFbo0Pve5MH7yzW/Co4+G8p/+NGRE48fDv/87fPGL6fs7/vjQ\nzVRKvXuHiQD33lva3xvXsmUhaH7/++E90dISytetC7NYjjsuDOTPmFH8GTTnnRcuTqx2S5fCJz8J\nX/86rF7ded1HHoEf/CBkl1/4Qmna15lEItyi+Ec/KndLCszdK/4fcD7wF2Ah8PUOnvdSuP9+92OP\ndd+ypSS/LmcvvOB+wAHun/iE+5e/7L51657ndu50f/JJ9299y/3cc90HDnQ/+2z3Z55xb2srW5Mz\nmjcvvJZXXil3S/bYvt19yhT3/fZzv/TScIzPPju08+GH3c87z/1rXyvt8Xz9dfcDD3Q/+mj3++4r\n3e8tlNZW95/8JLyGG25wv+Ya97593Xv3Du/jOXP2rv/44+4HHeR+9dXuV1zhvmNHWZqdZt489+HD\n3XftKndLchN9d3b8vZvpiUr5R8huFgOHAD2BV4APt6vj7u6NjY2FPG5p2trCG/KKKyrjC/WOO9z/\n+7/dv/c9929/O3zAHnmkeL+v2Me3vQceCB+4ZctK+ms7tH27+4UXhgDwzjt7P/fnP7sffLB7IhGC\ncD66cmx373b/05/cR44Mwf/228P/DQ2h3ZXqhRfcBw1y/9u/dX/uuT3lbW3hBOznPw/Hdfx49/nz\n3R98MATip5/O7/cV+/178snujz5a1F/RJcnj+pe/uM+c6T57dufBoRq6lcYCi9z9bXffCTwAXNRR\nxaYij2CawZ13hv7wa68N/fpz54b5zg0NsHx5SHnnzy/+dRFPPAE33RRmEb3zTliP6MEH4dOfLt7v\nLPbxbe8znwndDKecAk89Fcra2sJSFD/7WegWe+qpMOi7cGG4rev27aHe9u1hxlMhLmBcuBAuuST8\nTX//+zAImurUU8Pf/NFHw98jH105tt26hckEzz4bBmfnzg0D4l//Olx+eXHfi2vXhvXHXn45LCMe\n1/bt8PnPh66Y3/wmdHkmmYVVkSdODFeBDxsWukbvvjvMTsp31lyx379f+EJlzWrcuTN8L119dejq\n7NkT9tsvjOnddFOYhdipTFGjUv4Bfwf8NOXnK4Aftqvj7u6TJ0/OGDU7O2vIdkbR/vnm5nC2c9BB\n7oMGNfqkSe5jxoQz9/POcx8xwn30aPf/+i/3KVMaffr0cNbz6KPujY3uzz8fugPuv7/RV61yX7LE\n/aWX3Juawpn/gw+6T5+euU2tre4HHNDos2bl9nrinDl1Vqez45tt23zalHxu9uyQQQwZEv4/7jj3\niRPDvxNOaPTDDnM/8kj3YcPce/YMXWb9+jV6IuF+yCHuX/pSyD527AjdP//xH+6XX+7+z//c6MuW\nhTOqtjb3Vavcf/1r90mT3L/xjUb/1a9CNnDgge7XXuu+bVvXjmFXjm0++9261f3QQxt92rT057Zs\ncV+71n3atEb//vfDa54+PZR1tt9du0L31d/8TaOPHRuO9amnuh9/vPu++4auoIkT3a+4otFvv939\nt791f/bZ0H05e3boFvr2txv9n/7J/dOfTs/Ac/0s5rJtob8f2pdv2hTen5de6n7vve7/+Z/u3/pW\no7e1ua9Z4/7YY+6zZoWM+HvfC8d+x47w88UXu/fv737EEe6nntroX/6y+y9/GT7rSbt2hb9bS4v7\nzJlhvzt27N2VNWtWozc2un/xi+777+9+yinuN90UsrRkFpnabjrJHPI8z6k+TU1NJDJcidTZcx09\nP3RoONt58UX49a+buOGGBDfcsKe+e1gf6Le/hfvvb+JjH0uwa1eYerdlSzjL37IFmpub6N07Qb9+\n4YKzAQPCv169oKGhiX/7twT77BOi/ahR4V/37uGK0EMOaeLss3N7PdleZ9w6+WybT5uSz515ZsiO\nVqwIZ6cf/vCeee1TpjQxZcqe7d3DAPENNzTx3e8maG2FSZPC9Rtbt4Zph5/6FBxzDNx2WxMnnZRg\n8+Zwxt+rVziD/au/Cn/XV15JcPXV4aLA5GyjrhzDrhzbfPa7zz4wblwTX/tagqefDjNr3nwzZBer\nV0O/frBrVxOXXJJg+HB46KFwlnnSSbBrF7zxRhM9eiRoa4M+fcJV3suXh+nc/fuH43vyyXum0W7a\nFCZsvPMOTJ/exKuvJnjiiTBJolu30J7evWHZsibGjk3wk5+kX5+Q62cxl207U4j37r77huN7++3w\nu9+FyRx33NHEffcleO+9cAOxXbvC3+GAA+Bb32riP/4jwdFHhyzpJz8JU2MnT27iyCMT/O538C//\nEo7R1q1hkkPv3iED2LKliba2BN26hffuyJHhPbp0aROjRyf47GdDBnnIIfkfp4q/zsHMTgGmuPv5\n0c/XEqLdTSl1KvtFiIhUKM9wnUM1BIfuwALgbGAV8ALwWXd/s6wNExGpYRXfreTuu83sy0ADYebS\nXQoMIiLFVfGZg4iIlF41TGVNY2abyt2GXGVrs5k1mtmYUrWnk3ZU3bEFHd9iqpZjm1Rtx7hSj29V\nBgegGtOdamlztbSzvWppd7W0M1W1tVntLYBqDQ6YWV8zm2Vmc83sVTO7MCo/xMzmm9lPzex1M3vS\nzCphzUozs0+Y2e9TCm4zs/HlbFRHqvDYgo5vMVXNsU2qsmNckce3aoMDsA242N3/CjgLSL0n05HA\nbe5+LNBKuJCuEjgVepbQTjUeW9DxLaZqObZJ1XaMK+74VvxspU4Y8B0zOwNoA4aa2YHRc0vd/bXo\n8YvAoWVoXzXTsS0uHd/i0zHuomoNDkZYRmM/4GPu3mZmS4F9oue3p9TdnVJebruA7ik/V0q7UlXr\nsQUd32KqhmObVI3HuOKObzV3Kw0A3o3+8GcSVm1NKsNNA7Ny4G3gGDPraWYfIlzYV4mq7diCjm8x\nVdOxTaqmY1yRx7fqMofoiultwHTgUTN7FZgLpF4YV1F9d1Gbt7t7s5nNAF4HlgIvpVQre5ur8diC\njm8xVcuxTaq2Y1zJx7fqLoIzsxOAO939lHK3Ja5qaXO1tLO9aml3tbQzVbW1We0tnKrqVjKzLxLO\nCL5Z7rbEVS1trpZ2tlct7a6WdqaqtjarvYVVdZmDiIgUX1VlDiIiUhoVHRzMbLiZzTazN8zsNTP7\nSlQ+yMwazGyBmc00s4FR+eCo/iYz+2G7fTWa2V/M7GUze8nM9i/Ha6okBT6+Pc3szmib+Wb2t+V4\nTZWiUMfWzPZNec++bGZrzez75XpdlaTA79/Pmtk8M3vFzB43s8HleE2VpKK7lczsIOAgd3/FzPYl\nXLByEfB5YJ2732xmXwcGufu1ZtYX+ChwLHCsu38lZV+NwL+7+8ulfyWVqcDHdwrQzd2vi34e7O7r\nS/ySKkYhj227/c4F/tXd/1yaV1K5CnWMoxlDK4EPu/sGM7sJ2OLu3y7H66oUFZ05uPtqd38leryZ\nMB1tOOENMC2qNg24OKrzvrs/w94XuaSq6NdbagU+vlcBN6bsu24DAxTlvYuZjQYOUGAICniMk9c9\n9DczI1wjsbLIza94VfNlaWaHEqL+c8AQd18D4Q0CHJh5y73cHaXn/12URlaxrhzfZNoO/D8ze9HM\nHjSzA4rY3KpSoPcuwGeABwvdvlrQlWPs7ruAq4HXgBXA0cBdRWxuVaiK4BCljA8R0unNpF8UEqdv\n7HPufhxwBnCGmV1R4GZWrQIc3x6EM7an3f1Ewgf0e51vUh8K9N5Nugy4v1BtqxVdPcZm1gP4EnCC\nuw8jBIlvFKOt1aTig0P0h3sIuNfdH46K15jZkOj5g4B3s+3H3VdF/28B7gPGFqfF1aUQx9fd1xH6\naH8bFf0a+FiRmlw1CvXejeoeD3TXmNneCnSMPwq4uy+Lfp4BfLwIza0qFR8cgF8A8939BylljwBX\nRo8nAA+334iU9VPMrLuZ7Rc97gn8DeEydSnA8Y383sIaNgDnAPML2cgqVahjC/BZlDV0pBDHuJmw\nrtF+0c/nsvdyG3Wp0mcrnQb8iZDmJdc7/wbwAiG6jyAsWHWpu7dE2ywF+gO9gBbgPOCdaD89CCsf\nziLMXKrcF18ChTq+7v4XMxsJ3AsMBNYCn3f3FaV9RZWjkMc2em4x8El3X1jil1KxCvz+/Sfgq8CO\naJsr3X1DaV9RZano4CAiIuVRDd1KIiJSYgoOIiKSRsFBRETSKDiIiEgaBQcREUmj4CAiImkUHERK\nwMy+mMuSLWZ2iJm9Vsw2iXSmR7kbIFLrzKy7u9+Zx6a6CEnKRsFBJAYzOwR4knDPgDGE5VfGA8cA\n3wf6Ae8RrqxdE90/5BXgNOB+MxsAbHL375vZR4E7gD7AEuAqd281sxMJq4E68FRJX6BIO+pWEonv\nKOBH7n4MsBH4MnAb8HfufhLwS+CGlPo93X2su9/Sbj/TgP90948SgszkqPwXwDXuXveLFkr5KXMQ\nie8dd38uejydsI7PR4CnopvEdGPvm8Sk3XshyiAGuvvTUdE0YEZ0T4yBKTfyuRc4vwivQSQWBQeR\n/G0C3nD30zI8vyVDeUerrnZWLlJy6lYSiW+kmZ0cPf4c8CxwgJmdAuHeAmZ2TGc7cPeNwPpoRVGA\nfwD+6O6twAYzOzUqv7zwzReJT5mDSHwLgGvM7JfAG4TxhpnAbVG3UHfgVsK9LDqbaXQl8BMz6wO8\nBXw+Kr8K+IWZtQENRXkFIjFpyW6RGKLZSo9Gt5oVqXnqVhKJT2dSUjeUOYiISBplDiIikkbBQURE\n0ig4iIhIGgUHERFJo+AgIiJpFBxERCTN/wc5WnA5n1htNAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sorted_data['inc'][-200:].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 août de l'année $N$ au\n", + "1er août 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 août de chaque année, nous utilisons le\n", + "premier jour de la semaine qui contient le 1er août.\n", + "\n", + "Comme l'incidence de syndrome grippal est très faible en été, cette\n", + "modification ne risque pas de fausser nos conclusions.\n", + "\n", + "Encore un petit détail: les données commencent an octobre 1984, ce qui\n", + "rend la première année incomplète. Nous commençons donc l'analyse en 1985." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "first_august_week = [pd.Period(pd.Timestamp(y, 8, 1), 'W')\n", + " for y in range(1985,\n", + " sorted_data.index[-1].year)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En partant de cette liste des semaines qui contiennent un 1er août, 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": 12, + "metadata": { + "collapsed": false + }, + "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": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2014 1600941\n", + "1991 1659249\n", + "1995 1840410\n", + "2012 2175217\n", + "2003 2234584\n", + "2006 2307352\n", + "2017 2321583\n", + "2001 2529279\n", + "1992 2574578\n", + "1993 2703886\n", + "1988 2765617\n", + "2007 2780164\n", + "1987 2855570\n", + "2016 2856393\n", + "2011 2857040\n", + "2008 2973918\n", + "1998 3034904\n", + "2002 3125418\n", + "2009 3444020\n", + "1994 3514763\n", + "1996 3539413\n", + "2004 3567744\n", + "1997 3620066\n", + "2015 3654892\n", + "2000 3826372\n", + "2005 3835025\n", + "1999 3908112\n", + "2010 4111392\n", + "2013 4182691\n", + "1986 5115251\n", + "1990 5235827\n", + "1989 5466192\n", + "dtype: int64" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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 rares: il y en eu trois au cours des 35 dernières années." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "yearly_incidence.hist(xrot=20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/module3/ressources/analyse-syndrome-grippal-orgmode+Lisp+Python+R.org b/module3/ressources/analyse-syndrome-grippal-orgmode+Lisp+Python+R.org new file mode 100644 index 0000000000000000000000000000000000000000..32af4a1f83169d4c207fe97019dce71afdaf2bb1 --- /dev/null +++ b/module3/ressources/analyse-syndrome-grippal-orgmode+Lisp+Python+R.org @@ -0,0 +1,239 @@ +#+TITLE: Incidence du syndrôme grippal +#+LANGUAGE: fr +#+OPTIONS: *:nil num:1 toc:t + +# #+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args :session :exports both + +* Préface + +Pour exécuter le code de cette analyse, il faut disposer des logiciels suivants: + +** Emacs 25 ou 26 +Une version plus ancienne d'Emacs devrait suffire, mais en ce cas il est prudent d'installer une version récente (9.x) d'org-mode. + +Bibliothèque supplémentaire: +- [[https://github.com/magnars/dash.el][Dash]] 2.13.0 + +#+BEGIN_SRC emacs-lisp :results output +(require 'dash) +(unless (featurep 'dash) + (print "Veuillez installer Dash !")) +(unless (featurep 'ob-emacs-lisp) + (print "Veuillez activer emacs-lisp dans org-babel (org-babel-do-languages) !")) +#+END_SRC + +** Python 3.6 +Nous utilisons le traitement de dates en format ISO 8601, qui a été implémenté en Python seulement avec la version 3.6. + +#+BEGIN_SRC python :results output +import sys +if sys.version_info.major < 3 or sys.version_info.minor < 6: + print("Veuillez utiliser Python 3.6 (ou plus) !") +#+END_SRC + +#+BEGIN_SRC emacs-lisp :results output +(unless (featurep 'ob-python) + (print "Veuillez activer python dans org-babel (org-babel-do-languages) !")) +#+END_SRC + +** R 3.4 +Nous n'utilisons que des fonctionnalités de base du langage R, une version antérieure devrait suffire. + +#+BEGIN_SRC emacs-lisp :results output +(unless (featurep 'ob-R) + (print "Veuillez activer R dans org-babel (org-babel-do-languages) !")) +#+END_SRC + +* Préparation des données + +Les données de l'incidence du syndrome grippal sont disponibles du site Web du [[http://www.sentiweb.fr/][Réseau Sentinelles]]. 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 1984 et se termine avec une semaine récente. L'URL est: +#+NAME: data-url +http://www.sentiweb.fr/datasets/incidence-PAY-3.csv + +Voici l'explication des colonnes donnée sur [[https://ns.sentiweb.fr/incidence/csv-schema-v1.json][le site d'origine:]] + +| Nom de colonne | Libellé de colonne | +|----------------+-----------------------------------------------------------------------------------------------------------------------------------| +| ~week~ | Semaine calendaire (ISO 8601) | +| ~indicator~ | Code de l'indicateur de surveillance | +| ~inc~ | Estimation de l'incidence de consultations en nombre de cas | +| ~inc_low~ | Estimation de la borne inférieure de l'IC95% du nombre de cas de consultation | +| ~inc_up~ | Estimation de la borne supérieure de l'IC95% du nombre de cas de consultation | +| ~inc100~ | Estimation du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | +| ~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) | +| ~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) | +| ~geo_insee~ | Code de la zone géographique concernée (Code INSEE) http://www.insee.fr/fr/methodes/nomenclatures/cog/ | +| ~geo_name~ | Libellé de la zone géographique (ce libellé peut être modifié sans préavis) | + +L'indication d'une semaine calendaire en format [[https://en.wikipedia.org/wiki/ISO_8601][ISO-8601]] est populaire en Europe, mais peu utilisée aux Etats-Unis. Ceci explique peut-être que peu de logiciels savent gérer ce format. + +** Téléchargement +Pour éviter de télécharger les données plusieurs fois, nous les gardons dans un "buffer", ce qui est un espace mémoire dans Emacs contenant du texte. Le nom de ce buffer est +#+NAME: data-buffer-name +*données syndrome grippal* + +#+BEGIN_SRC emacs-lisp :results silent :var url=data-url :var name=data-buffer-name +(require 'url) +(with-current-buffer (get-buffer-create name) + (unless buffer-read-only + (url-handler-mode) + (insert-file-contents url) + (setq buffer-read-only t))) +#+END_SRC + +La prochaine étape est l'extraction des données qui nous intéressent. D'abord nous découpons le contenu du fichier en lignes, dont nous jetons la première qui ne contient qu'un commentaire. Les autres lignes sont découpées en colonnes. Pour détecter les données manquantes, nous vérifions si une ligne contient au moins un champ vide. A la fin de ce bloc, deux variables contiennent les données manquantes et les donées valables. +#+BEGIN_SRC emacs-lisp :results silent :var name=data-buffer-name +(require 'cl) +(require 'dash) +(defun missing-data? (row) + (--any (string= it "") row)) +(with-current-buffer name + (let* ((lines (split-string (buffer-string) "\n" t)) + (table (rest lines)) + (columns (--map (split-string it ",") table)) + (missing/valid (-separate 'missing-data? columns))) + (setq missing-data-lines (first missing/valid)) + (setq valid-data-lines (second missing/valid)))) +#+END_SRC + +Regardons les données manquantes... +#+BEGIN_SRC emacs-lisp +missing-data-lines +#+END_SRC + +Nous ne gardons que la première (~"week"~) et la troisième (~"inc"~) colonne des données valables. Nous insérons ~hline~ comme deuxième élément de notre tableau pour indiquer à org-mode la séparation entre l'en-tête (les noms des colonnes) et les données. +#+NAME: data +#+BEGIN_SRC emacs-lisp :results silent +(-insert-at 1 'hline + (-select-columns '(0 2) valid-data-lines)) +#+END_SRC + +Regardons les premières et les dernières lignes: +#+BEGIN_SRC emacs-lisp :results value :var data=data :colnames yes +(-concat (-take 5 data) + '(hline) + (-take-last 5 data)) +#+END_SRC + +** Vérification +Il est toujours prudent de vérifier si les données semblent crédibles. Nous savons que les semaines sont données par six chiffres (quatre pour l'année et deux pour la semaine), dont les deux premiers sont ou "19" ou "20", et que les incidences sont des nombres entiers positifs. + +#+BEGIN_SRC emacs-lisp :results output :var data=data :colnames yes +(defun check-week (week) + (unless (string-match-p (rx (or "19" "20") (repeat 4 digit)) week) + (princ (format "Invalid week value: %s\n" week)))) + +(defun check-inc (inc) + (unless (string-match-p "[0-9]+" inc) + (princ (format "Invalid incidence value: %s\n" inc) ))) + +(-map (lambda (week+inc) + (check-week (first week+inc)) + (check-inc (second week+inc))) + data) +#+END_SRC + +Rien à signaler ! + +** Conversions +Pour faciliter les traitements suivants, nous remplaçons les numéros de semaine ISO par les dates qui correspondent aux lundis. A cette occasion, nous trions aussi les données par la date, et nous transformons les incidences en nombres entiers. Nous utilisons le langage Python 3 parce qu'il est un des rares à proposer la conversion de semaines ISO en dates dans sa biblithèque standard. + +#+BEGIN_SRC python :results silent :var input_data=data +import datetime +data = [(datetime.datetime.strptime(year_and_week + ":1" , '%G%V:%u').date(), + int(inc)) + for year_and_week, inc in input_data] +data.sort(key = lambda record: record[0]) +#+END_SRC + +Regardons de nouveau les premières et les dernières lignes: +#+BEGIN_SRC python :results value +str_data = [(str(date), str(inc)) for date, inc in data] +[('date', 'inc'), None] + str_data[:5] + [None] + str_data[-5:] +#+END_SRC + +** Vérification des dates +Nous faisons encore une vérification: nos dates doivent être séparées d'exactement une semaine, sauf autour du point manquant. +#+BEGIN_SRC python :results output +dates = [date for date, _ in data] +for date1, date2 in zip(dates[:-1], dates[1:]): + if date2-date1 != datetime.timedelta(weeks=1): + print(f"Il y a {date2-date1} entre {date1} et {date2}") +#+END_SRC + +** Passage Python -> R +Nous passons au langage R pour inspecter nos données, parce que l'analyse et la préparation de graphiques sont plus concises en R, sans nécessiter aucune bibliothèque supplémentaire. + +Nous utilisons le mécanisme d'échange de données proposé par org-mode, ce qui nécessite un peu de code Python pour transformer les données dans le bon format. +#+NAME: data-for-R +#+BEGIN_SRC python :results silent +[('date', 'inc'), None] + [(str(date), inc) for date, inc in data] +#+END_SRC + +En R, les données arrivent sous forme d'un data frame, mais il faut encore convertir les dates, qui arrivent comme chaînes de caractères. +#+BEGIN_SRC R :results output :var data=data-for-R +data$date <- as.Date(data$date) +summary(data) +#+END_SRC + +** Inspection +Regardons enfin à quoi ressemblent nos données ! +#+BEGIN_SRC R :results output graphics :file inc-plot.png +plot(data, type="l", xlab="Date", ylab="Incidence hebdomadaire") +#+END_SRC + +Un zoom sur les dernières années montre mieux la situation des pics en hiver. Le creux des incidences se trouve en été. +#+BEGIN_SRC R :results output graphics :file inc-plot-zoom.png +plot(tail(data, 200), type="l", xlab="Date", ylab="Incidence hebdomadaire") +#+END_SRC + +* Étude de l'incidence annuelle + +** Calcul de l'incidence annuelle +Étant donné que le pic de l'épidémie se situe en hiver, à cheval entre deux années civiles, nous définissons la période de référence entre deux minima de l'incidence, du 1er août de l'année /N/ au 1er août de l'année /N+1/. Nous mettons l'année /N+1/ comme étiquette sur cette année décalée, car le pic de l'épidémie est toujours au début de l'année /N+1/. Comme l'incidence du syndrome grippal est très faible en été, cette modification ne risque pas de fausser nos conclusions. + +Voici une fonction qui calcule l'incidence annuelle en appliquant ces conventions. +#+BEGIN_SRC R :results silent +pic_annuel = function(annee) { + debut = paste0(annee-1,"-08-01") + fin = paste0(annee,"-08-01") + semaines = data$date > debut & data$date <= fin + sum(data$inc[semaines], na.rm=TRUE) + } +#+END_SRC + +Nous devons aussi faire attention aux premières et dernières années de notre jeux de données. Les données commencent en octobre 1984, ce qui ne permet pas de quantifier complètement le pic attribué à l'année 1985. Nous le supprimons donc de notre analyse. Par contre, les données se terminent après le 1er août 2018 (pour une exécution après cette date bien sûr), ce qui nous permet d'inclure cette année dans l'analyse. +#+BEGIN_SRC R :results silent +annees <- 1986:2018 +#+END_SRC + +#+BEGIN_SRC R :results value +inc_annuelle = data.frame(annee = annees, + incidence = sapply(annees, pic_annuel)) +head(inc_annuelle) +#+END_SRC + +** Inspection +Voici les incidences annuelles en graphique. +#+BEGIN_SRC R :results output graphics :file annual-inc-plot.png +plot(inc_annuelle, type="p", xlab="Année", ylab="Incidence annuelle") +#+END_SRC + +** Identification des épidémies les plus fortes +Une liste triée par ordre décroissant d'incidence annuelle permet de plus facilement repérer les valeurs les plus élevées: +#+BEGIN_SRC R :results output +head(inc_annuelle[order(-inc_annuelle$incidence),]) +#+END_SRC + +Enfin, un histogramme montre bien que les épidémies fortes, qui touchent environ 10% de la population française, sont assez rares: il y en eu trois au cours des 35 dernières années. +#+BEGIN_SRC R :results output graphics :file annual-inc-hist.png +hist(inc_annuelle$incidence, breaks=10, xlab="Incidence annuelle", ylab="Nb d'observations", main="") +#+END_SRC diff --git a/module3/ressources/analyse-syndrome-grippal-orgmode+R.org b/module3/ressources/analyse-syndrome-grippal-orgmode+R.org new file mode 100644 index 0000000000000000000000000000000000000000..d2fc753e3d9ffc909fd48abf1a807cfba82c21e0 --- /dev/null +++ b/module3/ressources/analyse-syndrome-grippal-orgmode+R.org @@ -0,0 +1,173 @@ +#+TITLE: Incidence du syndrôme grippal +#+LANGUAGE: fr +#+OPTIONS: *:nil num:1 toc:t + +# #+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args :session :exports both + +* Préface + +Pour exécuter le code de cette analyse, il faut disposer des logiciels suivants: + +** Emacs 25 ou 26 +Une version plus ancienne d'Emacs devrait suffire, mais en ce cas il est prudent d'installer une version récente (9.x) d'org-mode. +** R 3.4 +Nous n'utilisons que des fonctionnalités de base du langage R, une version antérieure devrait suffire. + +#+BEGIN_SRC emacs-lisp :results output +(unless (featurep 'ob-R) + (print "Veuillez activer R dans org-babel (org-babel-do-languages) !")) +#+END_SRC + +Pour la manipulation des dates au format ISO-8601, nous avons besoin du paquet ~parsedate~. +#+BEGIN_SRC R :results output +library(parsedate) +#+END_SRC + +Enfin, nous allons demander à R d'écrire les nombres décimaux en français — c'est-à-dire avec une virgule entre parties entière et décimale — et d'utiliser un nombre de colonnes plus large que celui utilisé par défaut. +#+BEGIN_SRC R :results silent +options(OutDec=",") +options(width=150) +#+END_SRC + +* Préparation des données + +Les données de l'incidence du syndrome grippal sont disponibles du site Web du [[http://www.sentiweb.fr/][Réseau Sentinelles]]. 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 1984 et se termine avec une semaine récente. L'URL est: +#+NAME: data-url +http://www.sentiweb.fr/datasets/incidence-PAY-3.csv + +Voici l'explication des colonnes donnée sur [[https://ns.sentiweb.fr/incidence/csv-schema-v1.json][le site d'origine:]] + +| Nom de colonne | Libellé de colonne | +|----------------+-----------------------------------------------------------------------------------------------------------------------------------| +| ~week~ | Semaine calendaire (ISO 8601) | +| ~indicator~ | Code de l'indicateur de surveillance | +| ~inc~ | Estimation de l'incidence de consultations en nombre de cas | +| ~inc_low~ | Estimation de la borne inférieure de l'IC95% du nombre de cas de consultation | +| ~inc_up~ | Estimation de la borne supérieure de l'IC95% du nombre de cas de consultation | +| ~inc100~ | Estimation du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | +| ~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) | +| ~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) | +| ~geo_insee~ | Code de la zone géographique concernée (Code INSEE) http://www.insee.fr/fr/methodes/nomenclatures/cog/ | +| ~geo_name~ | Libellé de la zone géographique (ce libellé peut être modifié sans préavis) | + +** Téléchargement +La première ligne du fichier CSV est un commentaire, que nous ignorons en précisant ~skip=1~. + +#+BEGIN_SRC R :session :results silent :var url=data-url +data = read.csv(trimws(url), skip=1) +#+END_SRC + +Regardons ce que nous avons obtenu ! +#+BEGIN_SRC R :results output +head(data) +tail(data) +#+END_SRC + +** Vérification +Il est toujours prudent de vérifier si les données semblent crédibles. Commençons par regarder s'il y a des points manquants dans ce jeu de données: +#+BEGIN_SRC R :results value +na_records = apply(data, 1, function(x) any(is.na(x))) +data[na_records,] +#+END_SRC + +Voyons aussi comment R a interpreté nos données: +#+BEGIN_SRC R :results output +class(data$week) +class(data$inc) +#+END_SRC + +Ce sont des entiers, tout va bien ! + +** Conversions +Pour faciliter les traitements suivants, nous remplaçons les numéros de semaine ISO par les dates qui correspondent aux lundis. D'abord, une petite fonction qui fait le travail: +#+BEGIN_SRC R :results silent +convert_week = function(w) { + ws = paste(w) + iso = paste0(substring(ws,1,4), "-W", substring(ws,5,6)) + as.Date(parse_iso_8601(iso)) + } +#+END_SRC + +Nous appliquons cette fonction à tous les points, créant une nouvelle colonne `date` dans notre jeu de données: +#+BEGIN_SRC R :results output +data$date = as.Date(convert_week(data$week)) +#+END_SRC + +Vérifions qu'elle est de classe `Date`: +#+BEGIN_SRC R :results output +class(data$date) +#+END_SRC + +Les points sont dans l'ordre chronologique inverse, il est donc utile de les trier: +#+BEGIN_SRC R :results output +data = data[order(data$date),] +#+END_SRC + +** Vérification des dates +Nous faisons encore une vérification: nos dates doivent être séparées d'exactement une semaine. +#+BEGIN_SRC R :results value +all(diff(data$date) == 7) +#+END_SRC + +** Inspection +Regardons enfin à quoi ressemblent nos données ! +#+BEGIN_SRC R :results output graphics :file inc-plot.png +plot(data$date, data$inc, type="l", xlab="Date", ylab="Incidence hebdomadaire") +#+END_SRC + +Un zoom sur les dernières années montre mieux la situation des pics en hiver. Le creux des incidences se trouve en été. +#+BEGIN_SRC R :results output graphics :file inc-plot-zoom.png +with(tail(data, 200), plot(date, inc, type="l", xlab="Date", ylab="Incidence hebdomadaire")) +#+END_SRC + +* Étude de l'incidence annuelle + +** Calcul de l'incidence annuelle +Étant donné que le pic de l'épidémie se situe en hiver, à cheval entre deux années civiles, nous définissons la période de référence entre deux minima de l'incidence, du 1er août de l'année /N/ au 1er août de l'année /N+1/. Nous mettons l'année /N+1/ comme étiquette sur cette année décalée, car le pic de l'épidémie est toujours au début de l'année /N+1/. Comme l'incidence du syndrome grippal est très faible en été, cette modification ne risque pas de fausser nos conclusions. + +Voici une fonction qui calcule l'incidence annuelle en appliquant ces conventions. +#+BEGIN_SRC R :results silent +pic_annuel = function(annee) { + debut = paste0(annee-1,"-08-01") + fin = paste0(annee,"-08-01") + semaines = data$date > debut & data$date <= fin + sum(data$inc[semaines], na.rm=TRUE) + } +#+END_SRC + +Nous devons aussi faire attention aux premières et dernières années de notre jeux de données. Les données commencent en octobre 1984, ce qui ne permet pas de quantifier complètement le pic attribué à l'année 1985. Nous le supprimons donc de notre analyse. Par contre, pour une exécution en octobre 2018, les données se terminent après le 1er août 2018, ce qui nous permet d'inclure cette année. +#+BEGIN_SRC R :results silent +annees <- 1986:2018 +#+END_SRC + +Nous créons un nouveau jeu de données pour l'incidence annuelle, en applicant la fonction `pic_annuel` à chaque année: +#+BEGIN_SRC R :results value +inc_annuelle = data.frame(annee = annees, + incidence = sapply(annees, pic_annuel)) +head(inc_annuelle) +#+END_SRC + +** Inspection +Voici les incidences annuelles en graphique. +#+BEGIN_SRC R :results output graphics :file annual-inc-plot.png +plot(inc_annuelle, type="p", xlab="Année", ylab="Incidence annuelle") +#+END_SRC + +** Identification des épidémies les plus fortes +Une liste triée par ordre décroissant d'incidence annuelle permet de plus facilement repérer les valeurs les plus élevées: +#+BEGIN_SRC R :results output +head(inc_annuelle[order(-inc_annuelle$incidence),]) +#+END_SRC + +Enfin, un histogramme montre bien que les épidémies fortes, qui touchent environ 10% de la population française, sont assez rares: il y en eu trois au cours des 35 dernières années. +#+BEGIN_SRC R :results output graphics :file annual-inc-hist.png +hist(inc_annuelle$incidence, breaks=10, xlab="Incidence annuelle", ylab="Nb d'observations", main="") +#+END_SRC diff --git a/module3/ressources/analyse-syndrome-grippal-orgmode.org b/module3/ressources/analyse-syndrome-grippal-orgmode.org new file mode 100644 index 0000000000000000000000000000000000000000..1720b70df3a93009c79592b68d1dcf57a53f6341 --- /dev/null +++ b/module3/ressources/analyse-syndrome-grippal-orgmode.org @@ -0,0 +1,219 @@ +#+TITLE: Incidence du syndrôme grippal +#+LANGUAGE: fr +#+OPTIONS: *:nil num:1 toc:t + +# #+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args :session :exports both + +* Préface + +Pour exécuter le code de cette analyse, il faut disposer des logiciels suivants: + +** Emacs 25 ou plus +Une version plus ancienne d'Emacs devrait suffire. Pour une version antérieure à 26, il faut installer une version récente (9.x) d'org-mode. +** Python 3.6 ou plus +Nous utilisons le traitement de dates en format ISO 8601, qui a été implémenté en Python seulement avec la version 3.6. + +#+BEGIN_SRC python :results output +import sys +if sys.version_info.major < 3 or sys.version_info.minor < 6: + print("Veuillez utiliser Python 3.6 (ou plus) !") +#+END_SRC + +#+BEGIN_SRC emacs-lisp :results output +(unless (featurep 'ob-python) + (print "Veuillez activer python dans org-babel (org-babel-do-languages) !")) +#+END_SRC + +** R 3.4 +Nous n'utilisons que des fonctionnalités de base du langage R, une version antérieure devrait suffire. + +#+BEGIN_SRC emacs-lisp :results output +(unless (featurep 'ob-R) + (print "Veuillez activer R dans org-babel (org-babel-do-languages) !")) +#+END_SRC + +* Préparation des données + +Les données de l'incidence du syndrome grippal sont disponibles du site Web du [[http://www.sentiweb.fr/][Réseau Sentinelles]]. Nous les récupérons sous forme d'un fichier en format CSV dont chaque ligne correspond à une semaine de la période d'observation. Nous téléchargeons toujours le jeu de données complet (rien d'autre n'est proposé), qui commence en 1984 et se termine avec une semaine récente. L'URL est: +#+NAME: data-url +http://www.sentiweb.fr/datasets/incidence-PAY-3.csv + +Voici l'explication des colonnes donnée sur [[https://ns.sentiweb.fr/incidence/csv-schema-v1.json][le site d'origine:]] + +| Nom de colonne | Libellé de colonne | +|----------------+-----------------------------------------------------------------------------------------------------------------------------------| +| ~week~ | Semaine calendaire (ISO 8601) | +| ~indicator~ | Code de l'indicateur de surveillance | +| ~inc~ | Estimation de l'incidence de consultations en nombre de cas | +| ~inc_low~ | Estimation de la borne inférieure de l'IC95% du nombre de cas de consultation | +| ~inc_up~ | Estimation de la borne supérieure de l'IC95% du nombre de cas de consultation | +| ~inc100~ | Estimation du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | +| ~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) | +| ~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) | +| ~geo_insee~ | Code de la zone géographique concernée (Code INSEE) http://www.insee.fr/fr/methodes/nomenclatures/cog/ | +| ~geo_name~ | Libellé de la zone géographique (ce libellé peut être modifié sans préavis) | + +L'indication d'une semaine calendaire en format [[https://en.wikipedia.org/wiki/ISO_8601][ISO-8601]] est populaire en Europe, mais peu utilisée aux Etats-Unis. Ceci explique peut-être que peu de logiciels savent gérer ce format. Le langage Python le fait depuis la version 3.6. Nous utilisons donc ce langage pour la préparation de nos données, ce qui a l'avantage de ne nécessiter aucune bibliothèque supplémentaire. (Note: nous expliquerons dans le module 4 pourquoi il est avantageux pour la réproductibilité de se limiter à un minimum de bibliothèques.) + +** Téléchargement +Après avoir téléchargé les données, nous commençons par l'extraction des données qui nous intéressent. D'abord nous découpons le contenu du fichier en lignes, dont nous jetons la première qui ne contient qu'un commentaire. Les autres lignes sont découpées en colonnes. + +#+BEGIN_SRC python :results silent :var data_url=data-url +from urllib.request import urlopen + +data = urlopen(data_url).read() +lines = data.decode('latin-1').strip().split('\n') +data_lines = lines[1:] +table = [line.split(',') for line in data_lines] +#+END_SRC + +Regardons ce que nous avons obtenu: +#+BEGIN_SRC python :results value +table[:5] +#+END_SRC + +** Recherche de données manquantes +Il y a malheureusement beaucoup de façon d'indiquer l'absence d'un point de données. Nous testons ici seulement pour la présence de champs vides. Il faudrait aussi rechercher des valeurs non-numériques dans les colonnes à priori numériques. Nous ne le faisons pas ici, mais une vérification ultérieure capterait des telles anomalies. + +Nous construisons un nouveau jeu de données sans les lignes qui contiennent des champs vides. Nous affichons ces lignes pour en garder une trace. +#+BEGIN_SRC python :results output +valid_table = [] +for row in table: + missing = any([column == '' for column in row]) + if missing: + print(row) + else: + valid_table.append(row) +#+END_SRC + +** Extraction des colonnes utilisées +Il y a deux colonnes qui nous intéressent: la première (~"week"~) et la troisième (~"inc"~). Nous vérifions leurs noms dans l'en-tête, que nous effaçons par la suite. Enfin, nous créons un tableau avec les deux colonnes pour le traitement suivant. +#+BEGIN_SRC python :results silent +week = [row[0] for row in valid_table] +assert week[0] == 'week' +del week[0] +inc = [row[2] for row in valid_table] +assert inc[0] == 'inc +del inc[0] +data = list(zip(week, inc)) +#+END_SRC + +Regardons les premières et les dernières lignes. Nous insérons ~None~ pour indiquer à org-mode la séparation entre les trois sections du tableau: en-tête, début des données, fin des données. +#+BEGIN_SRC python :results value +[('week', 'inc'), None] + data[:5] + [None] + data[-5:] +#+END_SRC + +** Vérification +Il est toujours prudent de vérifier si les données semblent crédibles. Nous savons que les semaines sont données par six chiffres (quatre pour l'année et deux pour la semaine), et que les incidences sont des nombres entiers positifs. +#+BEGIN_SRC python :results output +for week, inc in data: + if len(week) != 6 or not week.isdigit(): + print("Valeur suspecte dans la colonne 'week': ", (week, inc)) + if not inc.isdigit(): + print("Valeur suspecte dans la colonne 'inc': ", (week, inc)) +#+END_SRC + +Pas de problème ! + +** Conversions +Pour faciliter les traitements suivants, nous remplaçons les numéros de semaine ISO par les dates qui correspondent aux lundis. A cette occasion, nous trions aussi les données par la date, et nous transformons les incidences en nombres entiers. + +#+BEGIN_SRC python :results silent +import datetime +converted_data = [(datetime.datetime.strptime(year_and_week + ":1" , '%G%V:%u').date(), + int(inc)) + for year_and_week, inc in data] +converted_data.sort(key = lambda record: record[0]) +#+END_SRC + +Regardons de nouveau les premières et les dernières lignes: +#+BEGIN_SRC python :results value +str_data = [(str(date), str(inc)) for date, inc in converted_data] +[('date', 'inc'), None] + str_data[:5] + [None] + str_data[-5:] +#+END_SRC + +** Vérification des dates +Nous faisons encore une vérification: nos dates doivent être séparées d'exactement une semaine, sauf autour du point manquant. +#+BEGIN_SRC python :results output +dates = [date for date, _ in converted_data] +for date1, date2 in zip(dates[:-1], dates[1:]): + if date2-date1 != datetime.timedelta(weeks=1): + print(f"Il y a {date2-date1} entre {date1} et {date2}") +#+END_SRC + +** Passage Python -> R +Nous passons au langage R pour inspecter nos données, parce que l'analyse et la préparation de graphiques sont plus concises en R, sans nécessiter aucune bibliothèque supplémentaire. + +Nous utilisons le mécanisme d'échange de données proposé par org-mode, ce qui nécessite un peu de code Python pour transformer les données dans le bon format. +#+NAME: data-for-R +#+BEGIN_SRC python :results silent +[('date', 'inc'), None] + [(str(date), inc) for date, inc in converted_data] +#+END_SRC + +En R, les données arrivent sous forme d'un data frame, mais il faut encore convertir les dates, qui arrivent comme chaînes de caractères. +#+BEGIN_SRC R :results output :var data=data-for-R +data$date <- as.Date(data$date) +summary(data) +#+END_SRC + +** Inspection +Regardons enfin à quoi ressemblent nos données ! +#+BEGIN_SRC R :results output graphics :file inc-plot.png +plot(data, type="l", xlab="Date", ylab="Incidence hebdomadaire") +#+END_SRC + +Un zoom sur les dernières années montre mieux la situation des pics en hiver. Le creux des incidences se trouve en été. +#+BEGIN_SRC R :results output graphics :file inc-plot-zoom.png +plot(tail(data, 200), type="l", xlab="Date", ylab="Incidence hebdomadaire") +#+END_SRC + +* Étude de l'incidence annuelle + +** Calcul de l'incidence annuelle +Étant donné que le pic de l'épidémie se situe en hiver, à cheval entre deux années civiles, nous définissons la période de référence entre deux minima de l'incidence, du 1er août de l'année /N/ au 1er août de l'année /N+1/. Nous mettons l'année /N+1/ comme étiquette sur cette année décalée, car le pic de l'épidémie est toujours au début de l'année /N+1/. Comme l'incidence du syndrome grippal est très faible en été, cette modification ne risque pas de fausser nos conclusions. + +Voici une fonction qui calcule l'incidence annuelle en appliquant ces conventions. +#+BEGIN_SRC R :results silent +pic_annuel = function(annee) { + debut = paste0(annee-1,"-08-01") + fin = paste0(annee,"-08-01") + semaines = data$date > debut & data$date <= fin + sum(data$inc[semaines], na.rm=TRUE) + } +#+END_SRC + +Nous devons aussi faire attention aux premières et dernières années de notre jeux de données. Les données commencent en octobre 1984, ce qui ne permet pas de quantifier complètement le pic attribué à l'année 1985. Nous le supprimons donc de notre analyse. Pour la même raison, nous arrêtons en 2018. Nous devons attendre les données pour juillet 2019 avant d'augmenter la dernière année à 2019. +#+BEGIN_SRC R :results silent +annees <- 1986:2018 +#+END_SRC + +#+BEGIN_SRC R :results value +inc_annuelle = data.frame(annee = annees, + incidence = sapply(annees, pic_annuel)) +head(inc_annuelle) +#+END_SRC + +** Inspection +Voici les incidences annuelles en graphique. +#+BEGIN_SRC R :results output graphics :file annual-inc-plot.png +plot(inc_annuelle, type="p", xlab="Année", ylab="Incidence annuelle") +#+END_SRC + +** Identification des épidémies les plus fortes +Une liste triée par ordre décroissant d'incidence annuelle permet de plus facilement repérer les valeurs les plus élevées: +#+BEGIN_SRC R :results output +head(inc_annuelle[order(-inc_annuelle$incidence),]) +#+END_SRC + +Enfin, un histogramme montre bien que les épidémies fortes, qui touchent environ 10% de la population française, sont assez rares: il y en eu trois au cours des 35 dernières années. +#+BEGIN_SRC R :results output graphics :file annual-inc-hist.png +hist(inc_annuelle$incidence, breaks=10, xlab="Incidence annuelle", ylab="Nb d'observations", main="") +#+END_SRC diff --git a/module3/ressources/analyse-syndrome-grippal-rstudio.Rmd b/module3/ressources/analyse-syndrome-grippal-rstudio.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..771e78faac371f23c921f7f7aecc87f2100e9059 --- /dev/null +++ b/module3/ressources/analyse-syndrome-grippal-rstudio.Rmd @@ -0,0 +1,163 @@ +--- +title: "Analyse de l'incidence du syndrôme grippal" +author: "Konrad Hinsen" +output: + pdf_document: + toc: true + html_document: + toc: true + theme: journal +documentclass: article +classoption: a4paper +header-includes: +- \usepackage[french]{babel} +- \usepackage[upright]{fourier} +- \hypersetup{colorlinks=true,pagebackref=true} +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +## Préparation des données + +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 1984 et se termine avec une semaine récente. L'URL est: +```{r} +data_url = "http://www.sentiweb.fr/datasets/incidence-PAY-3.csv" +``` + +Voici l'explication des colonnes donnée sur le [sur le site d'origine](https://ns.sentiweb.fr/incidence/csv-schema-v1.json): + +| Nom de colonne | Libellé de colonne | +|----------------+-----------------------------------------------------------------------------------------------------------------------------------| +| `week` | Semaine calendaire (ISO 8601) | +| `indicator` | Code de l'indicateur de surveillance | +| `inc` | Estimation de l'incidence de consultations en nombre de cas | +| `inc_low` | Estimation de la borne inférieure de l'IC95% du nombre de cas de consultation | +| `inc_up` | Estimation de la borne supérieure de l'IC95% du nombre de cas de consultation | +| `inc100` | Estimation du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | +| `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) | +| `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) | +| `geo_insee` | Code de la zone géographique concernée (Code INSEE) http://www.insee.fr/fr/methodes/nomenclatures/cog/ | +| `geo_name` | Libellé de la zone géographique (ce libellé peut être modifié sans préavis) | + +La première ligne du fichier CSV est un commentaire, que nous ignorons en précisant `skip=1`. +### Téléchargement +```{r} +data = read.csv(data_url, skip=1) +``` + +Regardons ce que nous avons obtenu: +```{r} +head(data) +tail(data) +``` + +Y a-t-il des points manquants dans nos données ? +```{r} +na_records = apply(data, 1, function (x) any(is.na(x))) +data[na_records,] +``` + +Les deux colonnes qui nous intéressent sont `week` et `inc`. Vérifions leurs classes: +```{r} +class(data$week) +class(data$inc) +``` +Ce sont des entiers, tout va bien ! + +### Conversion des numéros de semaine + +La gestion des dates est toujours un sujet délicat. Il y a un grand nombre de conventions différentes qu'il ne faut pas confondre. Notre jeux de données utilise un format que peu de logiciels savent traiter: les semaines en format [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601). En `R`, il est géré par la bibliothèque [parsedate](https://cran.r-project.org/package=parsedate): + +```{r} +library(parsedate) +``` + +Pour faciliter le traitement suivant, nous remplaçons ces semaines par les dates qui correspondent aux lundis. Voici une petite fonction qui fait la conversion pour une seule valeur: + +```{r} +convert_week = function(w) { + ws = paste(w) + iso = paste0(substring(ws, 1, 4), "-W", substring(ws, 5, 6)) + as.character(parse_iso_8601(iso)) +} +``` + +Nous appliquons cette fonction à tous les points, créant une nouvelle colonne `date` dans notre jeu de données: +```{r} +data$date = as.Date(convert_week(data$week)) +``` + +Vérifions qu'elle est de classe `Date`: +```{r} +class(data$date) +``` + +Les points sont dans l'ordre chronologique inverse, il est donc utile de les trier: +```{r} +data = data[order(data$date),] +``` + +C'est l'occasion pour faire une vérification: nos dates doivent être séparées d'exactement sept jours: +```{r} +all(diff(data$date) == 7) +``` + +### Inspection + +Regardons enfin à quoi ressemblent nos données ! +```{r} +plot(data$date, data$inc, type="l", xlab="Date", ylab="Incidence hebdomadaire") +``` + +Un zoom sur les dernières années montre mieux la localisation des pics en hiver. Le creux des incidences se trouve en été. +```{r} +with(tail(data, 200), plot(date, inc, type="l", xlab="Date", ylab="Incidence hebdomadaire")) +``` + +## L'incidence annuelle + +### Calcul + +Étant donné que le pic de l'épidémie se situe en hiver, à cheval entre deux années civiles, nous définissons la période de référence entre deux minima de l'incidence, du 1er août de l'année $N$ au 1er août de l'année $N+1$. Nous mettons l'année $N+1$ comme étiquette sur cette année décalée, car le pic de l'épidémie est toujours au début de l'année $N+1$. Comme l'incidence de syndrome grippal est très faible en été, cette modification ne risque pas de fausser nos conclusions. +L'argument `na.rm=True` dans la sommation précise qu'il faut supprimer les points manquants. Ce choix est raisonnable car il n'y a qu'un seul point manquant, dont l'impact ne peut pas être très fort. +```{r} +pic_annuel = function(annee) { + debut = paste0(annee-1,"-08-01") + fin = paste0(annee,"-08-01") + semaines = data$date > debut & data$date <= fin + sum(data$inc[semaines], na.rm=TRUE) + } +``` + +Nous devons aussi faire attention aux premières et dernières années de notre jeux de données. Les données commencent en octobre 1984, ce qui ne permet pas de quantifier complètement le pic attribué à 1985. Nous l'enlevons donc de notre analyse. Par contre, pour une exécution en octobre 2018, les données se terminent après le 1er août 2018, ce qui nous permet d'inclure cette année. +```{r} +annees = 1986:2018 +``` + +Nous créons un nouveau jeu de données pour l'incidence annuelle, en applicant la fonction `pic_annuel` à chaque année: +```{r} +inc_annuelle = data.frame(annee = annees, + incidence = sapply(annees, pic_annuel)) +head(inc_annuelle) +``` + +### Inspection + +Voici les incidences annuelles en graphique: +```{r} +plot(inc_annuelle, type="p", xlab="Année", ylab="Incidence annuelle") +``` + +### Identification des épidémies les plus fortes + +Une liste triée par ordre décroissant d'incidence annuelle permet de plus facilement repérer les valeurs les plus élevées: +```{r} +head(inc_annuelle[order(-inc_annuelle$incidence),]) +``` + +Enfin, un histogramme montre bien que les épidémies fortes, qui touchent environ 10% de la population française, sont assez rares: il y en eu trois au cours des 35 dernières années. +```{r} +hist(inc_annuelle$incidence, breaks=10, xlab="Incidence annuelle", ylab="Nb d'observations", main="") +```