class: center, middle, inverse, title-slide # Geocomputation with R: ## Analiza danych przestrzennych w otwartym oprogramowaniu ### Jakub Nowosad
https://nowosad.github.io
### GISday, 2018-11-14, Poznań --- # Geocomputation <!-- grass gis + arc + r --> .pull-left[ - Automatyzacja często powtarzalnych czynności - Przejrzystość i powtarzalność - Inspiracja do tworzenia oprogramowania poprzez dostarczanie narzędzi do modyfikowania istniejących i wdrażania nowych funkcji - Zachęcenie do dzielenia kodu i wyników oraz współpracy - Pomoc w rozwijaniu umiejętności programowania, na które istnieje duże zapotrzebowanie <table> <thead> <tr> <th style="text-align:left;"> Cecha </th> <th style="text-align:left;"> GIS (GUI) </th> <th style="text-align:left;"> R (CLI) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Dyscyplina </td> <td style="text-align:left;"> Geografia </td> <td style="text-align:left;"> Statystyka, Informatyka </td> </tr> <tr> <td style="text-align:left;"> Sposób interakcji </td> <td style="text-align:left;"> Graficzny interfejs użytkownika </td> <td style="text-align:left;"> Wiersz poleceń </td> </tr> <tr> <td style="text-align:left;"> Odtwarzalność </td> <td style="text-align:left;"> Minimalna </td> <td style="text-align:left;"> Maksymalna </td> </tr> </tbody> </table> ] <!-- how and why --> <!-- packages and posibilities --> <!-- Facilitates the automation of repetitive tasks. --> <!-- Enables transparency and reproducibility, the backbone of good scientific practice and data science. --> <!-- Encourages software development by providing tools to modify existing functions and implement new ones. --> <!-- Helps develop future-proof programming skills which are in high demand in many disciplines and industries. --> <!-- Is user-friendly and fast, allowing an efficient workflow --> <!-- This brings us to the ‘open source approach’, which has three main components: --> <!-- A command-line interface (CLI), encouraging scripts recording geographic work to be shared and reproduced. --> <!-- Open source software, which can be inspected and potentially improved by anyone in the world. --> <!-- An active developer community, which collaborates and self-organizes to build complimentary and modular tools. --> .pull-right[ <img src="figs/qgis.png" width="90%" style="display: block; margin: auto;" /><img src="figs/r.png" width="90%" style="display: block; margin: auto;" /> ] --- # Gecomputation with R Ważna zaletą R (czy też np. Pythona) jest bycie językiem interpretowanym. Jest to szczególnie istotne w analizie danych (nie tylko) przestrzennych, bo pozwala na interaktywne programowanie - kod wpisany w konsoli jest natychmiast wykonywany a wynik jest wyświetlany (nie ma konieczności czekana na kompilację kodu). Pakiety R: - **sf**, **raster** - klasy obiektów przestrzennych - **dplyr**, **rmapshaper** - przetwarzanie tabel atrybutów/geometrii - **rnaturalearth**, **osmdata**, **getlandsat** - pobieranie danych przestrzennych - **rgrass7**, **RQGIS**, **RSAGA**, **link2GI** - łączenie z oprogramowaniem GIS - **gstat**, **mlr**, **CAST** - modelowanie danych przestrzennych - **rasterVis**, **tmap**, **ggplot** - wizualizacje statyczne - **leaflet**, **mapview**, **mapdeck** - wizualizacje interaktywne - wiele innych... Więcej na https://cran.r-project.org/web/views/Spatial.html. --- # Geocomputation with R - książka .lc[ <img src="figs/bc.png" width="350" style="display: block; margin: auto;" /> ] .rc[ > Lovelace R., Nowosad J., Muenchow J. 2019, **Geocomputation with R**. CRC Press - Wersja online, dostępna dla wszystkich, znajduje się pod adresem https://geocompr.robinlovelace.net/ <!-- każdy może dodać/zmienić/zaproponować coś--> - Papierowa wersja książki zostanie opublikowana w wydawnictwie CRC Press na początku 2019 roku (http://bit.ly/geocomp_with_r) <br> ] <!-- intro to the book --> <!-- links--> <!-- more about open-source! --> --- class: inverse, center, middle # Podstawy --- # R <!-- - R + RStudio --> <!-- - Simple workflow - gif? --> <img src="figs/geocompr.gif" width="90%" style="display: block; margin: auto;" /> --- # Dane wektorowe .pull-left[ <img src="figs/sf-classes.png" height="550" style="display: block; margin: auto;" /> ] .pull-right[ ```r library(sf) head(seine) ``` ``` ## Simple feature collection with 3 features and 1 field ## geometry type: MULTILINESTRING ## dimension: XY ## bbox: xmin: 518344.7 ymin: 6660431 xmax: 879955.3 ymax: 6938864 ## epsg (SRID): 2154 ## proj4string: +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ## name geometry ## 1 Marne MULTILINESTRING ((879955.3 ... ## 2 Seine MULTILINESTRING ((828893.6 ... ## 3 Yonne MULTILINESTRING ((773482.1 ... ``` <!-- - Model wektorowy danych oparty jest na punktach położonych wewnątrz danego układu współrzędnych --> - Pakiet **sf** zapewnia system klas dla danych wektorowych w R - Dodatkowo ten pakiet wykorzystując biblioteki PROJ, GDAL oraz GEOS pozwala na tranformacje pomiędzy układami przestrzennych, wczytywanie i zapis wielu formatów danych oraz wykonywanie operacji geometryczych <!-- - Większość funkcji tego pakietu posiada intuicyjne nazwy zaczynające się of prefiksu `st_` --> ] --- # Dane rastrowe .lc[ - Pakiet **raster** zapewnia system klas dla danych rastrowych w R, składający się z prostych obiektów `RasterLayer` oraz wielowartwowych `RasterStack` oraz `RasterBrick` - Operacje na małych rastrach są wykonywane w pamięci RAM, a przetwarzanie większych rastrów odbywa się poprzez ich podzielenie na kawałki ] .rc[ <img src="figs/raster-intro-plot-1.png" height="200" style="display: block; margin: auto;" /> ```r library(raster) elev ``` ``` ## class : RasterLayer ## dimensions : 6, 6, 36 (nrow, ncol, ncell) ## resolution : 0.5, 0.5 (x, y) ## extent : -1.5, 1.5, -1.5, 1.5 (xmin, xmax, ymin, ymax) ## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 ## data source : in memory ## names : layer ## values : 1, 36 (min, max) ``` ] --- # Tworzenie map - Rozdział 8 - *Making maps with R* - https://geocompr.robinlovelace.net/adv-map.html - Rozpoczyna się on od wprowadzenia w gramatykę tworzenia map z pakietem **tmap** <img src="figs/tmshape-1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - Obejmuje to, między innymi, dodawanie kolejnych wartw na mapie, zmianę stylu czy umieszczenie dodatkowych elementów (skala, strzałka północy) <img src="figs/break-styles-1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - Dodatkowo opisane jest tworzenie tzw. "inset maps"... <img src="figs/insetmap2-1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - ... "facet maps" ... <img src="figs/urban-facet-1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - ... "cartogram maps" ... <img src="figs/cartogram1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - ... czy animacji: <img src="figs/usa_anim.gif" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map .pull-left[
] .pull-right[ - Ten rozdział zawiera także informacje o tym jak tworzyć zarówno mapy interaktywne, jak i też bardziej złożone aplikacje mapowe <img src="figs/mapdeck-mini.png" width="800" style="display: block; margin: auto;" /> ] --- # Operacje geometryczne - Analizy przestrzenne często wymagają modyfikacji geometrii danych - Dla danych wektorowych obejmuje to, między innymi: - uproszczanie geometrii linii czy poligonów - tworzenie buforów - przycinanie danych przestrzennych - łączenie danych przestrzennych - zmiana typu danych przestrzennych <img src="figs/us-simp-1.png" width="1536" style="display: block; margin: auto;" /> --- # Operacje geometryczne - Dla danych wektorowych obejmuje to, między innymi: - określanie centroidów <img src="figs/centr-1.png" height="500" style="display: block; margin: auto;" /> --- # Operacje geometryczne - Dla danych wektorowych obejmuje to, między innymi: - transformacje afiniczne <img src="figs/affine-trans-1.png" height="500" style="display: block; margin: auto;" /> --- # Operacje geometryczne .lc[ - Dla danych rastrowych obejmuje to, między innymi: - zmianę zasięgu danych przestrzennych - modyfikację punktu początkowego rastra - agregację i dysagregację - przepróbkowanie ] .rc[ <img src="figs/aggregate-example-1.png" height="500" style="display: block; margin: auto;" /> ] --- # Operacje geometryczne - Operacja geometryczne mogą też obejmować interakcje pomiędzy wektorami i rastrami, poprzez np.: - przycinanie czy maksowanie rastrów z użyciem danych wektorowych - wydobywanie wartości z rastra na podstawie położenia danych wektorowych - konwersję z rastra na wektor oraz z wektora na raster <img src="figs/cropmask-1.png" width="2560" style="display: block; margin: auto;" /> --- # Reprojekcje - Integralną częścią danych przestrzennych jest posiadanie układu współrzędnych - Rozdział 6 - *Reprojecting geographic data* - https://geocompr.robinlovelace.net/reproj-geo-data.html - skupia się na tej tematyce wskazując na to jakie problemy można napotkać używająć nieodpowiedni układ współrzędnych oraz w jaki sposób transformować dane z jednego układu współrzędnych na inny - Ten rozdział zawiera też porady kiedy konieczna jest zmiana układu współrzędnych oraz rekomendacje dotyczące wyboru odpowiedniego układu współrzędnych <!-- When deciding a custom CRS we recommend the following:27 --> <!-- A Lambert azimuthal equal-area (LAEA) projection for a custom local projection (set lon_0 and lat_0 to the center of the study area), which is an equal-area projection at all locations but distorts shapes beyond thousands of kilometres. --> <!-- Azimuthal equidistant (AEQD) projections for a specifically accurate straight-line distance between a point and the centre point of the local projection. --> <!-- Lambert conformal conic (LCC) projections for regions covering thousands of kilometres, with the cone set to keep distance and area properties reasonable between the secant lines. --> <!-- Stereographic (STERE) projections for polar regions, but taking care not to rely on area and distance calculations thousands of kilometres from the center. --> .pull-left[ <img src="figs/mollproj-1.png" width="1536" style="display: block; margin: auto;" /> ] .pull-right[ <img src="figs/laeaproj2-1.png" width="1536" style="display: block; margin: auto;" /> ] --- class: inverse, center, middle # Dodatkowe możliwości --- # Łącznik z oprogramowaniem GIS .pull-left[ <!-- Has a ‘shallow’ learning curve meaning geographic data can be explored and visualized without hours of learning a new language. --> <!-- Provides excellent support for ‘digitizing’ (creating new vector datasets), including trace, snap and topological tools.43 --> <!-- Enables georeferencing (matching raster images to existing maps) with ground control points and orthorectification. --> <!-- Supports stereoscopic mapping (e.g., LiDAR and structure from motion). --> <!-- Provides access to geodatabase management systems with object-oriented relational data models, topology and fast (spatial) querying. --> <!-- Another advantage of dedicated GISs is that they provide access to hundreds of ‘geoalgorithms’ --> R pozwala na łączenie z oprogramowaniem GIS: - **rgrass7** - GRASS GIS - ponad 500 funkcji - **RQGIS** - QGIS - ponad 1000 funkcji - **RSAGA** - SAGA GIS - ponad 600 funkcji - **RPyGeo** - ArcGIS Dodatkowo możliwe jest tworzenie połączeń z GDALem czy też PostGISem. <img src="index_files/figure-html/unnamed-chunk-25-1.png" style="display: block; margin: auto;" /> ] .pull-right[ ```r library(RQGIS) set_env() ``` ```r open_help("qgis:union") get_usage("qgis:union") ``` ``` ## ALGORITHM: Union ## INPUT <ParameterVector> ## INPUT2 <ParameterVector> ## OUTPUT <OutputVector> ``` ```r moj_wynik = run_qgis( "qgis:union", INPUT = poligon1, INPUT2 = poligon2, OUTPUT = "moj_wynik.shp", load_output = TRUE ) ``` ] --- # Przestrzenne uczenie maszynowe - Uczenie statystyczne zajmuje się wykorzystaniem modeli statystycznych do identyfikacji wzorców w danych oraz predykcje na ich podstawie - W podstawowy sposób te metody można podzielić na techniki nadzorowane i nienadzrowowane - W tym rozdziale, za pomocą przykładu przewydywania osuwisk, pokazane jest w jaki sposób tworzyć nadzorowane modele przestrzenne oraz w jaki takie modele poprawnie walidować .pull-left[ <img src="figs/lsl-map-1.png" width="70%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="figs/lsl-susc-1.png" width="70%" style="display: block; margin: auto;" /> ] --- # Tworzenie funkcji przestrzennych - Wprowadzenie do tego czym jest skrypt, algorytm i funkcja - Wyjaśnienie ich tworzenia na przykładzie znajdowania centroidu poligonu: 1. Podziel poligon na sąsiadujące trójkąty 2. Znajdź środek każdego trojkąta 3. Określ obszar każdego trójkąta 4. Wylicz średnią ważoną powierzchnią środków każdego trójkąta <img src="figs/polycent-1.png" width="1536" style="display: block; margin: auto;" /> --- class: inverse, center, middle # Przykłady zastosowania --- # Analiza transportu .pull-left[ <img src="figs/desire-1.png" height="550" style="display: block; margin: auto;" /> ] .pull-right[ - Umiejętności tworzenia analiz przestrzennych mogą (powinny?) służyć rozwiązywaniom prawdziwych problemów. - Książka zawiera trzy praktyczne przykłady - analizę transportu, geomarketingową oraz ekologiczną. - Analiza transportu: w jaki sposób zwiększyć udział ruchu rowerowego w mieście Bristol? - Taka analiza obejmuje: - Jednostki powierzchniowe - Linie celu - Trasy - Węzły - Sieci transportowe <!-- - Areal units: transport patterns can be understood with reference to zonal aggregates such as the main mode of travel (by car, bike or foot, for example) and average distance of trips made by people living in a particular zone, covered in section 12.3. --> <!-- - Desire lines: straight lines that represent ‘origin-destination’ data that records how many people travel (or could travel) between places (points or zones) in geographic space, the topic of section 12.4. --> <!-- - Routes: these are lines representing a path along the route network along the desire lines defined in the previous bullet point. We will see how to create them in section 12.5. --> <!-- - Nodes: these are points in the transport system that can represent common origins and destinations and public transport stations such as bus stops and rail stations, the topic of section 12.6. --> <!-- - Route networks: these represent the system of roads, paths and other linear features in an area and are covered in section 12.7. They can be represented as geographic features (representing route segments) or structured as an interconnected graph, with the level of traffic on different segments referred to as ‘flow’ by transport modelers (Hollander 2016). --> ] --- # Analiza geomarketingowa - Przykładem analizy geomarketingowej jest określenie lokalizacji nowego sklepu, która zachęci jak najwięcej klientów i w efekcie da największy zysk. - Te techniki mogą być też użyte do niekomercyjnych celów, np. lokalizacji placówek służby zdrowia. - Typowe pytania zadawane w trakcie takiej analizy to, między innymi, jaka jest grupa docelowa i gdzie ona mieszka/często przebywa; gdzie zlokalizowana jest potencjalna konkurencja? <!-- - A typical example is where to locate a new shop. The aim here is to attract most visitors and, ultimately, make most profit. There are also many non-commercial applications that can use the technique for public benefit, for example where to locate new health services --> <!-- - The main task of location analysis is to find out where such ‘optimal locations’ are for specific services, based on available data. Typical research questions include: --> <!-- - Where do target groups live and which areas do they frequent? --> <!-- - Where are competing stores or services located? --> <!-- - How many people can easily reach specific stores? --> <!-- - Do existing services over or under-exploit the market potential? --> <!-- - What is the market share of a company in a specific area? --> <!-- This chapter demonstrates how geocomputation can answer such questions based on a hypothetical case study based on real data. --> <!-- - Tidy the input data from the German census (section 13.3). --> <!-- - Convert the tabulated census data into raster objects (section 13.4). --> <!-- - Identify metropolitan areas with high population densities (section 13.5). --> <!-- - Download detailed geographic data (from OpenStreetMap, with osmdata) for these areas (section 13.6). --> <!-- - Create rasters for scoring the relative desirability of different locations using map algebra (section 13.7). --> <img src="figs/08_census_stack.png" height="400" style="display: block; margin: auto;" /> --- # Analiza geomarketingowa .pull-left[ - Odpowiedź na takie pytania można uzyskać, na przykład, poprzez: - Wyczyszczenie dostępnych danych ze spisu powszechnego - Przetworzenie danych ze spisu do formy rastrowej - Określenie obszarów metropolitalnych z dużym zagęszczeniem populacji - Pobranie szczegółowych danych przestrzennych (np. z OpenStreetMap) dla tych obszarów - Stworzenie rastrów oceniających względną atrakcyjność różnych lokalizacji ] .pull-right[ <img src="figs/08_metro_areas.png" height="550" style="display: block; margin: auto;" /> ] <!-- This chapter demonstrates how geocomputation can answer such questions based on a hypothetical case study based on real data. --> <!-- - Tidy the input data from the German census (section 13.3). --> <!-- - Convert the tabulated census data into raster objects (section 13.4). --> <!-- - Identify metropolitan areas with high population densities (section 13.5). --> <!-- - Download detailed geographic data (from OpenStreetMap, with osmdata) for these areas (section 13.6). --> <!-- - Create rasters for scoring the relative desirability of different locations using map algebra (section 13.7). --> --- # Analiza geomarketingowa Wybrane obszary zgodnie z hipotetycznym scenariuszem tworzenia sklepu rowerowego w Berlinie. <img src="figs/08_result.png" height="500" style="display: block; margin: auto;" /> --- # Analiza ekologiczna - Lomas (inaczej zwane oazami mgły) to formacje roślinne rozwinięte w górskich obszarach wzdłuż przybrzeżnych pustyń Peru i Chile - Obszar ten ma bardzo niskie sumy roczne opadów (30-50 mm rocznie), ale osadzanie się mgły zwiększa znacząco ilość dostępnej dla roślin wody - Celem analizy ekologicznej jest określenie składu i rozmieszczenia roślin na południowym zboczy góry Lomas w Peru .pull-left[ <img src="figs/eco1.png" height="400" style="display: block; margin: auto;" /> ] .pull-right[ <img src="figs/eco2.png" height="375" style="display: block; margin: auto;" /> ] <!-- During a field study to Mt. Mongón we recorded all vascular plants living in 100 randomly sampled 4x4 m2 plots in the austral winter of 2011 --> --- # Analiza ekologiczna .pull-left[ - Do wydobycia najważniejszych informacji z danych może posłużyć skalowanie wielowymiarowe - technika redukująca wymiary - Jest to popularne narzędzie w ekologii pozwalające na określenie głównych podobieństw i różnic pomiędzy badanymi obiektami, co często powiązane jest z gradientami ekologicznymi - Następnie możliwe jest stworzenie modelu przestrzennego zmienności wegetacji w oparciu o dane wysokościowe, NDVI, powierzchnię i nachylenie zlewni z użyciem metody lasów losowych (ang. *random forest*) - Efekt: Mapa gradientu florystycznego dla badanego obszaru ] .pull-right[ <img src="figs/eco3.png" height="550" style="display: block; margin: auto;" /> ] --- class: inverse, center, middle # Dodatkowe materiały --- # Rozwiązania zadań .pull-left[ - Każdy z rozdziałów zawiera od kilku do kilkunastu zadań do wykonania - Ich rozwiązania można znaleźć w zakładce *vignettes and solutions* pod adresem https://geocompr.github.io - Tam też znajdują się artykuły rozszerzające opis metod i funkcji z niektórych rozdziałów oraz dodatkowe związane z analizą danych przestrzennych w R ] .pull-right[ <img src="figs/szczecin_flood.png" height="500" style="display: block; margin: auto;" /> ] --- # Tutoriale - Na stronie https://geocompr.github.io/ można też znaleźć szereg slajdów z warsztatów dotyczących przetwarzania i analizy danych przestrzennych w R <img src="figs/vector_both.png" width="1280" style="display: block; margin: auto;" /> --- # Wpisy na blogu - Okazjonalnie też publikowane są wpisy na blogu https://nowosad.github.io/tags/geocompr/ - Obejmują one popularne kwestie w badaniach przestrzennych i zawierają kod do otworzenia ich wyników <img src="figs/inset_map.png" height="500" style="display: block; margin: auto;" /> --- # Wpisy na blogu - Okazjonalnie też publikowane są wpisy na blogu https://nowosad.github.io/tags/geocompr/ <img src="figs/world_pop_1800_2100.gif" height="520" style="display: block; margin: auto;" /> --- # Wpisy na blogu - Okazjonalnie też publikowane są wpisy na blogu https://nowosad.github.io/tags/geocompr/ <img src="figs/worlds_animate.gif" height="520" style="display: block; margin: auto;" /> --- class: inverse, center, middle # Podsumowanie --- # Podsumowanie .pull-left[ **Piętnaście rozdziałów** od wprowadzenia do obiektów przestrzennych w R, poprzez podstawowe operacje przestrzenne, wizualizacje, łączenie z oprogramowaniem GIS, uczenie maszynowe, tworzenie funkcji przestrzennych, a skończywszy na przykładach zastosowania. <img src="figs/authors-in-czech-republic.jpg" height="375" style="display: block; margin: auto;" /> ] .pull-right[ **Aktywne przeczytanie tej książki zachęca do:** - Kreatywnego wykorzystania danych przestrzennych - Zastosowania umiejętności do prawdziwych problemów - Tworzenia nowych narzędzi - Dbania o odtwarzalność wyników **Co dalej?** - Rozwijanie wiedzy na temat R - Odkrywanie przetwarzania danych przestrzennych w innych językach programowania - Eksplorowanie i uczenie się nowych technik i metod ] --- class: center, middle <!-- # Dziękuję --> .pull-left[ ## O mnie: Twitter:
jakub_nowosad Email: nowosad.jakub@gmail.com ] .pull-right[ ## Więcej informacji: https://nowosad.github.io https://geocompr.github.io/ ]