Análise de dados e telescópios - como lidar com quantidades astronômicas de informação?
- #Estrutura de dados
A astronomia é uma ciência que captura a curiosidade de muitos de nós desde a infância. Buracos negros, planetas gigantes, galáxias em rota de colisão, todos estes objetos nos lembram de uma verdade, talvez um pouco desconfortável: o universo é enorme.
Mas de onde vem tudo isso? Como os astrônomos sabem destas coias?
O que um astrônomo faz?
A maior parte do dia de um astrônomo é passada em frente a um computador, uma vez que os resultados das observações astronômicas são inteiramente digitais. Para entender melhor isto, convém saber como funciona a astronomia moderna.
A principal função de um telescópio não é ampliar a imagem que vemos no céu, mas sim, coletar a luz que vem das fontes observadas. Nos telescópios modernos, os feixes de luz passam por uma série de lentes e espelhos até serem dirigidos para um sensor eletrônico.
Os sinais que chegam a este sensor traduzem diferentes propriedades da luz captada. Eles se traduzem em números e imagens, guardados em arquivos com formatos próprios para depois serem analisados pelos astrônomos.
Imagem: Exemplo de "raw data" obtida de um telescópio profissional. Créditos: Maria Eduarda Pimentel.
Assim, fica claro que a astronomia e a informática estão interligadas. Mas, nas últimas décadas, esta ligação tornou-se inegável. Com o avanço da sensibilidade e precisão dos telescópios, a quantidade de dados gerada pelas missões espaciais se tornou uma verdadeira avalanche. Não é incomum que as bases de dados astronômicas ultrapassem centenas de GB.
Como, então, é possível obter conhecimento científico em meio a tudo isto? Surgiu a necessidade de uma nova área intersecional – a Astroinformática, que une diferentes técnicas da ciência de dados e da engenharia de software e as aplica ao contexto da astronomia. Vamos conhecer algumas de suas aplicações e desafios, como:
- Ferramentas computacionais próprias para a astronomia
- Como visualizar milhões de fontes ao mesmo tempo
- Machine learning para a aprimoração do conhecimento científico.
- Como compartilhar e acessar ao conhecimento de múltiplos telescópios
Astropy: uma biblioteca python para astrônomos
A linguagem de programação python, embora por vezes vista como mais simples e lenta que outras, como o C++ e Fortran, é a linguagem que mais cresce entre os astrônomos. Isso é em parte devido à sua grande utilidade para a análise de dados e pela variedade de packages especializados disponíveis para a linguagem. Entre elas, aqui nos interessa o astropy.
Desenvolvida a partir de 2011, o astropy buscava unificar e homogeneizar os inúmeros projetos individuais de bibliotecas voltadas para lidar com dados astronômicos em python.
Um dos objetivos do astropy era que a linguagem utilizada fosse limpa e parecida com o discurso utilizado pelos astrônomos no seu dia a dia. Assim, eles poderiam focar seus esforços em processar e analisar os dados, e não perder tempo tendo que resolver bugs.
Todos nós nos lembramos (talvez com um pouco de pavor) das constantes físicas aprendidas no Ensino Médio – a constante gravitacional de Newton, a velocidade da luz, a constante de Avogadro, sem falar no famoso número Pi. Estes números todos possuem infinitas casas decimais, e a quantidade delas que decidimos usar afeta a precisão dos nossos cálculos.
Definir manualmente variáveis para cada uma destas constantes é então uma enorme fonte de erros e confusões. Basta errar um dígito, fazer um arredondamento questionável, ou simplesmente usar outro sistema de unidades para que as nossas contas deixem de fazer sentido e os erros se propaguem.
Assim, uma das funcionalidades do astropy é exatamente ter estas constantes definidas, através dos objetos Quantity, que além de guardarem o valor da constante com precisão variável, guarda também as unidades usadas e outros metadados relacionados às incertezas desta constante.
Imagem: Exemplo de uso do objeto Quantity no Astropy. Créditos: Astropy collaboration.
Também nos lembramos, das aulas de Física, de que a posição e o movimento de um objeto são relativos – tudo depende do sistema de coordenadas utilizado. A astronomia sabe muito bem disso, e por isso existem diferentes sistemas de coordenadas espaciais, utilizados em diferentes contextos, e com diferentes sistemas de unidades.
Acontece que muitas vezes nós queremos converter as posições das nossas fontes de um sistema para o outro. Fazer isto manualmente pode, de novo, ser um pouco caótico e induzir em muitos erros. Mais uma vez, o astropy salva o dia com o sub-package Coordinates, que flexibiliza a representação de coordenadas astronômicas dentro do código.
Imagem: Definição do sistema de coordenadas equatoriais, um dos mais usados na astronomia. Créditos: UFRGS.
Por fim, o astropy também facilita a importação de dados de arquivos nos formatos específicos da astronomia, como o formato FITS (Flexible Image Transport System), para criar tabelas. Isto é importante porque muitos destes formatos não são facilmente implementados com outros packages, como o pandas, e assim facilitam o processo de análise.
Apesar de todas estas funcionalidades, existe um limite. Quando tentamos carregar para o código (numa tabela, ou num array, por exemplo) um conjunto de dados maior do que a memória do nosso computador, podemos obter uma mensagem de erro, ou ter o temido crash do sistema. O astropy não providencia soluções para isto.
Como processar então grandes quantidades de dados?
Evitando a avalanche de dados: o exemplo da missão Gaia
A missão Gaia é um telescópio espacial, lançado em 2013, cujo objetivo é produzir o maior e mais completo mapa da Via Láctea já feito. Deste seu lançamento, ele já produziu três data releases completos (DR1, DR2 e DR3), um data release preliminar (EDR3) e um complementar, focado em alguns objetos específicos.
No total, o Gaia está observando 1.811.709.771 fontes no céu, e obtendo 99 parâmetros (embora nem todas as fontes possuam todos estes parâmetros, já que isto vai depender da qualidade dos dados obtidos e de propriedades de cada fonte).
Ao contrário de telescópios como o Hubble, que possuem uma câmera acoplada, o Gaia apenas faz medições destes parâmetros, num processo chamado de astrometria. Assim, podemos pensar nos dados do Gaia como uma tabela com quase dois bilhões de linhas, e quase cem colunas, que chega a 3TB de dados. E o que nós fazemos com isso tudo?
Obter estatísticas simples, como médias ou somas dos valores de uma dada coluna, torna-se algo extremamente difícil, devido ao volume de informação. Fazer simples gráficos em 2D, também. Estamos então no território da Big Data, onde precisamos pensar em eficiência e praticidade ao tratar nossos dados. Especialmente, precisamos evitar:
- Carregar dados maiores do que a memória do computador
- Fazer mais do que uma passagem pelo dataset todo
- Realizar operações com grandes quantidades de dados
Podemos aplicar, por exemplo, o método Map Reduce, quando temos um dataset grande espalhado por várias máquinas para processamento paralelo. Neste método, os inputs são divididos em blocos (chunks), sobre os quais é aplicada uma função de mapeamento, que irá gerar pares chave/valor.
Estes pares são depois reorganizados e agrupados consoante as suas chaves. Por fim, uma última função é aplicada para juntar todos os valores com a mesma chave, produzindo outputs que poderão ser reutilizados em outra parte do programa.
O Map Reduce foi desenvolvido pelo Google, e é uma metodologia essencial no campo da Big Data. Além disso, podemos pensar também em formatos de arquivo que sejam mais favoráveis à manipulação de grandes volumes de dados, como os chamados memory-mapped files.
O pacote de python numpy, por exemplo, oferece a opção de criar, ler e manipular arquivos memmap, guardados como um arquivo binário no disco, mas que podem ser acessados em pequenos segmentos sem ser carregados inteiramente para a memória. No caso do numpy, eles podem ser manipulados como arrays, o que facilita a aplicação de diferentes operações.
Outra opção de memory-maped file são os arquivos HDF (Hierarchical File Format), que permitem guardar grandes quantidades de dados e, ao contrário dos memmaps, contam também com metadados, e uma maior organização interna.
Os arquivos HDF podem conter múltiplas tabelas e arrays guardados em diferentes grupos, criando assim uma estrutura parecida com a de um sistema de arquivos. Já existem muitos APIs para a utilização de arquivos HDF, e diferentes linguagens de programação têm bibliotecas próprias para eles também (inclusive o python).
Imagem: Exemplo de possível organização de um arquivo HDF. Créditos: neonscience.org
No caso do Gaia, ergue-se ainda mais uma questão: a da visualização. Estes dados, como já foi referido, formam uma gigantesca tabela, e esta quantidade de informação simplesmente não pode ser compreendida pelas pessoas que a utilizam. O volume de dados cria uma espécie de ruído, que obscurece as estruturas verdadeiramente interessantes nos dados.
Então, existe um esforço para criar diferentes métodos de visualização para os dados desta missão. Por mais que o Gaia não produza imagens, gostaríamos de conseguir representar os dados e as medições que ele está obtendo de maneira visual, e interativa. Esta visualização pode ser um primeiro passo importante num trabalho de pesquisa.
Imagem: Primeira visualização completa dos dados do primeiro Data Release da missão Gaia. Créditos: ESA, A. Moitinho, M. Barros.
A ESA (Agência Espacial Europeia, responsável pela missão Gaia) já possui em seu site uma plataforma para visualização interativa com os dados do Gaia, o GAVS. Esta é uma espécie de “imagem artificial” dos dados, uma vez que esta imagem não foi produzida por uma câmera, mas sim por meio de projeções cartográficas das posições das fontes, e redução dos dados.
Tudo isto só foi possível através da aplicação de técnicas de Big Data.
Machine Learning (ML) na Astronomia
A área de aprendizado de máquina, que pode ser vista como uma subseção da Inteligência Artificial, está em alta nos últimos anos, com suas aplicações crescendo e adentrando o nosso dia a dia. Não é diferente com a astronomia.
Uma parte elementar da maioria das ciências envolve a classificação de coisas em grupos. Na astronomia, um exemplo claro disso é a morfologia de galáxias.
Em 1926, o astrônomo Edwin Hubble propôs um sistema de classificação para as galáxias com base em seu formato, que é usado até hoje. Isto é interessante porque o formato das galáxias tem implicações no tipo de estrelas que elas possuem, bem como sua idade e brilho. Com os milhões de galáxias que temos conhecimento hoje em dia, é impossível classificá-las uma a uma.
Imagem: Sistema de classificação morfológica de galáxias de Edwin Hubble. Créditos: UFRGS
Vê-se aí uma excelente oportunidade para o uso de técnicas de Machine Learning. Usando os catálogos de dados existentes, os diferentes parâmetros das galáxias são analisados, e a partir deles, deduz-se qual é a sua morfologia.
Este não é o único caso de uso para aprendizagem automática na astronomia. É possível usar ML também para a classificação das estrelas com base em seus espectros; para identificar raios cósmicos (que são uma fonte de radiação extremamente forte) em meio aos sinais astronômicos comuns, entre outros.
Ainda no campo de Machine Learning, a astrofísica brasileira Roberta Duarte ganhou notoriedade por ter utilizado deep learning (DL) para simular as condições perto de um buraco negro, liderando um trabalho pioneiro nesta área.
Antes de seu trabalho, para simular um buraco negro era preciso resolver numericamente as equações que descreviam o sistema, provenientes da física. Para estas simulações, era preciso ter acesso a uma CPU com milhares de cores.
Imagem: A astrofísica Roberta Duarte. Créditos: G1,Fernando Silva/BBC Brasil.
No trabalho de Roberta, porém, o programa “aprende” as leis da física com base nos dados fornecidos, provenientes de simulações anteriores, e passa então a prever como o sistema se comportará. Apesar de haver alguma discussão sobre a precisão destes resultados, o fato é que esta simulação foi sete mil vezes mais rápida do que as simulações anteriores!
Observatórios Virtuais: de todos, para todos.
Por fim, escolhi falar dos observatórios virtuais, já que em minha opinião eles representam muito bem a famosa frase de Isaac Newton:
"Se vi mais longe, foi porque estava nos ombros de gigantes"
Os observatórios virtuais são plataformas online onde pesquisadores podem acessar dados de diferentes catálogos astronômicos e missões espaciais de maneira unificada. Para isso usa-se uma linguagem de consulta própria, a ADQL (Astronomical Data Query Language), que é baseada na já conhecida SQL.
Desta forma, os observatórios virtuais incentivam aspectos importantes para a comunidade científica, como:
- A colaboração entre astrônomos, através do compartilhamento de dados
- Integração e centralização dos dados astronômicos, facilitando a pesquisa
- Fácil integração entre dados guardados em diferentes formatos
- Criação de ferramentas de análise
Existem múltiplos observatórios virtuais, que podem escolher diferentes escopos para os dados que decidem incorporar em seu arquivo.
Podem estar separados de acordo com a nacionalidade, recolhendo os dados obtidos apenas por telescópios em um dado país; ou então por tipo de objeto, como planetas ou galáxias; podem ainda estar divididos de acordo com a região do espectro da luz que se deseja estudar (como a luz visível, o infravermelho e o ultravioleta).
Assim, os observatórios virtuais facilitam em muito a vida dos astrônomos, e permite que eles construam suas pesquisas a partir do trabalho que já foi feito anteriormente e compartilhado com a comunidade – os ombros dos gigantes.
Conclusão
O tempo em que os astrônomos ficavam a noite inteira olhando para o céu com os enormes telescópios nas abóbadas dos observatórios acabou no século passado, com a vinda das tecnologias digitais. Elas nunca pararam de evoluir – pelo contrário, agora o fazem cada vez mais rápido.
A astroinformática é o ápice de uma crescente modernização da astronomia, que veio para solucionar os problemas causados por necessidades computacionais cada vez maiores.
Poderíamos argumentar que ela é apenas uma aplicação da ciência de dados, e não uma área separada. Mas com este artigo, espero ter mostrado que não bastaria saber informática para resolver os problemas de análise de dados e de Big Data em Astronomia; é preciso compreender profundamente o significado e a estrutura destes dados, para poder produzir resultados cientificamente corretos e relevantes.
Por fim, muitos calouros dos cursos de Astronomia entram com a ideia de que serão como Isaac Newton, resolvendo equações enormes para descrever o movimento dos planetas, apenas com um giz e um quadro negro; ou então Galileu Galilei, com sua luneta observando as luas de Júpiter durante a noite.
Não demora muito para terem seu primeiro grande choque: um astrônomo não é só um físico, ou alguém que conhece o céu; hoje em dia, um astrônomo precisa ser, acima de tudo, um bom programador, e grande conhecedor das diferentes técnicas de informática. Só assim poderemos lidar com esta bela ciência, que está em constante inovação.
Referências e mais informação
Astropy: A community Python package for astronomy
https://ui.adsabs.harvard.edu/abs/2013A%26A...558A..33A/abstract
Gaia Data Release 3. Summary of the content and survey properties
https://ui.adsabs.harvard.edu/abs/2023A%26A...674A...1G/abstract
Galaxy Classification: A machine learning approach for classifying shapes using numerical data
https://ui.adsabs.harvard.edu/abs/2023arXiv231200184G/abstract
A astrofísica brasileira que simula buracos negros com inteligência artificial e é fenômeno nas redes
Virtual Observatories, Data Mining, and Astroinformatics
https://ui.adsabs.harvard.edu/abs/2013pss2.book..403B/abstract