Arquivo mensal: agosto 2015

O que separa o Metacat do IPT? Uma coluna!

Para os leitores que não conhecem as ferramentas e o contexto atual irei dar uma breve introdução.

Metacat

Software do tipo serviço (ou daemon) onde são armazenados principalmente dados ecológicos e suas descrições (metadados). Aceita outros formatos mas a comunidade sempre que escuta sobre Metacat associa com dados ecológicos. O Metacat segue o padrão EML de descrição dos dados. O principal objetivo do EML é conseguir descrever dados usando um formato flexível como os dados ecológicos. Dessa forma o Metacat trabalha com o formato repositório de dados onde as colunas não são fixas em nomenclatura e/ou quantidade possível.

Pontos fortes: padrão flexível que permite descrever qualquer formato de tabela.

IPT Integrated Publishing Toolkit

Também é um software serviço sendo associado principalmente a dados de coleção. Segue o padrão Darwin Core para formatação das tabelas. O padrão é fixo, o que significa que as colunas de sua tabela precisam estar de acordo com os termos já publicados ou seus dados não podem ser disponibilizados. Dessa forma o Darwin Core é ideal para banco de dados pois já sabemos exatamente o que esperar em número de colunas e nomenclatura.

Pontos fortes: facilita a coleta de informação em massa para tomada de decisões e minimiza o número de erros.

Dados de coleção no Metacat?

O padrão Darwin Core pode ser descrito dentro do EML. Você poderia deixar um EML template seguindo o formato Darwin Core e apenas preencher as células com a informação que chegasse na coleção.

Apesar de simples o processo mas não é o ideal para administração. O Metacat não guarda a tabela de dados dentro do seu banco de dados, são simples arquivos de texto soltos em uma pasta no servidor. Então com o tempo essa tabela deve crescer ao ponto que o nosso humilde Calc ou Excel não irão mais conseguir gerenciar uma tabela desse porte. O Metacat é ideal para pacotes individuais de dados, ele guarda bem dados ecológicos pelo fato de um dia a tabela parar de crescer em número de registros. Em uma coleção a tabela de um grupo provavelmente nunca vai parar de crescer, tornando o Metacat uma ferramente fraca para o trabalho.

Dados ecológicos no IPT?

Sim! Agora é possível com os termos de eventos e mensuração. Irei usar como exemplo um dataset armazenado no Metacat do Peld-1.

A tabela possui essa estrutura:

sitio trilha parcela N posicao X Y especie mês ano cacho numero_frutos densidade abertura_copa serrapilheira
DUCKE LO8 LO8_3500 20822 D 84.34 1.80 Is Maio 2009 Cacho1 52 2 2 20
DUCKE LO8 LO8_3500 365 D 133.80 1.00 Se Maio 2009 Cacho1 261 3 4 0
DUCKE LO8 LO8_3500 20872 D 204.52 1.19 Is Maio 2009 Cacho1 238 3 2 0

Estamos interessados em explorar três termos do Darwin Core para processar esses dados: measurementIDmeasurementTypemeasurementValue. Esses três termos são o minimo para descrever qualquer dado ecológico.

Como converter uma tabela com várias colunas relacionadas para um formato minimo de três colunas sem perda de informação? Com uma coluna de chave primaria, muitos se esquecem desse recurso que identifica cada linha de forma única em um banco de dados. Não precisamos de nada muito complexo, vamos adicionar uma nova coluna aos dados. Todas as manipulações são feitas em R.


dados = read.table('fecosta.257.1-contagem_frutos.txt', header = T, encoding = 'latin1', sep = '\t')
dados$primid = 1:nrow(dados)

Nossa coluna se chama primid e possui valores sequencias até o número de linhas que a tabela dados possui. Com isso temos um identificador único para cada linha e podemos fazer uma manipulação conhecida como tabela dinâmica.


library(reshape2)
dadosm = melt(dados, id.vars = 'primid')

O pacote reshape2 permite mudar a forma que a tabela é apresentada (long ou wide). Usamos a função melt para deixar nossa tabela no formato mais longo possível usando como ancora a coluna primid. O resultado pode ser visto na tabela abaixo.

primid variable value
6 sitio DUCKE
6 trilha LO8
6 parcela LO8_3500
6 N 403
6 posicao E
6 X 139.3
6 Y 3.68
6 especie Is
6 mês Maio
6 ano 2009
6 cacho Cacho1
6 numero_frutos 29
6 densidade 1
6 abertura_copa 4
6 serrapilheira 6

Temos uma tabela com três colunas e sem perda alguma de informação. Essa tabela já pode entrar no IPT, durante a importação só é necessário mapear as colunas com os termos respectivos. Existem outros termos que são relevantes como measurementUnit que não são usados aqui mas toda publicação ecológica deveria preencher, leia a referência do Darwin Core para mais informações.

Algumas pessoas podem comentar que não sabem manipular tabelas dessa forma ou que não tem experiência com tabela dinâmica. Para voltar a tabela ao formato exatamente igual ao inicial basta digitar:


dcast(dadosm, primid ~ variable)

Conclusão

O padrão Darwin Core aos poucos começa a englobar áreas que não explorava antes e a maioria dos pesquisadores não estão dando chance a ferramenta. Eu mesmo já achei loucura dados ecológicos no IPT, mas depois de testar com um dataset de 35 variáveis e 205 mil linhas achei ele bastante robusto. Fora a parte descrita aqui existe a parte administrativa das ferramentas. Mais ferramentas significam mais problemas.

Anúncios

Qual é melhor? Python, R, Julia, Matlab, …?

Algumas pessoas andaram me perguntando o que eu acho de alguma dessas linguagens e irei dar minha opinião como programador e como professor visando a parte acadêmica.

Como programador: a melhor das listadas acima é de longe Julia, linguagem recente que talvez ninguém tenha ouvido falar mas com velocidade de processamento impressionante. Na imagem abaixo mostra a comparação de várias linguagens executando algum algoritmo intensivo em relação a linguagem mais rápida do momento, C.

velocidades

Julia não é a linguagem mais fácil de programar mas faz bem o que promete, ter velocidade superior ao R e já possuir suporte completo a processamento paralelo. Se você for fazer uma modelagem séria e souber programar de verdade (fazer gráfico não é programar!) a escolha fica entre Fortran, Go, C e o Java. Eu ficaria com Go, suporte a paralelismo e tão fácil de programar quanto R.

Como professor: Python é de longe a melhor para aprender devido as boas praticas que ensina. Lembra aquele código bizarro que fez a um mês e parece uma bíblia na tela de tão mal formatado que saiu? Nem roda no Python! Repare que não é a maravilha das velocidades mas para os alunos que no máximo vão fazer um índice nem se nota a diferença. E ainda temos o plus que Python é usado em muitos programas bacanas (ArcGIS, Quantum GIS), então você pode estender a capacidade desses programas para as suas necessidades.

Conclusão

Python para ensinar/iniciantes em programação, Julia para pessoas com dois anos ativos de experiência no Python e finalmente Go/Fortran para quem se sente confortável com mais de duas linguagens de programação. Já no nível guru você vai querer dar uma olhadinha na linguagem C, boa sorte manipulando a memoria manualmente!

Não gosto de R, feia e lenta. A única coisa que me agrada é a comunidade que é muito mais amigável do que de todas as outras linguagens que trabalhei. Em três dias você consegue publicar um pacote no CRAN, nas outras linguagens pode levar seis meses ou nunca 😀