Introdução à visualização espacial em R

62
INFORMÁTICA APLICADA AO PLANEJAMENTO TERRITORIAL Atividade com R CS3406 - Informática Aplicada ao Planejamento Territorial dezembro de 2017 Aula 10 Carolina Moutinho Duque de Pinho [email protected] Vitor Vieira Vasconcelos [email protected] Guilherme Frizzi [email protected]

Transcript of Introdução à visualização espacial em R

INFORMÁTICA APLICADA AO PLANEJAMENTO TERRITORIAL

Atividade com R

CS3406 - Informática Aplicada ao Planejamento Territorial dezembro de 2017 Aula 10

Carolina Moutinho Duque de Pinho [email protected] Vitor Vieira Vasconcelos [email protected] [email protected]

● O que é o R e o R Studio

● Conhecendo o R Studio

● Criação de mapas coropléticos e de símbolos proporcionais com R

● Faces de Chernoff

● Micromaps

● Mapas raster bivariados

ATIVIDADE COM O R

Conhecendo o R : uma visão mais que estatística / Marcio Pupin de. Mello, Luiz Alexandre Peternelli. – Viçosa, MG : Ed. UFV, 2013. 222p

O QUE É O R?

R é uma linguagem e também um ambiente de desenvolvimento integrado que permite cálculos estatísticos, operações matemáticas, manipulação de vetores e matrizes, confecção de gráficos, mapas e manipulação de bancos de dados, entre outros.

Yuri M. Zhukov. Applied Spatial Statistics in R. IQSS, Harvard University. January 19, 2010

O QUE É O R?

Yuri M. Zhukov. Applied Spatial Statistics in R. IQSS, Harvard University. January 19, 2010

O QUE É O R?

Existem diversas GUI (Interface gráfica do utilizador) para R, sendo a mais recentemente o RStudio.

RGUI – vem com uma versão pré-compilada do R para Windows.Tinn-R– Um ambiente de desenvolvimento de código aberto Java Gui for R – Editor baseado em JavaDeducer – Interface gráfica para análise de dados orientado ao uso de menus Rattle GUI – Interface gráfica multi-plataforma R Commander – Interface gráfica multi-plataforma RExcel – usando R e Rcmdr a partir do Microsoft Excel.RKWard – Interface de usuário gráfica extensível e IDE para R.RStudio – multi-plataforma

Janela com os objetos criados na sessão atual do R e uma aba onde o histórico dos comandos executados no Console pode ser visualizado

CONHECENDO O R

Files: conteudo do diretório de trabalho atual

Cria, deleta e renomeia novas pastas e define como diretório de trabalho

CONHECENDO O R

Plots: exibe os gráficos gerados pelo R

Exporta como imagem e PDF

CONHECENDO O R

Packages: apresenta os pacotes instalados e os carregados

Possível procurar novos Packages para instalar e fazer o update

library(boot) #Para carregar um Package já instalado, basta usar o comando acrescentando o nome do pacote entre os parênteses

Sempre que iniciar o R e quiser usar um pacote que não é, por padrão, carregado na inicialização do R, você terá que carregá-lo manualmente.

CONHECENDO O R

CONHECENDO O R

CONHECENDO O R

É possível abrir uma janela onde os scripts são salvos

CONHECENDO O R

Run Objetos criados

x <- 4:20 #criando xy <- x^2 #criando y (igual x ao quadrado)plot (x,y) # plota os pares (x,y)

CONHECENDO O R

O conjunto de dados InsectSprays já vem contido no pacote datasets.

Contém dados de um experimento onde foram contabilizados o número de insetos sobreviventes após a aplicação de seis diferentes inseticidas. Os dados estão estruturados em duas colunas, count com número de insetos vivos e spray com nome do inseticida (BEALL, 1942)

??InsectSpraysBeall, G., (1942) The Transformation of data from entomological field experiments, Biometrika, 29, 243–262.

CONHECENDO O R

boxplot (count~spray,+ data = InsectSprays,+ xlab = "Inseticida", + ylab = "Insetos sobreviventes",+ main = "Boxplot",+ notch = F,+ col = 3)

Run

#boxplot e formula#conjunto de dados#título#texto eixo x#texto eixo y#teste para mediana#cor verde

??InsectSpraysBeall, G., (1942) The Transformation of data from entomological field experiments, Biometrika, 29, 243–262.

CONHECENDO O R

install.packages("rgdal") #vai instalar o Package rgdal

MAPAS COROPLÉTICOS

Ou

Enter library (rgdal) #vai habilitar o Package rgdal

MAPAS COROPLÉTICOS

Habilitando Packagespela janela de Packages

MAPAS COROPLÉTICOS

Pacote para abrir shapefiles

Abrindo um shapefile

MAPAS COROPLÉTICOS

ABC <- readOGR(dsn = "Dados", layer = "abc") #Vai abrir o shapefile com nome “abc” contido na pasta Dados e vai dar o nome de “ABC”

Enter

MAPAS COROPLÉTICOS

Enter

plot (ABC) #vai mostrar o mapa do ABC

MAPAS COROPLÉTICOS

plot (ABC, col = "lightgrey") #vai mostrar o mapa do ABC pintado de cinza claro

Enter

MAPAS COROPLÉTICOS

tabela <- read.csv2("C:/Users/guilherme.frizzi/Desktop/Exercicio_R/Dados/tabela.csv", stringsAsFactors = TRUE) #Abrindo uma tabela com separação “;” e como string

MAPAS COROPLÉTICOS

ABC@data[["cod"]] <- as.integer(ABC@data[["cod"]]) #Mudando os atributos para poder dar o join com a tabela

MAPAS COROPLÉTICOS

MAPAS COROPLÉTICOS

library (dplyr) #habilitando o package

ABC@data #para vermos os dados do shapefile

MAPAS COROPLÉTICOS

Para visualizar os dados da tabela

ABC@data <- left_join(ABC@data, tabela, by = c('cod' = 'cod')) #dando o join com às colunas cod

MAPAS COROPLÉTICOS

MAPAS COROPLÉTICOS

ABC@data #para vermos os dados do shapefile

Juntamos a tabela com o shape

Não tem no básico, precisamos instalar

Com o pacote tmap, os mapas temáticos podem ser gerados com grande flexibilidade. A sintaxe para criar gráficos é semelhante à do ggplot2. O pacote add-on tmaptools contém funções de ferramentas para leitura e processamento de shape files.

MAPAS COROPLÉTICOS

library(tmap) #habilita o Package tmap

vignette("tmap-nutshell") #Abre o help do tmap com exemplos de códigos

MAPAS COROPLÉTICOS

qtm(shp = ABC, fill = "pop", fill.palette = "Blues") #Mostrando nosso mapa ABC classificado com a coluna “pop” por palheta de cores azul

MAPAS COROPLÉTICOS

Difícil análise com dados absolutos!

qtm(shp = ABC, fill = "densidade", fill.palette = "Blues") #Mostrando nosso mapa ABC classificado com a coluna “densidade” por palheta de cores azul

Melhor com valores relativos

qtm (shp =ABC, fill = "densidade", fill.palette="Blues")+tm_shape(ABC)+tm_bubbles("pop","red",border.col="black",border.lwd=1,size.lim=c(0,11e6),sizes.legend=c(1e5,2e5,4e5),title.size="Populaçãototal")+tm_layout(legend.position=c(0.75,0.09))+tm_compass(position=c(0.65,0.15,color.light="grey90"))+tm_scale_bar(breaks = NULL, width = NA, size = 0.5, text.color = NA,color.dark = "black", color.light = "white", lwd = 1, position = NA,just = NA)#Mostrando nosso mapa ABC classificado com a coluna “densidade” por palheta de cores azul + “bolhas” em vermelho com limites pretos de tamanhos variando de 0 a 11e6+ legenda com 3 tamanhos e título de “População total”

library (tmaptools) #habilita o Package tmaptools

ABC_WGS84 <- spTransform(ABC, CRS("+init=epsg:4326")) #transforma o ABC para WGS84

library (OpenStreetMap) #habilita o Package

Imagem <- tmaptools::read_osm(bbox(ABC_WGS84)) #Cria a imagem

tm_shape(imagem) + tm_raster() + tm_shape(ABC_WGS84) +tm_fill("densidade", fill.title = "densidade 2010", scale = 0.8, alpha = 0.5) + tm_layout(legend.position = c(0.83,0.02))#abre o nosso arquivo de “imagem”, o shape do ABC em WGS, preenchido por densidade, com escala de 0.8 e transparência de 0,5

tm_shape(imagem) + tm_raster() + tm_shape(ABC_WGS84) +tm_fill("densidade", fill.title = "densidade 2010", scale = 0.8, alpha = 0.5) + tm_layout(legend.position=c(0.75,0.09))+tm_compass(position=c(0.65,0.15,color.light="grey90"))+tm_scale_bar(breaks = NULL, width = NA, size = 0.5, text.color = NA,color.dark = "black", color.light = "white", lwd = 1, position = NA,just = NA)+tm_grid(x = NA, y = NA, n.x = NA, n.y = NA, projection = NA,col = NA, lwd = 1, alpha = NA, labels.size = 0.6, labels.col = NA,labels.rot = c(0, 0), labels.format = list(big.mark = ","),labels.margin.x = 0, labels.margin.y = 0, labels.inside.frame = TRUE)

#colocando grid de coordenadas, norte e escala gráfica

FACES DE CHERNOFF

KLEINER, Beat; HARTIGAN, John A. Representing points in many dimensions by trees and castles. Journal of the American Statistical Association, v. 76, n. 374, p. 260-269, jun. 1981.

considerado atualmente um dos pais dos gráficos estatísticos, William Playfair (1801), disse que “nenhum estudo é menos sedutor ou mais tedioso que a Estatística”

Desafio dos dados multivariados. A diversidade de variáveis dificulta a representação.

Surgiram na década de 1970, diversas propostas de representação visual, compondo um grupo de técnicas denominado “iconográficas” . Sua propriedade fundamental é o mapeamento das variáveis em características particulares de ícones.

Cada elemento do ícone representa um atributo dos dados multidimensionais , facilitando o agrupamento de indivíduos e a descoberta de relações e interações entre variáveis.

FACES DE CHERNOFF

KLEINER, Beat; HARTIGAN, John A. Representing points in many dimensions by trees and castles. Journal of the American Statistical Association, v. 76, n. 374, p. 260-269, jun. 1981.

Cada característica na face vai representar um atributo no dado multivariado

FACES DE CHERNOFF

MapCarte 353/365: Life in Los Angeles by Eugene Turner, 1977

Riqueza

Taxa de desemprego

Estresse urbano

Proporção de população branca

FACES DE CHERNOFF

SILVA, Levi Alã Neves dos. Contribuição da mineração de dados e da otimização heurística para a interpretação dos dados da produção científica brasileira . 2011. Dissertação (Mestrado em Ciências da Informação) – Universidade Federal da Bahia, Salvador, 2011.

quantidade de periódicos nacionais por “altura do rosto”;

periódicos internacionais por “largura do rosto”;

trabalhos completos publicados em Anais e eventos pelo “tamanho do nariz”;

capítulos de livros pela “altura dos olhos”;

resumos em periódicos especializados pela “abertura da boca”; e

resumos em anais por “tamanho da boca”.

tabela2 <- read.csv2("C:/Users/guilherme.frizzi/Desktop/Exercicio_R/Dados/tabela2.csv", stringsAsFactors = TRUE)#Abrindo uma tabela com separação “;” e como string

FACES DE CHERNOFF

install.packages("tcltk2")install.packages("aplpack")

library(tcltk2)library(aplpack)

FACES DE CHERNOFF

faces (tabela2 [,9:29])

#usa todas as feições e apenas às colunas de 9 a 29

altura do rostolargura do rostoestrutura do rostoaltura da bocalargura da bocasorridentealtura dos olhoslargura dos olhos

altura do cabelolargura do cabeloestilo de cabeloaltura do narizlargura do narizlargura da orelhaaltura da orelha

FACES DE CHERNOFF

faces (tabela2 [,9:29], face.type=0)

#usa todas as feições e apenas às colunas de 9 a 29 e deixa sem cores

altura do rostolargura do rostoestrutura do rostoaltura da bocalargura da bocasorridentealtura dos olhoslargura dos olhos

altura do cabelolargura do cabeloestilo de cabeloaltura do narizlargura do narizlargura da orelhaaltura da orelha

FACES DE CHERNOFF

faces (tabela2 [,9:29], labels = tabela2$MUNICIPIO, face.type=0)

#usa todas as feições e apenas às colunas de 9 a 29, coloca labels como MUNICÍPIO e deixa sem cores

altura do rostolargura do rostoestrutura do rostoaltura da bocalargura da bocasorridentealtura dos olhoslargura dos olhos

altura do cabelolargura do cabeloestilo de cabeloaltura do narizlargura do narizlargura da orelhaaltura da orelha

FACES DE CHERNOFF

plot(tabela2[,9:10],bty="n") #plota às colunas 9 e 10 da tabela2 com tipo sem borda

a<-faces(tabela2[1:7, 9:29],plot=FALSE) #salva às faces de todas às feições com os atributos das colunas 9 a 29

plot.faces(a,tabela2[1:7,9],tabela2[1:7,10],width=2,height=2) #plota as faces “a” nos tamanhos 2

FACES DE CHERNOFF

Resultado

E com nome dos municipios?

plot.faces(a,tabela2[1:7,9],tabela2[1:7,10],width=2,height=2,labels = tabela2$MUNICIPIO) #com nome dos municipios

FACES DE CHERNOFF

MicroMaps são uma maneira poderosa de exibir dados onde a exibição inclui mapas pequenos e leves para fornecer informações geográficas sobre os dados. Esta informação geográfica fornece pistas sobre a relação entre os dados que podem levar a mais informações.

MICROMAPS

MICROMAPS

#Packages para instalar e carregar:install.packages("maptools")install.packages("RColorBrewer")install.packages("rgdal")install.packages("sp")install.packages("ggplot2")install.packages("grid")install.packages("micromap")

library(maptools)library(RColorBrewer)library(rgdal)library(sp)library(ggplot2)library(grid)library(micromap)

data("USstates") #abrimos os dados vetoriais dos estados americanoshead(USstates@data) #vemos seus atributosplot(USstates) #plota o mapa dos estados americanosstatePolys <- create_map_table(USstates, 'ST') #transforma o mapa em coordenadashead(statePolys) #mostra a tabeladata("edPov") #abre os dados de educação e pobreza dos estados americanos

#vemos seus atributos

#plota o mapa dos estados americanos

#mostra a tabela

MICROMAPS

# construindo o micromaps lmplot(stat.data=edPov, map.data=statePolys,

panel.types=c('labels', 'dot', 'dot','map'), panel.data=list('state','pov','ed', NA), ord.by='pov', grouping=5, median.row=TRUE, map.link=c('StateAb','ID'))

#dado não espacial #dado espacial#estrutura do micromaps#variaveis selecionadas#variavel que ordena #unidades por agrupamento#colunas para “join

MICROMAPS

poligonos <- create_map_table(ABC, 'ID') #transforma o mapa em coordenadas de ponto

lmplot(stat.data=tabela2,map.data=poligonos,panel.types=c('labels', 'dot', 'dot','map'),panel.data=list('MUNICIPIO','Pobres','PIBperCap', NA),ord.by='Pobres',grouping=3, median.row=TRUE,plot.panel.spacing=1,map.link=c('Com','region'))

% de pobres / PIB per cap

MICROMAPS

MULTIVARIADO COM IMAGENS

● Dois rasters da mesma área;

● Com variáveis diferentes;

● Com a mesma resolução e projeção;

● Relação entre duas variáveis espaciais (raster)

MULTIVARIADO COM IMAGENS

install.packages("classInt")install.packages("raster")install.packages("rgdal")install.packages("dismo")install.packages("XML")install.packages("maps")install.packages("sp")

library(classInt)library(raster)library(rgdal)library(dismo)library(XML)library(maps)library(sp)

#Criando uma matriz de corescolmat<-function(nquantiles=10, upperleft=rgb(0,150,235, maxColorValue=255), upperright=rgb(130,0,80, maxColorValue=255), bottomleft="grey", bottomright=rgb(255,230,15, maxColorValue=255), xlab="x label", ylab="y label"){my.data<-seq(0,1,.01)my.class<-classIntervals(my.data,n=nquantiles,style="quantile")my.pal.1<-findColours(my.class,c(upperleft,bottomleft))my.pal.2<-findColours(my.class,c(upperright, bottomright))col.matrix<-matrix(nrow = 101, ncol = 101, NA)for(i in 1:101){my.col<-c(paste(my.pal.1[i]),paste(my.pal.2[i]))col.matrix[102-i,]<-findColours(my.class,my.col)}plot(c(1,1),pch=19,col=my.pal.1, cex=0.5,xlim=c(0,1),ylim=c(0,1),frame.plot=F, xlab=xlab, ylab=ylab,cex.lab=1.3)for(i in 1:101){col.temp<-col.matrix[i-1,]points(my.data,rep((i-1)/100,101),pch=15,col=col.temp, cex=1)}seqs<-seq(0,100,(100/nquantiles))seqs[1]<-1col.matrix<-col.matrix[c(seqs), c(seqs)]}

#definindo um esquema de 10x10col.matrix<-colmat(nquantiles=10)

MULTIVARIADO COM IMAGENS

MULTIVARIADO COM IMAGENS

#Função para gerar o mapa bivariadobivariate.map<-function(rasterx, rastery, colormatrix=col.matrix, nquantiles=10){quanmean<-getValues(rasterx)temp<-data.frame(quanmean, quantile=rep(NA, length(quanmean)))brks<-with(temp, quantile(temp,na.rm=TRUE, probs = c(seq(0,1,1/nquantiles))))r1<-within(temp, quantile <- cut(quanmean, breaks = brks, labels = 2:length(brks),include.lowest = TRUE))quantr<-data.frame(r1[,2]) quanvar<-getValues(rastery)temp<-data.frame(quanvar, quantile=rep(NA, length(quanvar)))brks<-with(temp, quantile(temp,na.rm=TRUE, probs = c(seq(0,1,1/nquantiles))))r2<-within(temp, quantile <- cut(quanvar, breaks = brks, labels = 2:length(brks),include.lowest = TRUE))quantr2<-data.frame(r2[,2])as.numeric.factor<-function(x) {as.numeric(levels(x))[x]}col.matrix2<-colormatrixcn<-unique(colormatrix)for(i in 1:length(col.matrix2)){ifelse(is.na(col.matrix2[i]),col.matrix2[i]<-1,col.matrix2[i]<-which(col.matrix2[i]==cn)[1])}cols<-numeric(length(quantr[,1]))for(i in 1:length(quantr[,1])){a<-as.numeric.factor(quantr[i,1])b<-as.numeric.factor(quantr2[i,1])cols[i]<-as.numeric(col.matrix2[b,a])}r<-rasterxr[1:length(r)]<-colsreturn(r)}

# carregar o primeiro raster ("amphibians.grd")raster.amphibians<-raster(choose.files("amphibians.grd"))

# carregar o segundo raster ("reptiles.grd")raster.reptiles<-raster(choose.files("reptiles.grd"))

Vai abrir uma janela para selecionarmos o arquivo

MULTIVARIADO COM IMAGENS

#plotando o mapa de anfibios my.colors = colorRampPalette(c("white","lightblue", "yellow","orangered", "red"))plot(raster.amphibians,frame.plot=F,axes=F,box=F,add=F,legend.width=1,legend.shrink=1,col=my.colors(255)) map(interior=T,add=T)

MULTIVARIADO COM IMAGENS

#plotando o mapa de repteis my.colors = colorRampPalette(c("white","lightblue", "yellow","orangered", "red"))plot(raster.reptiles,frame.plot=F,axes=F,box=F,add=F,legend.width=1,legend.shrink=1,col=my.colors(255)) map(interior=T,add=T)

MULTIVARIADO COM IMAGENS

#usando a função do mapa bivariadobivmap<-bivariate.map(raster.amphibians,raster.reptiles, colormatrix=col.matrix, nquantiles=10)

#plotando o mapa bivariadoplot(bivmap,frame.plot=F,axes=F,box=F,add=F,legend=F,col=as.vector(col.matrix))map(interior=T,add=T)

OUTROS PACOTES

maptools, ggmap, cartography e quickmapr: visualização de mapas (como o tmap)

TgoogleMaps e googleVis: visualização de dados sobre google maps

RColorBrewer: paletas de cores para mapas

GeoXp, leaflet, mapview e mapedit: análise exploratória espacial (estilo Geovista)

raster: análise de bases raster

rasterVis: visualização univariada e multivariada de rasters

KernSmooth: mapas de kernel

spatstat, spdep e gstat: interpolação e análise espacial estatística

cartogram e tilegramsR: cartogramas

RQGIS, RSAGA, rgrass7: usar funções do QGis, SAGA e Grass dentro do R

RStoolbox: sensoriamento remoto

Fim!

Qualquer dúvida

Carolina Moutinho Duque de Pinho [email protected] Vitor Vieira Vasconcelos [email protected] [email protected]