class: center, middle, inverse, title-slide # Geografická data v R ### Jan Caha ### Interpretace geodat
(10. 4. 2019) --- # Vztah R k prostorovým datům a analýzám - primární účel - statistická analýza geodat - první pokusy už v roce 2000 <sup>1</sup> - v roce 2003 už existovalo minimálně 21 balíčků zaměřených na prostorová data <sup>2</sup> - formální definice prostorových objektů v R až s balíčkem `sp` <sup>3</sup>, který se stal de facto standardem .footnote[ [1] Bivand, R. S. (2000). "Using the R statistical data analysis language on GRASS 5.0 GIS database files". In: _Computers and Geosciences_ 26.9-10, pp. 1043-1052. DOI: [10.1016/S0098-3004(00)00057-1](https://doi.org/10.1016%2FS0098-3004%2800%2900057-1). [2] Bivand, R. S. (2003). "Approaches to Classes for Spatial Data in R". In: _Proceedings of the 3rd International Workshop on Distributed Statistical Computing (DSC 2003), March 20-22, Vienna, Austria_. Ed. by K. Hornik, F. Leisch and A. Zeileis. Vienna, Austria. [3] Pebesma, E. and R. Bivand (2005). "Classes and methods for spatial data in R". In: _R-NEWS_ 5.2, pp. 9-13. ] --- # Knihy - Geocomputation with R <sup>1</sup> - Spatial Microsimulation with R <sup>2</sup> .footnote[ [1] Robin Lovelace Jakub Nowosad, J. M. (2018). _Geocomputation with R_. [2] Lovelace, R. and M. Dumont (2016). _Spatial Microsimulation with R_. Boca Raton: CRC Press. ISBN: 978-1-4987-1156-2. ] --- # Nejduležitější balíky - `sp` <sup>1</sup>, modernější verze `sf` <sup>2</sup> - `raster` <sup>3</sup>, ve vývoji je balík `stars` <sup>4</sup> - vizualizace `tmap` <sup>5</sup> a `ggplot2` - velké množství balíků (přes 220) v CRAN Views [Spatial](https://cran.r-project.org/web/views/Spatial.html) a [SpatioTemporal](https://cran.r-project.org/web/views/SpatioTemporal.html) ale i jinde - mnoho dalších, které v těchto Views zapsané nejsou (viz článek [web](https://jancaha.github.io/GIS-Ostrava-2018/index.html)) .footnote[ [1] Pebesma, E. and R. Bivand (2005). "Classes and methods for spatial data in R". In: _R-NEWS_ 5.2, pp. 9-13. [2] Pebesma, E. (2017). _sf: Simple Features for R_. R package version 0.5-5. URL: [https://CRAN.R-project.org/package=sf](https://CRAN.R-project.org/package=sf). [3] Hijmans, R. J. (2017). _raster: Geographic Data Analysis and Modeling_. R package version 2.6-7. URL: [https://CRAN.R-project.org/package=raster](https://CRAN.R-project.org/package=raster). [4] Pebesma, E. (2018). _stars: Scalable, Spatiotemporal Tidy Arrays for R_. R package version 0.1-1. URL: [https://github.com/r-spatial/stars/](https://github.com/r-spatial/stars/). [5] Tennekes, M. (2018). "tmap: Thematic Maps in R". In: _Journal of Statistical Software_ 84.6, pp. 1-39. DOI: [10.18637/jss.v084.i06](https://doi.org/10.18637%2Fjss.v084.i06). ] --- class: inverse, center, middle # Vektorová data --- # Balík `sf` - novinka od roku 2016 - narozdíl od původního balíku `sp` vychází funkčně z balíku `dplyr` s nímž je kompatabilní -> možnost jednoduše pracovat s daty, např. `group_by(), summarise()` platí i pro geometrie -> značné zjednodušení oproti `sp` - základní závislosti na knihovnách: *GDAL*, *GEOS*, *PROJ.4*, *liblwgeom*, *udunits2* (knivny v C) - závislosti na řadě R balíků - značná část funkcionality používá pojemnování `st_*` - nápovědy a viněty balíku --- # Kompatabilita `sf` s `sp` - na `sp` zavisí relativně hodně balíků - prostorové operace, statistiky a jiné - přechod na `sf` bude trvat a některé balíky patrně nikdy přepsané nebudou (jsou starší a nepřiliš aktualizované) - funkce `as_Spatial()` zajistí konverzi z formátu balíku `sf` do `sp` - inverzně funguje funkce `st_as_sf()` - doporučení: zpracovávat data jako `sf` a konvertovat až při potřebě speciálních funkcí - obdobně fungují `raster` a `stars`, byť tam je vztah komplikovanější o to, že `stars` je stále ještě výrazně ve vývojové fázi a má jiné zacílení --- ## Praktický příklad s prostorovými daty - s použitím volně dostupných dat vytvořte mapu procentuálního zisku vybrané politické strany ve volbách do PS 2017 v okresech ČR - podklady dostupné z [GitHubu](https://github.com/JanCaha/Vyuka-R-VSB) - data předchystaná - tři `.csv` soubory o volbách, `.shp` soubor okresů a jeden `.tif` pro další ukázku, vše ve složce `data/raw/` - všechno jsou volně dostupná data --- # Data o volbách ```r library(tidyverse) data_okresy <- read_csv(here::here("data", "raw", "data_okresy.csv")) data_strany <- read_csv(here::here("data", "raw", "data_strany.csv")) ciselnik_stran <- read_csv(here::here("data", "raw", "ciselnik_strany.csv")) ``` --- # Selekce zájmové strany - podle číselníku stran určíme ID zájmové strany a tu pak vyfiltrujeme ```r data <- data_strany %>% filter(id_strany == 7) ``` --- # Načtení prostorových dat ```r library(sf) okresy <- st_read(here::here("data", "raw", "OKRESY_P.shp"), stringsAsFactors = FALSE) ``` ``` ## Reading layer `OKRESY_P' from data source `D:\OneDrive\Presentations\data\raw\OKRESY_P.shp' using driver `ESRI Shapefile' ## Simple feature collection with 77 features and 5 fields ## geometry type: MULTIPOLYGON ## dimension: XY ## bbox: xmin: -904585.3 ymin: -1227296 xmax: -431724.3 ymax: -935236.6 ## epsg (SRID): 5514 ## proj4string: +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ``` --- # Propojení tabulky s prostorový daty ```r okresy <- okresy %>% left_join(data, by = c("LAU1_KOD" = "nuts_kod")) ``` ```r View(okresy) ``` --- # Vizualizace ```r library(tmap) tm_shape(okresy) + tm_polygons(col = "hlasu_procenta", n = 5 , style = "quantile", palette = "OrRd", title = "Procenta hlasů \n (%)") + tm_scale_bar(position = c("left", "bottom"), breaks = c(0, 50, 100), size = 0.75) + tm_layout(frame = FALSE, legend.title.size = 1.3, legend.text.size = 0.8, legend.format = list(text.separator = "-"), legend.position = c(0.85, 0.6), main.title = "Získaná procenta hlasů pro stranu:\n STAROSTOVÉ A NEZÁVISLÍ", main.title.position = "center") ``` --- # Vizualizace <img src="prezentace_5_files/figure-html/unnamed-chunk-17-1.png" style="display: block; margin: auto;" /> --- # Interaktivní vizualizace - prosté přepnutí pomocí metody `tmap_mode` před odesláním mapy na výstup ```r tmap_mode("view") tmap_mode("plot") ``` --- # Interaktivní vizualizace - příklad ```r tmap_mode("view") tm_shape(okresy) + tm_polygons(col = "hlasu_procenta", n = 5 , style = "quantile", palette = "OrRd", title = "Procenta hlasů \n (%)") + tm_scale_bar(position = c("left", "bottom"), breaks = c(0, 50, 100), size = 0.75) + tm_layout(frame = FALSE, legend.title.size = 1.3, legend.text.size = 0.8, legend.format = list(text.separator = "-"), legend.position = c(0.85, 0.6), main.title = "Získaná procenta hlasů pro stranu: \n STAROSTOVÉ A NEZÁVISLÍ", main.title.position = "center") ``` --- class: inverse, center, middle # Rastrová data --- # Rastrová data - knihovna `raster` - široká funkcinalita (viz help) - s rastrem se pracuje primárně jako s maticí, nebo několika maticemi -> snadné matematické operace --- # Ukázka načtení ```r library(raster) dsm <- raster(here::here("data", "raw", "surface.tif")) ``` --- # Základní informace ```r dsm ``` ``` ## class : RasterLayer ## dimensions : 3000, 3000, 9e+06 (nrow, ncol, ncell) ## resolution : 1, 1 (x, y) ## extent : 458000, 461000, 301000, 304000 (xmin, xmax, ymin, ymax) ## coord. ref. : +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs ## data source : D:/OneDrive/Presentations/data/raw/surface.tif ## names : surface ``` ```r crs(dsm) ``` ``` ## CRS arguments: ## +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 ## +y_0=-100000 +ellps=airy ## +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m ## +no_defs ``` --- # Vizualizace rastru ```r library(tmap) library(viridis) tm_shape(dsm) + tm_raster(palette = viridis(7)) + tm_layout(legend.outside = TRUE, legend.format = list(text.separator = "-")) ``` --- # Vizualizace rastru <img src="prezentace_5_files/figure-html/unnamed-chunk-23-1.png" style="display: block; margin: auto;" /> --- # Výpočty charakteristik DSM ```r slope <- terrain(dsm, opt = "slope") aspect <- terrain(dsm, opt = "aspect") dsm_hillshade <- hillShade(slope, aspect, direction = 315, normalize = TRUE) ``` --- # Vizualizace - komplexnější ```r vis <- tm_shape(dsm) + tm_raster(palette = viridis(7)) + tm_shape(dsm_hillshade) + tm_raster(palette = "Greys", alpha = 0.3, legend.show = FALSE) + tm_layout(legend.outside = TRUE, legend.format = list(text.separator = "-")) tmap_save(vis, here::here("data", "vizualizace_rastru.png")) ``` --- # Vizualizace - komplexnější <img src="prezentace_5_files/figure-html/unnamed-chunk-26-1.png" style="display: block; margin: auto;" /> --- class: inverse, center, middle # Doplňkové balíky pro prostorová data --- # Balíky se zajímavými funkcemi - `rmapsharper` - topologické operace, včetně topologické generalizace (viněta) - `maptools` - nástroje na zpracování prostorových dat - `cartogram` - kartografická anamorfóza (funkce `cartogram_ncont`) - `cartography` - vizualizace, alternativa k `tmap` - `RColorBrewer` - barevné palety pro vizualizace - `leaflet` - interaktivní vizualizace skrze Javaskriptovou knihovnu - `spatial` - kriging a analýza bodových vzorů - `gstat` - časoprostorové statistické modelování --- # API na datové sady - balíky, které poskytují rozhraní na datové sady - např. `UScensus2010` - `getSpatialData` na [GitHubu](https://github.com/16EAGLE/getSpatialData), rozhraní k datům Sentinel, Landsat a Modis - pro česká data např. `RCzechia` - v principu data z ArcCR 500 a nově funkce na geokódování - nebo `CzechData` (není na CRAN, je pouze na [GitHubu](https://github.com/JanCaha/CzechData)), instalace skrze package `remotes` - obsahuje základní číselníky, přístupy k datům ČÚZK (Data50, katastrální data a RÚIAN) a ČSÚ (data o populaci, SLDB2011) --- class: inverse, center, middle # Děkuji za pozornost!