Assentamento/tutoriais/Tutorial_1_OrganizarDadosCo...

418 lines
14 KiB
Plaintext

---
title: "Organizando Dados ColetaKobo"
author: "Adenor Vicente Wendling e José Bran (RmierculisTime)"
date: "08/11/2020"
output:
word_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r echo=FALSE, message=FALSE}
require(dplyr)
require(tidyr)
```
# 1. Introdução
Este script tem como objetivo organizar os dados coletados (pontos de GPS) pelo Kobotool para serem usados no Qgis, na elaboração de mapas temáticos. Os dados originais provém do aplicativo kobotols <https://www.kobotoolbox.org/>, coletados para um trabalho de elaboração demapas temáticos da area dos assentamentos de Palmas, PR. Em cada propriedade visitada, foram coletados entre 1 a 5 pontos na área agrícola. Os dados dos pontos estão em uma linha, e sua utilização exige que estejam organizados de forma a que cada ponto (Lat, Long, Alt e número do ponto), esteja em uma coluna. Ou seja, de cada linha, deve ter de 1 a 5 novas colunas.
O script foi escrito em duas mãos. Inicialmente o Adenor fez o script, com suas possibilidades, e posteriormente o José escreveu a parte do pivot_longer. Ao final, um mapa com os pontos, para demonstra o resultado.
# 2. Organizar os dados coletados
## 2.1. Importar os dados
```{r}
#Pontos <- read.csv("training/wrangling/Coleta_Assentamento_SL_1.csv", sep=";") #para rodar com "run"
Pontos <- read.csv("data/Coleta_Assentamento_SL_1.csv")
colnames(Pontos)
```
## 2.2 Renomear e selecionar colunas de interesse
Inicialmente será trabalhado com os dados: Nome (esposo e esposa), Area do imóvel, e os pontos de moradia e da coleta dos dados.
Cada ponto de coleta de solos está em 5 colunas de interesse distintas: Ponto"x", Ponto"x"Lat, Ponto"x"Long, Ponto"x"Alt e ponto"x"GPS.
```{r echo=FALSE}
PontosRe <- Pontos%>%
rename( esposo = "Esposo",
esposa = "Esposa",
area = "Qual.a.Área.total.da.propriedade.",
moradia = "Local.da.moradia.principal",
Ponto_1_Unico = "Ponto.Coleta.area.1",
Ponto_1_Lat = "X_Ponto.Coleta.area.1_latitude",
Ponto_1_Long = "X_Ponto.Coleta.area.1_longitude",
Ponto_1_Alt = "X_Ponto.Coleta.area.1_altitude",
Ponto_1_GPS= "Número.do.ponto.1.no.GPS",
Ponto_2_Unico = "Ponto.Coleta.area.2",
Ponto_2_Lat = "X_Ponto.Coleta.area.2_latitude",
Ponto_2_Long = "X_Ponto.Coleta.area.2_longitude",
Ponto_2_Alt = "X_Ponto.Coleta.area.2_altitude",
Ponto_2_GPS= "Número.do.ponto.2.no.GPS",
Ponto_3_Unico = "Ponto.Coleta.area.3",
Ponto_3_Lat = "X_Ponto.Coleta.area.3_latitude",
Ponto_3_Long = "X_Ponto.Coleta.area.3_longitude",
Ponto_3_Alt = "X_Ponto.Coleta.area.3_altitude",
Ponto_3_GPS= "Número.do.ponto.3.no.GPS",
Ponto_4_Unico = "Ponto.Coleta.area.4",
Ponto_4_Lat = "X_Ponto.Coleta.area.4_latitude",
Ponto_4_Long = "X_Ponto.Coleta.area.4_longitude",
Ponto_4_Alt = "X_Ponto.Coleta.area.4_altitude",
Ponto_4_GPS= "Número.do.ponto.4.no.GPS",
Ponto_5_Unico = "Ponto.Coleta.area.5",
Ponto_5_Lat = "X_Ponto.Coleta.area.5_latitude",
Ponto_5_Long = "X_Ponto.Coleta.area.5_longitude",
Ponto_5_Alt = "X_Ponto.Coleta.area.5_altitude",
Ponto_5_GPS= "Número.do.ponto.5.no.GPS",)%>%
select( esposo,
esposa,
moradia,
area,
Ponto_1_Unico,
Ponto_1_Long,
Ponto_1_Lat,
Ponto_1_Alt,
Ponto_1_GPS,
Ponto_2_Unico,
Ponto_2_Long,
Ponto_2_Lat,
Ponto_2_Alt,
Ponto_2_GPS,
Ponto_3_Unico,
Ponto_3_Long,
Ponto_3_Lat,
Ponto_3_Alt,
Ponto_3_GPS,
Ponto_4_Unico,
Ponto_4_Long,
Ponto_4_Lat,
Ponto_4_Alt,
Ponto_4_GPS,
Ponto_5_Unico,
Ponto_5_Long,
Ponto_5_Lat,
Ponto_5_Alt,
Ponto_5_GPS,)%>%
unite(Ponto_Nome, c("esposo", "esposa"))
#colnames(PontosRe)
```
O arquivo possui algumas linhas sem informações. Esses erros ocorreram durante o período de coleta, especialmente durante os testes, e essas linhas precisam ser eliminados do arquivo. Por sorte, esses arquivos possue NA na coluna Ponto_1_Lat.
## 2.3. Eliminar linhas vazias
```{r, echo=FALSE}
PontosRen<-PontosRe%>%
filter(!is.na(Ponto_1_Lat))
```
## 2.4. Organizar tabela
Como já foi relatado na introduão, os dados dos pontos de 1 a 5 estão na mesma linha e em colunas distintas, por estabelecimento, e é necessário que estejam em linhas separadas, porém na mesma coluna.
Para isso será utilizado o comando **pivot_longer()** para **Alongar** a tabela.
Inicialmente a tabela original será dividida em , sendo uma com as colunas com final "Unico", outra com final "Lat", outra com final "Long, outra última com final "Alt"e a última com fianl "GPS". Feito isso, todas serão alongadas, criando 5 tabelas, cada uma contendo uma das informações relevantes em uma única coluna. Finalmente, as cinco tabelas serão reunidas novamente.
### 2.4.1. divisão da tabela e 5 novas
```{r Repartir_Tables}
#colnames(PontosRen)
Unico <- PontosRen%>%
select("Ponto_Nome", "moradia", "area", ends_with("Unico"))
Latitudes <- PontosRen%>%
select("Ponto_Nome", "moradia", "area",ends_with("Lat"))
Longitudes <- PontosRen%>%
select("Ponto_Nome", "moradia", "area",ends_with("Long"))
Altitudes<-PontosRen%>%
select("Ponto_Nome", "moradia", "area",ends_with("Alt"))
GPS<-PontosRen%>%
select("Ponto_Nome", "moradia", "area",ends_with("GPS"))
#View(GPS)
```
Temos agora cinco tabelas contendo 11 linhas e 5 colunas cada. As tabelas são: Unico, Latitudes, Longitudes, Altitudes e GPS.
## 2.5. Alongamento das tabelas - Adenor
Foram "alongadas" os arquivos criados acima, para ter as colunas com todos os dados necessários.
```{r Alongando}
Unico_longer <- Unico%>%
pivot_longer(cols = ends_with("Unico"),
names_to = "Set")
Lat_longer<-Latitudes%>%
pivot_longer(cols = ends_with("Lat"),
names_to = "Lat")
Long_longer<-Longitudes%>%
pivot_longer(cols = ends_with("Long"),
names_to="Long")
Alt_longer<-Altitudes%>%
pivot_longer(cols = ends_with("Alt"),
names_to="Alt")
GPS_longer<-GPS%>%
pivot_longer(cols = ends_with("GPS"),
names_to="GPS")
```
Temos agora 5 tabelas, sendo cada uma contendo 55 linhas e 5 colunas. O próxima passa é unir novamente essas tabelas, para que possamos ter uma tabelas com 55 linhas, e com as culunas de Lat, Long, Alt, GPS.
## 2.5.1. União das tabelas alongadas
```{r unir}
Pontos_Col <- bind_cols(
Alt_longer,
Long_longer,
Lat_longer,
Unico_longer,
GPS_longer
)
colnames(Pontos_Col)
```
Com esse comando, a tabela nova possuem várias colunas desnecessárias, criadas em cada pivot_longer, como segue:
"" "Ponto_Nome...1" "moradia...2" "area...3""" "Alt"
"" "value...5""" - que é o valor de Altitude; "Ponto_Nome...6" "moradia...7" "area...8" [9] "Long" "" "value...10""" que é o valor da Longitude; "Ponto_Nome...11" "moradia...12" "area...13" "Lat" """value...15" "" que é o valor de Latitude; "Ponto_Nome...16" "moradia...17" "area...18" "Set" "" "value...20" "" que é ovalor de Unico; [21] "Ponto_Nome...21" "moradia...22" "area...23" "GPS" "" "value...25" "" que é o valor do ponto de GPS.
Por isso, vai mas um chunk só para eliminar essas colunas desnecessárias
## 2.5.2. Limpeza da tabela
```{r unir2}
Pontos_Colu <- Pontos_Col%>%
select(
Ponto_Nome...1,
moradia...2,
area...3,
value...25,
value...5,
value...10,
value...15,
value...20,
)%>%
filter(value...5>0)
Pontos_Colu
```
Da mesma forma que foram criadas várias colunas no pivot_longer, no processo de bind_cols essas colunas foram juntadas, e as de mesmo nome, foram renomeadas inconvenientemente.
Lá vai mais um chunk para dar nomes de boi aos bois.
### 2.5.3. Renomeação das colunas
```{r}
Pontos_Colun <- Pontos_Colu%>%
rename(
nome = "Ponto_Nome...1",
moradia = "moradia...2",
area = "area...3",
Ponto="value...25",
Altit = "value...5",
Longit = "value...10",
Latit = "value...15",
Unica = "value...20"
)
```
Finalmente, após longos atalhos, está pronta a nossa tabela, contendo uma coluna de Lat, uma para Long e uma para Alt, com as demais colunas acessóarias necessárias. Vejamos que agora temos apenas 31 linhas, e não 55 como havia acima. Isso se deu já que foram eliminadas as linhas sem dados, com o comando filter.
```{r}
Pontos_Colun
```
## 2.6 Pivot_longer @José
@jose: Outra opção para alongar a tabela e renomear as colunas no mesmo código que alonga a tabela é incluir os nomes da colunas que terá os valores "values_to"
Também. o filtro para eliminar células sem dado pode ser aplicado no mesmo código, aproveitando o "pippin" (%>%)
### 2.6.1. Pivot longer com as especificações
Foram utilizadas as mesmas tabelas criadas no chunk "Repartir_Tables", mas com especificações na saída de cada pivot_longer, evitando criação de colunas com nomes iguais.
```{r}
Unico_Longer.2 <- Unico%>%
pivot_longer(
cols = ends_with("Unico"),
names_to = "Set",
values_to = "Unica"
)%>%
filter(Unica!= "")
Unico_Longer.2
```
Nesta primeira tabela foram mantidos os dados de nome, moradia e área. Nas pŕoximas tabelas esses serão eliminados com o comando select, pois, as colunas redundantes podem ser retiradas das próximas tabelas, já que parece que ao deixar padronizadas as linhas em 21 a ordem da coluna indicadora não se modifica e todas as tabelas ficam na mesma ordem
```{r}
Lat_Longer.2 <- Latitudes%>%
pivot_longer(
cols = ends_with("Lat"),
names_to = "Lat",
values_to = "Latit"
)%>%
filter(Latit!= "")%>%
select(Latit)
Lat_Longer.2
```
```{r}
Long_Longer.2 <- Longitudes%>%
pivot_longer(
cols = ends_with("Long"),
names_to = "Long",
values_to = "Longit"
)%>%
filter(Longit!= "")%>%
select(Longit)
```
```{r }
Alt_longer.2 <- Altitudes%>%
pivot_longer(
cols = ends_with("Alt"),
names_to = "Alt",
values_to = "Altit"
)%>%
filter(Altit!= "")%>%
select( Altit)
```
```{r }
GPS_longer.2 <- GPS%>%
pivot_longer(
cols = ends_with("GPS"),
names_to = "GPS",
values_to = "Ponto"
)%>%
filter(Ponto!= "")%>%
select(Ponto)
```
Apresentamos apenas as tabela Lat_Longer.2, já que as outras na sequência apresentam a mesma lógica, contendo apenas uma coluna.
## 2.6.2. União das tabelas alongadas
```{r}
Pontos_Colun.2 <-cbind(Unico_Longer.2, GPS_longer.2, Alt_longer.2, Long_Longer.2, Lat_Longer.2)
head(Pontos_Colun.2)
```
# 3. Salvar no Arquivo
O arquivo que queremos é um .csv. Por isso, usamos o write.csv.
```{r}
#write.csv(Pontos_Colun, file = "ColetaAssentamPontos.csv")
```
# 4. Mapas
O mapa, além de trazar informaões espaciais da localizaão dos pontos, serve aqui muito mais para conferir a exatidão da coleta.
Com base em <https://github.com/renatamuy/mapas/commit/bdcf2fec1a23b64692d735d0a3bb4a644b81dd18>
## 4.1 Carregue os pacotes necessarios
```{r}
library(ggplot2)
library(ggrepel)
library(broom)
require(rgdal)
```
### 4.1.1. Defina qual sera a area usada como base do mapa
```{r}
#shpA_SL <- rgdal::readOGR(dsn=, "training/wrangling/shapefiles",
shpA_SL <- rgdal::readOGR(dsn="Qgis",
layer="Assentamento_SL",
verbose=TRUE,
stringsAsFactors=FALSE)
```
### 4.4.2 - Passar para data.frama
```{r}
shp.df<-broom::tidy(shpA_SL)
```
## 4.3. Mapa do município
```{r município Palmas, results="hide"}
#Palmas <- rgdal::readOGR(dsn=, "training/wrangling/shapefiles",
Palmas <- rgdal::readOGR(dsn="Qgis",
layer="Palmas",
verbose=TRUE,
stringsAsFactors=FALSE)
Palmas1<-tidy(Palmas)
```
## 4.2 Plote o mapa usando o ggplot2 como um objeto, ainda sem desenha-lo na tela
Esse é o mapa a ser plotado, com os pontos de coleta, objeto do wranling acina.
```{r, fig.cap= "Município de Palmas, PR, com destaque para o Assentamento São Lourenço",fig.align='center', fig.height=2, fig.width=3 }
Geral <- ggplot() + geom_polygon(data = Palmas1,
aes(x=long, y = lat, group = group),
fill = "lightgrey", color = "black") +
geom_polygon(data = shp.df,
aes(x=long, y = lat, group = group),
fill = "blue", color = "red") + #Note que voce pode mudar as cores do fundo e da borda
coord_fixed (1.1)+
labs(x="Longitude", y = "Latitude") #De nome aos eixos
Geral
```
```{r fig.height=2, fig.width=2, fig.cap="Mapa do Assentamento com destaque para os Pontos de coleta de solo"}
assentamento <- ggplot() +
geom_polygon(data = shp.df,
aes(x=long, y = lat, group = group),
fill = "lightgrey", color = "black") + #Note que voce pode mudar as cores do fundo e da borda
coord_fixed(1.1) + #Use isto para o mapa ficar proporcional
geom_point(data = Pontos_Colun, aes(x = Longit, y = Latit),
color = "red", #Escolha a cor dos pontos
size = 1, #Tamanho dos pontos
alpha = 0.8) + #Transparencia: quanto mais proximo de 1, menos transparente
geom_text_repel (data=Pontos_Colun, aes(x=Longit, y=Latit, label=Ponto))+ #Use isto para os rotulos dos pontos nao ficarem sobrepostos
theme_bw() +
labs(x="Longitude", y = "Latitude") + #De nome aos eixos
theme(text = element_text(size=10), #Ajuste os tamanhos das fontes
plot.title = element_text(size=10, hjust=0.5),
axis.text.x = element_text(size = 10, angle=0, hjust=1),
axis.text.y = element_text(size = 10, angle=0, vjust=1),
axis.title.x = element_text(size = 10, angle=0),
axis.title.y = element_text(size = 10, angle=90))
plot(assentamento)
```
referências
Morkdown <https://bookdown.org/yihui/rmarkdown/html-document.html#table-of-contents>
<https://bookdown.org/yihui/rmarkdown/>
Foi escrito com base em <https://raulossada.gitbooks.io/r_mapas/content/section2/s2_02_getProjection.html>