Erdviniai duomenys R programavimo kalboje Naudojami paketai ir
Erdviniai duomenys R programavimo kalboje
Naudojami paketai ir duomenys • Sukurkite projektą erdviniai_duomenys ir naują kodą erdvinai_duomenys. R • Atsisiųskite iš www. hkk. gf. vu. lt duomenis Erdviniai_duomenys. zip ir išskleiskite juos projekto darbinėje aplinkoje. Failai turi būti pačioje direktorijoje, o ne subdirektorijoje. • Įsikelkite su funkcija load() duomenis Erdviniai_duomenys. Rdata • R turėtų būti suinstaliuoti ir kode su funkcija library() aktyvuoti šie paketai: • library(rgdal) • library(sp) • library(raster) • library(rworldmap) • library(ggspatial)
Vektorinių duomenų kūrimas • Vektoriniai duomenys R kuriami sp paketo funkcijomis Spatial. Points(), Spatial. Lines() ir Spatial. Polygons() pagal koordinačių porų data frame arba matricą. • Sukurkime taškų sluoksnį pagal MS koordinates ms. taskai<-Spatial. Points(ms[, 1: 2]) plot(ms. taskai, axes=TRUE)
Vektorinių duomenų kūrimas • ms. taskai neturi koordinačių sistemos, todėl jų tikrosios padėties pavaizduoti negalime. • Erdvinių duomenų R koordinačių sistema nusakoma duomenų atributu crs(). • Patikrinkite kokia ms. taskai koordinačių sistema crs(ms. taskai) • Žinodami, kokioje sistemoje pateiktos koordinatės sluoksniui galime priskirti koordinačių sistemą: . . <-crs('+proj=longlat +datum=WGS 84') crs(ms. taskai) plot(ms. taskai, axes=TRUE) • Koordinačių sistemų parametrus galima rasti http: //spatialreference. org. R naudojama Proj 4 sistema.
Vektorinių duomenų kūrimas • ms. taskai turi tik geometriją. Norint jiems priskirti atributinius duomenis naudojame funkciją Spatial. Points. Data. Frame(). ms. taskai. df<-Spatial. Points. Data. Frame(ms. taskai, data=ms[, 3: 4]) plot(ms. taskai. df, col=ms. taskai. df$height ) • Norėdami išsaugoti sukurtą sluoksnį naudojame rgdal paketo funkciją write. OGR(). • Išsaugokime direktorijoje „taškai“ vektorinį sluoksnį MS ESRI Shapefile formatu: dir. create("taskai") write. OGR(ms. taskai. df, dsn="taskai", layer="MS", driver="ESRI Shapefile")
Vektorinių duomenų įsikėlimas • ESRI Shapefile duomenis į R galime įsikelti naudodami rgdal paketo funkciją read. OGR(). balt<-read. OGR("Baltic. States. shp") print(balt) plot(balt) • Su funkciją read. OGR() įkeliama geometrija, atributiniai duomenys ir koordinačių sistema.
Vektorinių duomenų vizualizavimas • Spatial*Data. Frame duomenis galima pavaizduoti su plot() arba spplot() funkcijomis. plot(balt, col=balt$Short) spplot(balt, "Pop") spplot(balt, "Short")
Rastro kūrimas • Rastras reikšmę ir padėtį turinčių gardelių rinkinys. • Rastras R gali būti: • raster paketo objektai: Raster. Layer, Raster. Stack ir Raster. Brick • sp paketo objektai Spatial. Grid ir Spatial. Grid. Data. Frame • Rastras panašus į matricą, tačiau pastarosios nariai neturi geografinės padėties.
Rastro kūrimas • Vizualizuokime dirvos paviršiaus duomenų matricą tsoil. image(tsoil) Raster. Layer objektą iš matricos darome su funkcija raster(). tsoil_raster<-raster(tsoil) plot(tsoil_raster)
Rastro kūrimas • Rastro objektą galima pasukti 90°, naudojant t() funkciją skirtą transponuoti matricas. tsoil_raster<-t(tsoil_raster) plot(tsoil_raster) • Apversti rastro objektą pagal x arba y ašį skirta funkcija flip(). tsoil_raster<-flip(tsoil_raster, direction = "y") plot(tsoil_raster)
Rastro kūrimas • Rastro objektui kaip ir vektoriniams duomenims reikia suteikti koordinačių sistemą. crs(tsoil_raster)<-crs('+proj=longlat +datum=WGS 84') plot(tsoil_raster) • Rastro objektui koordinatės suteikiamos nurodant erdvinės aprėpties ribas (xmin, xmax, ymin, ymax). extent(tsoil_raster)<-c(0. 5, 40. 5, 30. 5, 70. 5) plot(tsoil_raster) print(tsoil_raster)
Rastro ir vektorinių duomenų vizualizavimas • Geografiškai orientuotus duomenis galima sudėti vienas ant kito sudarant kelių sluoksnių žemėlapį. • Atvaizduokime rworldmap paketo pasaulio šalių žemėlapį. library(rworldmap) plot(countries. Coarse) • Norėdami pridėti sluoksnius į kuriamą žemėlapį juos piešiame naudodami argumentą add=TRUE. plot(tsoil_raster) plot(balt, add=TRUE) plot(countries. Coarse, add=TRUE)
Rastro importavimas/ eksportavimas • Rastro failus galima importuoti naudojant sp ir raster paketo funkcijas read. GDAL() ir raster(). • Įkelkime paviršiaus ir 850 mb temperatūros duomenis. t 850<-raster("t 850. tif") plot(t 850) tsurf<-read. GDAL("tsurf. tif") plot(tsurf) • Eksportuojame rastrą priklausomai nuo jo formato write. Raster() arba write. GDAL funkcijomis. write. Raster(t 850, "t 850_out. tif") write. GDAL(tsurf, "tsurf_out. tif")
Daugiasluoksniai rastro objektai • Spatial. Grid. Data. Frame objekte rastro sluoksniai saugomi kaip kintamieji (įrašai skirtinguose data frame stulpeliuose). • Raster. Layer objektus į daugiasluoksnį rastrą galima paversti naudojant stack() ir brick() funkcijas. • Daugiasluoksnius rastrinius duomenis į R taip pat galima įsikelti naudojant stack() ir brick() funkcijas. • stack() skirtas sujungti kelis rasto objektus arba failus stack(r 1, r 2. . . ). • brick() naudojamas įsikelti daugiasluoksnius duomenis arba paversti Spatial. Grid. Data. Frame į Raster. Brick objektą brick(x).
Daugiasluoksniai rastro objektai • Sukurkite daugiasluoksnį rastro objektą, kuriame vienas sluoksnis būtų temperatūra 850 mb, o kitas ties žemės paviršiumi. t<-stack("t 850. tif", "tsurf. tif") plot(t) • Klimato ir meteorologiniai erdvinai duomenys gali būti pateikiami nuo 0°dienovidinio. Analizuojant Europos regioną patogiau kai duomenys pateikiami nuo 180°dienovidinio. Duomenis galime pasukti naudodami funkciją rotate() t. pasuktas<-rotate(t) plot(t. pasuktas) write. Raster(t. pasuktas, "output. tif", overwrite=TRUE)
Vektorinių duomenų operacijos • Spatial*Data. Frame duomenų atributinę informaciją (data frame dalį) gauname funkcija data. frame() atributiniai. duomenys<-data. frame(ms. taskai. df) • Objektų viršūnių koordinates su funkcija geom() geometriniai. duomenys<-geom(balt)
Vektorinių duomenų operacijos • Spatial*Data. Frame objektams tinka visos operacijos, kurias galime daryti su data frame objektais. • Gaukime vieno kintamojo reikšmes ms. taskai. df$Stations • Sukurkime naują atributą – aukštį pėdomis print(ms. taskai. df) ms. taskai. df$pedos<-ms. taskai. df$height*3. 28 print(ms. taskai. df) • Parinkime objektus pagal atributus zemos. stotys<-ms. taskai. df[ms. taskai. df$pedos<=100, ] spplot(zemos. stotys, "pedos")
Vektorinių duomenų operacijos Funkcija Paaiškinimas x<-bind(a, b) Sujungia a ir b vektorinius sluoksnius į vieną, nepriklausomai ar atributinė informacija sutampa ar ne. x<-aggregate(p, by="variable") Apjungia objektus vektoriniame sluoksnyje kurių kintamojo variable reikšmės sutampa. x<-erase(a, b) Sukuria sluoksnį su a dalis kurios nepatenka į b. x<-intersect (a, b) Sukuria sluoksnį su a dalimis kurios patenka į b. x<-union (a, b) Sukuria sluoksnį kuriame yra visi a ir b erdvinio persidengimo deriniai.
Rastro duomenų operacijos • Su rastro objektais galima atlikti aritmetinius loginius veiksmus, pritaikyti funkcijas min(), max() ir kitais kaip paprastiems R objektams. • Apskaičiuokime skirtumą tarp t daugiasluoksnio rastro sluoksnių delta. t<-t$tsurf-t$t 850 plot(delta. t)
Rastro duomenų aritmetinės operacijos • Apskaičiuokime santykį tarp t daugiasluoksnio rastro sluoksnių ratio. t<-t$tsurf / t$t 850 plot(ratio. t)
Rastro duomenų loginės operacijos • Identifikuokime teritoriją, kur santykis daugiau už -2 ir mažiau už 2 (pašalinkime išskirtis) ratio. t. norm<-ratio. t<=2 & ratio. t>=-2 plot(ratio. t. norm)
Rastro reikšmių reklasifikavimas ir keitimas • Pakeiskime ratio. t. norm rastro reikšmes iš TRUE į 1, ir iš FALSE į NA • Naudosime funkciją subs() kuri pagal data frame stulpeliu reikšmes pakeičia rastro reikšmes keitimu. lentele<-data. frame(yra=c(TRUE , FALSE), bus=c(1, NA)) kauke<-subs(ratio. t. norm, keitimu. lentele) • Su funkcija reclassify() galima pakeisti rastro reikšmių intervalą į naujas reikšmes. • Reikšmes į intervalus galima suskaidyti funkcija cut().
Rastro duomenų kaukė • Rastrinio sluoksnio ląsteles galime parinkti pagal kito rastro reikšmes (pagal numatymą NA) arba vektorinį sluoksnį su funkcija mask(). • Sukurkime rastrą, kuriame būtų ratio. t reikšmės būtų prilygintos NA tose ląstelėse, kur kaukės reikšmės yra NA. ratio. t. norm. mask<-mask(ratio. t, kauke) plot(ratio. t. norm. mask, col = topo. colors(20))
Rastro duomenų kaukė • Pritaikykime funkcija mask() temperatūrų skirtumų rastrui delta. t su vektoriniu objektu balt. delta. t. baltija<-mask(delta. t, balt) plot(delta. t. baltija, xlim=c(20, 30), ylim=c(52, 62)) plot(balt, add=TRUE)
Rastro reikšmių apibendrinimo funkcijos • Rastro reikšmes galima apibendrinti funkcija cell. Stats(), kurios argumentai rastro objektas ir pritaikoma funkcija. cell. Stats(t, "mean") • Rastro reikšmių pasiskirsimą įvertiname funkcija freq(). freq(t) • Rastro reikšmių histogramą įvertiname funkcija hist(). hist(t) • Rastro reikšmių percentilius įvertiname funkcija quantile(). quantile(t, c(0. 05, 0. 95))
Rastras iš vektorinių duomenų • Analizuojant rastrinius duomenis dažnai naudojamos zonos kurias reikia nurodyti naudojant rastro objektus, o turime zonas kaip vektorinį sluoksnį. • Rastrinį sluoksnį iš vektorinio galime paversti funkcija rasterize(), kuriai nurodome kokio rastrinio sluoksnio pagrindu bus parinktos sukurto rastro ląstelės, kokia bus aprėptis ir koordinačių sistema. balt. raster<-rasterize(balt, t) print(balt. raster) plot(balt. raster)
Zonų apibendrinimas • Su funkcija zonal() galime suskaičiuoti funkcijos reikšmes kiekvienai zonai. • Apskaičiuokime paviršiaus ir 850 mb temperatūros vidurkius Baltijos šalyse zonal(t, balt. raster, "mean")
Rastro ląstelių reikšmių gavimas • Funkcija get. Values() gaunamos rastro eilutės arba eilučių reikšmės. • Funkcija get. Values. Block () gaunamos nurodytų eilučių ir stulpelių bloko rastro reikšmės. • Su funkcija extract() galima parinkti duomenis pagal koordinates taškus, linijas, poligonus arba extent. temp. MS<-extract(t, ms. taskai. df) Prijunkime gautus rezultatus prie ms. taskai. df ir vizualizuokime 850 mb temperatūrą MS temp. MS. taskai<-cbind(ms. taskai. df, temp. MS) spplot(temp. MS. taskai, "t 850")
ggmap ir baziniai žemėlapiai • ggmap paketas leidžia pasidaryti bazinį žemėlapį ir ant jo pavaizduoti erdvinius duomenis. • Žemėlapis daromas 3 etapais: 1. Su funkcija get_map() atsisiunčiamas bazinis žemėlapis, 2. Su funkcija ggmap() atvaizduojamas žemėlapio pagrindas 3. su geom_* pridedami norimi sluoksniai
ggmap ir baziniai žemėlapiai • Funkcija get_map() atsiunčia žemėlapį pagal koordinates ar raktinius žodžius. pagrindas 4<-get_map( „Lithuania", zoom = 4) ggmap(pagrindas 4) pagrindas 6<-get_map( "Latvia", zoom = 6) ggmap(pagrindas 6)
ggmap ir baziniai žemėlapiai • Sukurkime žemėlapį kuriame pagal koordinates iš ms data frame būtų pavaizduotos MS. ggmap(pagrindas 6)+geom_point(data = ms, aes(x=lon, y=lat)) • Paketas ggspatial leidžia panaudoti Spatial* duomenis su geom_spatial library(ggspatial) ggmap(pagrindas 6)+geom_spatial(ms. taskai. df)
- Slides: 31