diff --git a/module3/exo1/analyse-syndrome-grippal.Rmd b/module3/exo1/analyse-syndrome-grippal.Rmd
index 1501796da4d87aab79b372fdee069f265addc4c8..771e78faac371f23c921f7f7aecc87f2100e9059 100644
--- a/module3/exo1/analyse-syndrome-grippal.Rmd
+++ b/module3/exo1/analyse-syndrome-grippal.Rmd
@@ -21,12 +21,12 @@ 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 en format CSV dont chaque ligne correspond à une semaine de la période demandée. Les dates de départ et de fin sont codées dans l'URL: "wstart=198501" pour semaine 1 de l'année 1985 et "wend=201730" pour semaine 30 de l'année 2017. L'URL complet est:
+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://websenti.u707.jussieu.fr/sentiweb/api/data/rest/getIncidenceFlat?indicator=3&wstart=198501&wend=201730&geo=PAY1&$format=csv"
+data_url = "http://www.sentiweb.fr/datasets/incidence-PAY-3.csv"
```
-Voici l'explication des colonnes donnée sur le site d'origine:
+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 |
|----------------+-----------------------------------------------------------------------------------------------------------------------------------|
@@ -41,6 +41,7 @@ Voici l'explication des colonnes donnée sur le site d'origine:
| `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)
@@ -63,18 +64,7 @@ Les deux colonnes qui nous intéressent sont `week` et `inc`. Vérifions leurs c
class(data$week)
class(data$inc)
```
-
-La colonne `inc` est de classe `factor` à cause du point manquant dont la valeur de `inc` est `'-'`. Pour faciliter le traîtement ultérieur, nous relisons les données en demandant à `R` de traiter cette valeur comme `na`:
-```{r}
-data = read.csv(data_url, skip=1, na.strings="-")
-head(data)
-```
-
-Maintenant les deux colonnes `week` et `inc` sont de classe `integer`:
-```{r}
-class(data$week)
-class(data$inc)
-```
+Ce sont des entiers, tout va bien !
### Conversion des numéros de semaine
@@ -96,7 +86,7 @@ convert_week = function(w) {
Nous appliquons cette fonction à tous les points, créant une nouvelle colonne `date` dans notre jeu de données:
```{r}
-data$date = as.Date(sapply(data$week, convert_week))
+data$date = as.Date(convert_week(data$week))
```
Vérifions qu'elle est de classe `Date`:
@@ -141,9 +131,9 @@ pic_annuel = function(annee) {
}
```
-Nous devons aussi faire attention aux premières et dernières années de notre jeux de données. Les données commencent en janvier 1985, ce qui ne permet pas de quantifier complètement le pic attribué à cette année. Nous l'enlevons donc de notre analyse. Par contre, les données se terminent en été 2017, peu avant le 1er août, ce qui nous permet d'inclure cette année.
+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:2017
+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:
diff --git a/module3/exo1/analyse-syndrome-grippal.ipynb b/module3/exo1/analyse-syndrome-grippal.ipynb
index 9839ff80c36dc0b5f3e4810805477a3ebd2aec35..59d72b5b58a3ae26346460dd39e62a39c55243d7 100644
--- a/module3/exo1/analyse-syndrome-grippal.ipynb
+++ b/module3/exo1/analyse-syndrome-grippal.ipynb
@@ -9,10 +9,8 @@
},
{
"cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": true
- },
+ "execution_count": null,
+ "metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
@@ -25,25 +23,25 @@
"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. Les dates de départ et de fin sont codées dans l'URL: \"wstart=198501\" pour semaine 1 de l'année 1985 et \"wend=201730\" pour semaine 30 de l'année 2017. La première ligne du fichier CSV est un commentaire, que nous ignorons en précisant `skiprows=1`."
+ "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,
+ "execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
- "data_url = \"http://websenti.u707.jussieu.fr/sentiweb/api/data/rest/getIncidenceFlat?indicator=3&wstart=198501&wend=201730&geo=PAY1&$format=csv\""
+ "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:\n",
+ "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",
@@ -56,983 +54,16 @@
"| 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"
+ "| 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": [
- "
"
- ],
- "text/plain": [
- " week indicator inc inc_low inc_up inc100 inc100_low \\\n",
- "0 201730 3 3759 1299.0 6219.0 6 2.0 \n",
- "1 201729 3 5014 1989.0 8039.0 8 3.0 \n",
- "2 201728 3 5271 2576.0 7966.0 8 4.0 \n",
- "3 201727 3 3924 1432.0 6416.0 6 2.0 \n",
- "4 201726 3 3171 1166.0 5176.0 5 2.0 \n",
- "5 201725 3 837 0.0 1721.0 1 0.0 \n",
- "6 201724 3 1566 248.0 2884.0 2 0.0 \n",
- "7 201723 3 1664 203.0 3125.0 3 1.0 \n",
- "8 201722 3 1305 92.0 2518.0 2 0.0 \n",
- "9 201721 3 971 0.0 2046.0 1 0.0 \n",
- "10 201720 3 2686 793.0 4579.0 4 1.0 \n",
- "11 201719 3 3461 1490.0 5432.0 5 2.0 \n",
- "12 201718 3 2102 515.0 3689.0 3 1.0 \n",
- "13 201717 3 2071 428.0 3714.0 3 0.0 \n",
- "14 201716 3 1380 222.0 2538.0 2 0.0 \n",
- "15 201715 3 479 0.0 1242.0 1 0.0 \n",
- "16 201714 3 1110 0.0 2549.0 2 0.0 \n",
- "17 201713 3 7594 3808.0 11380.0 12 6.0 \n",
- "18 201712 3 8780 4834.0 12726.0 13 7.0 \n",
- "19 201711 3 7814 4329.0 11299.0 12 7.0 \n",
- "20 201710 3 11802 7964.0 15640.0 18 12.0 \n",
- "21 201709 3 13111 9099.0 17123.0 20 14.0 \n",
- "22 201708 3 29545 23136.0 35954.0 45 35.0 \n",
- "23 201707 3 59590 49764.0 69416.0 91 76.0 \n",
- "24 201706 3 93628 82560.0 104696.0 144 127.0 \n",
- "25 201705 3 193677 179255.0 208099.0 297 275.0 \n",
- "26 201704 3 256428 240618.0 272238.0 394 370.0 \n",
- "27 201703 3 267276 251345.0 283207.0 410 386.0 \n",
- "28 201702 3 260588 245070.0 276106.0 400 376.0 \n",
- "29 201701 3 255535 239743.0 271327.0 392 368.0 \n",
- "... ... ... ... ... ... ... ... \n",
- "1670 198530 3 11598 5507.0 17689.0 21 10.0 \n",
- "1671 198529 3 13054 6474.0 19634.0 24 12.0 \n",
- "1672 198528 3 14588 7659.0 21517.0 26 13.0 \n",
- "1673 198527 3 19670 11761.0 27579.0 36 22.0 \n",
- "1674 198526 3 18609 12637.0 24581.0 34 23.0 \n",
- "1675 198525 3 19362 12454.0 26270.0 35 22.0 \n",
- "1676 198524 3 19855 13577.0 26133.0 36 25.0 \n",
- "1677 198523 3 19373 10010.0 28736.0 35 18.0 \n",
- "1678 198522 3 24099 17190.0 31008.0 44 31.0 \n",
- "1679 198521 3 26096 19621.0 32571.0 47 35.0 \n",
- "1680 198520 3 27896 20885.0 34907.0 51 38.0 \n",
- "1681 198519 3 43154 32821.0 53487.0 78 59.0 \n",
- "1682 198518 3 40555 29935.0 51175.0 74 55.0 \n",
- "1683 198517 3 34053 24366.0 43740.0 62 44.0 \n",
- "1684 198516 3 50362 36451.0 64273.0 91 66.0 \n",
- "1685 198515 3 63881 45538.0 82224.0 116 83.0 \n",
- "1686 198514 3 134545 114400.0 154690.0 244 207.0 \n",
- "1687 198513 3 197206 176080.0 218332.0 357 319.0 \n",
- "1688 198512 3 245240 223304.0 267176.0 445 405.0 \n",
- "1689 198511 3 276205 252399.0 300011.0 501 458.0 \n",
- "1690 198510 3 353231 326279.0 380183.0 640 591.0 \n",
- "1691 198509 3 369895 341109.0 398681.0 670 618.0 \n",
- "1692 198508 3 389886 359529.0 420243.0 707 652.0 \n",
- "1693 198507 3 471852 432599.0 511105.0 855 784.0 \n",
- "1694 198506 3 565825 518011.0 613639.0 1026 939.0 \n",
- "1695 198505 3 637302 592795.0 681809.0 1155 1074.0 \n",
- "1696 198504 3 424937 390794.0 459080.0 770 708.0 \n",
- "1697 198503 3 213901 174689.0 253113.0 388 317.0 \n",
- "1698 198502 3 97586 80949.0 114223.0 177 147.0 \n",
- "1699 198501 3 85489 65918.0 105060.0 155 120.0 \n",
- "\n",
- " inc100_up geo_insee geo_name \n",
- "0 10.0 FR France \n",
- "1 13.0 FR France \n",
- "2 12.0 FR France \n",
- "3 10.0 FR France \n",
- "4 8.0 FR France \n",
- "5 2.0 FR France \n",
- "6 4.0 FR France \n",
- "7 5.0 FR France \n",
- "8 4.0 FR France \n",
- "9 3.0 FR France \n",
- "10 7.0 FR France \n",
- "11 8.0 FR France \n",
- "12 5.0 FR France \n",
- "13 6.0 FR France \n",
- "14 4.0 FR France \n",
- "15 2.0 FR France \n",
- "16 4.0 FR France \n",
- "17 18.0 FR France \n",
- "18 19.0 FR France \n",
- "19 17.0 FR France \n",
- "20 24.0 FR France \n",
- "21 26.0 FR France \n",
- "22 55.0 FR France \n",
- "23 106.0 FR France \n",
- "24 161.0 FR France \n",
- "25 319.0 FR France \n",
- "26 418.0 FR France \n",
- "27 434.0 FR France \n",
- "28 424.0 FR France \n",
- "29 416.0 FR France \n",
- "... ... ... ... \n",
- "1670 32.0 FR France \n",
- "1671 36.0 FR France \n",
- "1672 39.0 FR France \n",
- "1673 50.0 FR France \n",
- "1674 45.0 FR France \n",
- "1675 48.0 FR France \n",
- "1676 47.0 FR France \n",
- "1677 52.0 FR France \n",
- "1678 57.0 FR France \n",
- "1679 59.0 FR France \n",
- "1680 64.0 FR France \n",
- "1681 97.0 FR France \n",
- "1682 93.0 FR France \n",
- "1683 80.0 FR France \n",
- "1684 116.0 FR France \n",
- "1685 149.0 FR France \n",
- "1686 281.0 FR France \n",
- "1687 395.0 FR France \n",
- "1688 485.0 FR France \n",
- "1689 544.0 FR France \n",
- "1690 689.0 FR France \n",
- "1691 722.0 FR France \n",
- "1692 762.0 FR France \n",
- "1693 926.0 FR France \n",
- "1694 1113.0 FR France \n",
- "1695 1236.0 FR France \n",
- "1696 832.0 FR France \n",
- "1697 459.0 FR France \n",
- "1698 207.0 FR France \n",
- "1699 190.0 FR France \n",
- "\n",
- "[1699 rows x 10 columns]"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"data = raw_data.dropna().copy()\n",
"data"
@@ -2126,10 +122,8 @@
},
{
"cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": null,
+ "metadata": {},
"outputs": [],
"source": [
"def convert_week(year_and_week_int):\n",
@@ -2158,7 +152,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {
"collapsed": true
},
@@ -2185,19 +179,9 @@
},
{
"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"
- ]
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"periods = sorted_data.index\n",
"for p1, p2 in zip(periods[:-1], periods[1:]):\n",
@@ -2206,26 +190,6 @@
" print(p1, p2)"
]
},
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Les incidences hebdomadaires ne sont pas des entiers mais des chaînes de caractères. Ceci est dû au point manquant montré ci-dessous, pour lequel la valeur fournie est \"-\".\n",
- "\n",
- "Nous convertissons ces chaînes de caractères en entiers."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "sorted_data['inc'] = sorted_data['inc'].astype(int)"
- ]
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -2235,32 +199,9 @@
},
{
"cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\nrkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"sorted_data['inc'].plot()"
]
@@ -2274,32 +215,9 @@
},
{
"cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\niEgn/x+bG6CRG/BGAAAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"sorted_data['inc'][-200:].plot()"
]
@@ -2326,19 +244,22 @@
"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."
+ "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": 12,
+ "execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"first_august_week = [pd.Period(pd.Timestamp(y, 8, 1), 'W')\n",
- " for y in range(sorted_data.index[0].year,\n",
+ " for y in range(1985,\n",
" sorted_data.index[-1].year)]"
]
},
@@ -2353,10 +274,8 @@
},
{
"cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": null,
+ "metadata": {},
"outputs": [],
"source": [
"year = []\n",
@@ -2379,32 +298,9 @@
},
{
"cell_type": "code",
- "execution_count": 14,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\nRK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"yearly_incidence.plot(style='*')"
]
@@ -2418,53 +314,9 @@
},
{
"cell_type": "code",
- "execution_count": 15,
- "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",
- "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": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"yearly_incidence.sort_values()"
]
@@ -2479,35 +331,21 @@
},
{
"cell_type": "code",
- "execution_count": 16,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 16,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEPCAYAAABcA4N7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH3JJREFUeJzt3X+YZFV95/H3d2ZwYAaGNoKMwkorwQREbFA0itFa1MRA\nxCeGZ1E02hoNMRpcze7K40oQsyaCv1Z3MVkSZdAIuBKyK/6IGMklggZQaEAFcRdGfgmKgAhsgHG+\n+8e5NVT3TFXdnrm3vud0f17PM8/Uraqu86lT1XXqfr+3qs3dERERGWZFdAAREcmbFgoRERlJC4WI\niIykhUJEREbSQiEiIiNpoRARkZE6WSjM7O1m9h0zu8bMPmNmj+liHBER6V7rC4WZPRH4Y+BQdz8Y\nWAW8su1xRERkMlZ1dLsrgbVmthlYA9ze0TgiItKx1vco3P124EPAzcBtwL3u/o9tjyMiIpPRRelp\nCng5sC/wRGBXMzuu7XFERGQyuig9vRi40d3vBjCz84HnAWcPXsnM9CVTIiLbwd1tkuN1cdTTzcCv\nmdnOZmbAi4DrtnVFd8/+38knnxyeISpn/Si1+O/k7fiZyT9PlvNjrpzxOcb9i9BFj+Jy4DzgKuBq\nwIAz2h5nUjZu3BgdoZEycm6MDtBIGXOpnG0rJWeETo56cvdTgFO6uG0REZksfTJ7jNnZ2egIjZSR\nczY6QCNlzKVytq2UnBEsquZlZh41tjSTWkzRj5GF1WVFcmRm+BJoZi8pVVVFR2ikjJxVdIBGyphL\n5WxbKTkjaKEQEZGRVHqSoVR6EsmPSk8iIpIdLRRjlFK3LCNnFR2gkTLmUjnbVkrOCFooRERkJPUo\nZCj1KETyox6FiIhkRwvFGKXULcvIWUUHaKSMuVTOtpWSM4IWChERGUk9ChlKPQqR/KhHISIi2dFC\nMUYpdcsyclbRARopYy6Vs22l5IyghUJEREZSj0KGUo9CJD/qUYiISHa0UIxRSt2yjJxVdIBGyphL\n5WxbKTkjtL5QmNlTzewqM7uy/v9nZnZC2+OIiMhkdNqjMLMVwK3Ac9z9lgWXqUeROfUoRPKzFHsU\nLwb+78JFQkREytH1QnEscE7HY3SqlLplGTmr6ACNlDGXytm2UnJG6GyhMLOdgKOBz3U1hoiIdG9V\nh7f9W8C33f0nw64wOzvL9PQ0AFNTU8zMzNDr9YBHV3dtN9vun9f27T+qv93bwe3F3h6LytvGdq/X\n27L9ylfOcuedPyTKXnvtyx13bBz7+EQ//5rOZw55Rm335ZKnP3cbNmwA2PJ6OWmdNbPN7BzgH9z9\nrCGXq5mdOTWzc5gDNfNlviXTzDazNaRG9vld3P4kbf3OOk9l5KyiAzRSxlwqZ9tKyRmhk9KTuz8I\n7NnFbYuIyGTpu55kqPiyC0SXXuLnQKUnmW/JlJ5ERGTp0EIxRil1yzJyVtEBGiljLpWzbaXkjKCF\nQkRERlKPQoaKr89DdI0+fg7Uo5D51KMQEZHsaKEYo5S6ZRk5q+gAjZQxl8rZtlJyRtBCISIiI6lH\nIUPF1+chukYfPwfqUch86lGIiEh2tFCMUUrdsoycVXSARsqYS+VsWyk5I2ihEBGRkdSjkKHi6/MQ\nXaOPnwP1KGQ+9ShERCQ7WijGKKVuWUbOKjpAI2XMpXK2rZScEbRQiIjISOpRyFDx9XmIrtHHz4F6\nFDKfehQiIpIdLRRjlFK3LCNnFR2gkTLmUjnbVkrOCJ0sFGa2u5l9zsyuM7PvmtlzuhhHRES610mP\nwsw2ABe7+5lmtgpY4+73LbiOehSZi6/PQ3SNPn4O1KOQ+SJ6FK0vFGa2DrjK3fcbcz0tFJmLf5GE\n6BfK+DnQQiHzLZVm9pOBu8zsTDO70szOMLNdOhhnIkqpW5aRs4oO0EgZc6mcbSslZ4QuFopVwKHA\n6e5+KPAgcGIH44iIyASs6uA2bwVucfdv1dvnAe/c1hVnZ2eZnp4GYGpqipmZGXq9HvDo6q7tZtv9\n89q+/Uf1t3s7uL3Y22NRedvY7vV6Hd7/xW4zMu+4y3PYHpzPHPKM2u7LJU9/7jZs2ACw5fVy0rpq\nZl8MvMndbzCzk0nN7HcuuI56FJmLr89DdI0+fg7Uo5D5lkqPAuAE4DNmNgc8A/jzjsbp3NbvLPNU\nRs4qOkAjZcylcratlJwRuig94e5XA4d1cdsiIjJZ+q4nGSq+7ALRpZf4OVDpSeZbSqUnERFZIrRQ\njFFK3bKMnFV0gEbKmEvlbFspOSNooRARkZHUo5Ch4uvzEF2jj58D9ShkPvUoREQkO1ooxiilbllG\nzio6QCNlzKVytq2UnBG0UIiIyEjqUchQ8fV5iK7Rx8+BehQyn3oUIiKSHS0UY5RStywjZxUdoJEy\n5lI521ZKzghaKEREZCT1KGSo+Po8RNfo4+dAPQqZTz0KERHJjhaKMUqpW5aRs4oO0EgZc6mcbSsl\nZwQtFCIiMpJ6FDJUfH0eomv08XOgHoXMpx6FiIhkRwvFGKXULcvIWUUHaKSMuVTOtpWSM0InfzPb\nzDYCPwM2A4+4+7O7GEdERLrXSY/CzG4Enunu94y4jnoUmYuvz0N0jT5+DtSjkPmWUo/COrxtERGZ\noK5ezB34qpldYWZv6miMiSilbllGzio6QCNlzKVytq2UnBE66VEAh7v7j8xsT9KCcZ27X9LRWCIi\n0qFOFgp3/1H9/0/M7O+BZwNbLRSzs7NMT08DMDU1xczMDL1eD3h0ddd2s+3+eW3f/qP6270d3F7s\n7bGovG1s93q9Du//YrcZmXfc5TlsD85nDnlGbfflkqc/dxs2bADY8no5aa03s81sDbDC3e83s7XA\nhcAp7n7hguupmZ25+EYuRDdz4+dAzWyZb6k0s/cCLjGzq4B/AS5YuEiUZOt3lnkqI2cVHaCRMuZS\nOdtWSs4IrZee3P0mYKbt2xURkRj6ricZKr7sAtGll/g5UOlJ5lsqpScREVlCtFCMUUrdsoycVXSA\nRsqYS+VsWyk5I2ihEBGRkdSjkKHi6/MQXaOPnwP1KGQ+9ShERCQ7WijGKKVuWUbOKjpAI2XMpXK2\nrZScEbRQiIjISOpRyFDx9XmIrtHHz4F6FDKfehQiIpIdLRRjlFK3LCNnFR2gkTLmUjnbVkrOCFoo\nRERkJPUoZKj4+jxE1+jj50A9CplPPQoREcmOFooxSqlblpGzig7QSBlzqZxtKyVnBC0UIiIyknoU\nMlR8fR6ia/Txc6AehcynHoWIiGRHC8UYpdQty8hZRQdopIy5VM62lZIzQmcLhZmtMLMrzezzXY0h\nIiLd66xHYWZvB54JrHP3o7dxuXoUmYuvz0N0jT5+DtSjkPmWTI/CzPYBjgT+povbFxGRyemq9PQR\n4D8S/3Z0h5VStywjZxUdoJEy5lI521ZKzgitLxRmdhRwp7vPAVb/ExGRQq3q4DYPB442syOBXYDd\nzOxT7v7ahVecnZ1lenoagKmpKWZmZuj1esCjq7u2m233z2v79h/V3+7t4PZib49F5W1ju9frdXj/\nF7vNyLzjLs9he3A+c8gzarsvlzz9uduwYQPAltfLSev0A3dm9kLgT9TMLlN8Ixeim7nxc6Bmtsy3\nZJrZS8nW7yzzVEbOKjpAI2XMpXK2rZScEbooPW3h7hcDF3c5hoiIdEvf9SRDxZddILr0Ej8HKj3J\nfCo9iYhIdrRQjFFK3bKMnFV0gEbKmEvlbFspOSNooRARkZHUo5Ch4uvzEF2jj58D9ShkPvUoREQk\nO1ooxiilbllGzio6QCNlzKVytq2UnBG0UIiIyEjqUchQ8fV5iK7Rx8+BehQyn3oUIiKSHS0UY5RS\ntywjZxUdoJEy5lI521ZKzghaKEREZCT1KGSo+Po8RNfo4+dAPQqZTz0KERHJjhaKMUqpW5aRs4oO\n0EgZc6mcbSslZwQtFCIiMpJ6FDJUfH0eomv08XOgHoXMpx6FiIhkRwvFGKXULcvIWUUHaKSMuVTO\ntpWSM0LrfzPbzFYD/ww8pr7989z9lLbHERGRyeikR2Fma9z9QTNbCVwKnODuly+4jnoUmYuvz0N0\njT5+DtSjkPmWTI/C3R+sT64m7VXomS4iUqjWS08AZrYC+DawH3C6u1+x2Nt44IEH2LRpU+vZmlq1\nahVr166lqip6vV5YjqbKyFkBveAM45Uxl8rZtlJyRuhkoXD3zcAhZrYO+F9mdqC7f2/h9WZnZ5me\nngZgamqKmZkZer0eN998M/vt91RgJStWpIibN6dFY3LbD7FmzW7cd99dOzod281sNe4PhY0/X1X/\n39uB7bnt+Pl6q2409n+RJ7U9kKBh3ra3GZpvbm5u4vOxlLeHzef69dPceecPibTzzms59thjtrxe\nTlrnn6Mws5OAB9z9wwvOH9qjuPbaa3n+84/jvvuu7TTbKOvWHVyPH1ufXt7jpwzqUUQ/Bstb/HMA\nBp8HS6JHYWZ7mNnu9eldgJcA17c9joiITEYXzewnAP9kZnPAZcBX3P1LHYwzIVV0gIaq6AANVNEB\nGinleHrlbFcpOSO03qNw92uBQ9u+XRERiZHldz2pR9EXXRuNHj9lUI8i+jFY3uKfA7DkehQiIrK0\naKEYq4oO0FAVHaCBKjpAI6XUqpWzXaXkjKCFQkRERlKPYgj1KHIYP2VQjyL6MVje4p8DoB6FiIhk\nTQvFWFV0gIaq6AANVNEBGimlVq2c7SolZwQtFCIiMpJ6FEOoR5HD+CmDehTRj8HyFv8cAPUoREQk\na1ooxqqiAzRURQdooIoO0EgptWrlbFcpOSNooRARkZHUoxhCPYocxk8Z1KOIfgyWt/jnAKhHISIi\nWdNCMVYVHaChKjpAA1V0gEZKqVUrZ7tKyRlBC4WIiIykHsUQ6lHkMH7KoB5F9GOwvMU/B0A9ChER\nyZoWirGq6AANVdEBGqiiAzRSSq1aOdtVSs4IrS8UZraPmV1kZt81s2vN7IS2xxARkclpvUdhZuuB\n9e4+Z2a7At8GXu7u1y+4nnoUY0XXRqPHTxnUo4h+DJa3+OcALLkehbvf4e5z9en7geuAvdseR0RE\nJqPTHoWZTQMzwGVdjtOtKjpAQ1V0gAaq6ACNlFKrVs52lZIzwqqubrguO50HvK3es9jK7Ows09PT\nAExNTTEzM0Ov1wNg06b7SS8svfraVf3/ZLbT+IMmO/7WL6rjrj8XPH6T7bnt+PnV9a5/tKr+vzfh\n7fj7v9de+3LuuRsAtvx+9l9Ul9L23Nzc0MvjHv/eltODr5eT1snnKMxsFfAF4Mvu/tEh11GPYqzo\n2mj0+DlkWO7jpwzLuU+iHkV3padPAt8btkiIiEg5ujg89nDg1cARZnaVmV1pZi9te5zJqaIDNFRF\nB2igig7QUBUdoKEqOkAjpdT+S8kZofUehbtfCqxs+3ZFRCSGvutpCPUochg/hwzLffyUQT2K6Pu/\nNHsUIiKyRGihGKuKDtBQFR2ggSo6QENVdICGqugAjZRS+y8lZwQtFCIiMpJ6FEOoR5HD+DlkWO7j\npwzqUUTff/UoREQkY1ooxqqiAzRURQdooIoO0FAVHaChKjpAI6XU/kvJGUELhYiIjKQexRDqUeQw\nfg4Zlvv4KYN6FNH3Xz0KERHJmBaKsaroAA1V0QEaqKIDNFRFB2ioig7QSCm1/1JyRtBCISIiI6lH\nMYR6FDmMn0OG5T5+yqAeRfT9V49CREQypoVirCo6QENVdIAGqugADVXRARqqogM0Ukrtv5ScEbRQ\niIjISOpRDKEeRQ7j55BhuY+fMqhHEX3/1aMQEZGMaaEYq4oO0FAVHaCBKjpAQ1V0gIaq6ACNlFL7\nLyVnhE4WCjP7hJndaWbXdHH7IiIyOZ30KMzs+cD9wKfc/eAh11GPYqzo2mj0+DlkWO7jpwzqUUTf\n/yXYo3D3S4B7urhtERGZLPUoxqqiAzRURQdooIoO0FAVHaChKjpAI6XU/kvJGWFV5OCzs7NMT08D\nMDU1xczMDL1eD4BNm+4n/SL06mtX9f+T2U7jD5rs+Fu/CIy7/lzw+E2254LH357tnMffnvncvu3+\ni2j/93Mpbs/NzQ29PO7x7205Pfh6OWmdfY7CzPYFLlCPYkdE10ajx88hw3IfP2VQjyL6/i/BHkXN\n6n8iIlKwrg6PPRv4BvBUM7vZzF7fxTiTUUUHaKiKDtBAFR2goSo6QENVdIBGSqn9l5IzQic9Cnc/\nrovbFRGRydN3PQ2hHkUO4+eQYbmPnzKoRxF9/5duj0JERJYALRRjVdEBGqqiAzRQRQdoqIoO0FAV\nHaCRUmr/peSMoIVCRERGUo9iCPUochg/hwzLffyUQT2K6PuvHoWIiGRMC8VYVXSAhqroAA1U0QEa\nqqIDNFRFB2iklNp/KTkjaKEQEZGR1KMYQj2KHMbPIcNyHz9lUI8i+v6rRyEiIhnTQjFWFR2goSo6\nQANVdICGqugADVXRARoppfZfSs4IWihERGQk9SiGUI8ih/FzyLDcx08Z1KOIvv/qUYiISMa0UIxV\nRQdoqIoO0EAVHaChKjpAQ1V0gEZKqf2XkjOCFgoRERlJPYoh1KPIYfwcMiz38VMG9Sii7796FCIi\nkrGu/mb2S83sejO7wcze2cUYk1NFB2ioig7QQBUdoKEqOkBDVXSARkqp/ZeSM0LrC4WZrQD+O/Cb\nwNOAV5nZr7Y9zuTMRQdoqIScJWQE5WzX3Jxylq6LPYpnAz9w9x+6+yPAucDLOxhnQu6NDtBQCTlL\nyAjK2a5771XO0nWxUOwN3DKwfWt9noiIFGhVdIBhHn74HuBvw8Z/5JF76lMbwzIszsboAA1sjA7Q\n0MboAA1tjA7QyMaNG6MjNFJKzgitHx5rZr8GvMfdX1pvnwi4u5+64HrRx5uJiBRp0ofHdrFQrAS+\nD7wI+BFwOfAqd7+u1YFERGQiWi89ufsvzOytwIWkHsgntEiIiJQr7JPZIiJSBn0yW0RERipyoTCz\nvc0s+0NuzewpZvYOMzsiOsswJWQE5WxbCTlLyNhXStbtzVnUQmFm02Z2MfAV4ANm9uvRmYYxs+cD\nXwUOAP7QzN4cHGkrJWQE5WxbCTlLyNhXStYdyunuWf8Ddh44/Qrgg/Xp1wGfA55eb1twziOAJ/ez\nAH8KvKbefg5wAdCLzFpCRuVcnjlLyFha1jZzZrlHYWbrzOyvzOwG4INmtm990e8AN9enzwX+D/DG\n/o9NOGYa1OxAM7sGeA9wppkd4WnmDwTWA7j7ZcA3gDdEZC0ho3Iuz5wlZCwtaxc5s1wogJcCO5Pu\n2MPAn5rZLqTdppcBuPtDwHnAC+rtzZMIZmb7mNm6gbOOBf7O3V9AWryOM7P9gbP7WWt/DxxkZqu7\nzlpCRuVcnjlLyFha1knkDFsoLFllZr9vZl83s7eZ2X71xb8MPOzum4CPAPcAryZ9NuMJZvZL9fVu\nAG42s+dOIO8BZvYl4BLgvWbW/6LDfwXW1Kf/J3AHcBRptX7cwN7Q3cD1wDOWc0blXJ45S8hYWtZJ\n5gxbKOpdoRcCrwVOA1YDf11ffAfw43qlu4X0Se/9SRPwXeAP6uvtBPy0Pr91ZrZ2YHMGuNXdp4GL\ngA/W598NPGRmu7n73cAPSF+C+K+kB+Yd9fUeA/yClr+gp4SMyrk8c5aQsbSsUTkntlCY2XPN7FQz\nm623jdR9/wd3v8DdTwP2NbPnAbeRVsQD6x+/Dlhbn3c6cKSZvYy0yOwFXN1izsea2QYzuwJ4v5nt\nWWd9OnCpmZm7fx6418yOIu3V7FZfTr29J7CZtDf0eDP7a+AcYJO7/3g5ZFTO5ZmzhIylZc0h50QW\nCjN7GvCXwM+Bf2dm76jH3hv4eX2nATaQSkxXA48A/ZLSlaQO/oPu/s/AicAscDjwZ+6+eeA2dtQL\n6rGPJDV43gWsA1YC6+s9IYCz6qyX1/frtwDc/Zv1bazy9NUlx5P2gv7c3V+/jDIq5/LMWULG0rLG\n5xx2ONT2/gN2JR2JNFMHA/gwcEJ9+lnAx4BjgJeQ9ij6P/tvSLtSkBaGq4BfAQ4B/jfwhIHr7tBh\nZ/UkHw9cTCpl7VGf/7mBrE8G3l9ffhjwdWDlwP38SX07e5P2et4KnAl8HFjbwlxmn1E5l2fOEjKW\nljXnnK3uUZjZDKnh/HLgZODd9UW3kY7bhbSSXQr8LvCPwHozO9jMdvLUj7jNzH7d3S8CzgBOBc4H\nznH3H/XH8npmdsBvA0cDp5D2XE6rz78QeF59+hbSA3Gku19BWs3/bT3+/cBlwGHufhvwe6Qy2B3A\nu939ge0NNrB39LJcMy6Q7VyC5rPNnAXOJWQ8n1DGnO7Qt8ea2bNJTeYL3f0npL2FG9x91swOBd5n\nZs8irZC/aWZr3P1BM7uadAjXelKd7E3Ax8zs/wHXAjfVQ/wVcLa7/2w785m7u5kdBhxHmuAvejq0\n9qnAje5+kZndRPqk928A3wZ+x8z2cPe7zOwHwP1m9iTS3wJ/jZk9HtiH1Ei/HMDdvwV8a3ty1lmf\nRdoT+znwAeDHwFNyyVjSXNZ5NZ/L5LlZZyxmPuu82c/poEXtUViyk5m91syuIjVGpoD+C/kvgI31\n3sGVpF2f5wL3k/42xVH19R4hTcxepL2G75D6ExcDd7n7rZD2GlpYJF4AfJLU8X8x8Bf1VTYDN5jZ\nLu5+U531YOA+4HbSQta/TytJc/V3dd5XA88EzvAdPE7azHY3szPr274J+Ki7/9jMVpDeLeSQcWU9\nly8k7cbmOpdmZrua2Qbyns9d6vnskelz08xWm9na3Oeyzrou9/msc+5qZjub2VlkPqdbaVKfIh1x\n9Lz69FQd7GPbuN7bSB8T37vePobUj9iX9JUbF9fn7wx8jboGV593CPCYJnlG5FxDqvGdTdpL2Qn4\n98Bb6ssfC1xTj3UsqdY3XV92FOnw3D1Iu6rXALuTeiVfGswGrGgh4znA60l1xVOB4weu0+/tvBX4\nL5POOPCYv5H0RPwTUvMsq7lckPP8+vm3Z47zWd/GbsAXgU/W22/PcD53q2/zf9Tbp2U6l2tIrylf\nI324LNf57Oe8CPhsfV6Wz89R/8buUZjZu4AbgS+a2V7ufi+pDnZ73Vs42h79wNs3Sbs//Q/OXUpq\naj/o7mcBd5vZp0lN6u8DW2pm7n6Vuz88Ls+InOuBLwA94NOkZs8rSHs0m+ox7gE+T3pB+SrpReWA\n+ia+Tjoy4GF3/wLpncl5pMNxzyLtBfWzbteKvSDjp4A31xlvAH7FzN5fv4N7g6UPFX6ZVJ6bWMY6\n51rSL+ARpCfqb5B6SoeR3p2Fz+U2cp5BOsrjFcD3gANymc8Bu5A+L7Sfme1B+j1ZWd9++HwOZHwM\n6fn4xHrsp5vZX+Qyl2a2E6nXeQzwAXf/3fqiQwbGCJ/PBTlPc/f+HsG1wIE5zelYDVbEHmn352+A\nt9fnHUZ6wbutDn428KH6svcB7x34+SuAQ+rTq0mHeB3W9opHeoI/Z2B7lvRu6HXA5QPnPxG4vT79\nFtJH3B9b//wFwJMGrrtHxxlfSzoaYX/gs6RPUb4K+K/UR4NNOuPA7U4NnP5PwAnUh97lMJdDcv4H\n0qGDT8ltPuvbfh2pHn0S8Puk5uUVmc1nP+O7SS+yj6vn8bOZzeX5wKsXnHcscFlm87mtnE+qs2T1\n/Bx5Pxrc0f6hV8cCVX16J9K7uN3r7X1JexOHkXZdzyO9w/syaeVb3fkdSfU9gy1/te9QHi11/ZR0\nvHH/ul+lfsEm7epdWF/nnRPOeAhwSf9JPXC9nYAKOKLeft+kMi7Iu47UO7oTeG+9/VNgr+i5HJLz\njjrDWuryZw7zOfB4vx74Q9Jez2fq8+7KYT6HZDy3Pm/wsPRcnpu/TdoT/zDwT6SS976kTyU/Pno+\nR+R8D6nqks3zs9H9WMQdfhzpg29Pq7dXLbh8A3BM/4lFKqsczwQWiQU5+k/4s4C31ac/DZxan/4l\n0t7RkwYepIMY+DrzCWd8y+B59en19XweHJVxIMsfkY7dPoPUC/hG/UtpOczlNnKeTjq88Jdzm0/S\n8fArSXXmi0nv2r8DnJTRc3Mw49dIRx4emttc1mN/BfjPpM9ffZa0B/TN3J6fC3J+hvRVG/vnOKfD\n/i3qb2ab2ceB+9z9xHp7BenIpbcATwOO9R3oM7TFzPYBPgH8sbvfYOnLBv+AlHFv4Cp3f8Oo25hg\nxje7+431eYeQSnNHAXPu/keBEecxs2eQFv5/IdVQDyK9Mwqfy0FmdhCp/PTfgAdJ7+jC59PMdiWV\ndFaT5u9XSV/m9i7Su/j9CZ7PbWTcn9TveQmp1/gi0nxm8dy0+nD7+vQzSL/jl5K+uiKb5+eCnAeR\nvlnio6Rvxs7i+TnOYj9HcQbw0bpJcwDpCX446cF5Vw6LRO0Q6s9jmNkbgVtJv5DHAtd7OnQ3Wj/j\nzXXGm0hPmE2kvYyrIsNtw92kb/U9yd0/ZWavAb6bYc57SUeJfIf0mO9EHvO5iXQEzCOkPYlfkH5n\nrgXeUc/n94Kfm8MyPmRmR5MWkBzmEoD+i2/tXtLnJU5y97Nzen4uyPlz0pvr60h7Gbk8P0da7B7F\nK0mN64dI30B4kbt/v6Ns283MLiU1NDeSjj8+xd2vCQ21wIKMdwAn5jaXZrY76V3kcaQvaDwDON3d\nHxn5gxO2jZyfcPcPxaYarf6wVL8PcEd0nm2pMx4DnOnpKKKsmNlq0t+u+T1SteAvgY97+vME2dhG\nzjPc/SOxqRan8UJhZgeTjv89j9SI6+SrvXdUvbdzMukd+t96+mRmVkrICGBmq0jlpodIOXN9zIvI\nCenDi8BmX8w7tAkrIWOfmR1POmT705k/7kXkHGZRexQiIrL85PqnUEVEJBNaKEREZCQtFCIiMpIW\nChERGUkLhYiIjKSFQkRERtJCISIiI2mhEBGRkf4/SkyAklJi0kMAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"yearly_incidence.hist(xrot=20)"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": []
}
],
"metadata": {
@@ -2526,9 +364,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.5.2"
+ "version": "3.6.1"
}
},
"nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 1
}
diff --git a/module3/exo1/analyse-syndrome-grippal.org b/module3/exo1/analyse-syndrome-grippal.org
index d4ecc99198ae4085475ac4b82cc5ace0b1d37aab..1720b70df3a93009c79592b68d1dcf57a53f6341 100644
--- a/module3/exo1/analyse-syndrome-grippal.org
+++ b/module3/exo1/analyse-syndrome-grippal.org
@@ -16,9 +16,9 @@
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.
-** Python 3.6
+** 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
@@ -42,11 +42,11 @@ Nous n'utilisons que des fonctionnalités de base du langage R, une version ant
* 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 en format CSV dont chaque ligne correspond à une semaine de la période demandée. Les dates de départ et de fin sont codées dans l'URL: "wstart=198501" pour semaine 1 de l'année 1985 et "wend=201730" pour semaine 30 de l'année 2017. L'URL complet est:
+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://websenti.u707.jussieu.fr/sentiweb/api/data/rest/getIncidenceFlat?indicator=3&wstart=198501&wend=201730&geo=PAY1&$format=csv
+http://www.sentiweb.fr/datasets/incidence-PAY-3.csv
-Voici l'explication des colonnes donnée sur le site d'origine:
+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 |
|----------------+-----------------------------------------------------------------------------------------------------------------------------------|
@@ -61,7 +61,7 @@ Voici l'explication des colonnes donnée sur le site d'origine:
| ~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.
+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.
@@ -70,7 +70,7 @@ Après avoir téléchargé les données, nous commençons par l'extraction des d
from urllib.request import urlopen
data = urlopen(data_url).read()
-lines = data.decode('ascii').strip().split('\n')
+lines = data.decode('latin-1').strip().split('\n')
data_lines = lines[1:]
table = [line.split(',') for line in data_lines]
#+END_SRC
@@ -80,70 +80,82 @@ Regardons ce que nous avons obtenu:
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 table]
+week = [row[0] for row in valid_table]
assert week[0] == 'week'
del week[0]
-inc = [row[2] for row in table]
+inc = [row[2] for row in valid_table]
assert inc[0] == 'inc
del inc[0]
-raw_data = list(zip(week, inc))
+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] + raw_data[:5] + [None] + raw_data[-5:]
+[('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 raw_data:
+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
-La vérification a mis en évidence un point manquant dans le jeux de données. Nous l'éliminons, ce qui n'a pas d'impact fort sur notre analyse qui est assez simple.
-#+BEGIN_SRC python :results silent
-valid_data = [record for record in raw_data if record[1] != '-']
-#+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
-data = [(datetime.datetime.strptime(year_and_week + ":1" , '%G%V:%u').date(),
- int(inc))
- for year_and_week, inc in valid_data]
-data.sort(key = lambda record: record[0])
+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 data]
+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 data]
+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. 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.
+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]
+[('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.
@@ -178,9 +190,9 @@ pic_annuel = function(annee) {
}
#+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 janvier 1985, ce qui ne permet pas de quantifier complètement le pic attribué à cette année. Nous le supprimons donc de notre analyse. Par contre, les données se terminent en été 2017, peu avant le 1er août, ce qui nous permet d'inclure cette année dans l'analyse.
+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:2017
+annees <- 1986:2018
#+END_SRC
#+BEGIN_SRC R :results value
diff --git a/module3/exo1/influenza-like-illness-analysis.Rmd b/module3/exo1/influenza-like-illness-analysis.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..8047fa03d3d3cc003416749dd44be6adbb072d04
--- /dev/null
+++ b/module3/exo1/influenza-like-illness-analysis.Rmd
@@ -0,0 +1,165 @@
+---
+title: "Incidence of influenza-like illness in France"
+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)
+```
+
+## Data preprocessing
+
+The data on the incidence of influenza-like illness are available from the Web site of the [Réseau Sentinelles](http://www.sentiweb.fr/). We download them as a file in CSV format, in which each line corresponds to a week in the observation period. Only the complete dataset, starting in 1984 and ending with a recent week, is available for download. The URL is:
+```{r}
+data_url = "http://www.sentiweb.fr/datasets/incidence-PAY-3.csv"
+```
+
+This is the documentation of the data from [the download site](https://ns.sentiweb.fr/incidence/csv-schema-v1.json):
+
+| Column name | Description |
+|--------------+---------------------------------------------------------------------------------------------------------------------------|
+| `week` | ISO8601 Yearweek number as numeric (year*100 + week nubmer) |
+| `indicator` | Unique identifier of the indicator, see metadata document https://www.sentiweb.fr/meta.json |
+| `inc` | Estimated incidence value for the time step, in the geographic level |
+| `inc_low` | Lower bound of the estimated incidence 95% Confidence Interval |
+| `inc_up` | Upper bound of the estimated incidence 95% Confidence Interval |
+| `inc100` | Estimated rate incidence per 100,000 inhabitants |
+| `inc100_low` | Lower bound of the estimated incidence 95% Confidence Interval |
+| `inc100_up` | Upper bound of the estimated rate incidence 95% Confidence Interval |
+| `geo_insee` | Identifier of the geographic area, from INSEE https://www.insee.fr |
+| `geo_name` | Geographic label of the area, corresponding to INSEE code. This label is not an id and is only provided for human reading |
+
+### Download
+
+The first line of the CSV file is a comment, which we ignore with `skip=1`.
+```{r}
+data = read.csv(data_url, skip=1)
+```
+
+Let's have a look at what we got:
+```{r}
+head(data)
+tail(data)
+```
+
+Are there missing data points?
+```{r}
+na_records = apply(data, 1, function (x) any(is.na(x)))
+data[na_records,]
+```
+
+The two relevant columns for us are `week` and `inc`. Let's verify their classes:
+```{r}
+class(data$week)
+class(data$inc)
+```
+Integers, fine!
+
+### Conversion of the week numbers
+
+Date handling is always a delicate subject. There are many conventions that are easily confused. Our dataset uses the [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) week number format, which is popular in Europe but less so in North America. In `R`, it is handled by the library [parsedate](https://cran.r-project.org/package=parsedate):
+
+```{r}
+library(parsedate)
+```
+
+In order to facilitate the subsequent treatment, we replace the ISO week numbers by the dates of each week's Monday. This function does it for one value:
+
+```{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))
+}
+```
+
+We apply it to all points, creating a new column `date` in our data frame:
+```{r}
+data$date = as.Date(convert_week(data$week))
+```
+
+Let's check that is has class `Date`:
+```{r}
+class(data$date)
+```
+
+The points are in inverse chronological order, so it's preferable to sort them:
+```{r}
+data = data[order(data$date),]
+```
+
+That's a good occasion for another check: our dates should be separated by exactly seven days:
+```{r}
+all(diff(data$date) == 7)
+```
+
+### Inspection
+
+Finally we can look at a plot of our data!
+```{r}
+plot(data$date, data$inc, type="l", xlab="Date", ylab="Weekly incidence")
+```
+
+A zoom on the last few years makes the peaks in winter stand out more clearly.
+```{r}
+with(tail(data, 200), plot(date, inc, type="l", xlab="Date", ylab="Weekly incidence"))
+```
+
+## Annual incidence
+
+### Computation
+
+Since the peaks of the epidemic happen in winter, near the transition between calendar years, we define the reference period for the annual incidence from August 1st of year $N$ to August 1st of year $N+1$. We label this period as year $N+1$ because the peak is always located in year $N+1$. The very low incidence in summer ensures that the arbitrariness of the choice of reference period has no impact on our conclusions.
+
+The argument `na.rm=True` in the sum indicates that missing data points are removed. This is a reasonable choice since there is only one missing point, whose impact cannot be very strong.
+```{r}
+yearly_peak = function(year) {
+ debut = paste0(year-1,"-08-01")
+ fin = paste0(year,"-08-01")
+ semaines = data$date > debut & data$date <= fin
+ sum(data$inc[semaines], na.rm=TRUE)
+ }
+```
+
+We must also be careful with the first and last years of the dataset. The data start in October 1984, meaning that we don't have all the data for the peak attributed to the year 1985. We therefore exclude it from the analysis. For the same reason, we define 2018 as the final year. We can increase this value to 2019 only when all data up to July 2019 is available.
+```{r}
+years = 1986:2018
+```
+
+We make a new data frame for the annual incidence, applying the function `yearly_peak` to each year:
+```{r}
+annnual_inc = data.frame(year = years,
+ incidence = sapply(years, yearly_peak))
+head(annnual_inc)
+```
+
+### Inspection
+
+A plot of the annual incidences:
+```{r}
+plot(annnual_inc, type="p", xlab="Année", ylab="Annual incidence")
+```
+
+### Identification of the strongest epidemics
+
+A list sorted by decreasing annual incidence makes it easy to find the most important ones:
+```{r}
+head(annnual_inc[order(-annnual_inc$incidence),])
+```
+
+Finally, a histogram clearly shows the few very strong epidemics, which affect about 10% of the French population, but are rare: there were three of them in the course of 35 years. The typical epidemic affects only half as many people.
+```{r}
+hist(annnual_inc$incidence, breaks=10, xlab="Annual incidence", ylab="Number of observations", main="")
+```
diff --git a/module3/exo1/influenza-like-illness-analysis.ipynb b/module3/exo1/influenza-like-illness-analysis.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..87092fc69cd90ff457ea56284b789cb0de199a41
--- /dev/null
+++ b/module3/exo1/influenza-like-illness-analysis.ipynb
@@ -0,0 +1,373 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Incidence of influenza-like illness in France"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "%matplotlib inline\n",
+ "import matplotlib.pyplot as plt\n",
+ "import pandas as pd\n",
+ "import isoweek"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The data on the incidence of influenza-like illness are available from the Web site of the [Réseau Sentinelles](http://www.sentiweb.fr/). We download them as a file in CSV format, in which each line corresponds to a week in the observation period. Only the complete dataset, starting in 1984 and ending with a recent week, is available for download."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "data_url = \"http://www.sentiweb.fr/datasets/incidence-PAY-3.csv\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This is the documentation of the data from [the download site](https://ns.sentiweb.fr/incidence/csv-schema-v1.json):\n",
+ "\n",
+ "| Column name | Description |\n",
+ "|--------------|---------------------------------------------------------------------------------------------------------------------------|\n",
+ "| `week` | ISO8601 Yearweek number as numeric (year times 100 + week nubmer) |\n",
+ "| `indicator` | Unique identifier of the indicator, see metadata document https://www.sentiweb.fr/meta.json |\n",
+ "| `inc` | Estimated incidence value for the time step, in the geographic level |\n",
+ "| `inc_low` | Lower bound of the estimated incidence 95% Confidence Interval |\n",
+ "| `inc_up` | Upper bound of the estimated incidence 95% Confidence Interval |\n",
+ "| `inc100` | Estimated rate incidence per 100,000 inhabitants |\n",
+ "| `inc100_low` | Lower bound of the estimated incidence 95% Confidence Interval |\n",
+ "| `inc100_up` | Upper bound of the estimated rate incidence 95% Confidence Interval |\n",
+ "| `geo_insee` | Identifier of the geographic area, from INSEE https://www.insee.fr |\n",
+ "| `geo_name` | Geographic label of the area, corresponding to INSEE code. This label is not an id and is only provided for human reading |\n",
+ "\n",
+ "The first line of the CSV file is a comment, which we ignore with `skip=1`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "raw_data = pd.read_csv(data_url, skiprows=1)\n",
+ "raw_data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Are there missing data points? Yes, week 19 of year 1989 does not have any observed values."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "raw_data[raw_data.isnull().any(axis=1)]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We delete this point, which does not have big consequence for our rather simple analysis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "data = raw_data.dropna().copy()\n",
+ "data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Our dataset uses an uncommon encoding; the week number is attached\n",
+ "to the year number, leaving the impression of a six-digit integer.\n",
+ "That is how Pandas interprets it.\n",
+ "\n",
+ "A second problem is that Pandas does not know about week numbers.\n",
+ "It needs to be given the dates of the beginning and end of the week.\n",
+ "We use the library `isoweek` for that.\n",
+ "\n",
+ "Since the conversion is a bit lengthy, we write a small Python \n",
+ "function for doing it. Then we apply it to all points in our dataset. \n",
+ "The results go into a new column 'period'."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "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": [
+ "There are two more small changes to make.\n",
+ "\n",
+ "First, we define the observation periods as the new index of\n",
+ "our dataset. That turns it into a time series, which will be\n",
+ "convenient later on.\n",
+ "\n",
+ "Second, we sort the points chronologically."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "sorted_data = data.set_index('period').sort_index()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We check the consistency of the data. Between the end of a period and\n",
+ "the beginning of the next one, the difference should be zero, or very small.\n",
+ "We tolerate an error of one second.\n",
+ "\n",
+ "This is OK except for one pair of consecutive periods between which\n",
+ "a whole week is missing.\n",
+ "\n",
+ "We recognize the dates: it's the week without observations that we\n",
+ "have deleted earlier!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "periods = sorted_data.index\n",
+ "for p1, p2 in zip(periods[:-1], periods[1:]):\n",
+ " delta = p2.to_timestamp() - p1.end_time\n",
+ " if delta > pd.Timedelta('1s'):\n",
+ " print(p1, p2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A first look at the data!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sorted_data['inc'].plot()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A zoom on the last few years shows more clearly that the peaks are situated in winter."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sorted_data['inc'][-200:].plot()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Study of the annual incidence"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Since the peaks of the epidemic happen in winter, near the transition\n",
+ "between calendar years, we define the reference period for the annual\n",
+ "incidence from August 1st of year $N$ to August 1st of year $N+1$. We\n",
+ "label this period as year $N+1$ because the peak is always located in\n",
+ "year $N+1$. The very low incidence in summer ensures that the arbitrariness\n",
+ "of the choice of reference period has no impact on our conclusions.\n",
+ "\n",
+ "Our task is a bit complicated by the fact that a year does not have an\n",
+ "integer number of weeks. Therefore we modify our reference period a bit:\n",
+ "instead of August 1st, we use the first day of the week containing August 1st.\n",
+ "\n",
+ "A final detail: the dataset starts in October 1984, the first peak is thus\n",
+ "incomplete, We start the analysis with the first full peak."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "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": [
+ "Starting from this list of weeks that contain August 1st, we obtain intervals of approximately one year as the periods between two adjacent weeks in this list. We compute the sums of weekly incidences for all these periods.\n",
+ "\n",
+ "We also check that our periods contain between 51 and 52 weeks, as a safeguard against potential mistakes in our code."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "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": [
+ "And here are the annual incidences."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "yearly_incidence.plot(style='*')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A sorted list makes it easier to find the highest values (at the end)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "yearly_incidence.sort_values()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Finally, a histogram clearly shows the few very strong epidemics, which affect about 10% of the French population,\n",
+ "but are rare: there were three of them in the course of 35 years. The typical epidemic affects only half as many people."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "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.6.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/module3/exo1/influenza-like-illness-analysis.org b/module3/exo1/influenza-like-illness-analysis.org
new file mode 100644
index 0000000000000000000000000000000000000000..6c8b47ad2eefaa2efae0fcda6640ec8b078e7c32
--- /dev/null
+++ b/module3/exo1/influenza-like-illness-analysis.org
@@ -0,0 +1,219 @@
+#+TITLE: Incidence of influenza-like illness in France
+#+LANGUAGE: en
+#+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
+
+* Foreword
+
+For running this analysis, you need the following software:
+
+** Emacs 25 or higher
+Older versions may suffice. For Emacs versions older than 26, org-mode must be updated to version 9.x.
+** Python 3.6 or higher
+We use the ISO 8601 date format, which has been added to Python's standard library with version 3.6.
+#+BEGIN_SRC python :results output
+import sys
+if sys.version_info.major < 3 or sys.version_info.minor < 6:
+ print("Please use Python 3.6 (or higher)!")
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :results output
+(unless (featurep 'ob-python)
+ (print "Please activate python in org-babel (org-babel-do-languages)!"))
+#+END_SRC
+
+** R 3.4
+We use only basic R functionality, so a earlier version might be OK, but we did not test this.
+
+#+BEGIN_SRC emacs-lisp :results output
+(unless (featurep 'ob-R)
+ (print "Please activate R in org-babel (org-babel-do-languages)!"))
+#+END_SRC
+
+* Data preprocessing
+
+The data on the incidence of influenza-like illness are available from the Web site of the [[http://www.sentiweb.fr/][Réseau Sentinelles]]. We download them as a file in CSV format, in which each line corresponds to a week in the observation period. Only the complete dataset, starting in 1984 and ending with a recent week, is available for download. The URL is:
+#+NAME: data-url
+http://www.sentiweb.fr/datasets/incidence-PAY-3.csv
+
+This is the documentation of the data from [[https://ns.sentiweb.fr/incidence/csv-schema-v1.json][the download site]]:
+
+| Column name | Description |
+|--------------+---------------------------------------------------------------------------------------------------------------------------|
+| ~week~ | ISO8601 Yearweek number as numeric (year*100 + week nubmer) |
+| ~indicator~ | Unique identifier of the indicator, see metadata document https://www.sentiweb.fr/meta.json |
+| ~inc~ | Estimated incidence value for the time step, in the geographic level |
+| ~inc_low~ | Lower bound of the estimated incidence 95% Confidence Interval |
+| ~inc_up~ | Upper bound of the estimated incidence 95% Confidence Interval |
+| ~inc100~ | Estimated rate incidence per 100,000 inhabitants |
+| ~inc100_low~ | Lower bound of the estimated incidence 95% Confidence Interval |
+| ~inc100_up~ | Upper bound of the estimated rate incidence 95% Confidence Interval |
+| ~geo_insee~ | Identifier of the geographic area, from INSEE https://www.insee.fr |
+| ~geo_name~ | Geographic label of the area, corresponding to INSEE code. This label is not an id and is only provided for human reading |
+
+The [[https://en.wikipedia.org/wiki/ISO_8601][ISO-8601]] format is popular in Europe, but less so in North America. This may explain why few software packages handle this format. The Python language does it since version 3.6. We therefore use Python for the pre-processing phase, which has the advantage of not requiring any additional library. (Note: we will explain in module 4 why it is desirable for reproducibility to use as few external libraries as possible.)
+
+** Download
+After downloading the raw data, we extract the part we are interested in. We first split the file into lines, of which we discard the first one that contains a comment. We then split the remaining lines into columns.
+
+#+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
+
+Let's have a look at what we have so far:
+#+BEGIN_SRC python :results value
+table[:5]
+#+END_SRC
+
+** Checking for missing data
+Unfortunately there are many ways to indicate the absence of a data value in a dataset. Here we check for a common one: empty fields. For completeness, we should also look for non-numerical data in numerical columns. We don't do this here, but checks in later processing steps would catch such anomalies.
+
+We make a new dataset without the lines that contain empty fields. We print those lines to preserve a trace of their contents.
+#+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 of the required columns
+There are only two columns that we will need for our analysis: the first (~"week"~) and the third (~"inc"~). We check the names in the header to be sure we pick the right data. We make a new table containing just the two columns required, without the header.
+#+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
+
+Let's look at the first and last lines. We insert ~None~ to indicate to org-mode the separation between the three parts of the table: header, first lines, last lines.
+#+BEGIN_SRC python :results value
+[('week', 'inc'), None] + data[:5] + [None] + data[-5:]
+#+END_SRC
+
+** Verification
+It is always prudent to verify if the data looks credible. A simple fact we can check for is that weeks are given as six-digit integers (four for the year, two for the week), and that the incidence values are positive integers.
+#+BEGIN_SRC python :results output
+for week, inc in data:
+ if len(week) != 6 or not week.isdigit():
+ print("Suspicious value in column 'week': ", (week, inc))
+ if not inc.isdigit():
+ print("Suspicious value in column 'inc': ", (week, inc))
+#+END_SRC
+
+No problem - fine!
+
+** Date conversion
+In order to facilitate the subsequent treatment, we replace the ISO week numbers by the dates of each week's Monday. This is also a good occasion to sort the lines by increasing data, and to convert the incidences from strings to integers.
+
+#+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
+
+We'll look again at the first and last lines:
+#+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
+
+** Date verification
+We do one more verification: our dates must be separated by exactly one week, except around the missing data point.
+#+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"The difference between {date1} and {date2} is {date2-date1}")
+#+END_SRC
+
+** Transfer Python -> R
+We switch to R for data inspection and analysis, because the code is more concise in R and requires no additional libraries.
+
+Org-mode's data exchange mechanism requires some Python code for transforming the data to the right format.
+#+NAME: data-for-R
+#+BEGIN_SRC python :results silent
+[('date', 'inc'), None] + [(str(date), inc) for date, inc in converted_data]
+#+END_SRC
+
+In R, the dataset arrives as a data frame, which is fine. But the dates arrive as strings and must be converted.
+#+BEGIN_SRC R :results output :var data=data-for-R
+data$date <- as.Date(data$date)
+summary(data)
+#+END_SRC
+
+** Inspection
+Finally we can look at a plot of our data!
+#+BEGIN_SRC R :results output graphics :file inc-plot.png
+plot(data, type="l", xlab="Date", ylab="Weekly incidence")
+#+END_SRC
+
+A zoom on the last few years makes the peaks in winter stand out more clearly.
+#+BEGIN_SRC R :results output graphics :file inc-plot-zoom.png
+plot(tail(data, 200), type="l", xlab="Date", ylab="Weekly incidence")
+#+END_SRC
+
+* Study of the annual incidence
+
+** Computation of the annual incidence
+Since the peaks of the epidemic happen in winter, near the transition between calendar years, we define the reference period for the annual incidence from August 1st of year /N/ to August 1st of year /N+1/. We label this period as year /N+1/ because the peak is always located in year /N+1/. The very low incidence in summer ensures that the arbitrariness of the choice of reference period has no impact on our conclusions.
+
+This R function computes the annual incidence as defined above:
+#+BEGIN_SRC R :results silent
+yearly_peak = function(year) {
+ debut = paste0(year-1,"-08-01")
+ fin = paste0(year,"-08-01")
+ semaines = data$date > debut & data$date <= fin
+ sum(data$inc[semaines], na.rm=TRUE)
+ }
+#+END_SRC
+
+We must also be careful with the first and last years of the dataset. The data start in October 1984, meaning that we don't have all the data for the peak attributed to the year 1985. We therefore exclude it from the analysis. For the same reason, we define 2018 as the final year. We can increase this value to 2019 only when all data up to July 2019 is available.
+#+BEGIN_SRC R :results silent
+years <- 1986:2018
+#+END_SRC
+
+We make a new data frame for the annual incidence, applying the function ~yearly_peak~ to each year:
+#+BEGIN_SRC R :results value
+annnual_inc = data.frame(year = years,
+ incidence = sapply(years, yearly_peak))
+head(annnual_inc)
+#+END_SRC
+
+** Inspection
+A plot of the annual incidence:
+#+BEGIN_SRC R :results output graphics :file annual-inc-plot.png
+plot(annnual_inc, type="p", xlab="Année", ylab="Annual incidence")
+#+END_SRC
+
+** Identification of the strongest epidemics
+A list sorted by decreasing annual incidence makes it easy to find the most important ones:
+#+BEGIN_SRC R :results output
+head(annnual_inc[order(-annnual_inc$incidence),])
+#+END_SRC
+
+Finally, a histogram clearly shows the few very strong epidemics, which affect about 10% of the French population, but are rare: there were three of them in the course of 35 years. The typical epidemic affects only half as many people.
+#+BEGIN_SRC R :results output graphics :file annual-inc-hist.png
+hist(annnual_inc$incidence, breaks=10, xlab="Annual incidence", ylab="Number of observations", main="")
+#+END_SRC