From 4ef168c12d8a06cbffd0cb598e2f5fe7c0446474 Mon Sep 17 00:00:00 2001 From: 0c07d516632c138624818b1d249c5f44 <0c07d516632c138624818b1d249c5f44@app-learninglab.inria.fr> Date: Tue, 29 Apr 2025 09:26:24 +0000 Subject: [PATCH] =?UTF-8?q?Ajout=20d'un=20dossier=20data=20pour=20les=20do?= =?UTF-8?q?nn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module3/exo3/{ => data}/Cholera_Deaths.dbf | Bin module3/exo3/{ => data}/Cholera_Deaths.prj | 0 module3/exo3/{ => data}/Cholera_Deaths.sbn | Bin module3/exo3/{ => data}/Cholera_Deaths.sbx | Bin module3/exo3/{ => data}/Cholera_Deaths.shp | Bin module3/exo3/{ => data}/Cholera_Deaths.shx | Bin module3/exo3/{ => data}/OSMap.tfw | 0 module3/exo3/{ => data}/OSMap.tif | Bin module3/exo3/{ => data}/OSMap_Grayscale.tfw | 0 module3/exo3/{ => data}/OSMap_Grayscale.tif | Bin .../{ => data}/OSMap_Grayscale.tif.aux.xml | 0 .../exo3/{ => data}/OSMap_Grayscale.tif.ovr | Bin module3/exo3/{ => data}/Pumps.dbf | Bin module3/exo3/{ => data}/Pumps.prj | 0 module3/exo3/{ => data}/Pumps.sbx | Bin module3/exo3/{ => data}/Pumps.shp | Bin module3/exo3/{ => data}/Pumps.shx | Bin module3/exo3/{ => data}/SnowMap.tfw | 0 module3/exo3/{ => data}/SnowMap.tif | Bin module3/exo3/{ => data}/SnowMap.tif.aux.xml | 0 module3/exo3/{ => data}/SnowMap.tif.ovr | Bin module3/exo3/exercice_fr.html | 13601 ++++++++++++++++ module3/exo3/exercice_fr.ipynb | 26 +- 23 files changed, 13614 insertions(+), 13 deletions(-) rename module3/exo3/{ => data}/Cholera_Deaths.dbf (100%) rename module3/exo3/{ => data}/Cholera_Deaths.prj (100%) rename module3/exo3/{ => data}/Cholera_Deaths.sbn (100%) rename module3/exo3/{ => data}/Cholera_Deaths.sbx (100%) rename module3/exo3/{ => data}/Cholera_Deaths.shp (100%) rename module3/exo3/{ => data}/Cholera_Deaths.shx (100%) rename module3/exo3/{ => data}/OSMap.tfw (100%) rename module3/exo3/{ => data}/OSMap.tif (100%) rename module3/exo3/{ => data}/OSMap_Grayscale.tfw (100%) rename module3/exo3/{ => data}/OSMap_Grayscale.tif (100%) rename module3/exo3/{ => data}/OSMap_Grayscale.tif.aux.xml (100%) rename module3/exo3/{ => data}/OSMap_Grayscale.tif.ovr (100%) rename module3/exo3/{ => data}/Pumps.dbf (100%) rename module3/exo3/{ => data}/Pumps.prj (100%) rename module3/exo3/{ => data}/Pumps.sbx (100%) rename module3/exo3/{ => data}/Pumps.shp (100%) rename module3/exo3/{ => data}/Pumps.shx (100%) rename module3/exo3/{ => data}/SnowMap.tfw (100%) rename module3/exo3/{ => data}/SnowMap.tif (100%) rename module3/exo3/{ => data}/SnowMap.tif.aux.xml (100%) rename module3/exo3/{ => data}/SnowMap.tif.ovr (100%) create mode 100644 module3/exo3/exercice_fr.html diff --git a/module3/exo3/Cholera_Deaths.dbf b/module3/exo3/data/Cholera_Deaths.dbf similarity index 100% rename from module3/exo3/Cholera_Deaths.dbf rename to module3/exo3/data/Cholera_Deaths.dbf diff --git a/module3/exo3/Cholera_Deaths.prj b/module3/exo3/data/Cholera_Deaths.prj similarity index 100% rename from module3/exo3/Cholera_Deaths.prj rename to module3/exo3/data/Cholera_Deaths.prj diff --git a/module3/exo3/Cholera_Deaths.sbn b/module3/exo3/data/Cholera_Deaths.sbn similarity index 100% rename from module3/exo3/Cholera_Deaths.sbn rename to module3/exo3/data/Cholera_Deaths.sbn diff --git a/module3/exo3/Cholera_Deaths.sbx b/module3/exo3/data/Cholera_Deaths.sbx similarity index 100% rename from module3/exo3/Cholera_Deaths.sbx rename to module3/exo3/data/Cholera_Deaths.sbx diff --git a/module3/exo3/Cholera_Deaths.shp b/module3/exo3/data/Cholera_Deaths.shp similarity index 100% rename from module3/exo3/Cholera_Deaths.shp rename to module3/exo3/data/Cholera_Deaths.shp diff --git a/module3/exo3/Cholera_Deaths.shx b/module3/exo3/data/Cholera_Deaths.shx similarity index 100% rename from module3/exo3/Cholera_Deaths.shx rename to module3/exo3/data/Cholera_Deaths.shx diff --git a/module3/exo3/OSMap.tfw b/module3/exo3/data/OSMap.tfw similarity index 100% rename from module3/exo3/OSMap.tfw rename to module3/exo3/data/OSMap.tfw diff --git a/module3/exo3/OSMap.tif b/module3/exo3/data/OSMap.tif similarity index 100% rename from module3/exo3/OSMap.tif rename to module3/exo3/data/OSMap.tif diff --git a/module3/exo3/OSMap_Grayscale.tfw b/module3/exo3/data/OSMap_Grayscale.tfw similarity index 100% rename from module3/exo3/OSMap_Grayscale.tfw rename to module3/exo3/data/OSMap_Grayscale.tfw diff --git a/module3/exo3/OSMap_Grayscale.tif b/module3/exo3/data/OSMap_Grayscale.tif similarity index 100% rename from module3/exo3/OSMap_Grayscale.tif rename to module3/exo3/data/OSMap_Grayscale.tif diff --git a/module3/exo3/OSMap_Grayscale.tif.aux.xml b/module3/exo3/data/OSMap_Grayscale.tif.aux.xml similarity index 100% rename from module3/exo3/OSMap_Grayscale.tif.aux.xml rename to module3/exo3/data/OSMap_Grayscale.tif.aux.xml diff --git a/module3/exo3/OSMap_Grayscale.tif.ovr b/module3/exo3/data/OSMap_Grayscale.tif.ovr similarity index 100% rename from module3/exo3/OSMap_Grayscale.tif.ovr rename to module3/exo3/data/OSMap_Grayscale.tif.ovr diff --git a/module3/exo3/Pumps.dbf b/module3/exo3/data/Pumps.dbf similarity index 100% rename from module3/exo3/Pumps.dbf rename to module3/exo3/data/Pumps.dbf diff --git a/module3/exo3/Pumps.prj b/module3/exo3/data/Pumps.prj similarity index 100% rename from module3/exo3/Pumps.prj rename to module3/exo3/data/Pumps.prj diff --git a/module3/exo3/Pumps.sbx b/module3/exo3/data/Pumps.sbx similarity index 100% rename from module3/exo3/Pumps.sbx rename to module3/exo3/data/Pumps.sbx diff --git a/module3/exo3/Pumps.shp b/module3/exo3/data/Pumps.shp similarity index 100% rename from module3/exo3/Pumps.shp rename to module3/exo3/data/Pumps.shp diff --git a/module3/exo3/Pumps.shx b/module3/exo3/data/Pumps.shx similarity index 100% rename from module3/exo3/Pumps.shx rename to module3/exo3/data/Pumps.shx diff --git a/module3/exo3/SnowMap.tfw b/module3/exo3/data/SnowMap.tfw similarity index 100% rename from module3/exo3/SnowMap.tfw rename to module3/exo3/data/SnowMap.tfw diff --git a/module3/exo3/SnowMap.tif b/module3/exo3/data/SnowMap.tif similarity index 100% rename from module3/exo3/SnowMap.tif rename to module3/exo3/data/SnowMap.tif diff --git a/module3/exo3/SnowMap.tif.aux.xml b/module3/exo3/data/SnowMap.tif.aux.xml similarity index 100% rename from module3/exo3/SnowMap.tif.aux.xml rename to module3/exo3/data/SnowMap.tif.aux.xml diff --git a/module3/exo3/SnowMap.tif.ovr b/module3/exo3/data/SnowMap.tif.ovr similarity index 100% rename from module3/exo3/SnowMap.tif.ovr rename to module3/exo3/data/SnowMap.tif.ovr diff --git a/module3/exo3/exercice_fr.html b/module3/exo3/exercice_fr.html new file mode 100644 index 0000000..fc0a5a9 --- /dev/null +++ b/module3/exo3/exercice_fr.html @@ -0,0 +1,13601 @@ + + + + +exercice_fr + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+

