scyzoRyk

czyli podstawowe narzędzia w pracy geografa

Jakub Nowosad (nowosad@amu.edu.pl)
Instytut Geoekologii i Geoinformacji, UAM

Ja


  • Instytut Geoekologii i Geoinformacji
  • Analizy przetrzenne
  • Geostatystyka

Po co geografowi R?

R?


  • automatyzacja
  • powtarzalność
  • modyfikowalność
  • wydajność (?)
  • społeczność R
    • stackoverflow.com
    • r-bloggers.com

Przetwarzanie danych

plyr to zestaw narzędzi wykorzystywanych do przetwarzania danych. Dzieli on dane na jednorodne fragmenty, zastosowuje na nich wybrane funkcje a następnie łączy fragmenty w całość (split-apply-combine).

plyr pozwala na np. podsumowywanie danych w grupach, transformacje danych, dopasowywanie tego samego modelu do podzbiorów danych. Pakiet ten posiada prostą składnię i pozwala na przetwarzanie ram danych (ang. data.frame), matryc i list.

library(plyr)
system.time(suma.opad.ddply <- ddply(opadowe, ~Kod + rok, summarize, suma = sum(Opad)))
##    user  system elapsed 
##  18.275   0.745  19.124
head(suma.opad.ddply)
##    Kod  rok  suma
## 1 1201 1956 763.4
## 2 1201 1957 617.6
## 3 1201 1958 672.3
## 4 1201 1959 387.8
## 5 1201 1960 814.0
## 6 1201 1961 688.9

data.table pozwala na szybkie dzielenie, grupowanie, aktualizację danych, etc.

library(data.table)
opadoweDT <- data.table(opadowe)
setkey(opadoweDT, Kod, Data)
system.time(suma.opad.DT <- opadoweDT[, list(suma = sum(Opad)), by = list(Kod, 
    rok)])
##    user  system elapsed 
##   0.801   0.053   0.914
head(suma.opad.DT)
##     Kod  rok  suma
## 1: 1201 1956 763.4
## 2: 1201 1957 617.6
## 3: 1201 1958 672.3
## 4: 1201 1959 387.8
## 5: 1201 1960 814.0
## 6: 1201 1961 688.9

dplyr jest oparty o plyr. Jego głównymi zaletami w stosunku do poprzednika jest wydajność oraz operowanie na wszelkich danych tabelarycznych - zarówno ramkach danych, ale też tabelach z baz danych (PostgreSQL, MySQL, SQLite).

dplyr wprowadza również operator %.% pozwalający na łączenie kolejnych funkcji w jeden ciąg.

library(dplyr)
system.time( 
  suma.opad.dplyr <- opadowe %.%
    group_by(Kod, rok) %.%
    summarise(suma = sum(Opad)) %.%
    arrange(Kod, rok)
)
##    user  system elapsed 
##   0.803   0.000   0.807
head(suma.opad.dplyr)
## Source: local data frame [6 x 3]
## Groups: Kod
## 
##    Kod  rok  suma
## 1 1201 1956 763.4
## 2 1201 1957 617.6
## 3 1201 1958 672.3
## 4 1201 1959 387.8
## 5 1201 1960 814.0
## 6 1201 1961 688.9

Co dalej?

Wizualizacja danych

library(ggplot2)

plot of chunk unnamed-chunk-10

library(rCharts)

Co dalej?

Mapy

library(ggplot2)
library(raster)

plot of chunk unnamed-chunk-18

library(ggmap)