blog/content/br/stlenneg/roadennou/1-sevel-kartennou/index.md
Ewen 79ba6399f1
All checks were successful
continuous-integration/drone/push Build is passing
Initial commit
2022-02-04 16:05:48 +01:00

352 lines
15 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Sevel kartennoù gant R hag OpenStreetMap"
date: 2021-04-05T18:53:08+02:00
description: "Graet em eus ur staj e Ofis Publik ar Brezhoneg evit dizoleiñ un tamm muioc'h penaos eo bed ar Brezhoneg. Komzet em eus gant tud simpa kenañ eno ha fardet em eus kartennoù Breizh !"
tags: ["R", "kartennoù", "openstreetmap", "tutorial"]
draft: false
---
{{< block_color blue >}}
Graet em eus ur staj e Ofis Publik ar Brezhoneg evit dizoleiñ un tamm muioc'h penaos eo bed ar Brezhoneg. Komzet em eus gant tud simpa kenañ eno ha fardet em eus kartennoù Breizh !
Setu ur seurt tuto hag a zispleg tamm-ha-tamm penaos em eus graet.
{{< /block_color >}}
## Kendegouezh
Lakaomp e fell deoc'h diskouez un dra e-keñver Breizh.
Da skouer keitad priz ar metrad karrez dre gumun e Breizh a-bezh.
Gallout a rafec'h dastum ar roadennoù ha sevel ur gartenn gant an dorn.
Met evel-just e vefe hir spontus.
Ha p'ho po c'hoant da adsevel ar gartenn ar bloaz war-lerc'h e tleoc'h adober pep tra.
Un doare all d'ober eo implijout ur meziant a c'hell bezañ implijet evit al labour a seurt-se.
Da skouer gant [QGIS](https://qgis.org) a zo ur meziant evit ober kartennoù. Ha [setu un tutorial](https://www.tuto-carto.fr/qgis-creer-une-carte/).
Met kavout a ran gwelloc'h un doare all c'hoazh : implijout `R` a zo ur yezh stlennegel evit ober stadegoù ha dielfennadurioù.
Peogwir eo ur yezh stlennegel eo kalz aesoc'h aotomatekaat/emgefrekaat traoù.
Neuze er pennad-mañ emaon o vont da ginnig penaos ober kartennoù gant `R`.
## Petra hon eus ezhomm ?
### Ar meziantoù
Ezhomm hon eus `R`, ha netra ken.
R a zo ur yezh stlennegel evel em eus lavaret.
Ar pezh aesañ eo pellgargañ ha staliañ [`RStudio`](https://www.rstudio.com/products/rstudio/#rstudio-desktop) a zo un endro evit programmiñ fardet a-ratozh evit ar yezh R.
A-drugarez d'ar meziant-se e c'heller skrivañ urzhioù, gwelout disorc'hoù ha me oar me.
Neuze kit da bellgargañ `RStudio` ha staliit anezhañ.
Setu penaos eo aozet an etrefas :
{{< figure src="./rstudio.png" caption="Etrefas `RStudio`." class="center img-90" alt="Etrefas RStudio" >}}
Un displegadennig :
1. lec'h ma vo skrivet ar skript
2. lec'h ma c'heller skrivañ urzhioù ivez, da skouer evit amprouiñ traoù a-raok skrivañ anezho er skirpt
3. lec'h ma vo kavet ar variennoù (gwelet e vo diwezhatoc'h)
4. lec'h ma vo diskouezet an disorc'hoù, ar gartenn da skouer !
### Ar roadennoù
Ezhomm hon eus 2 dra e-keñver ar roadennoù :
1. ar roadennoù douaroniel : evit tresañ ar gartenn
2. ar roadennoù da ziskouezañ. En hor skouer : priz ar metrad karrez e Breizh
Evit ar roadennoù douaroniel emaomp o vont da implijout roadennoù [OpenStreetMap](https://openstreetmap.org) (OSM).
Chañs hon eus rak ul levraoueg, da lavaret eo ur seurt lugant (*plug-in*), a zo evit adtapout roadennoù OSM dre `R` ! 🎉
Hag evit ar roadennoù da ziskouezañ eo simpl a-walc'h : kavet em eus roadennoù evit Frañs a-bezh war [data.gouv.fr](https://data.gouv.fr).
Setu ul liamm evit pellgargañ anezho : [*Prix moyen au m² des ventes de maisons et d'appartements par commune en 2019*](https://www.data.gouv.fr/fr/datasets/prix-moyen-au-m2-des-ventes-de-maisons-et-dappartements-par-commune-en-2019/).
Mat eo ! Bremañ p'hon eus pep tra e c'hellomp kregiñ e-barzh ! 🤸‍
## Krogomp !
### Staliañ al levraouegoù
Da gentañ ma digarezit rak livet em eus gevier.
Ret eo deomp staliañ traoù all, met e-barzh R ar wech-mañ (pe `RStudio` evit bezañ resis).
Ezhomm hor bo al levraouegoù-se :
- `ggplot2` : evit tresañ grafikoù, kartennoù
- `osmdata` : evit pellgargañ roadennoù OSM
- `dplyr` : al levraoueg-mañ a sikouro skrivañ urzhioù poellekoc'h ha buanoc'h
- `sf` : evit dazverañ roadennoù OSM
Neuze lañsit `RStudio`.
Krouit ur restr nevez (da skouer e saozneg : *File > New File > R script*) ha saveteit anezhi en un teuliad bennak.
Da skouer en teuliad e lec'h m'ho peus pellgarget ar roadennoù.
Bremañ e-barzh ar c'hoñsol (al letrin) skrivit :
{{< highlight r >}}
install.packages(c("ggplot2", "osmdata", "dplyr", "sf"))
{{< /highlight >}}
Goude ur pennad amzer e vo al levraouegoù-se staliet war ho urzhiataer.
### Aozañ ar skript
Bremañ aozomp hor skript evit gouzout petra ober dre vras.
Ret eo deoc'h gouzout un tamm petra eo ereadurezh `R`.
Ma fell deoc'h e kinnigan deoc'h mont da welout an [tuto-se](https://juba.github.io/tidyverse/index.html) (e galleg).
N'eo ket ur redi newazh.
Rankout a ra deoc'h gouzout petra eo an evezhiadennoù memestra.
Int a zo un doare da skrivañ traoù evidoc'h hepken, ne servijont da netra nemet aozañ ar skript ha reiñ da gompren petra a dalv urzhioù luziet da skouer.
E `R` e vezont skrivet gant an arouezenn `#`. Ur skouer :
{{< highlight r >}}
# Setu un evezhiadenn. Al linenn dindan a jed ar gwezhiadur 2+2
2+2
{{< /highlight >}}
Neuze implijet e vo an evezhiadennoù evit aozañ ar skript dre vras :
{{< highlight r >}}
##########
# 1. Kargañ al levraouegoù
##########
##########
# 2. Dastum roadennoù OpenStreetMap
##########
##########
# 3. Dastum roadennoù ar prizioù
##########
##########
# 4. Eren (joindre, merge) ar roadennoù
##########
##########
# 5. Tresañ an disoc'h !
##########
{{< /highlight >}}
Gwelout a rit ez eus 4 lodenn. Krogomp gant an hini gentañ !
### 1. Kargañ al levraouegoù
Al lodenn-mañ a zo an hini simplañ.
Staliet hon eus al levraouegoù, bremañ eo poent o c'hargañ gant an urzh : `library()`.
Er mod-se e vez graet :
{{< highlight r >}}
##########
# 1. Kargañ al levraouegoù
##########
library("ggplot2")
library("osmdata")
library("dplyr")
# Evit lavarout da R e peseurt teuliad emaomp o labourat
setwd("~/Documents/Brezhoneg/stajou/2021-03_ofis/kartenn/")
{{< /highlight >}}
Gallout a rit diuzañ an teir linenn a grog gant `library` ha klikañ war "Run" en nec'h, a-zehou, pe pouezañ war `Ctrl + stokell Kas`.
An urzhioù a vo kaset ha karget e vo al levraouegoù !
Ouzhpennet em eus un urzh all evit lavarout da `R` e peseurt teuliad emaomp o labourat (gant `setwd()` a dalv *set working directory* e saozneg).
Kendalc'homp gant un dra un tamm diaesoc'h : kargañ roadennoù OpenStreetMap.
## 2. Dastum roadennoù OpenStreetMap
### a. Pellgargañ
Al levraoueg `osmdata` a bourchas un urzh anvet `opq()` evit kas ur reked, ur goulenn da OpenStreetMap.
{{< highlight r >}}
##########
# 2. Dastum roadennoù OpenStreetMap
##########
roadennou_osm <- opq(bbox=c(-5.5584,46.7773,-0.7409,48.9728),
timeout = 180) %>%
add_osm_feature(key = 'boundary', value = 'administrative') %>%
add_osm_feature(key = 'admin_level', value = '8') %>%
osmdata_sf()
{{< /highlight >}}
Ar pezh pouezusañ en urzh-mañ eo an arventenn `bbox` a sinifi *bounding box* (e brezhoneg : "*boest hazh*").
Lakaet e vo enni daveennoù douaroniel Breizh, skrivet er mod-se : `c(-5.5584,46.7773,-0.7409,48.9728)`.
`c()` a zo un urzh evit bodañ talvoudoù en ur sturiadell.
Lakaat a ran ivez `timeout = 180` rak pounner eo ar roadennoù da bellgargañ.
Dre ziouer ma n'eo ket echu ar bellgargañ dindan 25 eilenn ez eus ur fazi *timeout*.
Ret eo hiraat an talvoud. Gallout a rit klask gant 180 eilenn da gentañ hag uhelaat ma n'eo ket trawalc'h.
Goude e implijan div wech ar memes urzh : `add_osm_feature()`.
Resisaet eo ar reked evit kaout ar c'humunioù ([live melestradurel](https://wiki.openstreetmap.org/wiki/FR:Key:admin_level) 8 a zo ar c'humunioù).
Erfin e ouzhpennan `osm_data_sf()` evit kaout ar roadennoù en ur furmad a zo aes da zazverañ.
### b. Mirout ar roadennoù talvoudus hepken
N'eo ket echu c'hoazh !
Kalz a ditouroù a zo didalvoud neuze eo gwelloc'h silat un tamm.
{{< highlight r >}}
kumuniou <- roadennou_osm$osm_multipolygons %>%
mutate(departamant = substr(ref.INSEE, 1,2)) %>%
filter(departamant %in% c("22", "29", "35", "44", "56"))
{{< /highlight >}}
El lodenn-mañ e implijañ ereadurezh `dplyr` a zo simpl a-walc'h evit kompren petra zo graet amañ.
Da gentañ e krouan ur varienn nevez, `kumuniou`. Lakaet vo enni ar pezh a zo jedet a-zehou.
Meur a roadenn zo e `roadennou_osm`.
Dibab a ran ar pezh anvet `osm_multipolygons` hepken peogwir ez eus ennañ stumm, anvioù ar c'humunioù ha titouroù all.
An eil linenn a grog gant `mutate()`.
Ar fonksion-se (an urzh-se) a laka ur golonenn nevez en daolenn `osm_multipolygons`.
Kemer a ran ar varienn `ref.INSEE`, arloañ a ran warni ar fonksion `substr()` evit mirout an daou niverenn gentañ er c'hod INSEE.
An disoc'h eo niverenn an departamant ha lakaet eo er golonenn nevez.
El linenn ziwezhañ e silan an disoc'hoù evit mirout departamantoù Breizh hepken.
C'hoant ho peus sellout ouzh ar pezh hon eus evit poent ?
Aes eo !
{{< highlight r >}}
ggplot(kumuniou, aes(fill=departamant))+
geom_sf()
{{< /highlight >}}
Implijout a ran `ggplot()` evit krouiñ ur grafik nevez.
Reiñ a ran dezhi ar roadennoù (`kumuniou`).
Goude e lavaran dezhi lakaat ul liv disheñvel evit pep departamant (`aes(fill=departamant)`).
Skrivet eo war-lerc'h an urzh a zo gouest da sevel ur gartenn diwar ar roadennoù (`geom_sf()`).
Ha setu an disoc'h !
{{< figure src="./kartenn_breizh_departamant.png" caption="An disoc'h evit poent : kartenn Breizh gant an holl gumunioù livet dre zepartamant." class="center img-90" alt="An disoc'h evit poent : kartenn Breizh gant an holl gumunioù livet dre zepartamant.">}}
Brav ! 👏
## 3. Dastum roadennoù ar prizioù
Livañ ar c'humunioù dre zepartamant a zo mat met n'eo ket ar pezh a oa raktreset.
Evit livañ ar c'humunioù dre briz ar metrad karrez eo ret kargañ ar roadennoù-mañ.
Goude bezañ pellgarget ar restr e c'hellit skrivañ :
{{< highlight r >}}
##########
# 3. Dastum roadennoù ar prizioù
##########
priziou <- read.csv("./dvf-communes-2019.csv", sep=";") %>%
as_tibble %>%
filter(INSEE_DEP %in% c("22", "29", "35", "44", "56"))
{{< /highlight >}}
Amañ `read.csv()` a zo un urzh evit kargañ un teul CSV (*Comma Separated Values*).
Talvoudoù an teul am eus dibabet a zo dispartiet gant an arouezenn `;` setu perak em eus skrivet `sep=";"`.
Amdreiñ a ran ar roadennoù e furmad `dplyr` a-drugarez da `as_tibble` evit bezañ gouest da zazverañ aes.
Hag erfin memes tra eget a-raok : silat a ran ar roadennoù evit mirout kumunioù e departamantoù Breizh hepken.
Prest omp bremañ evit eren/liammañ an holl ditouroù !
## 4. Eren ar roadennoù
Emaomp o vont da implijout an titour a zo boutin d'an daou daolenn : an niverenn INSEE.
Setu penaos ober :
{{< highlight r >}}
##########
# 4. Eren (joindre, merge) ar roadennoù
##########
data <- merge(kumuniou,
priziou,
by.x="ref.INSEE",
by.y="INSEE_COM", all.x=TRUE)
{{< /highlight >}}
Ar fonksion `merge()` a gemer ar roadennoù `kumuniou` hag ar re `priziou`.
Lavarout a reomp implijout an niverennoù INSEE evit keñveriañ ha liammañ an titouroù.
Da lavaret eo ar golonenn `ref.INSEE` en daolenn gentañ hag ar golonenn `INSEE_COM` en eil daolenn.
Bremañ ez eus kalz a ditouroù e-barzh ar varienn `data`.
Un tammig re evit lavarout ar wirionez.
Neuze e simplaan/reduan anezhi er mod-se :
{{< highlight r >}}
data_simpl <- data %>%
select(ref.INSEE, name, name.br, geometry,
POPULATION, Nb_Ventes, PrixMoyen_M2) %>%
st_simplify(preserveTopology = TRUE, dTolerance = 0.001)
{{< /highlight >}}
An urzh-mañ a lavar :
1. kemer ar varienn `data`
2. dibab meur a golonenn (`ref.INSEE`, `name`, `name.br` hag all hag all)
3. implij ar fonksion `st_simplify()` evit reduiñ resisted stumm ar c'humunioù rak pounner a-walc'h eo
4. laka an disoc'h en ur varienn nevez anvet `data_simpl`
Dastumet hag aozet hon eus kement tra hon eus ezhomm evit tresañ an disoc'h ! 👌
## 5. Tresañ an disoc'h
Evit ar bazenn ziwezhañ emaomp o vont da implijout `ggplot()` evel ar gartenn gentañ.
Setu ar pezh am eus skrivet :
{{< highlight r >}}
##########
# 5. Tresañ an disoc'h !
##########
ggplot(data_simpl, aes(fill=PrixMoyen_M2))+
geom_sf()+
scale_fill_gradientn(
colors = c("#ffdbdb", "#ea0000"),
space = "Lab",
na.value = "grey75",
guide = "colourbar",
aesthetics = "fill",
name="Priz"
)+
ggtitle("Keitad priz ar metrad karrez dre gumun e Breizh")+
theme_void()+
theme(plot.title = element_text(face = "bold", hjust=0.5, size=15))
{{< /highlight >}}
Memes tra eget a-raok : reiñ a ran da `ggplot()` ar roadennoù, da lavaret eo ar varienn `data_simpl`.
Goude e lec'h an departamantoù e lavaran dezhi implijout ar golonenn `PrixMoyen_M2` a oa en daolenn `priziou` ha neuze bremañ en daolenn `data_simpl`.
Lavarout a ran ivez implijout `geom_sf()` evit tresañ.
An div linenn-se a zo trawalc'h evit tresañ.
Ouzhpennañ a ran linennoù zo memestra evit bravaat an disoc'h.
Roet em eus an urzh `scale_fill_gradientn()` a servij termenañ al livioù hon eus c'hoant.
Lakaet em eus ur seurt ruz sklaer-mat hag unan a zo teñvaloc'h.
N'eo ket gwal bouezus ar peurrest.
Met n'eo ket echu c'hoazh : skrivet em eus un titl a-drugarez d'an urzh `ggtitle()`.
Evit tennañ ar gael, ar glouet eus ar grafik e ouzhpennan `theme_void()`.
Hag evit echuiñ e termenan stil an titl.
Setu hon disoc'h !
{{< figure src="./kartenn_breizh_priziou_dre_gumun.png" caption="Kartenn Breizh gant keitad priz ar metrad karrez dre gumun." class="center img-90" alt="Kartenn Breizh gant keitad priz ar metrad karrez dre gumun" >}}
Setu ar skript klok gant kalz a evezhiadennoù : [fardan_ur_gartenn.R](./fardan_ur_gartenn.R).
## Klozadur
Setu barrek oc'h da sevel kartennoù gant `R` hag OpenStreetMap bremañ.
Gourc'hemennoù ! 👏
Lavarout a ran en-dro : kinniget em eus **un doare** d'ober.
Doareoù all a zo.
Ha doareoù aesoc'h ivez (gant QGIS da skouer).
Met ar pezh a zo dispar gant `R` a zo fed e c'hellomp cheñch aes-tre an titouroù treset.
Da skouer e c'hellit lakaat `POPULATION` e plas `PrixMoyen_M2` en urzh `ggplot()` ha diskouezet e vo ar boblañs.
Memes tra gant `Nb_Ventes`.
Ouzhpenn se m'ho po c'hoant da dresañ un dra disheñvel-mik diouzh prizioù ar metrad karrez ne vo ket ur gudenn gwall vras.
An hanter eus al labour a vo graet dija : gallout a reoc'h eilañ/pegañ al lodenn gentañ diwar-benn OpenStreetMap.
Gant `R` e c'heller aotomatekaat traoù zo.
Lakaomp eo bet pellgarget roadennoù all gant prizioù ar metrad karrez e Breizh bep bloaz abaoe 2000.
Kentoc'h eget skrivañ an urzhioù gant an dorn ha cheñch un draig evit bep bloaz e c'hellfemp programmiñ ur rodell a rafe ar memes tra evit bep bloaz ha kaout an disoc'h en un teul PDF nemetken da skouer.
---
Emichañs ho poa bet plijadur o heuliañ an tuto-mañ.
Ma n'eo ket sklaer ul lodenn skrivit din mar plij !
Spi am eus n'ez eus ket re a fazioù e brezhoneg ivez.
Gallout a rit mont e darempred ganin dre an evezhiadennoù dindan pe dre bostel m'ho peus c'hoant : eorn ατ goe.land (lakait "@" e lec'h "ατ").
👋