Analyse de l’épidémie de choléra à Soho (1854) — Reproduction de la carte de John Snow - Victor GERENTON

Ce notebook a pour objectif de reproduire la célèbre carte de John Snow montrant la répartition des décès dus au choléra à Soho en 1854. À l'aide de données géographiques historiques et d'outils modernes de visualisation, nous allons :

+
    +
  1. Visualiser les lieux de décès et les pompes à eau sur une carte interactive.
  2. +
  3. Explorer des méthodes d'analyse spatiale pour mettre en évidence le rôle central de la pompe de Broad Street.
  4. +
+ +
+
+
+
+
+
+

Installation des biliothèques

L'ensembles des biliothèques et leur version respective se trouvent dans le fichier 'requirements.txt'

+ +
+
+
+
+
+
In [ ]:
+
+
+
!pip install -r requirements.txt
+
+print(("----------------------------------------"))
+print("Toutes les bibliothèques sont installées !")
+
+ +
+
+
+ +
+
+
+
+

Importation des biliothèques

+
+
+
+
+
+
In [ ]:
+
+
+
# Importation des bibliothèques nécessaires à notre analyse
+import geopandas as gpd
+import folium
+import matplotlib.pyplot as plt
+from shapely.geometry import Point
+
+print("Toutes les bibliothèques sont importées !")
+
+ +
+
+
+ +
+
+
+
+

