We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback
00:00

Formale Metadaten

Titel
Shine on R
Untertitel
Geospatial data processing the /Ahh/R way
Serientitel
Anzahl der Teile
68
Autor
Lizenz
CC-Namensnennung 3.0 Deutschland:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen.
Identifikatoren
Herausgeber
Erscheinungsjahr
Sprache

Inhaltliche Metadaten

Fachgebiet
Genre
Abstract
R wurde vor einigen Dekaden von Statistikern entwickelt, um in erster Linie statistische Fragestellungen zu bearbeiten bzw. zu lösen. Dabei ist R nicht nur ein „Statistik-Werkzeug“, sondern eine flexible und mächtige Programmiersprache, die auf allen gängigen Betriebssystemen (Unix, OSX, Windows) verfügbar ist und durch eine stetig wachsende Anzahl von Paketen aus allen Bereichen erweitert werden kann. Diese werden in der Regel über das Comprehensive R Archive Network (CRAN) zur Verfügung gestellt. So gibt es auch eine Vielzahl von Paketen, um räumliche Daten in R zu lesen, zu analysieren, zu manipulieren, zu visualisieren und zu schreiben. Durch die Pakete rgdal und das sich in aktiver Entwicklung befindende sf kann R alle von GDAL unterstützen Formate lesen und schreiben und bietet darüber hinaus R-Datenstrukturen an, die ein R-typisches und flexibles Datahandling ermöglichen. Auch können R-Skripte direkt (analog zu Python) in QGIS eingebunden werden, so dass in QGIS auf die statistischen Algorithmen von R zugegriffen werden kann. Vor allen in den letzten Jahren wurde R um viele „Features“ bzw. Pakete erweitert, die zum einen die Arbeit mit R erleichtern und zum anderen die Möglichkeit bieten in wenigen Zeilen Code flexible Web-Apps (R-Paket shiny) zu implementieren und zu hosten (Shiny Server). Durch das R-Paket leaflet lassen sich so auf einfache Weise interaktive Karten basierend auf dem Leaflet-Javascript-Framework erzeugen. Darüber hinaus können die interaktiven Karten auch direkt in der Open-Source-Entwicklungsumgebung RStudio angezeigt werden und sowohl RStudio als auch der Shiny Server können problemlos in Docker-Containern betrieben werden, sodass z.B. auch ein „R-Spatial-Data-Processing“-Container inklusive Entwicklungsumgebung „gebaut“ werden kann. Übersicht gängiger R-Packages zur Spatialdatenverarbeitung und -visualisierung, die in dem Vortrag besprochen werden: • sf • sp • rgdal • raster • rgeos • maptools • gdalUtils • rmapshaper • spatstat • rqgis • leaflet • osrm • lawn (R meets turf.js)
Schlagwörter
1
Vorschaubild
13:04
24
39
58
59
Vorschaubild
36:34
ChipkarteRohdatenMomentenproblemServerSkriptspracheStrom <Mathematik>Große VereinheitlichungSoftwaretestGeometrieSoftwareentwicklerGeodätische LinieWeb-SeiteStatistikerVorlesung/Konferenz
SIP <Kommunikationsprotokoll>ICONMeterSenderSchreib-Lese-KopfEntscheidungsmodellOperatorOperatorZylinderZahlenbereichSpielkonsoleZahlPunktStrich <Typographie>SkalarfeldDatenstrukturVektorWeb-SeiteCodeKlasse <Mathematik>RechnenOpenOffice.orgErzeugendeEXCELBefehl <Informatik>JavaScriptProgrammiersprachePlotterChipkarteParametersystemLINUXApp <Programm>FaktorisierungDatensatzDateiStatistikDienst <Informatik>FunktionalitätFunktion <Mathematik>VariableProviderEnthalpieTabelle
SpieltheorieMilan <Programmiersprache>AdditionHTMLFields-MedailleLesen <Datenverarbeitung>Treiber <Programm>Open SourceYAML <Framework, Informatik>Version <Informatik>ServerCodeChipkarteVersion <Informatik>HTMLC++JavaScriptApache <Programm>WidgetSkelettieren <Bildverarbeitung>GoogleMAPSpielkonsoleShape <Informatik>App <Programm>DateiVerschlingungBitmap-GraphikAbfrageOpen SourceRoutingDatenmodellDatenstrukturWeb-ApplikationStellenringPlotterProxy ServerBefehl <Informatik>MatroidNoten <Programm>Apple <Marke>Funktion <Mathematik>Objekt <Kategorie>InformationsmodellierungComputeranimation
Typ <Informatik>PolygonOpen SourceTreiber <Programm>Lesen <Datenverarbeitung>Einfache GenauigkeitTreiber <Programm>Funktion <Mathematik>Web-SeiteEin-AusgabeDienst <Informatik>PunktBeweistheorieProcessing <Programmiersprache>VariableDateiStreckeSIMPL <Programmiersprache>Shape <Informatik>Project <Programm>SkriptspracheRouterZeichenketteViewerObjekt <Kategorie>ModulDatenstrukturPolarkoordinatenCodeNoten <Programm>JavaScriptComputeranimation
FaktorisierungRAMDatensatzSpielkonsoleFunktion <Mathematik>Shape <Informatik>MengeLoopAbfrageInformationSchätzfunktionRandMatroidDisplayVorlesung/Konferenz
Transkript: Deutsch(automatisch erzeugt)
Der Stefan Küthe, auch er wird sich selber vorstellen, redet über Shine On R. Genau, hallo. Ja, mein Name wurde ja schon gesagt. Ich arbeite im Moment in der Automobilindustrie
und da gucken wir bei Händlern die Vertriebsströme an und stellen daher alles auf Karten da. So komme ich ein bisschen in den Geobereich rein. Shine On R oder R, wie man es auch gerne betont, das heißt der Titel, das Shine kommt daher, was eben schon vorgestellt wurde, wer bei dem Talk da war, von diesem Shiny, weil das eine wichtige Bibliothek ist, um einfach Geodaten in R darzustellen.
Wer hat hier schon mal mit R gearbeitet? War doch reichlich viele. Auch mit Geodaten oder eher um Statistiken zu machen? Also, wer hat mit Geodaten schon gearbeitet mit R? Okay, doch auch schon reichlich viele.
Also ich komme eigentlich so aus der Python-Ecke, auch vorher, wo ich gar nicht mit Geodaten gearbeitet habe, fand das immer eine mächtige Sprache und großer Fan und habe R immer so ein bisschen eigentlich links liegen gelassen. Wusste, okay, hat viele Plot-Funktionalitäten und kann irgendwie gut mit Tables umgehen. Das fehlte mir auch immer so ein bisschen bei Python. Dann kam aber, wer das Pandas kennt, hat ja so ein bisschen das nachgebaut, was sozusagen in R noch fehlte
und dann habe ich gedacht, naja, okay, dann habe ich das jetzt auch und bin dann aber irgendwie dann doch durch statistische Sachen nochmal auf R aufmerksam geworden und habe dann aus meiner Sicht entdeckt, wie mächtig R eigentlich sein kann. Und das möchte ich eigentlich gerne hier nochmal vorstellen. Es wird auch um Geodaten gehen, aber eigentlich, was kann R? Was hat sich eigentlich getan in letzter Zeit?
Also, als ich damals, das war vor vielen Jahren, mal geguckt hatte, da war das R noch eben so wirklich ein Statistiktool, dass die Leute das benutzt haben und irgendwelche Skripte geschrieben haben. Und jetzt, aus meiner Sicht, sind einfach auch viele Softwareentwickler reingekommen. Es gibt jetzt eine wirklich sehr gute Open-Source-IDEe. RStudio wurde eben auch schon gesagt, mit der man programmieren kann,
die auch viele Pakete herstellen, wie zum Beispiel auch Shiny und auch den Server zur Verfügung stellen. Es gibt jetzt auch Unit-Tests, also so Sachen, die Softwareentwickler eigentlich kennen, die es aber vorher in R nicht groß gab, da wurde irgendwie ein Skript laufen lassen. Wenn ein anderer zwei Jahre später drüber geguckt hat, konnte er damit nicht mehr viel anfangen.
Genau, warum ist das jetzt hier, diese Präsentation, so eine Webseite? Das ist auch ein Feature von dem R Ökosystem. Ich weiß nicht, wer es kennt, das ist das R Markdown. Da kann ich in Markdown Dokumente erstellen und dadurch statische Webseiten generieren, wo aber JavaScript mit drin ist und dadurch wird es sehr interaktiv. Und deswegen ist diese ganze Präsentation im Prinzip in R geschrieben.
Also alles, was man hier sieht, ist aus R. Und das ist für mich einfacher, weil ich viele Code-Beispiele habe. Also bei mir wird es ein bisschen technischer, dass ich den Code direkt reinschreiben kann und auch die Ergebnisse werden dann gleich hier hingeplottet, was sozusagen rauskommt. Und immer das, der Befehl oder die Befehle sind eben ein bisschen größer und in kleiner ist dann die Antwort von R.
Genau, ich habe es hier nochmal geschrieben. Vielmals denkt man, R ist einfach eine Statistik-Package. Aus meiner Sicht nein, R ist eine wirkliche Programmiersprache und ist flexibel und auch sehr mächtig. Und ich hatte jetzt für die, die vielleicht noch nicht so mit R sich auskennen, habe ich mal so drei wichtige Sachen,
die vielleicht unterscheiden von anderen Sprachen. Der erste Punkt für mich ist, der Vektor in R ist sozusagen die Mutter aller Datenstrukturen. Da sieht man da dran, wenn ich einen Skalar, weil ich normal hätte hier x ist gleich 5 eingebe, kann ich das genauso wie einen Array mit x und dann mit der 1 in Klammern anfragen. Also es ist im Prinzip alles ein, basiert auf dem Vektor.
Das zweite ist, auch alles ist ein Objekt. Also auch dieses Skalar kann ich fragen, was für eine Klasse es hat. Die ist hier natürlich relativ einfach. Es ist einfach numerisch. Was zieht das nach sich? Man sieht es, das fast alles, was ich mache, ist Vektorisiert. Wenn ich eine Funktion ausrufe, ist sie Vektorisiert.
Und immer ist es auch egal, ob ich einen Array mit 2 habe oder mit 1. Das sieht man hier schön. Ich habe hier zwei Namen, zwei IDs. Und dann diese Funktion paste. Das macht nichts anderes, als das zusammenzufügen und einen freizulassen. Und ich gebe hier Hi und Your ID is rein. Und dann schreibt er halt einmal Hi Peter, Your ID is 2 und Bender, Your ID is 4.
Er merkt das dann. Okay, hier sind 2 lang, hier nur 1. Das muss ich also doppelt nehmen. Und das sind so typische Sachen, wo ich sage, wenn man da mal mit gearbeitet hat, weiß man das zu schätzen. Und es ist jetzt so, dass ich oftmals denke, das mache ich in Python. Ach nee, in R habe ich das viel schneller geschrieben. Das geht mir jetzt häufig so.
Genau, das Workhorse von R ist sozusagen dieser DataFrame. Das ist im Prinzip eine Tabelle, wie auch in Excel oder OpenOffice. So sieht man hier, das ist so ein Beispieldatensatz mit Autos. Und der kann eben auch, wenn man den syntax kennt, ist das relativ klar, wie der abgefragt wird. Also man sagt einfach, okay, das erste sind die Zeilen,
das andere sind die Spalten. Und so frage ich hier sozusagen, wo gear gleich 4 ist. Und ich möchte die Spalten, Zylinder und Gear haben. Und dann kann ich so ein DataFrame relativ schnell abfragen. Was anderes, was viele sagen, okay, du schreibst einen Vorloop. Um Gottes Willen, macht das nicht. Also nur wenn gar nichts anderes geht. In R schreibt man eigentlich keine Vorloops.
Es gibt die sogenannte ApplyFamily. Man sieht das hier an dem Beispiel. Deswegen habe ich hier Extraordinary hingeschrieben. Also sehr ungewöhnlich wäre hier, um sozusagen auf diese, also hier erzeuge ich 4 Zahlen von 1 bis 4. Und einfach nur die Wurzelfunktion. Jetzt müsste ich ja sozusagen erst die dere Liste erzeugen. Dann müsste ich sozusagen über 1 bis 4 loopen. Und das dann in die Liste schreiben. Und in R würde ich das aber in einer Zeile machen.
Ich würde sozusagen die Funktion, die Wurzelfunktion auf die Zahl 1 bis 4 anwenden. Und hätte dann hier diese Liste. Also was will ich damit zeigen? Eigentlich dieses, aus meiner Sicht sehr mächtig. Wenn ich schon dachte, oh, im Pipe brauche ich nur 3 Zeilen Code. Im Gegensatz zu Java oder irgendeiner Sprache. Brauche ich hier oft nur noch eine Zeile Code. Also ich mich dann häufig hierfür entscheide.
Dann ein Feature, genau, ist der Pipe Operator. Die meisten nutzen ja, denke ich, Linux oder viele. Die kennen das ja, wenn man eine Konsole piped. Da ist es der normale Strich. Hier ist es eben dieser. Es passiert genau das gleiche. Eine Funktion gibt was raus.
Und das, was sie rausgibt, gibt sie an die nächste weiter. Und so bildet man solche Ketten wieder oben. Also von Leaflet wird es an AddTiles weitergegeben. Das wird an AddMarkers weitergegeben. Und so weiter. Und unten sieht man es mit dem NoPipe. Müsste ich das entweder unglaublich verschachteln, wie man das häufig kennt. Oder ich müsste das Objekt immer wieder übergeben.
Und dann sich selbst zuweisen. Solche Sachen müsste ich machen. Und genau hier habe ich geschrieben, wie es in Python aussehen würde. Weil was es in R auch nicht gibt, ist sozusagen ein Objekt, wo Methoden dran gebunden sind. Was man ja, wie ich das in dem Python Beispiel habe, mit diesen Punkten dann erweitert. Und dadurch ist der Pipe Factor Operator eigentlich das, was der macht. Um jetzt mal kurz zu zeigen,
wie man hier wirklich relativ zügig, auch wieder in einer Zeile Code, schon interessante Sachen erzeugen kann. Eben dieses Beispiel. Ich habe hier eine GeoJSON-Datei. Die lese ich ein. Gebe das weiter an die Funktion Select. Dass ich eben hier den LabelRank und den Income raushole.
Und dann gebe ich das an die Plot-Funktion weiter. Und man sieht, was diese Plot-Funktion macht. Die macht schon zwei thematische Karten. Eben auf LabelRank oder auf den Income. Dieses T, was hier noch drin steht. Also wen es interessiert. Man sieht es nicht hier. Der macht Folgendes. Der gibt einerseits das, was hier rauskommt, an den Plot.
Und andererseits schiebt er auch alles hier zurück in die Variable Africa rein. Dass ich das gleichzeitig speichern kann, weil ich es noch brauche. Ich will es aber auch plotten im gleichen Schritt. Dieses Paket, das ist nicht nur der Pipe Operator, das ist ein ganzes Paket. Das ist sehr mächtig, was das so machen kann, um das noch zu vereinfachen. Das Gleiche kann ich auch.
Es sind auch nicht viele Zeilen mehr. Kann ich auch, wenn ich das gleich als Leaflet-Karte haben will, machen. Da ist es eben das Paket, das wurde eben auch schon vorgestellt. Das Paket Leaflet. Hier wähle ich mir noch, welche Provider-Tiles gezeigt werden sollen. Hier habe ich den Stain gewählt. Genau, Africa. Und habe hier oben noch gesagt, wie das eingefärbt werden soll, dass das auch nach dem LabelRank eben gerade eingefärbt wird.
Und dann habe ich das hier auf der Karte. Genau. Und die ist jetzt auch, obwohl das jetzt hier ein statisches Dokument ist, da ist ja kein Controller oder so, die natürlich, weil das ja JavaScript ist, was dann wirklich da reingeschoben wird, ist die Karte auch interaktiv. Also die macht jetzt zwar nicht so viel. Da habe ich vielleicht noch ein paar andere Beispiele dazu.
Gut, hier mal kurz zum R-Ökosystem. Was sind Funktionalitäten? Also das eine hatte ich schon genannt, das ist diese R-Studie-Idee. Die kann ich jetzt hier nicht zeigen, weil das jetzt nicht mein Rechner ist, das ist jetzt hier nicht drauf installiert. Aber kann ich schon mal Werbung machen. Also ich gebe morgen einen Workshop dazu. Sind bestimmt noch Plätze frei, gehe ich von aus. Gerne vorbeikommen, da werden wir auch so ein paar Web-Apps programmieren, werden auch statische Webseiten machen,
gucken, wie man Daten einlesen kann, filtern kann und all solche Sachen. Also wenn das interessiert, einfach vorbeikommen. Genau. Dann habe ich auch ein großes, habe ich eben die Libs, die es auch bei Pipen unter Pipee gibt. Hier heißt es Cran. Hier sind jetzt nur die Libraries gezeigt von R-Studio,
die die entwickeln. Da ist eben auch unter anderem das Leaflet, das R Markdown, das Shiny. Genau, hier ist auch der Pipe Operator drauf. Das sind auch qualitativ sehr hochwertige Sachen, weil da viele Entwickler hintersitzen und das wurde eben schon genannt. Die sind immer für die Open-Source-Community da. Das heißt, es gibt die auch R-Studio Open-Source-Variante.
Es gibt aber auch eine, die hat noch ein paar extra Features, die da bezahlt werden müssen. Oder es gibt den Shiny-Server in der normalen Version und es gibt es in der Pro-Version. Oder dass man das gehostet kriegt von denen, so bekommen die dann noch ein bisschen Geld rein, um das zu machen. Hier habe ich jetzt mal aus meiner Sicht oder die ich häufig verwende,
hier so wichtige Spatial-Packages aufgelistet. Wenn man hier auf den Link geht, ich kann es auch mal machen, kurz mal einen Tab öffnen, kurz rausgehen, wo man sich denn jetzt hier verbindet. Ich will sie nicht durchgehen, aber wenn man hier nach unten geht, sieht man, wie viele Spatial-Packages gibt.
Man sieht es ja. All diese Packages hier haben irgendwas mit Spatial-Daten. Manche eben zur Darstellung. Natürlich gibt es auch statistische Pakete, die solche Sachen wie eben Abfragen machen. Genau, also wichtige Pakete zum Einlesen ist eben, also SP ist eigentlich das Paket, was dafür zuständig
ist, wie Spatial-Objekte in R dargestellt werden, weil auch die kann ich dann, auch die kann ich genauso zugreifen, wie ich das mit dem Data-Frame gezeigt habe. Also sehr, sehr klar und genauso wie ich es gewohnt bin in R. Dann gibt es für das Rastern eben das Raster-Package R-Geos und noch ein paar weitere. Dann wird es auch ein Talk zu geben, ich glaube auch
ein Workshop zu dem OSRM, das ist dieser Open Source Routing Routing-Maschine heißt es, glaube ich. Da werde ich auch gleich noch ein Beispiel zu zeigen. Library Leaflet, Open Layers gibt es noch nicht. Wer es programmieren will, kann es machen. Ich habe es schon mal angefangen. Und dann gibt es noch für Node.js, zwei
Rapper, für Turb.js, wer das kennt. Wurde, glaube ich, beim letzten Foskiss vorgestellt. Und R-Map Shaper, das ist auch sehr mächtig für mich, also gerade wenn ich etwas solven will oder so, dann ist für mich der Map Shaper eigentlich immer das schnellste Tool und da ist es hier sozusagen auch gerappt. Das heißt ich kann diesen Node.js Bibliotheken, wie das funktioniert, werde ich auch gleich noch zeigen, kann man direkt in R nutzen.
Also ich kann sowohl Node.js in R direkt nutzen, als auch C++ und JavaScript. Also das ist auch für mich sehr mächtig. HTML Widgets, das ist im Prinzip auch ein
Paket, damit kann ich ganz einfach jede JavaScript Bibliothek nutzen. Und Leaflet ist zum Beispiel eine davon. Das heißt ich kann relativ einfach durch die HTML Widgets ein Paket schreiben, was dann JavaScript Bibliothek rappt. Und da gibt es eben auch ganz viele. Man kann hier
mal in die Gallery gehen, auch nur mal einen kurzen Blick reinwerfen. Und sieht da schon 84, die jetzt registriert sind. Es gibt etliche auf GitHub, die man auch ziehen kann. Und man sieht hier Leaflet ist natürlich unter den Top da. Plotly, wer das kennt, alle möglichen Plots, die dann auch interaktiv sind, die kann ich auch anbinden. Und all diese HTML Widgets, das ist das Schöne, die kann ich alle in
diesen Shiny Apps nutzen. Das heißt, dann sind die sofort zur Verfügung und ich kann, das wurde eben auch schon gezeigt, zeige ich auch noch mal kurz, diese Shiny Apps schreiben, ohne eine Zeile HTML zu können und ohne eine Zeile JavaScript zu können. Weil die alle sozusagen hier gerappt werden und dann mache ich das mit R-Code und dann gibt es einen Paket, das heißt so ein JSON-Wrapper und der führt die Datensstrukturen von R
in JSON-Datensstrukturen über und so kann das dann technisch funktionieren. Also hier wieder das gleiche Beispiel, das ist hier wieder Leaflet, das heißt, genau, wird dann JavaScript-Code erzeugt, den man kennt, wenn man das schon mal selber eingebunden hat.
Hier schon so ein Beispiel. Wie sieht das im Prinzip aus, wenn man das Paket dann schreibt, dann gibt es auch eine Datei in seinem R-Paket, so eine YAML-Datei, wo man reinschreibt, welche Dependencies da sind, das heißt hier, welche Bibliotheken brauche ich, welches CSS-Muster
noch rein und dann, das werde ich jetzt nicht im Einzelnen zeigen, muss man dann eben die Sachen da so drum herumschreiben, dass das richtig übergeben wird. Aber auch das ist wahrhaftig nicht schwierig, weil es in diesem Paket HTML-Packages, da gibt es dann eine Funktion, ja, da ist irgendwie, was weiß ich, Create-Issue und dann erzeugt er diesen ganzen, dieses ganze
Skeleton für einen schon, sozusagen. Hat er dann vorherzeugt, du musst nur noch an den richtigen Stellen die Sachen einfügen, da muss man natürlich dann JavaScript können, wenn man das machen will, weil man dann auch das entsprechende in einem JavaScript-Code hinterlegen muss. Aber wenn man die dann weiter gibt, die Bibliothek, dann kann die jeder nutzen, ohne dass er eine Zeile sozusagen JavaScript implementieren muss.
Gut, Shiny mache ich dann hier auch nur kurz, das wurde ja eben schon gezeigt, das ist für interaktive Web-Anwendungen, da brauche ich eben Shiny Server, um das hosten zu können. Ich kann aber auch ein Apache nehmen und kann das sozusagen lokal starten und irgendwie einen Watchdog machen. Eine super Sache ist, das einfach in Docker-Containern laufen zu lassen. Jeden Shiny App in so einem Docker-Container,
da gibt es sogar schon eine Seite, die heißt irgendwie Shiny-Proxy und die, wenn dann einer draufgeht, macht er jedes Mal einen neuen Docker-Container auf. Also das ist dann um diese Pro-Variante des Shiny Servers zu umgehen, weil man da viel Geld zahlen muss, auch für User-Verwaltung oder ähnliches, also aber gerade durch Docker ist da unglaublich viel möglich. Man kann sich auch den ganzen Shiny Server eben im Docker-Container
mit einem Pull-Befehl ziehen und einmal starten und dann läuft der sofort. Also das ist auch ganz prima. Genau, man sieht es hier, es gibt ein MVC-Modell, also hier der View, der Controller und dann kann ich noch irgendwo, auch kann ich auch noch ein Model definieren, hier ist es aber relativ einfach. Ich sage einfach eine Überschrift, H1, das kennt man, Leaflet Output ist die Map und das, der Output, der hier oben
angezeigt werden soll, der wird halt hier erzeugt durch diese RenderLeaflet-Funktion und da schreibe ich eigentlich rein, was passieren soll. R Markdown, womit jetzt sozusagen dies hier alles erzeugt ist, ist ähnlich. Ich kann, also wer Markdown kennt, die meisten kennen es glaube ich, erzeuge
ganz normal meinen Markdown-Code und dann gibt es diese Passagen, wo hier eben dieses R vorsteht und in diese Passagen kann ich dann meinen R-Code reinschreiben und der wird dann dementsprechend gerendert, also entweder so wie hier bei mir, dass er dann, wenn es halt wirklich Code ist, dann schreibt er hier halt den Befehl hin und das, was rauskommt oder wenn ich so HTML-Widgets einbinde wie Leaflet, hatte ich ja auch
hier drin, dann bringt er gleich die Karten direkt da rein in das System. Aber also genau, wer morgen Lust hat, also das würden wir morgen auch kurz machen, weil auch das sehr schnell geht, also es gibt dann auch in der IDE kann man sagen, ok ich möchte ein neues R Markdown, dann macht er auch das Skeleton fertig und dann kann ich die Sachen da einfügen, also das geht auch sehr, sehr gut.
Ja, wie kann ich Node.js direkt verwenden? Das mache ich über die Google Engine V8, das ist ja im Prinzip ähnlich oder gleich, aber auf jeden Fall kann ich das machen. Hier in dem Beispiel kann ich dann in der Konsole direkt Sachen ausführen, ok? Alles klar.
Wie man hier sieht, ich starte einmal die Engine, dann kann ich hier eben JavaScript-Code ausführen und kann dann die Sachen mit get zum Beispiel wieder in R Variablen zurückholen, also hin und her. Ich kann aber auch, und so wurde das bei turf.js gemacht zum Beispiel, ich weiß nicht warum sie es hier long genannt haben, kann auch einen kompletten Node.js
Modul, das per NPM runtergeholt habe und dann per Browsefile mir irgendwie zusammengestellt habe, kann ich auch komplett mit Load reinladen und kann dann eben R Funktionen schreiben, die auf die Features zugreifen. Und hier, wer turf.js kennt, sieht das, dann gebe ich hier auch wirklich so Java-Scriptcode, also GeoJSON ein und kann hier zum Beispiel die Buffer-Funktion nutzen.
Und dann gibt es auch ein nettes View gleich hier, dass er mir das gleich auf einer Leaflet-Karte anzeigt, was er hier gemacht hat mit meinen Objekten. Und hier sieht man auch das, genau, dass er von dem Feature das sagt. Ein zweites Paket ist eben das Mapshaper. Hier habe ich nochmal kurz die Funktionen aufgelistet, aber ich kann im Prinzip fast jedes Node.js Modul mir reinholen, kann das hier rappen
und kann das auch nutzen. Ähnlich ist das bei C++, was natürlich sehr praktisch ist, um zum Beispiel die GDAL-Bibliotheken zu rappen. Das wurde auch so gemacht, die Pakete, die nutzen das. Hier im einfachsten Beispiel, das läuft über das Paket rcpp, kann ich wirklich die Funktion im C++-Code direkt eingeben. Dann habe ich hier die Funktion
add zur Verfügung. Man sieht, das ist eine primitive Funktion. Aber hier gebe ich add 2, 4, 6 ein. Das ist jetzt R-Code und kriege mein Ergebnis raus. Also das ist aus meiner Sicht alles sehr, sehr mächtig, weil ich eigentlich die ganzen up-to-date-Sachen nutzen kann. Was noch so ein bisschen fehlt, ist, es gibt es aber so R-Py nennt sich das, dass das Python noch so ganz
smooth-less geht. Das fehlt leider noch so ein bisschen. Gut, dann würde ich jetzt in Anbetracht der Zeit auf Leaflet gar nicht mehr so eingehen. Das wurde ja eben schon gezeigt. Ich glaube, das können sich alle vorstellen. Hier habe ich auch nur mal die Funktionen gezeigt, die implementiert sind. Da kommen immer mehr hinzu. Das ist auch in aktiver Entwicklung. Da gibt es auch ein sehr gutes
Dokumentation zu. Hier hatte ich nur mal zwei Beispiele. Hier auch. Man sieht, es sind relativ wenig Zeilen-Code und ich habe hier zum Beispiel ein Feature, wie dass ich hier die Strecke messen kann. Hier nach hier. Finish Measurement und dann zeigt er mir 103 Kilometer. Ich habe hier unten noch eine Mini-Karte
reingemacht, damit ich das auch verschieben kann. Und das ist alles mit diesen Zeilen-Code, die hier oben gezeigt sind, erzeugt. Also relativ wenig Zeilen-Code, um das alles zu erzeugen. Und hier noch mal um zu prüfen, mit dem SP-Package, der mir hier auch die Distanz zwischen den beiden Punkten ausrechnen kann, komme ich auch auf 103 Kilometer.
Map-Edit würde ich jetzt nicht zeigen. Das sollte man sich mal angucken. Das ist jetzt der erste Proof of Concept, weil das jetzt alles erst in letzter Zeit so möglich geworden ist, dass er da so mächtig geworden ist. Da kann ich dann wirklich, muss man auf die Seite hier von Map-Edit gehen, kann ich wirklich Features anlegen, verschieben, kann Punkte bearbeiten, kann Linien erzeugen und dann drücke ich auf OK und dann schreibt er mir das
in eine R-Variable rein, in ein R-Objekt. Gut. Muss ich das hier ein bisschen kürzer machen. Die Hauptbibliotheken zum Lesen, die waren bisher SP und RGDAL.
Hier mit RGDAL, wie man hier sieht, liest man die Dateien ein. Die werden dann umgewandelt in R-Datenstrukturen, in Spatialdatenstrukturen, die dann, genau, wie man das hier sieht, zum Beispiel Spatialpoints DataFrame heißen
und genau, die natürlich auch eine Bounding Box haben, Project String und all solche Sachen, die ich dann auch ändern kann, wie ich das benötige. Gut, Leaflet-Karte hatten wir schon und so kann ich natürlich auch leicht umwandeln. Wenn ich das einmal als R-Objekt habe, kann ich dann auch sagen, OK, Write OGR
und kann dann den Driver angeben, also sprich, wenn ich es als Shape eingelesen habe und sage, bei Write ist der Driver GeoJSON, dann habe ich damit die Umwandlung im Prinzip gemacht. Und jetzt aber, wen das interessiert, wer da mehr mitmacht, der sollte sich eben das Paket SF angucken. Das ist für die Simple Features. Das ist eigentlich der Nachfolger.
Der ist wesentlich schneller, also man muss mal größere Shape-Dateien versuchen einzulesen und wenn man das mit dem alten Paket macht und mit diesem, dann merkt man deutliche Unterschiede und hier wird halt versucht, was man von PostGIS kennt, diese ganzen ST-Funktionen im Prinzip zu implementieren. Das heißt, man hat dann in R eigentlich die ganzen bekannten Funktionen, ich habe sie hier nur aufgelistet,
zur Verfügung, wie man auch in PostGIS zur Verfügung hat. Aber die werden also, man lädt erst das Objekt rein, hat dann ein R-Objekt und danach kann man die Funktionen dann hier in R auf die Objekte anwenden. Genau, ich habe es hier nur auch gezeigt, hier der Befehl ist ähnlich, ST-Read. Das heißt, ich habe hier die eine Zeile und schon habe ich ein Shapefile eingelesen und kann danach mit diesem Shapefile
arbeiten. Gut. PostGIS, genau, hier ist einfach der Connection-String, wenn ich den angegeben habe. Dann komme ich hierhin. So, zwei Folien noch, dann habe ich es auch gescharrt.
Genau, hier einfach nochmal, da ist auch ein, weil das ist auf der Webseite nicht erwähnt, obwohl mich der Entwickler, der macht ja hier auch was, ich weiß nicht, ob er hier sitzt, der hatte mich auch gleich angesprochen, was ich in R nutze, um sozusagen seinen Service zu nutzen. Da sage ich, ja, da gibt es einen R-Package, das ist überhaupt gar kein Problem, das heißt auch RRM einfach. Und hier sieht man es, die Route einfach.
Ich sage, okay, ich habe hier so zwei, das waren die Airports von eben, von Bremen und Hamburg genommen und habe gesagt, okay, gib mir mal die Route, das heißt, er spricht den Service an, gib mir den zurück, gib mir den gleich als Spazialobjekt, also als Strecke zurück und ich kann gleich wieder meinen Leaflet-Code nutzen und kann diese Route hier auch auf einer Leaflet-Map relativ
zügig darstellen. Das kann ich natürlich wieder im Shiny-App, genau, das werde ich auch morgen mal zeigen, machen, dass man dann diese Punkte noch interaktiv eingibt und dann zack, berechnet da kurz die Route. Also das ist sehr schön. Ich weiß nicht, wer schon in QGIS genutzt hat, das ist auch nur ganz kurz so, ähnlich wie bei Python, kann man ja einfach Skripte für das Processing nutzen, so kann ich auch R-Skripte nutzen und jetzt ein ganz einfaches,
wenn ich sage, der Nutzer soll mir sozusagen einen Input-Vektor geben und ich gebe wieder einen zurück und hier einfach nur mal um zu zeigen, wie schnell man was machen kann, der Input wird automatisch eingelesen, ich füge noch ein Feld hinzu, das nennt sich Test, das wird jetzt überall auf Minus 1 gesetzt, das ist nur mal um zu zeigen, wie es geht. Und ich hatte hier in meinem Beispiel, hatte ich die ganze Welt eingelesen, habe gesagt, okay,
dann von dem Input, guck mal, wo die Region Afrika ist und dann macht er sofort dieses Subset und dann kriege ich nur Afrika zurück. Also das ist einfach um zu sehen, dass es genauso harmoniert wie Python eigentlich in QGIS. Ja, dann bedanke ich mich.
Ja, wenn noch Fragen sind, gerne. Und in den Workshop morgen kommen. Das ist natürlich ganz geschickt, den Vortrag vorherzumachen und dann zum Workshop einzuladen. War ja jede Menge Information. Ja, das war nicht zu viel, aber... Ja, ich sehe das so, das hat sicher Appetit gemacht,
den Workshop zu besuchen, bevor sie da hingehen, aber nicht vergessen, einmal noch am Foskistand vorbeigehen und zahlen. Gibt's Fragen? Also ich hatte auch mal mich ein bisschen mit R und
Spatial Packages beschäftigt. Ich fand es damals ein bisschen schwierig, dass es recht breit gefächertes Ökosystem war. Also gerade in dem Vortrag ist ja auch schon angeklungen. Also wir haben jetzt neben den Bibliotheken, die wir jetzt vermutlich alle kennen, wurden die halt anders implementiert, was mir auch aufgefallen ist, dass zuweilen die Performance deutlich unter den eigentlichen OGR Bibliotheken
lagen. Wie ist da die Einschätzung? Genau, das Problem hatte ich halt auch, dass ich wenig das eingelesen habe. Ich hatte auch eher das SP Package genutzt, das war mir eigentlich auch immer zu langsam. Das zweite Problem ist ja, was man bei R sagen muss, der lädt alles in den Ram. Das macht er immer so. Das heißt, ich kann nicht irgendwie so einen Loop drüber laufen lassen und nur
bestimmte Features rausziehen. Da ist dann irgendwo auch die Grenze, wenn ich zu große Shapes habe. Also durch dieses Package SF ist das deutlich verbessert worden. Ich glaube, es ist noch nicht ganz so performant, wie wenn ich es in Pipen oder irgendwo reingehe oder eben direkt an der Konsole. Aber es ist für mich ein großer Schritt. Also alle, die schon mal mit Gabit haben, sollten das neue Package mal testen.
Es ist auch aktiv in der Entwicklung. Also da kommen andauernd täglich neue Funktionen hinzu. Und es ist ein richtiger Schritt. Noch? Das SF Package, wenn ich jetzt das vergleichen würde, mit einer Abfrage direkt an die Postgres Datenbank? Wahrscheinlich kein Erfahrungswert jetzt konkret, oder? Also
diese ST Funktion, die jetzt auch ein eher implementiert sind. Ja, wäre interessant. Nee, habe ich noch keine Erfahrungswerte, Leiter. Aber würde mich auch interessieren. Also genau, man muss halt einfach mal auch immer mit sehr großen Datensätzen arbeiten. Also wenn man jetzt, ja, weiß ich nicht, nicht ganz so groß hat, dann läuft das alles sehr smooth und so.
ja, wie gesagt, deswegen war auch für manche Sachen hatte ich deswegen diesen R-Map Shaper. Gerade wenn ich die solven wollte, da hatte ich in R immer große Probleme oder Simplify. Dann kam für mich der Mapshaper. Und dadurch, dass ich das mit R-Mapshaper machen kann, aber auch selbst da ist es so, habe ich dann festgestellt, weil er dann auch irgendwie alles mögliche in den Ram reinlädt, kann das auch wieder ein begrenzender Faktor sein, dass ich dann wieder doch mir in R was geschrieben habe,
der dann System Call an den Mapshaper macht. Noch eine Frage? Ich habe eine kurze. Du hast das so am Rande gesagt. Ich habe mal angefangen, auch Openlayers da reinzubringen. Mal angefangen, Openlayers auch da reinzubringen und auch gesagt,
wer da Lust hat, der kann das ja machen. Ich würde einfach nur interessieren, hat er da irgendeinen Hintergrund? Vermisst du bei Leaflet Funktionen, die du in Openlayers hast? Oder war das eher so eine Abendspielerei? Ja, eher eine Spielerei, weil ich mich erst angefangen hatte, damit zu beschäftigen, wie man eben genau diese Bibliotheken rappt. Und da fand ich Openlayers
einfach eine ganz spannende Idee. Also ich hatte es schon mit einer anderen, glaube ich, gemacht, aber mal zu gucken, wie gut das da funktioniert. Ne, bisher war ich eigentlich genau in Leaflet zufrieden. Gut. Ja, danke schön. Oder? Keine Kurzwand? Danke.