From ce064575aa21f5be97f1c3f0fb88686fcd16bc07 Mon Sep 17 00:00:00 2001
From: Elise N <44583028+elisencode@users.noreply.github.com>
Date: Wed, 19 Oct 2022 11:47:23 +0200
Subject: [PATCH] Add file `analyse_syndrom_IRA.org` Modifed file
`analyse-syndrom-grippal.org`
---
module3/exo1/analyse-syndrome-grippal.org | 44 +++++-
module3/exo1/analyse_syndrome_IRA.org | 167 ++++++++++++++++++++++
2 files changed, 210 insertions(+), 1 deletion(-)
create mode 100644 module3/exo1/analyse_syndrome_IRA.org
diff --git a/module3/exo1/analyse-syndrome-grippal.org b/module3/exo1/analyse-syndrome-grippal.org
index 1720b70..1477d07 100644
--- a/module3/exo1/analyse-syndrome-grippal.org
+++ b/module3/exo1/analyse-syndrome-grippal.org
@@ -80,6 +80,13 @@ Regardons ce que nous avons obtenu:
table[:5]
#+END_SRC
+#+RESULTS:
+| week | indicator | inc | inc_low | inc_up | inc100 | inc100_low | inc100_up | geo_insee | geo_name |
+| 202240 | 3 | 42543 | 36621 | 48465 | 64 | 55 | 73 | FR | France |
+| 202239 | 3 | 39902 | 34168 | 45636 | 60 | 51 | 69 | FR | France |
+| 202238 | 3 | 28781 | 23733 | 33829 | 43 | 35 | 51 | FR | France |
+| 202237 | 3 | 21395 | 17076 | 25714 | 32 | 25 | 39 | FR | France |
+
** 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.
@@ -94,6 +101,9 @@ for row in table:
valid_table.append(row)
#+END_SRC
+#+RESULTS:
+: ['198919', '3', '0', '', '', '0', '', '', 'FR', 'France']
+
** 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
@@ -101,7 +111,7 @@ 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
+assert inc[0] == 'inc'
del inc[0]
data = list(zip(week, inc))
#+END_SRC
@@ -111,6 +121,21 @@ Regardons les premières et les dernières lignes. Nous insérons ~None~ pour in
[('week', 'inc'), None] + data[:5] + [None] + data[-5:]
#+END_SRC
+#+RESULTS:
+| week | inc |
+|--------+--------|
+| 202240 | 42543 |
+| 202239 | 39902 |
+| 202238 | 28781 |
+| 202237 | 21395 |
+| 202236 | 14120 |
+|--------+--------|
+| 198448 | 78620 |
+| 198447 | 72029 |
+| 198446 | 87330 |
+| 198445 | 135223 |
+| 198444 | 68422 |
+
** 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
@@ -121,6 +146,8 @@ for week, inc in data:
print("Valeur suspecte dans la colonne 'inc': ", (week, inc))
#+END_SRC
+#+RESULTS:
+
Pas de problème !
** Conversions
@@ -140,6 +167,21 @@ str_data = [(str(date), str(inc)) for date, inc in converted_data]
[('date', 'inc'), None] + str_data[:5] + [None] + str_data[-5:]
#+END_SRC
+#+RESULTS:
+| date | inc |
+|------------+--------|
+| 1984-10-29 | 68422 |
+| 1984-11-05 | 135223 |
+| 1984-11-12 | 87330 |
+| 1984-11-19 | 72029 |
+| 1984-11-26 | 78620 |
+|------------+--------|
+| 2022-09-05 | 14120 |
+| 2022-09-12 | 21395 |
+| 2022-09-19 | 28781 |
+| 2022-09-26 | 39902 |
+| 2022-10-03 | 42543 |
+
** 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
diff --git a/module3/exo1/analyse_syndrome_IRA.org b/module3/exo1/analyse_syndrome_IRA.org
new file mode 100644
index 0000000..2127f37
--- /dev/null
+++ b/module3/exo1/analyse_syndrome_IRA.org
@@ -0,0 +1,167 @@
+#+TITLE: Analyse de l'incidence du Infection respiratoire aiguë (IRA)
+#+LANGUAGE: fr
+#+OPTION: *: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
+
+* Préparation des données
+#+NAME: data-url
+https://www.sentiweb.fr/datasets/incidence-PAY-25.csv
+
+* Téléchargement
+
+#+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
+
+#+BEGIN_SRC python :results value
+table[:11]
+#+END_SRC
+
+#+RESULTS:
+| week | indicator | inc | inc_low | inc_up | inc100 | inc100_low | inc100_up | geo_insee | geo_name |
+| 202240 | 25 | 119616 | 109733 | 129499 | 180 | 165 | 195 | FR | France |
+| 202239 | 25 | 115474 | 105715 | 125233 | 174 | 159 | 189 | FR | France |
+| 202238 | 25 | 82053 | 73524 | 90582 | 124 | 111 | 137 | FR | France |
+| 202237 | 25 | 62482 | 55099 | 69865 | 94 | 83 | 105 | FR | France |
+| 202236 | 25 | 43450 | 37073 | 49827 | 66 | 56 | 76 | FR | France |
+| 202235 | 25 | 33304 | 27967 | 38641 | 50 | 42 | 58 | FR | France |
+| 202234 | 25 | 32173 | 26435 | 37911 | 49 | 40 | 58 | FR | France |
+| 202233 | 25 | 29216 | 23034 | 35398 | 44 | 35 | 53 | FR | France |
+| 202232 | 25 | 40805 | 32605 | 49005 | 62 | 50 | 74 | FR | France |
+| 202231 | 25 | 42848 | 35020 | 50676 | 65 | 53 | 77 | FR | France |
+
+* Recherche de données manquantes
+
+Jeu de données sans les lignes qui contiennent des champs vide.
+#+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
+
+#+RESULTS:
+: ['198919', '3', '0', '', '', '0', '', '', 'FR', 'France']
+
+#+BEGIN_SRC python :results value
+table[:11]
+#+END_SRC
+
+#+RESULTS:
+| week | indicator | inc | inc_low | inc_up | inc100 | inc100_low | inc100_up | geo_insee | geo_name |
+| 202240 | 3 | 42543 | 36621 | 48465 | 64 | 55 | 73 | FR | France |
+| 202239 | 3 | 39902 | 34168 | 45636 | 60 | 51 | 69 | FR | France |
+| 202238 | 3 | 28781 | 23733 | 33829 | 43 | 35 | 51 | FR | France |
+| 202237 | 3 | 21395 | 17076 | 25714 | 32 | 25 | 39 | FR | France |
+| 202236 | 3 | 14120 | 10487 | 17753 | 21 | 16 | 26 | FR | France |
+| 202235 | 3 | 9283 | 6485 | 12081 | 14 | 10 | 18 | FR | France |
+| 202234 | 3 | 7498 | 4731 | 10265 | 11 | 7 | 15 | FR | France |
+| 202233 | 3 | 7586 | 4442 | 10730 | 11 | 6 | 16 | FR | France |
+| 202232 | 3 | 12222 | 7749 | 16695 | 18 | 11 | 25 | FR | France |
+| 202231 | 3 | 13257 | 8905 | 17609 | 20 | 13 | 27 | FR | France |
+
+* Extraction des colonnes utilisées
+2 colonnes:
+- "week"
+- "inc"
+
+#+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
+
+#+BEGIN_SRC python :results value
+[('week', 'inc'), None] + data[:5] + [None] + data[-5:]
+#+END_SRC
+
+#+RESULTS:
+| week | inc |
+|--------+--------|
+| 202240 | 42543 |
+| 202239 | 39902 |
+| 202238 | 28781 |
+| 202237 | 21395 |
+| 202236 | 14120 |
+|--------+--------|
+| 198448 | 78620 |
+| 198447 | 72029 |
+| 198446 | 87330 |
+| 198445 | 135223 |
+| 198444 | 68422 |
+
+* Vérification
+Les semaines : 6 chiffres (4 pour l'année + 2 pour la semaine)
+==>Donc, 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
+
+#+RESULTS:
+
+#+BEGIN_SRC python :results silent
+valid_data = [record for record in data if record[1] != '-']
+#+END_SRC
+
+* Conversions
+Faciliter les traitements suivants, +les n° semaine ISO+ par les dates =
+lundis.
+A cette occasion, trions aussi les données par la date, et
+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
+
+#+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
+
+#+RESULTS:
+| date | inc |
+|------------+--------|
+| 1984-10-29 | 68422 |
+| 1984-11-05 | 135223 |
+| 1984-11-12 | 87330 |
+| 1984-11-19 | 72029 |
+| 1984-11-26 | 78620 |
+|------------+--------|
+| 2022-09-05 | 14120 |
+| 2022-09-12 | 21395 |
+| 2022-09-19 | 28781 |
+| 2022-09-26 | 39902 |
+| 2022-10-03 | 42543 |
--
2.18.1