Étape 1 — Chargement des données

Nous utilisons ici les fichiers Shapefile fournis dans l’archive SnowGIS_SHP provenant de ce site :

+

https://blog.rtwilson.com/john-snows-cholera-data-in-more-formats/

+

Ces fichiers contiennent les données géographiques suivantes :

+
    +
  • Cholera_Deaths.shp : emplacements des décès dus au choléra, avec le nombre de morts par adresse.
  • +
  • Pumps.shp : emplacements des pompes à eau publiques dans le quartier de Soho.
  • +
+

Nous utilisons la bibliothèque GeoPandas pour lire ces fichiers et vérifier que les données sont bien chargées avec le bon système de coordonnées.

+ +
+
+
+
+
+
In [9]:
+
+
+
# Chargement des shapefiles avec GeoPandas
+deaths = gpd.read_file("data/Cholera_Deaths.shp")
+pumps = gpd.read_file("data/Pumps.shp")
+
+# Aperçu des données
+display(deaths.head())
+display(pumps.head())
+
+# Vérification du système de coordonnées (CRS)
+print("CRS des décès :", deaths.crs)
+print("CRS des pompes :", pumps.crs)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdCountgeometry
003POINT (529308.741 181031.352)
102POINT (529312.164 181025.172)
201POINT (529314.382 181020.294)
301POINT (529317.380 181014.259)
404POINT (529320.675 181007.872)
+
+
+ +
+ +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Idgeometry
00POINT (529396.539 181025.063)
10POINT (529192.538 181079.391)
20POINT (529183.740 181193.735)
30POINT (529748.911 180924.207)
40POINT (529613.205 180896.804)
+
+
+ +
+ +
+ +
+ + +
+
CRS des décès : epsg:27700
+CRS des pompes : epsg:27700
+
+
+
+ +
+
+ +
+
+
+
+

