Python og geopandas

Du trenger slettes ikke et GIS-verktøy for å gjøre spatial join! Her får du en kjapp demo på hvordan dette kan gjøres i programmeringsspråket Python.

https://github.com/LtGlahn/geopandas_ssb_nvdb_demo

Spatial er ikke lenger special – de artige geografiske operasjonene vi er så glade i å gjøre i GIS er nå lettvint tilgjengelig i alle gode programmeringsspråk

Spatial Join av åpne datasett fra statsetatene

Hva har tettsteder, trafikkulykker og turistveger til felles? Det er alle geografiske datasett, stedfestet med koordinater i vårt vakre Norge. Trafikkulykkene og turistvegene er begge stedfestet i Nasjonal Vegdatabank. For å finne trafikkulykker på turistveger  kan vi bruke en overlappspørring mot NVDB api (gi meg trafikkulykker der det finnes turistveger!), mens tettstedene lastes ned fra Statistisk sentralbyrå.

For å finne hvilke trafikkulykker og turistveger som befinner seg i hvilke tettsteder gjør vi to spatial join, først på tettsteder og turistveger. Dermed vet vi hvilke tettsteder (som har turistveger gjennom seg) [det går turistveger gjennom] – og dette resultatet blir brukt til spatial join nummer to, med ulykkene. Dermed vet vi ganske mye:

  • Vi vet hvilke tettsteder som  har turistveger – og hvilke av disse igjen der det har skjedd trafikkulykker
  • Vi vet hvilke turistveger som går gjennom hvilke tettsteder
  • Vi vet i hvilket tettsted og på hvilken turistveg den enkelte trafikkulykken skjedde
trafikkulykker-tettsted-turistveg-Granvin
Flaten er tettstedet Granvin, den blå linja er litt av turistvegen gjennom Granvin og de to røde prikkene er trafikkulykkene der.

Hvorfor (Geo)-Pandas?

Pandas er et python-bibliotek for dataanalyse og -manipulering. Data leses inn som rader og kolonner i en såkalt Dataframe, med verktøy som gjør det artig å filtere, sortere, analysere og plotte.

Geopandas føyer geografiske funksjoner til Pandas. Alt du kan gjøre med Shapely kan du nå gjøre i Pandas.

Motto: To make working with geospatial data in python easier.

Disse bibliotekene spiller veldig bra sammen med notebook, men kan selvsagt brukes i vanlig python / iPython.

Notebooks – hvorfor det?

Såkalte notebooks tilbyr en ny arbeidsflyt som også gjør det enklere å dele og gjenbruke arbeidet ditt. Tekstbeskrivelser passer naturlig sammen med kjørbar kode og interaktive plott, i ett og samme dokument. Selve notebook-dokumentet redigeres i nettleseren din.

notebook-screenshot
Notebook-arbeidsflyt, en arbeidsbok er delt inn i celler som enten er tekst eller kjørbar kode. Hver celle kan kjøres for seg – eller man kjører alle celler foran eller bak den som er markert.

Denne arbeidsflyten passer spesielt godt for interaktiv utforskning. Til tyngre kodeskriving vil de fleste foretrekke sitt favoritt-utviklermiljø (IDE)  eller teksteditor – men notebook egner seg meget godt til interaktivt å bruke den koden du har skrevet. Samt ikke minst dele resultatene og diskutere med fagfeller. Her er en kort innføring i fordelene dette byr på.

Rent teknisk henter nettleseren din et notebook-dokument fra en webserver installert lokalt på maskinen din. Du redigerer et lite avsnitt av gangen – en såkalt celle. Hver celle inneholder kjørbar kode eller tekst. Du kan til enhver tid kjøre koden i en enkelt celle, i alle cellene eller i cellene over eller under der du står. Dette gjør det enkelt å interaktivt bygge opp logikk for å utforske et datasett. Plott, tekst og kode hører naturlig sammen, og hvis du vil endre på noen steg tidligere i prosessen så er det en naturlig, intuitiv del av prosessen.

Men det aldri noen tvang – man kan utmerket eksportere notebook-kode til kjørbare script, og bruke det til automatisert databearbeiding. F.eks. slik jeg har gjort med Geopandas-nvdb-eks-kunpython.py.

Hvor er kartet?

Analyse av geografiske data uten kart? Det kan ingen være bekjent av! I villnisset av oppskrifter – noen av dem var 200-linjers hack i javascript som skulle lirkes inn på obskure steder – likte jeg best mplleaflet, som tar eksisterende matplotlib-figurer og lager kart utav dem. Enten i notisboka di, eller en html-fil, slik som her..

mplleaflet-skjermdump
Med mplleaflet kan du ta et matplotlib-plot av Geopandas og gjøre et kart utav det.

Men i alle – hvorfor bruker du ikke GIS?

Akkurat denne oppgaven ville de fleste løst raskere i et GIS-system. Men at man kan gjøre dette med ørlite grann kode gir en rekke fordeler:

  • Du er ikke lenger nødt til å ha GIS-ekspertise for å gjøre denne typen analyser
    • Lavere brukerterskel for dem som kan kode – men ikke GIS
  • Du får helt andre muligheter
    • Utrolig rike analysemuligheter
    • Automatisert arbeidsflyt
    • Analyse og videre bruk av data, i andre verktøy og med andre metoder, uten kronglete fileksport.

Det med liten skrift

For å få dette eksemplet til å virke må du installere de programmene som trengs. Som regel går dette helt smertefritt. Men det er en jungel av oppskrifter og biblioteker – og disse kan slå hverandre i hjel.

Du vil også drukne i til dels motstridende informasjon når du søker etter tips. Samme oppgave kan løses på flere måter, og med syntaks og funksjonalitet som har utviklet seg over tid.

Legg igjen en kommentar

Fyll inn i feltene under, eller klikk på et ikon for å logge inn:

WordPress.com-logo

Du kommenterer med bruk av din WordPress.com konto. Logg ut /  Endre )

Google+-bilde

Du kommenterer med bruk av din Google+ konto. Logg ut /  Endre )

Twitter-bilde

Du kommenterer med bruk av din Twitter konto. Logg ut /  Endre )

Facebookbilde

Du kommenterer med bruk av din Facebook konto. Logg ut /  Endre )

w

Kobler til %s

WordPress.com.

opp ↑

%d bloggere like this: