Showing posts with label R. Show all posts
Showing posts with label R. Show all posts

Friday, October 11, 2024

Extração de coordenadas de documentos oficiais para adicionar dados ao OpenStreetMap

Alguns documentos oficiais incluem as coordenadas dos pontos que definem os limites da área sendo demarcada. É o caso de muitos decretos de criação de áreas de proteção ambiental. Nesta página, explicarei como extraí os pontos do decreto de criação da Unidade de Conservação Refúgio de Vida Silvestre Pedra da Andorinha, produzi um mapa no formato shapefile e adicionei os dados ao OpenStreetMap.

O primeiro passo foi extrair os pontos do decreto para um arquivo de texto simples. Para isso, usei pdftotext para converter o PDF em texto simples e o editor Neovim para rapidamente converter o texto em TSV (valores separados por caractere de tabulação):

ponto   lat lon
PT01    9551732.23  388815.68
PT02    9551052.78  390156.19
PT03    9547911.34  387749.10
PT04    9547732.38  387370.57
PT05    9548043.16  386975.17
PT06    9548244.76  386713.29
PT07    9548837.69  386640.01
PT01    9551732.23  388815.68

Os limites da Pedra da Andorinha são definidos por apenas sete pontos e, portanto, o arquivo TSV poderia ser facilmente produzido sem uso do pdftotext ou do Neovim. Mas, em alguns casos, os limites da área são definidos por milhares de pontos, tornando imprescindível o uso de expressões regulares para limpar o texto.

As coordenadas no decreto estão no sistema SIRGAS 2000 e o Estado do Ceará está completamente inserido no fuso 24. Assim, com o banco de dados pronto, o próximo passo foi a conversão das coordenadas em um mapa. Para isso, utilizei o seguinte código R para a criação do arquivo SHP (agradeço a Matheus Gomes, Narcélio de Sá e Raquel Dezidério Souto pela ajuda para encontrar a string de projeção correta):

library("sp")
library("sf")

p <- read.delim("andorinha.tsv")
p <- Polygon(p[, c("lon", "lat")], hole = FALSE)
x <- Polygons(list(p), 1)
sp <- SpatialPolygons(list(x))
proj4string(sp) <- "+proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
st_write(st_as_sf(sp), "andorinha_utm.shp")

Por fim, bastou abrir o arquivo SHP no JOSM, baixar os dados da área do mapa ou uma imagem de satélite para conferir se o polígono estava no lugar certo e com as dimensões corretas, adicionar as etiquetas necessárias (veja exemplos já existentes no OpenStreetMap) e subir os dados para o servidor do OpenStreetMap. Também pode ser usado o comando do Neste caso, o resultado foi este: Pedra da Andorinha.

Friday, December 30, 2022

Qualis 2017-2020 em arquivo único

A CAPES divulgou ontem (29/12/2022) a lista preliminar do Qualis referente ao quadriênio 2017-2020. Embora os novos estratos sejam A1, A2, A3, A4, B1, B2, B3 e B4, até o momento desta postagem, a página do Qualis na Plataforma Sucupira não oferecia a opção de consultar os estratos A3 e A4, ou seja, disponibilizaram os dados mas não lembraram de ajustar o formulário. De qualquer maneira, basta selecionar uma área e não selecionar nenhum estrato para ser exibido um link para uma planilha do Excel com todos os dados da área.

Apesar do Qualis 2017-2020 de cada periódico ser único para todas as áreas, os dados continuam sendo divulgados por área. Para obter um banco de dados com a classificação de todos os periódicos, siga o procedimento abaixo:

  1. Para cada área de avaliação, baixe o arquivo Excel com a lista completa de periódicos.

  2. Execute o seguinte script R:

library(readxl)
a <- dir(".", "*.xls")
l <- lapply(a, read_excel)
d <- do.call("rbind", l)
q17 <- d[!duplicated(d), ]
save(q17, file = "Qualis_2017-2020.RData")
write.csv2(q17, file = "Qualis_2017-2020.csv", row.names = FALSE)

Observações:

  • O script cria uma lista dos arquivos xls e xlsx na pasta atual, carrega todas as planilhas na lista l, concatena as linhas dos 49 bancos de dados resultantes em um único data.frame, remove as linhas com ISSN duplicados e salva o banco de dados final nos formatos RData (para o R) e csv para LibreOffice ou Excel.
  • Dependendo da forma como o R estiver sendo executado, pode ser preciso incluir no script o comando setwd("pasta/onde/estão/as/planilhas").

Wednesday, November 9, 2022

Pandoc: corrigindo problemas em citações com estilo ABNT

Quem já usou pandoc com o filtro citeproc para produzir trabalho acadêmico seguindo as regras da ABNT se deparou com um problema: as citações textuais (com os nomes dos autores fora dos parênteses) ficam com a mesma formatação das citações entre parênteses, com os nomes dos autores em letras maiúsculas e separados por ponto-e-vírgula. Ou seja, o que deveria ser

Segundo Fulano, Sicrano e Beltrano (2020), ...

aparece como

Segundo FULANO; SICRANO; BELTRANO (2020), ...

Isso ocorre porque a versão atual da CSL (Citation Style Language) não faz distinção entre citações no texto e entre parênteses e as normas da ABNT determinam formatações distintas nos dois casos. O problema já é conhecido e uma próxima versão da CSL deverá trazer uma solução definitiva. Por enquanto, uma forma de corrigir o problema é aplicar o filtro abntfix.py após o citeproc. Exemplos:

pandoc documento.md --citeproc -F abntfix.py -o documento.pdf
quarto render documento.qmd pandoc-args -F abntfix.py

Note que, se o diretório em que se encontra o abntfix.py não estiver incluído na variável de ambiente PATH, será preciso especificar o caminho completo do filtro. O abntfix.py é parte do plugin zotcite para Vim/Neovim, mas pode ser usado juntamente com qualquer editor de texto ou diretamente na linha de comando de um terminal.

O problema solucionado pelo abntfix.py não é exclusivo do pandoc. O uso do Zotero com LibreOffice ou Microsoft Word também depende de arquivos CSL e enfrenta o mesmo inconveniente, mas, nesse caso, não conheço solução diferente da edição manual das citações após sua inserção automática pelo Zotero.

Tuesday, November 8, 2022

Usando Quarto para produção de trabalhos acadêmicos

Esta postagem não é uma sugestão de que um quarto seja um lugar melhor para produção de trabalhos acadêmicos do que outras partes da casa. Quarto a que me refiro é uma extensão da linguagem Markdown que, assim como RMarkdown, permite combinar código R com Markdown, mas com alguns comandos adicionais que facilitam o uso de referências cruzadas e a produção de templates mais complexos. A edição de documentos Quarto pode ser feita com o RStudio, com o Nvim-R e Zotcite ou com outros editores de texto, sendo possível extrair dados do Zotero para citações e referências bibliográficas.

Para saber mais sobre como editar documentos Quarto no Neovim, usando os plugins Nvim-R e Zotcite, assista minha à apresentação na VII Semana de Metodologia e Produção Científica da Universidade Federal do Ceará:

Software R na produção de trabalhos acadêmicos

Na ocasião, apresentei um template para a produção de trabalhos acadêmicos que replica a formatação do template LaTeX da Universidade Federal do Ceará:

trabalho_ufc.zip

Wednesday, September 26, 2018

Crescimento do PIB no Governo Lula

Os simpatizantes do PSDB dizem que Lula se limitou a manter a política econômica de FHC e que os bons resultados que Lula obteve na economia são devidos à sorte de governar em período de aumento do preço das commodities.

Considerando a semelhança entre a economia brasileira e a dos demais países da América Latina, se Lula tiver sido apenas um presidente de sorte, o crescimento da economia brasileira no período do seu governo não deveria ser maior do que o dos demais países latinoamericanos. Para verificar se foi isso o que ocorreu, utilizei dados do FMI (World Economic Outlook, de abril de 2018) para produzir um gráfico com série temporal comparando o crescimento do PIB per Capita do Brasil com o do restante da América Latina:

O que eu vejo no gráfico é:
  1. O crescimento do PIB no segundo mandato de FHC foi menor do que o da América Latina. Pior do que isso, todo o ganho obtido no governo Itamar e início do primeiro mandato foi perdido a partir do final do primeiro mandato.
  2. O PIB per capita brasileiro cresceu mais do que a média do PIB per capita dos demais países latinoamericanos no governo Lula.
Como argumentar que FHC arrumou tão bem a economia do país se o Brasil cresceu menos do que a América Latina no seu segundo mandato?

Como argumentar que Lula apenas deu continuidade à política econômica de FHC se somente Lula obteve continuamente crescimento econômico acima da média da América Latina durante os 8 anos do seu mandato?

Economistas podem até apresentar outros dados e argumentos que corroborem a hipótese de que Lula manteve a política de FHC, mas o que vejo no gráfico é que, seja lá por qual motivo for, a economia brasileira cresceu significativamente mais no governo Lula do que no governo FHC, mesmo considerando o contexto latinoamericano.

Detalhes técnicos da produção do gráfico:

A variável do PIB que usei foi a NGDPDPC, PIB per capita em preços atuais: O PIB é expresso em dólares norte-americanos atuais e dividido pelo total da população.

A lista de países que considerei América Latina (excluindo o Brasil) está no script R abaixo:

# Link para os dados: https://www.imf.org/external/pubs/ft/weo/2018/01/weodata/download.aspx

w <- read.delim("WEOApr2018all.xls", fileEncoding = "latin1",
                stringsAsFactors = FALSE)

p <- c("Argentina", "Bolivia", "Chile", "Colombia", "Costa Rica",
        "Dominican Republic", "Ecuador", "El Salvador", "Guatemala", "Guyana",
        "Haiti", "Honduras", "Jamaica", "Mexico", "Nicaragua", "Panama",
        "Paraguay", "Peru", "Puerto Rico", "Uruguay", "Venezuela")

gdp <- "PPPPC"
gdp <- "NGDPDPC"

m <- w[w$Country %in% p & w$WEO.Subject.Code == gdp, c(4, 11:47)]
rn <- m$Country
m$Country <- NULL

Num <- function(x)
{
    x <- gsub(",", "", x)
    x <- as.numeric(x)
    x
}
m <- as.matrix(as.data.frame(lapply(m, Num)))
rownames(m) <- rn
colnames(m) <- sub("X", "", colnames(m))
al <- apply(m, 2, mean, na.rm = TRUE)

br <- w[w$Country == "Brazil" & w$WEO.Subject.Code == gdp, 11:47]
br <- Num(br)

png("PIB_BR_AL.png", width = 800, height = 600)
par(mar = c(4, 4, 2, 0)+0.1, cex = 1.8)
plot(NULL, xlim = c(1981, 2017), ylim = c(0, max(c(al, br))),
     main = "PIB per capita", xlab = "Ano", ylab = "PIB per capita")

rect(1995, 0, 2003, max(c(al, br)), col = "#FFFFEE", border = NA)
rect(2003, 0, 2011, max(c(al, br)), col = "#EEF8FF", border = NA)
rect(2011, 0, 2016, max(c(al, br)), col = "#FFFFEE", border = NA)

lines(1981:2017, al, lwd = 2, col = "red")
lines(1981:2017, br, lwd = 2, col = "darkgreen")

text(1999, 1000, "FHC")
text(2007, 1000, "Lula")
text(2013.5, 1000, "Dilma")

legend("topleft", lty = 1, col = c("darkgreen", "red"),
       bty = "n", legend = c("Brasil", "América Latina"))
dev.off()


Extração de coordenadas de documentos oficiais para adicionar dados ao OpenStreetMap

Alguns documentos oficiais incluem as coordenadas dos pontos que definem os limites da área sendo demarcada. É o caso de muitos decretos de ...