Étape 2 — Conversion des coordonnées pour Folium

Folium utilise sur le système de coordonnées WGS 84 (latitude/longitude), qui est utilisé par défaut dans les cartes web comme OpenStreetMap.
+Cependant, nos fichiers shapefile utilisent actuellement le système British National Grid (EPSG:27700), qui fonctionne avec des coordonnées en mètres, propres au Royaume-Uni.

+

Afin de pouvoir afficher correctement nos données sur une carte interactive avec Folium, il est nécessaire de les convertir vers le système de projection WGS 84 (EPSG:4326).
+Cette opération est appelée une reprojection. Elle permet à nos points d'apparaître au bon endroit sur la carte.

+

Nous réalisons cette conversion avec la méthode .to_crs(epsg=4326) de GeoPandas, qui transforme les coordonnées de chaque géométrie.

+ +
+
+
+
+
+
In [10]:
+
+
+
# Reprojection en EPSG:4326 (latitude/longitude)
+deaths_wgs84 = deaths.to_crs(epsg=4326)
+pumps_wgs84 = pumps.to_crs(epsg=4326)
+
+# Aperçu pour vérification
+deaths_wgs84.head()
+
+ +
+
+
+ +
+
+ + +
+ +
Out[10]:
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdCountgeometry
003POINT (-0.13793 51.51342)
102POINT (-0.13788 51.51336)
201POINT (-0.13785 51.51332)
301POINT (-0.13781 51.51326)
404POINT (-0.13777 51.51320)
+
+
+ +
+ +
+
+ +
+
+
+
+

Étape 3 — Création de la carte interactive

Nous utilisons la bibliothèque folium pour créer une carte interactive centrée sur le quartier de Soho.

+
    +
  • Les cercles rouges représentent les décès dus au choléra. Leur taille est proportionnelle au nombre de morts enregistrés à cette adresse (Count).
  • +
  • Les marqueurs bleus représentent les pompes à eau publiques.
  • +
+

Cette visualisation permet de retrouver la logique de la carte originale de John Snow, en montrant la concentration des décès autour de certaines pompes.

+ +
+
+
+
+
+
In [11]:
+
+
+
# Obtenir le centre de la carte en prenant le centre des décès
+map_center = [deaths_wgs84.geometry.y.mean(), deaths_wgs84.geometry.x.mean()]
+
+# Créer la carte Folium centrée sur Soho
+m = folium.Map(location=map_center, zoom_start=17, tiles='cartodbpositron')
+
+# Ajouter les décès avec des cercles proportionnels à Count
+for _, row in deaths_wgs84.iterrows():
+    folium.CircleMarker(
+        location=[row.geometry.y, row.geometry.x],
+        radius=row['Count'] * 1.5,  # multiplier pour avoir une taille visible
+        color='red',
+        fill=True,
+        fill_color='red',
+        fill_opacity=0.6,
+        popup=f"{row['Count']} décès"
+    ).add_to(m)
+
+# Ajouter les pompes avec une icône bleue
+for _, row in pumps_wgs84.iterrows():
+    folium.Marker(
+        location=[row.geometry.y, row.geometry.x],
+        icon=folium.Icon(color='blue', icon='tint', prefix='fa'),
+        popup="Pompe à eau"
+    ).add_to(m)
+
+# Afficher la carte
+m
+
+ +
+
+
+ +
+
+ + +
+ +
Out[11]:
+ + + +
+
Make this Notebook Trusted to load map: File -> Trust Notebook
+
+ +
+ +
+
+ +
+
+
+
+

