title: "Sujet 3 : L'épidémie de choléra à Londres en 1854"
author: "Mathilde Foucteau"
date: "29/05/2026"
output: html_document
editor_options:
chunk_output_type: console
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)
```
## Quelques explications
Ceci est un document R markdown que vous pouvez aisément exporter au format HTML, PDF, et MS Word. Pour plus de détails sur R Markdown consultez <http://rmarkdown.rstudio.com>.
```{r packages}
library(sf)
library(leaflet)
library(htmltools)
library(leaflet.extras) # nécessaire pour addHeatmap()
library(dplyr)
library(tidyr)
```
# 1. Projection des données sur une carte
## Objectif
L'objectif est de produire une carte inspirée de celle de John Snow où les lieux de décès sont représentés par des cercles dont la taille dépend du nombre de décès et où les pompes à eau sont représentées par un symbole distinct. Un fond de carte actuel est utilisé comme support spatial pour visualiser les données historiques.
## Source des données
Les données proviennent du jeu de données géographiques mis à disposition sur le [site Web de Robin Wilson](https://blog.rtwilson.com/john-snows-cholera-data-in-more-formats/). Nous les récupérons sous forme d'un fichier zip. L'URL est:
Le script télécharge une copie locale du fichier uniquement si elle n'existe pas déjà, afin de rendre l'analyse reproductible sans retélécharger inutilement les données.
```{r}
data_file = "SnowGIS_SHP.zip"
if (!file.exists(data_file)) {
download.file(data_url, data_file, method="auto")
}
# Dézipper dans un sous-dossier
unzip(data_file, exdir = "SnowGIS_SHP")
```
Chaque .shp vient avec ses fichiers compagnons (.dbf, .prj, .shx) qui doivent rester dans le même dossier.
## Lecture et préparation des données
Le document dézippé contient un dossier *_MACOSX* et un dossier *SnowGIS_SHP*. Le premier, vu son nom, est certainement fait pour les utilisateurs de MAC. J'utilise donc, pour ma part, les documents shp du second dossier.
Les fichiers sont fournis en British National Grid (EPSG:27700). Ils sont reprojetés en WGS84 (EPSG:4326), format attendu par `leaflet` pour être superposés à un fond OpenStreetMap.
```{r}
library(sf)
deaths_wgs84 <- st_transform(deaths, crs = 4326)
pumps_wgs84 <- st_transform(pumps, crs = 4326)
```
## Carte
ON utilise le package leaflet, qui charge les tuiles OpenStreetMap :
```{r}
icone_pompe <- makeAwesomeIcon(
icon = "tint", # nom de l'icône Font Awesome (tint = goutte d'eau)
library = "fa", # utiliser Font Awesome
markerColor = "blue", # couleur du marqueur
iconColor = "white" # couleur de l'icône à l'intérieur
)
leaflet() %>%
addTiles() %>%
addCircleMarkers(data = deaths_wgs84,
radius = ~Count,
color = "red",
label = ~paste("Décès :", Count)) %>%
addAwesomeMarkers(data = pumps_wgs84,
icon = icone_pompe,
label = "Pompe")
```
## Commentaire
La carte montre une concentration importante des décès autour du secteur de Broad Street, à proximité d'une pompe à eau. Cette représentation ne démontre pas à elle seule une relation causale, mais elle permet de visualiser spatialement l'association qui a rendu la carte de John Snow célèbre.
# 2. Approche alternative I
Comme suggéré dans l'énoncé de l'exercice, il est possible de réprésenter les densitées de décès sur la carte sous forme d'une heatmap :
```{r}
leaflet() %>%
addTiles() %>%
addHeatmap(data = deaths_wgs84,
intensity = ~Count,
blur = 20,
max = 0.05,
radius = 15)%>%
addAwesomeMarkers(data = pumps_wgs84,
icon = icone_pompe,
label = "Pompe")
```
# 3. Approche alternative II
Calcul de la distance entre chaque décès et chaque pompe :
L'idée est de montrer statistiquement que la majorité des décès est plus proche de la pompe de Broad Street que de toute autre pompe.
D'abord, je donne un nom aux pompes selon la rue à laquelle elles appartiennent (ou le lieu d'intérêt le plus proche si le nom de la rue n'est pas visible):
Lorsque vous cliquerez sur le bouton **Knit** ce document sera compilé afin de ré-exécuter le code R et d'inclure les résultats dans un document final. Comme nous vous l'avons montré dans la vidéo, on inclue du code R de la façon suivante:
```{r}
noms_pompes <- c(
"1" = "Broad Street",
"2" = "Liberty",
"3" = "Ramillies Place",
"4" = "Dean Street",
"5" = "Rupert Street",
"6" = "Bridle Lane",
"7" = "Piccadilly Circus",
"8" = "Warwick Street"
)
```
Je calcule ensuite les distances entre chaque décès et chaque pompe
Et on peut aussi aisément inclure des figures. Par exemple:
Je défnis une palette de couleurs par pompe :
```{r}
palette_pompes <- colorFactor(
palette = "Set1",
domain = deaths_wgs84$pompe_proche
)
```{r pressure, echo=FALSE}
plot(pressure)
```
et génère la carte interactive :
Vous remarquerez le paramètre `echo = FALSE` qui indique que le code ne doit pas apparaître dans la version finale du document. Nous vous recommandons dans le cadre de ce MOOC de ne pas utiliser ce paramètre car l'objectif est que vos analyses de données soient parfaitement transparentes pour être reproductibles.
Comme les résultats ne sont pas stockés dans les fichiers Rmd, pour faciliter la relecture de vos analyses par d'autres personnes, vous aurez donc intérêt à générer un HTML ou un PDF et à le commiter.
## Conclusion
Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel.
Cette dernière représentation est la plus visuelle pour se rendre compte du lien entre la pompe de broad street et les morts du choléra en 1854 !