# Explorer les ventes de maisons en 2017 (DVF) avec R et QGIS Jeux de données de départ : Les transactions foncières de 2017 https://cadastre.data.gouv.fr/data/etalab-dvf/latest/csv/2017/ ## Préparation du jeu de données dans R Face au volume du jeu de données (+3M de lignes) il est pertinent d'utiliser R studio pour transformer et nettoyer le jeu de données. > Pour optimiser les usages il est nécessaire de mobiliser le package `tidyverse` qui rassemble une série de packages très utiles > > ![](https://i.imgur.com/bzvfmoG.png) 1. Installer le package ``` install.packages("tidyverse") ``` 2. Charger le package ``` library(tidyverse) ``` ### Importer le jeux de données dans R ``` DVF2017 <- read.csv("D:/DVF/2017.csv") ``` ### Ne garder et renommer que les variables utiles Dans le jeux de données fourni il y a plus de 30 variables, l'objectif ici est de garder et au passage rennomer les variables utiles pour la suite de l'analyse. * ID mutation * Nature * Parcelle * Code commune * Type * Surface * Piece * Prix * Latitude * Longitude Il faut ici utilisr la fonction `select` pour ne garder que certaines colonnes ``` DVFOK <- DVF2017 %>% select(id = id_mutation, nature = nature_mutation, commune = code_commune, parcelle = id_parcelle, type = type_local, surface = surface_reelle_bati, piece = nombre_pieces_principales, prix = valeur_fonciere, latitude, longitude) ``` ![](https://i.imgur.com/2xwKTPg.png) ### Ne garder que les maisons vendues On veux ici ne garder que les transactions de type "Vente" relatives aux "Maison". Il faut ici utiliser la fonction `filter` pour ne garder que certaines lignes avec une clause AND matériélisée par `&` ``` maisons <- DVFOK %>% filter(type == "Maison" & nature == "Vente") ``` ![](https://i.imgur.com/jQpsRA5.png) ### Nettoyer le jeux de données en fonction du prix Le jeu de données contient de nombreuses erreurs liées essentiellement à la saisie des informations. Il convient de nettoyer le jeu de données en excluant les transactions avec des prix incohérent, ici inférieurs à 10 000 €. Il faut ici mobiliser la fonction la fonction `filter` pour ne garder que les valeurs > 10000 ``` maisonsok <- maisons %>% filter(prix>10000) ``` ### Agrégger les valeurs des transactions à l'échelle des communes Il faut ici mobiliser les fonctions `group_by` et`summarise` ``` Maisonscommune <- maisonsok %>% group_by(commune) %>% summarise(mean(prix)) ``` ### Ecrire le csv ``` write.csv(Maisonscommune , file = "comumne.csv") ``` ![](https://i.imgur.com/5lAthXy.png) ### Faire la jointure attributaire et caertographier la nouvelle variable dans QGIS Le référentiel cartographique utilisé est GEOFLA® Communes (Edition 2016 - Version 2.2) Disponible en open data : http://professionnels.ign.fr/adminexpress ![](https://i.imgur.com/7KI4OmU.jpg) ____ ## Aller plus loin en constituant un jeu de données sur la période 2014 - 2018 De manière similaire à la méthode présentée il suffit de réitérer les étapes pour les 5 jeux de données DVF par année. ![](https://i.imgur.com/murjLND.png) Une fois les 5 jeux de données crées, il suffit de les fusionner en utilisant la fonction `bind_rows` ``` merge <- bind_rows(dvf2016ok, dvf2017ok, dvf2015ok, dvf2014ok, dvf2018ok) ``` ![](https://i.imgur.com/9MXHCme.png) Puis de ne garder que les "ventes" de "maisons" de plus de 10 000 euros. ``` maisons <- merge %>% filter(type == "Maison" & nature == "Vente") %>% filter(prix>10000) ``` ## ![](https://i.imgur.com/EhQU3Xd.png) Enfin agréger à l'échelle des communes ``` Maisonscommune <- maisons %>% group_by(commune) %>% summarise(mean(prix)) ``` ![](https://i.imgur.com/JILuPI6.png) Il est temps de cartographier dans QGIS ![](https://i.imgur.com/ItebntG.jpg) ____ ____ # Les appartements à Paris ## Créer dataset filtré ``` appartok <-DVFOK %>% filter(nature == "Vente" & type == "Appartement" & between(prix, 10000, 100000000) & surface >10) ``` ## Créer dataset agrégé ``` Appartagreg <- appartok %>% group_by(id) %>% summarise(surfacetot = sum(surface), prix = mean(prix), latitude = min(latitude), longitude = min(longitude)) %>% mutate(M2 = prix/surfacetot) ``` ![](https://i.imgur.com/OmKp6Jv.png) ## Ecrire dataset ``` write.csv(Appartagreg , file = "Appartagreg.csv") ``` ![](https://i.imgur.com/vZ9XGi1.png)