Étape 4 — Visualisation de la densité des décès avec une Heatmap

Pour identifier visuellement les zones les plus touchées par l’épidémie, nous utilisons une carte de chaleur (heatmap).
+Chaque point de décès est pondéré par le nombre de morts (Count). On observe ainsi une zone de concentration très nette autour d'une certaine pompe. +On voyait déjà cela avec les cercles mais je trouve la heat map plus parlante.

+ +
+
+
+
+
+
In [12]:
+
+
+
from folium.plugins import HeatMap
+
+# Extraire les points avec leur pondération
+heat_data = [[row.geometry.y, row.geometry.x, row['Count']] for _, row in deaths_wgs84.iterrows()]
+
+# Nouvelle carte centrée sur Soho
+m_heat = folium.Map(location=map_center, zoom_start=17, tiles='cartodbpositron')
+
+# Ajouter la heatmap des décès
+HeatMap(heat_data, radius=15, blur=10, max_zoom=18).add_to(m_heat)
+
+# Ajouter les pompes pour référence
+for _, row in pumps_wgs84.iterrows():
+    folium.Marker(
+        location=[row.geometry.y, row.geometry.x],
+        icon=folium.Icon(color='blue', icon='tint', prefix='fa'),
+        popup="Pompe à eau"
+    ).add_to(m_heat)
+
+# Afficher la heatmap
+m_heat
+
+ +
+
+
+ +
+
+ + +
+ +
Out[12]:
+ + + +
+
Make this Notebook Trusted to load map: File -> Trust Notebook
+
+ +
+ +
+
+ +
+
+
+
+

Conclusion

Grâce à nos outils de visualisation de données géospatiales, nous avons pu reproduire et enrichir l’analyse historique de John Snow sur l’épidémie de choléra de 1854 à Soho.

+
    +
  • Nous avons visualisé les lieux de décès avec des cercles proportionnels au nombre de morts.
  • +
  • Nous avons localisé les pompes à eau sur la même carte.
  • +
  • La carte de chaleur a clairement mis en évidence une forte concentration de décès autour d'une pompe spécifique, celle de Broad Street.
  • +
+

Victor Gérenton

+
+
+
+
+
+ + + + + + diff --git a/module3/exo3/exercice_fr.ipynb b/module3/exo3/exercice_fr.ipynb index efd4e11..2cb1af0 100644 --- a/module3/exo3/exercice_fr.ipynb +++ b/module3/exo3/exercice_fr.ipynb @@ -77,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -231,8 +231,8 @@ ], "source": [ "# Chargement des shapefiles avec GeoPandas\n", - "deaths = gpd.read_file(\"Cholera_Deaths.shp\")\n", - "pumps = gpd.read_file(\"Pumps.shp\")\n", + "deaths = gpd.read_file(\"data/Cholera_Deaths.shp\")\n", + "pumps = gpd.read_file(\"data/Pumps.shp\")\n", "\n", "# Aperçu des données\n", "display(deaths.head())\n", @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -333,7 +333,7 @@ "4 0 4 POINT (-0.13777 51.51320)" ] }, - "execution_count": 36, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -363,19 +363,19 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, - "execution_count": 37, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -424,7 +424,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 12, "metadata": { "scrolled": true }, @@ -432,13 +432,13 @@ { "data": { "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ - "" + "" ] }, - "execution_count": 38, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } -- 2.18.1