--- title: "John Snow’s Cholera data" author: "Emilie Rojas" date: "4/16/2020" output: html_document: default pdf_document: default --- ```{r packages, include=FALSE} library(OpenStreetMap) library(leaflet) library(rgeos) library(sp) library(sf) library(stringr) library(tidyr) ``` ```{r import data, include=FALSE} data_url = "http://rtwilson.com/downloads/SnowGIS_SHP.zip" data_SHP = "SnowGIS_SHP.zip" if (!file.exists(data_SHP)) { download.file(data_url, data_file, method="auto") } unzip(data_SHP, overwrite = TRUE) #pour le dézipper et pouvoir ouvrir le fichier sur l'ordinateurs morts <- st_read(dsn = '~/Desktop/FUN MOOC 2020/recherche reproductible/SnowGIS_SHP/Cholera_Deaths.shp') %>% st_transform(morts, crs = 4326) #lecture du fichier shp avec st_read, et transformation des coordonnées pour en simple caractère pour pouvoir les modifier morts$geom<- as.character(morts$geometry) #creation d'une nouvelle variable "geom" où je copie les données de la colonne geometry pour pouvoir la modifier en tant que "character" et non en tant que fishier shp morts$geom<-str_replace(morts$geom, pattern = "[c]*[(]", replacement = "") #pour enlever les "c()" morts$geom<-str_replace(morts$geom, pattern = "[)]", replacement = "") #pour enlever les "c()" morts<-separate(data=morts,col = "geom", into = c("long","lat"), sep = ",") #pour séparer la colonne en 2 colonnes via "," indiquant la longitude et latitude pompes <- st_read(dsn = '~/Desktop/FUN MOOC 2020/recherche reproductible/SnowGIS_SHP/Pumps.shp') %>% st_transform(pompes, crs = 4326) pompes$geom<- as.character(pompes$geometry) pompes$geom<-str_replace(pompes$geom, pattern = "[c]*[(]", replacement = "") pompes$geom<-str_replace(pompes$geom, pattern = "[)]", replacement = "") pompes<-separate(data=pompes,col = "geom", into = c("long","lat"), sep = ",") pompes$Id<-c("P1 BD","P2","P3","P4","P5","P6","P7","P8") #ajout des nom des pompes avec BD pour Brod Street ``` Question 1 : Londres a bien sûr évolué depuis 1854, mais une carte d’aujourd’hui est tout à fait utilisable comme support pour ces données historiques. À partir des données numériques, réalisez une carte dans l’esprit de celle de John Snow. Montrez les lieux de décès avec des symboles dont la taille indique le nombre de décès. Indiquez sur la même carte la localisation des pompes en utilisant une autre couleur et/ou un autre symbole. ```{r, echo=FALSE} morts$long<-as.numeric(morts$long) #pour pouvoir tracer la carte il faut des variables numeriques morts$lat<-as.numeric(morts$lat) pompes$long<-as.numeric(pompes$long) pompes$lat<-as.numeric(pompes$lat) map <- leaflet(morts) %>% ##leaflet permet de creer des cartes dynamiques addTiles() %>% #pour avoir les noms de rues sur la carte addCircleMarkers(data=morts, ~long, ~lat,radius= ~sqrt(Count)*5, color = "#a500a5", fillOpacity = 0.01) %>% #pour représenter les morts proportionnellement à leur nombre avec la fonction radius addMarkers(data=pompes) #pour rajouter l'emplacement des pompes map ``` Cliquer sur les symboles représentant les pompes pour ovir leur noms sur la carte. 2. Par la suite, essayez de trouver d'autres façons pour montrer que la pompe de Broad Street est au centre de l'épidémie. Vous pouvez par exemple calculer la densité des décès dans le quartier et l'afficher sur la carte, mais n'hésitez pas à expérimenter avec d'autres approches. ```{r, echo=FALSE} pompes1 <- data.frame(lat=pompes$lat, long= pompes$long, noms=pompes$Id) #transformation en dataframe pour l'utiliser dans la création des perimetre autour des pompes que j'ai nommé de P1 à P8 avec P1 la pompes de Broad Street coordinates(pompes1) <- ~long + lat #pour rendre les coordonnées des données spatiales pointsBuffer <- gBuffer(pompes1, width=0.001, byid = TRUE, id=pompes1$noms) #pour determiner un perimetre autour de chaque pompe (mais je n'ai pas réussi à savoir en mètre) map2 <- leaflet(morts) %>% addTiles() %>% addCircleMarkers(data=morts, ~long, ~lat,radius= ~sqrt(Count)*5, color = "#a500a5", fillOpacity = 0.01) %>% addMarkers(data=pompes, popup = ~Id) %>% addPolygons(data=pointsBuffer) #pour rajouter autour de chaque pompes un périmètre de XX mètres pour compter le nbre de morts dans ce perimetre map2 morts1 <- data.frame(long= morts$long,lat=morts$lat) coordinates(morts1) <- ~long + lat count <- over(pointsBuffer, morts1) # fonction "over" : pour compter le nbre de morte dans chaque rayon autour de chaque pompe ## je n'ai pas réussi à attrivuer le nom de la pompes avec le vrai nombre de morts.. barplot(count, ylab = "Nombre de morts", xlab="Numéro de pompes", names.arg=c("P1 BD", "P2", "P3","P4","P5","P6","P7","P8")) ``` Malheureusement, je n'ai pas reussi à attribuer le bon nombre de morts à chaque pompes, mais j'ai quand même essayé...