Voltar ao catálogo
Season 12 12 Episódios 44 min 2026

SunPy: Solar Data Analysis

v7.1 — Edição de 2026. Uma análise aprofundada do SunPy v7.1 (2026), o ambiente de análise de dados solares de código aberto desenvolvido pela comunidade para Python. Domine tudo, desde Maps e Coordinates até pesquisas Fido e TimeSeries.

Computação Científica Física Solar
SunPy: Solar Data Analysis
A Reproduzir
Click play to start
0:00
0:00
1
A Identidade Central: Quantities e Unidades
Descubra por que motivo o SunPy exige unidades físicas para todos os cálculos. Aprenda a usar Astropy Quantities para evitar erros críticos de conversão de unidades no seu pipeline de análise solar.
3m 56s
2
A Abstração Map
Mergulhe na estrutura de dados fundamental do SunPy: o Map. Aprenda a importar ficheiros FITS e a ligar arrays de dados 2D aos metadados subjacentes do observatório.
3m 14s
3
Cronometragem de Precisão
Domine a representação do tempo na física solar utilizando Astropy Time e SunPy TimeRange. Descubra por que razão os datetimes padrão do Python falham na astrofísica de alta energia.
3m 24s
4
Coordinate Frames e Observadores
Aprenda a navegar na superfície solar utilizando Astropy SkyCoord e os referenciais solares especializados do SunPy. Compreenda o papel crítico da localização do observador e do tempo de observação.
3m 53s
5
Unir Píxeis e Espaço Físico
Ligue os píxeis da sua imagem a coordenadas físicas utilizando o World Coordinate System. Aprenda a converter perfeitamente entre índices de píxeis e SkyCoords sem redimensionamento manual.
3m 37s
6
Pesquisa Unificada de Dados com Fido
Pare de escrever scrapers personalizados para cada arquivo solar. Aprenda a usar o Fido para executar pesquisas complexas e unificadas em vários instrumentos e comprimentos de onda em simultâneo.
3m 22s
7
Consultas Profundas: JSOC e HEK
Realize consultas avançadas no Joint Science Operations Center e na Heliophysics Event Knowledgebase. Recupere metadados de eventos específicos e recortes de regiões ativas.
3m 32s
8
Visualização de Map com Qualidade de Publicação
Transforme FITS arrays escuros em visualizações deslumbrantes e prontas para publicação. Aprenda a configurar colormaps, normalizações logarítmicas e intervalos de recorte.
4m 08s
9
Recorte Sensível a Coordinates
Recorte os seus Maps em segurança sem corromper os seus metadados espaciais. Aprenda por que motivo deve usar submaps em vez do fatiamento padrão do NumPy.
3m 24s
10
Alinhamento e Reprojeção de Maps
Combine dados de diferentes instrumentos de forma perfeita. Aprenda a reprojetar matematicamente um Map de um sistema de coordenadas para a grelha de píxeis exata de outro.
4m 00s
11
Dados Temporais 1D com TimeSeries
Mude de imagens espaciais para curvas de luz temporais. Explore o objeto TimeSeries para carregar, truncar e concatenar dados de fluxo de raios-X do GOES.
3m 39s
12
Modelação de Rotação Diferencial
Tenha em conta a natureza fluida da superfície solar. Aprenda a usar o RotatedSunFrame para prever as coordenadas futuras de uma região ativa à medida que o Sol gira.
3m 58s

Episódios

1

A Identidade Central: Quantities e Unidades

3m 56s

Descubra por que motivo o SunPy exige unidades físicas para todos os cálculos. Aprenda a usar Astropy Quantities para evitar erros críticos de conversão de unidades no seu pipeline de análise solar.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 1 de 12. Podes estar habituado a passar arrays numéricos simples para funções e confiar que a matemática bate certo. Mas, em física solar, assumir as dimensões dos teus dados pode invalidar silenciosamente todo o teu pipeline de análise. A salvaguarda contra isto é o tema deste episódio: A Identidade Central: Quantidades e Unidades. Se já tentaste passar um array numpy standard para uma função SunPy, provavelmente deparaste-te com uma exception imediata. Isto não é um bug. O SunPy rejeita números isolados intencionalmente. Em muitas áreas científicas, um número por si só é perigoso. Dez pode significar dez graus, dez segundos de arco ou dez metros. Se uma função espera matematicamente radianos e tu passas graus, o Python standard vai calcular a resposta errada sem qualquer problema. O SunPy evita esta falha silenciosa ao exigir o tracking explícito de unidades em todo o ecossistema. Isto é feito usando objetos Quantity do Astropy. Uma Quantity é simplesmente um número, ou um array completo de números, ligado de forma segura a uma unidade física. Tu crias uma multiplicando os teus dados brutos por um objeto unit. Por exemplo, pegas no número quinze e multiplicas por uma unit que representa segundos de arco. O objeto resultante carrega ambas as informações em conjunto. Como os objetos Quantity são construídos em cima de arrays standard, podes continuar a realizar todas as tuas operações matemáticas habituais. Podes fazer slice, calcular a média ou encontrar o valor máximo, e a unit correta vai continuar associada ao resultado. Se alguma vez precisares de os separar, podes aceder ao número bruto usando o atributo dot value, e à própria unit usando o atributo dot unit. Normalmente, manténs tudo junto porque o objeto sabe como lidar com a sua própria matemática. Se somares metros a quilómetros, o objeto Quantity faz o scale automático para que a soma faça sentido matematicamente. Também podes converter manualmente entre units compatíveis usando o método dot to. Converter metros para quilómetros é simples porque ambos medem comprimento. Mas imagina um cenário em que precisas de converter uma distância angular medida no plano do céu numa distância física na superfície do Sol. Rigorosamente falando, um ângulo não é um comprimento. Por default, o sistema vai bloquear esta conversão. Aqui está o ponto chave. Podes fazer override a esta verificação rigorosa de dimensões usando uma equivalency. O SunPy fornece uma tool específica para isto, chamada solar angle equivalency. Quando passas isto para o teu método de conversão, ele fornece o contexto físico que falta. Usa a distância entre o observador e o Sol para traduzir o ângulo aparente numa distância física literal, como quilómetros ao longo do disco solar. Faz a ponte entre a geometria observacional e a realidade física. Para forçar este tipo de segurança no teu próprio código, usas o decorator quantity input. Colocas isto por cima da definição da tua função para especificar que tipo de dimensões físicas a tua função aceita. Não forças o utilizador a passar graus ou radianos especificamente. Em vez disso, especificas que o input deve ser um ângulo. Se alguém tentar passar uma unit de tempo ou comprimento, o decorator apanha isso e lança um erro antes sequer de a função correr. Este tracking rigoroso de dimensões físicas significa que o teu código falha de forma ruidosa quando é matematicamente inválido, em vez de devolver garbage data silenciosamente. Se gostas destes deep dives, podes apoiar o programa procurando por DevStoriesEU no Patreon. É tudo por agora. Obrigado por ouvires, e continua a programar!
2

A Abstração Map

3m 14s

Mergulhe na estrutura de dados fundamental do SunPy: o Map. Aprenda a importar ficheiros FITS e a ligar arrays de dados 2D aos metadados subjacentes do observatório.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 2 de 12. Um enorme array bidimensional de números a representar pixels solares é completamente inútil se não souberes o instrumento que o capturou, o comprimento de onda ou a data exata. Para fazeres ciência a sério, esses pixels têm de ficar permanentemente fundidos com o seu contexto. Este é exatamente o problema resolvido pela abstração Map. Um erro muito comum é assumir que um Map do SunPy é apenas um wrapper de conveniência para fazer plots. Não é. Embora certamente consiga desenhar imagens, na sua essência, um Map é um data container com reconhecimento de coordenadas. Ele atua como a cola central que te impede de perderes a tua metadata quando manipulas os pixels subjacentes. Vamos ver como isto funciona na prática. Supõe que descarregaste um ficheiro FITS com uma observação do AIA a 171 Angstroms. FITS é o formato de ficheiro standard para dados astronómicos, e armazena tanto o array de imagem raw como um header cheio de detalhes da observação. Para trazeres isto para o teu environment, passas o teu file path para a função sunpy dot map dot Map. Esta função atua, na verdade, como uma factory. Ela lê o ficheiro, deteta automaticamente qual foi o instrumento que capturou a imagem, e devolve um objeto Map especializado. Vamos simplesmente chamar ao nosso novo objeto my_map. Assim que tiveres o teu Map, o primeiro componente principal a explorar é a metadata. Os observatórios solares empacotam uma quantidade tremenda de detalhes no header FITS, e o SunPy extrai tudo isto para um atributo chamado my_map dot meta. Este atributo comporta-se exatamente como um dictionary standard de Python. Isto significa que podes ler keys específicas programaticamente para guiar a tua análise. Por exemplo, se o teu script precisar de extrair a data exata da observação, só tens de aceder à key date diretamente a partir do dictionary meta. O SunPy também normaliza muitas destas header keys, suavizando as diferenças entre a forma como os vários instrumentos solares nomeiam os seus campos de metadata. Agora, a segunda parte disto é a própria imagem. Aqui está o insight principal. O objeto Map não tenta reinventar a forma como os arrays numéricos funcionam. Os dados reais dos pixels estão guardados num atributo chamado my_map dot data, e isto não é nada mais do que um array NumPy bidimensional standard. Como é apenas NumPy, não precisas de aprender uma sintaxe nova para fazeres o teu trabalho matemático. Se quiseres encontrar o ponto absolutamente mais brilhante na tua imagem AIA, extrais o my_map dot data e corres uma função maximum standard sobre ele. Obténs o teu valor de pixel raw instantaneamente. Ao manter o dictionary meta e o array de data bem embrulhados juntos dentro de um único objeto Map, o SunPy garante que as tuas unidades físicas e o contexto do instrumento nunca sejam separados dos números raw. Ele fornece uma única boundary à volta de tudo o que torna esses pixels significativos. O verdadeiro poder da abstração Map não é desenhar o sol, mas sim forçar o array de imagem raw e o contexto observacional a viajarem pela tua codebase como uma unidade única e inseparável. É tudo por este episódio. Obrigado por ouvires, e continua a desenvolver!
3

Cronometragem de Precisão

3m 24s

Domine a representação do tempo na física solar utilizando Astropy Time e SunPy TimeRange. Descubra por que razão os datetimes padrão do Python falham na astrofísica de alta energia.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 3 de 12. Os datetimes standard do Python não sabem o que é um leap second. Quando estás a cronometrar eventos solares transitórios de alta energia, um segundo perdido significa que os teus dados se alinham com o espaço vazio em vez do pico da erupção. É por isso que o SunPy depende de Precision Timing. Muitos developers usam o módulo datetime standard do Python por hábito. O datetime não é uma ferramenta de precisão. Falta-lhe a precisão astrofísica e o suporte a formatos de tempo solar exigidos pelo SunPy. Ignora leap seconds e não consegue lidar com time scales especializadas como utime. Em vez disso, o SunPy exige que uses objetos Time do Astropy. Para trazeres os teus dados variados para este ecossistema rigoroso, usas uma função chamada parse time. O parse time funciona como um tradutor universal para timestamps. Passas-lhe uma string em praticamente qualquer formato, seja uma string ISO, uma data com formatação custom, ou um timestamp extraído diretamente do header de metadados de um satélite antigo. Ele interpreta o input e devolve um objeto Time do Astropy robusto. Isto é crucial porque diferentes observatórios solares formatam os seus relógios de maneiras diferentes. O parse time normaliza tudo num objeto standard que sabe exatamente a sua posição na timeline universal, tendo em conta cada leap second pelo caminho. Assim que os teus timestamps individuais estiverem precisos, precisas de lidar com as durações. Analisar um evento solar requer delimitar os teus dados dentro de uma janela de observação. Esse é o propósito do objeto Time Range. Um Time Range representa um intervalo contínuo entre dois pontos exatos. Podes defini-lo fornecendo um start time e um end time, mas muitas vezes é mais prático fornecer um start time e uma duration. Imagina que estás a configurar uma janela de observação para uma erupção solar. Crias um Time Range passando uma start string, como o ano de 2010, mês 3, dia 4, à meia-noite e dez. Para o segundo argumento, em vez de calculares o end time exato tu mesmo, passas uma unit quantity do Astropy de quatrocentos segundos. O objeto Time Range absorve esses inputs, aplica a time scale correta e estabelece um limite rígido para o teu evento. É aqui que a coisa fica interessante. Agora, precisas de analisar as fases de subida e descida dessa erupção, ou seja, queres comparar a primeira metade do evento com a segunda metade. O objeto Time Range tem um método built-in chamado split. Chamas o split e especificas o integer dois. O método calcula instantaneamente o ponto médio exato e devolve uma list com dois novos objetos Time Range. A tua janela original de quatrocentos segundos é perfeitamente dividida em dois subintervalos de duzentos segundos. Não há cálculos manuais de datas, e absolutamente nenhum risco de perder uma fração de segundo durante a divisão. O módulo datetime built-in do Python serve para agendamento, mas um objeto Time do Astropy é um instrumento científico. Os teus limites temporais exigem o mesmo unit tracking rigoroso que os teus dados espaciais, e confiar nestes objetos especializados garante que as tuas janelas permaneçam fisicamente precisas em todo o teu pipeline. É tudo por este episódio. Vemo-nos na próxima!
4

Coordinate Frames e Observadores

3m 53s

Aprenda a navegar na superfície solar utilizando Astropy SkyCoord e os referenciais solares especializados do SunPy. Compreenda o papel crítico da localização do observador e do tempo de observação.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 4 de 12. Observas uma enorme erupção no Sol, registas as suas coordenadas horizontais e verticais, e envias tudo a um colega. Mas o telescópio dele está estacionado num satélite que segue a meio caminho atrás da Terra, e os teus números de coordenadas não significam absolutamente nada para ele. Isto acontece porque um ponto no Sol não é um ponto estático numa grelha plana. A sua posição depende inteiramente de onde o teu telescópio está estacionado no sistema solar, e de que horas são exatamente. A forma como resolvemos esta ambiguidade é através de Coordinate Frames e Observers. É um erro frequente definir um ponto na superfície solar simplesmente passando dois valores numéricos para uma variável. Tens de nomear explicitamente o contexto. Sem forneceres a localização do observer e a hora de observação, uma coordenada solar não tem qualquer significado físico. O sistema solar está em constante movimento. A Terra orbita, as sondas deslocam-se ao longo das suas trajetórias, e o próprio Sol roda. Para definires com segurança uma localização neste ambiente dinâmico, o SunPy usa um objeto chamado SkyCoord, herdado da library Astropy. Um SkyCoord atua como um container estrito. Ele pega nos teus números brutos e vincula-os a uma frame de referência física específica, obrigando-te a definir tanto o espaço como o tempo. A frame mais comum que vais encontrar é a frame Helioprojective. Esta frame descreve o Sol exatamente como ele aparece para uma lente de câmara específica. É uma projeção bidimensional de uma esfera tridimensional, medida em ângulos como arcseconds. Essencialmente, mede as linhas de visão do observador até ao disco solar. Como está fundamentalmente ligada ao ponto de vista do observador, criar uma coordenada Helioprojective exige que forneças o parâmetro observer, que define onde o telescópio está, e o parâmetro obstime, que bloqueia o momento exato em que o obturador disparou. Contrasta isso com a frame HeliographicStonyhurst. Este é um verdadeiro sistema de coordenadas tridimensional que usa a longitude e latitude solares. É intrínseco ao Sol, mas espacialmente fixo à configuração do sistema solar. A linha de longitude zero da frame HeliographicStonyhurst está bloqueada para apontar sempre diretamente para a Terra. Isto dá-te uma localização física absoluta na superfície solar, em vez de um ângulo de visão localizado. É aqui que a coisa fica interessante. Vamos ver como farias a tradução entre perspetivas. Supõe que tens uma SkyCoord para aquela erupção solar registada a partir da Terra usando a frame Helioprojective. Queres descobrir exatamente onde uma nave espacial a orbitar Vénus veria essa mesma erupção nas suas próprias câmaras. Primeiro, instancias a tua SkyCoord original com o observer da Terra, o tempo de observação e os arcseconds. A seguir, obténs a localização física de Vénus. O SunPy inclui built-in functions para consultar trajetórias planetárias para um determinado timestamp. Assim que tiveres a coordenada de Vénus naquele tempo exato de observação, chamas o método transform na tua coordenada original da Terra. Passas a este método uma nova frame Helioprojective, mas defines o parâmetro observer desta nova frame para Vénus. O SunPy processa então a complexa geometria tridimensional nos bastidores. Calcula as linhas de visão físicas e retorna uma nova SkyCoord. Este objeto resultante contém as coordenadas angulares exatas em que a erupção apareceu do ponto de vista de Vénus. A ideia mais crítica a reter é que uma coordenada solar nunca é apenas uma localização; é uma relação estrita entre um alvo e um observador, congelada num milissegundo específico. Por este episódio é tudo. Obrigado por ouvires, e continua a desenvolver!
5

Unir Píxeis e Espaço Físico

3m 37s

Ligue os píxeis da sua imagem a coordenadas físicas utilizando o World Coordinate System. Aprenda a converter perfeitamente entre índices de píxeis e SkyCoords sem redimensionamento manual.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 5 de 12. Tens uma localização específica no Sol, como uma erupção solar ativa, e precisas de extrair os seus valores de dados exatos da tua matrix de imagem. Traduzir um ponto físico esférico no espaço para uma linha e coluna numa matrix plana normalmente exige uma trigonometria complicada. Fazer a ponte entre os pixels e o espaço físico trata disto por ti instantaneamente usando o World Coordinate System. Um Map do SunPy é um array NumPy bidimensional de pixels emparelhado com metadados extensos. Estes metadados definem para onde o telescópio estava a apontar, o tamanho físico de cada pixel e a projeção esférica específica usada para achatar a imagem. O SunPy agrupa todas estas regras geométricas num objecto acedido através da property WCS do map. WCS significa World Coordinate System. Este objecto atua como a camada de tradução entre a tua grelha de dados plana e o céu físico. Aqui está o ponto chave. Tens de manter a ordem das tuas coordenadas correta, dependendo do domínio em que estiveres. Como os dados da imagem subjacente são um array NumPy, ele espera que o acesso aos dados seja feito usando a ordem de linha e depois coluna. Isso significa que o eixo y vem antes do eixo x. O World Coordinate System opera no espaço físico, usando a geometria cartesiana standard, onde o x vem antes do y. Os inputs de coordenadas físicas são ordenados primeiro por x e depois por y. A indexação direta do array é ordenada primeiro por y e depois por x. Misturar isto é uma fonte frequente de bugs. Agora, vamos passar do céu físico para a grelha de pixels. Supõe que queres encontrar a localização exata do pixel fracionário que corresponde ao centro físico do teu map. O map fornece uma property chamada center. Esta representa uma coordenada Helioprojective física no espaço. Podes passar essa coordenada center diretamente para o method world to pixel do map. O World Coordinate System processa a matemática da projeção e devolve um objecto que contém os valores exatos de x e y do pixel. Estes valores devolvidos são números floating-point. Uma coordenada física quase nunca calha perfeitamente no centro exato de um pixel inteiro discreto. Isto cobre o movimento para dentro, em direção aos dados. E quanto ao movimento para fora, em direção ao céu? Podes encontrar uma feature usando um algoritmo de computer vision no teu array plano, talvez na coluna de pixel quatrocentos e linha quinhentos. Precisas de saber a sua localização física real no Sol. Para fazeres isto, usas o method pixel to world do map. Forneces a localização do pixel usando Quantities do Astropy para definir as unidades exatas do pixel. O method passa esses valores de pixel pela matemática inversa do World Coordinate System e devolve um objecto SkyCoord do Astropy preciso. Este objecto diz-te exatamente onde aquele pixel específico se encontra no espaço Helioprojective, completo com as unidades físicas adequadas. O World Coordinate System lida com a trigonometria complicada das projeções esféricas, para que possas parar de te preocupar com os índices brutos da matrix e começar a analisar as localizações físicas reais no disco solar. Obrigado por ouvirem. Fiquem bem.
6

Pesquisa Unificada de Dados com Fido

3m 22s

Pare de escrever scrapers personalizados para cada arquivo solar. Aprenda a usar o Fido para executar pesquisas complexas e unificadas em vários instrumentos e comprimentos de onda em simultâneo.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 6 de 12. Existem dezenas de observatórios solares e arquivos de dados por aí, cada um com as suas peculiaridades. Em vez de aprenderes dez web APIs diferentes só para descobrires que observações existem para uma erupção solar específica, só precisas de aprender uma ferramenta. Essa ferramenta é o Unified Data Search com o Fido. Fido significa Federated Internet Data Obtainer. Funciona como um tradutor universal para APIs de dados solares, reduzindo drasticamente o boilerplate code necessário para encontrar observações. Tu dás-lhe os teus parâmetros científicos, e o Fido trata dos network requests para vários data centers nos bastidores. Um equívoco comum é achar que correr uma pesquisa no Fido faz o download automático dos dados. Não faz. A função search devolve estritamente uma tabela de metadados chamada UnifiedResponse. Isto permite-te inspecionar o número de ficheiros, os seus tamanhos e as suas fontes antes de te comprometeres a transferir o que quer que seja para a tua máquina local. Para fazeres uma pesquisa, usas a função Fido ponto search. Constróis a tua query passando-lhe atributos de pesquisa. No SunPy, estes atributos vivem no módulo sunpy ponto net ponto attrs, que é quase sempre importado simplesmente como a letra a. Todas as pesquisas exigem um intervalo de tempo. Defines isto usando um a ponto Time, passando-lhe uma string de início e uma string de fim. A partir daí, refinas os resultados usando outros atributos, mais frequentemente um a ponto Instrument. Aqui está o ponto chave. O Fido permite-te construir queries complexas de múltiplos instrumentos numa única function call, usando operadores lógicos standard. Especificamente, usas o carácter pipe para representar um OR lógico. Supõe que estás a analisar um evento e precisas de dados que cubram uma janela específica de duas horas. Queres observações do instrumento LYRA ou do instrumento RHESSI. Sem o Fido, escreverias um API request para o LYRA, um request completamente diferente para o RHESSI, e depois farias o merge manual das respostas JSON resultantes. Com o Fido, constróis isto de forma nativa. Defines a tua janela de tempo de duas horas usando um a ponto Time. Depois, defines os teus alvos de instrumento: um a ponto Instrument com LYRA, e um a ponto Instrument com RHESSI. Colocas o carácter pipe entre as duas definições de instrumento. Quando passas isto para o Fido ponto search, dás-lhe o atributo de tempo, uma vírgula, e depois os teus atributos de instrumento combinados e agrupados entre parênteses. O Fido lê o operador pipe, divide o request, faz as queries às bases de dados relevantes para ambos os instrumentos durante esse mesmo período de tempo, e faz o merge de tudo novamente. A UnifiedResponse que recebes de volta está organizada de forma intuitiva. Se a tua query atingiu vários data providers, os resultados são agrupados por provider. Podes fazer slice e print desta tabela diretamente no teu terminal para veres exatamente qual é o observatório que tem os dados de que precisas. O verdadeiro poder do Fido não está apenas em encontrar dados solares, mas em normalizar o caos de arquivos dispersos numa sintaxe Python previsível. Se nos quiseres ajudar a continuar a fazer estes episódios, podes apoiar o programa procurando por DevStoriesEU no Patreon. É tudo por agora. Obrigado por ouvires, e continua a programar!
7

Consultas Profundas: JSOC e HEK

3m 32s

Realize consultas avançadas no Joint Science Operations Center e na Heliophysics Event Knowledgebase. Recupere metadados de eventos específicos e recortes de regiões ativas.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 7 de 12. Às vezes, não sabes a hora exata em que um evento solar aconteceu. Só queres pedir a uma base de dados para te mostrar todas as Ejeções de Massa Coronal do mês passado. Se tentares extrair isso diretamente de um arquivo de imagens, vais obter milhões de ficheiros ou absolutamente nada. Para preencher a lacuna entre eventos abstratos e píxeis reais, usamos duas ferramentas específicas: a Heliophysics Event Knowledgebase, ou HEK, e o Joint Science Operations Center, ou JSOC. O HEK é um catálogo de fenómenos solares físicos. Ele regista erupções solares, regiões ativas e ejeções de massa coronal detetadas por vários algoritmos e observadores humanos. Muitos utilizadores fazem queries ao HEK à espera de receber ficheiros de imagem como resposta. Mas não recebem. O HEK devolve metadata do evento. Quando fazes um search, obténs uma data table com os tempos de início, tempos de pico, bounding polygons e notas de observação. Para pesquisares no HEK, usas a função de search standard do Fido. Forneces um time range e, a seguir, adicionas um attribute de evento específico do HEK. Se estiveres à procura de uma ejeção de massa coronal, passas o attribute HEK CME. A base de dados avalia isto e devolve uma lista de eventos correspondentes. Dessa lista, isolas o evento específico que queres e extrais o seu tempo de pico. Agora tens uma coordenada temporal precisa para o teu fenómeno. Com esse tempo preciso em mãos, passas para o segundo passo: fazer o fetch das imagens reais. Para dados detalhados do Solar Dynamics Observatory, fazes uma query ao JSOC. O JSOC é o arquivo principal para instrumentos como o AIA e o HMI. Ele armazena as data series pesadas que contêm os píxeis reais. Constróis um novo search no Fido usando o tempo de pico que extraíste do HEK. Desta vez, passas um attribute JSOC Series. Isto diz ao arquivo exatamente de que instrumento e data product precisas. Podes refinar isto ainda mais usando um attribute JSOC Segment para extrair apenas data files específicos, em vez de um data cube inteiro. Aqui está o insight principal. Ao contrário das queries genéricas, o JSOC processa data exports on demand, e exige a identificação do utilizador. Tens de incluir um attribute JSOC Notify com o teu endereço de e-mail registado dentro do teu search no Fido. Se omitires o endereço de e-mail, a query vai falhar. Os servidores do JSOC colocam o teu request em queue, preparam o corte exato de dados que pediste e fazem o stage para download. Ao fazeres o chaining destes dois sistemas, automatizas completamente o processo de discovery. Começas com um timeframe amplo, pedes ao HEK para identificar exatamente quando um evento específico aconteceu, e passas esses timestamps precisos para o JSOC para recuperar as imagens raw. A base de conhecimento dá-te o mapa, e o centro de operações dá-te o território. É tudo por este episódio. Obrigado por ouvires, e continua a desenvolver!
8

Visualização de Map com Qualidade de Publicação

4m 08s

Transforme FITS arrays escuros em visualizações deslumbrantes e prontas para publicação. Aprenda a configurar colormaps, normalizações logarítmicas e intervalos de recorte.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 8 de 12. Carregas um belo conjunto de dados solares, renderizas a imagem e acabas a olhar para um quadrado totalmente preto com exatamente um pixel branco brilhante no canto. Os teus dados estão corretos, mas o teu dynamic range está a escondê-los completamente. Corrigir isto é o objetivo da Visualização de Mapas com Qualidade de Publicação. Quando os developers tentam visualizar um map do SunPy pela primeira vez, geralmente extraem o array de raw data e passam-no diretamente para um comando standard de image show do matplotlib. Isto renderiza os pixels, mas perde todo o contexto físico. Perdes completamente o teu sistema de coordenadas, e os teus eixos assumem por default índices de array simples. O SunPy resolve isto com um método plot built-in diretamente no objeto map. Quando chamas o plot no teu map, o SunPy provisiona automaticamente um eixo de World Coordinate System, conhecido como eixo WCS. Isto garante que as tuas tick marks representam com precisão unidades físicas no céu, como arcseconds. Não precisas de abandonar os layouts do matplotlib para usar isto. Podes criar uma figure standard do matplotlib e adicionar um subplot. O truque é passar o objeto WCS do map para o argumento projection desse subplot. A seguir, basta passares esse axis específico de volta para o método plot do map. Esta integração dá-te o controlo preciso de formatação do matplotlib, mantendo a estrita perceção espacial do SunPy. Agora, voltando àquele quadrado preto com um pixel brilhante. As imagens solares têm um contraste extremo. Uma solar flare pode ser dezenas de milhares de vezes mais brilhante do que os ténues coronal loops mesmo ao lado. Se mapeares os valores dos raw data linearmente para uma color scale visual, a flare ocupa o topo da escala, e tudo o resto fica esmagado na sombra. Aqui está o ponto chave. Tens de comprimir o dynamic range antes do render. Fazes isto em dois passos usando clipping e normalization. Primeiro, usa o keyword argument clip interval no método plot do map. Em vez de deixares que um outlier ultra brilhante defina o valor máximo da tua color scale, podes fornecer um tuple que representa percentis. Definir o clip interval de um por cento a noventa e nove ponto cinco por cento força o método plot a ignorar o um por cento mais escuro e o meio por cento mais brilhante de pixels ao calcular os limites de cor. O clipping corta instantaneamente o brilho de outliers extremos. Segundo, mesmo depois do clipping, uma escala linear geralmente deixa as regiões calmas demasiado escuras. Para corrigir isto, importa a class LogNorm do matplotlib colors. Passas uma instance de LogNorm para a keyword norm do método plot do map. Aplicar um logarithmic stretch amplifica matematicamente as estruturas ténues nas regiões escuras da imagem, enquanto comprime as diferenças visuais nas regiões mais brilhantes. Quando aplicas o LogNorm, aqueles coronal loops ténues e amplos emergem claramente do background. Finalmente, define a paleta visual correta. O SunPy regista automaticamente os colormaps solares standard dentro do matplotlib. Ao passares o keyword argument cmap para o método plot, podes especificar um canal de instrumento exato. Passar uma string como sdoaia171 aplica a paleta de cor dourada precisa que a comunidade científica usa para esse comprimento de onda específico. Combinar o método plot built-in para precisão de coordenadas, clip intervals para lidar com outliers, logarithmic normalization para o dynamic range, e um colormap específico do instrumento, transforma um array quase completamente escuro numa figure científica detalhada e pronta para publicação. Gostava de tirar um momento para te agradecer por ouvires — ajuda-nos imenso. Fica bem!
9

Recorte Sensível a Coordinates

3m 24s

Recorte os seus Maps em segurança sem corromper os seus metadados espaciais. Aprenda por que motivo deve usar submaps em vez do fatiamento padrão do NumPy.

Download
Daqui fala o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 9 de 12. Fazer o slice de um array NumPy é rápido e fácil. Mas se o fizeres numa imagem solar, as tuas coordenadas espaciais vão transformar-se em lixo instantaneamente. O mecanismo que impede isto é o Coordinate-Aware Cropping. Quando os programadores Python precisam de isolar uma região ativa específica numa imagem solar de disco completo, o seu primeiro instinto costuma ser fazer slice diretamente do data array subjacente. Agarram nas linhas zero a cem e nas colunas zero a cem. Isto extrai os pixels visuais que queres, mas corrompe completamente o World Coordinate System associado ao ficheiro. A metadata ainda assume as dimensões originais da imagem. Como o WCS depende de um index de reference pixel específico para ancorar a grelha de coordenadas, fazer slice do array sem atualizar o header significa que os teus pixels deixam de mapear para as localizações físicas corretas no Sol. Qualquer overlay ou medição que tentes fazer a seguir vai falhar porque a matemática está desalinhada. Para extraíres com segurança uma região de interesse, o SunPy fornece o método submap. Isto faz o coordinate-aware cropping diretamente no próprio map object. Isto garante que o image array e a metadata espacial se mantêm perfeitamente sincronizados a todo o momento. Supõe que queres uma bounding box apertada à volta de uma erupção solar. Em vez de adivinhares os array indices, defines o limite usando o espaço físico. Primeiro, crias um coordinate object que representa o canto inferior esquerdo da região que queres. Especificas a localização em unidades físicas, tipicamente arcseconds, e usas o coordinate frame do teu map original para que tudo partilhe a mesma origem. A seguir, crias um segundo coordinate object para o canto superior direito da tua box. Com estes dois pontos definidos, chamas o método submap no teu map original e passas as coordenadas inferior esquerda e superior direita como argumentos. O método lê a bounding box física, traduz estas coordenadas físicas em pixel indices exatos, e faz o slice do data array por ti. Nunca precisas de calcular os números da linha ou coluna tu mesmo. Aqui está o ponto chave. O método submap não devolve apenas uma imagem mais pequena. Ele reescreve ativamente o header WCS para o novo map. Calcula a nova posição do reference pixel em relação às dimensões do teu crop. Mesmo que o reference pixel original estivesse completamente fora da tua nova bounding box, a matemática do WCS é ajustada automaticamente para que a grelha de coordenadas se mantenha perfeitamente precisa. O reference pixel desloca-se, o array encolhe, e o submap resultante é um map object totalmente válido que continua a saber exatamente onde se encontra no universo físico. Se ignorares o map object e fizeres slice do raw array, quebras a ligação entre os teus dados e o céu físico; deixa sempre o método submap lidar com a matemática das coordenadas por ti. Isto é tudo por este episódio. Obrigado por ouvires, e continua a construir!
10

Alinhamento e Reprojeção de Maps

4m 00s

Combine dados de diferentes instrumentos de forma perfeita. Aprenda a reprojetar matematicamente um Map de um sistema de coordenadas para a grelha de píxeis exata de outro.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 10 de 12. Só porque dois instrumentos diferentes tiram uma fotografia do Sol exatamente no mesmo segundo, não significa que os seus pixels fiquem alinhados. Sobrepô-los diretamente vai dar-te uma confusão desalinhada. Alinhar e reprojetar maps resolve isto. Ao comparar dados do Atmospheric Imaging Assembly, ou AIA, e do Helioseismic and Magnetic Imager, ou HMI, ambos os instrumentos estão no mesmo satélite. Eles capturam imagens em simultâneo. Um erro comum é assumir que estas duas imagens de disco completo podem ser sobrepostas diretamente só porque o tempo coincide. Mas os instrumentos têm plate scales diferentes, o que significa que os seus pixels individuais cobrem áreas físicas diferentes. Eles também têm ligeiros offsets de apontamento. Se pegares numa imagem ultravioleta extrema de alta resolução do AIA e num magnetograma de resolução mais baixa do HMI, as suas grids simplesmente não se alinham. Imagina que queres fazer o plot dos contornos magnéticos dos dados HMI perfeitamente sobre os coronal loops na imagem AIA. Para fazeres isto, tens de converter os dados HMI para o World Coordinate System, ou WCS, do map AIA. O WCS é a framework matemática embutida no map que traduz a localização de um pixel numa coordenada física real no céu. O SunPy lida com esta transformação através de um package externo chamado reproject. Usas uma função chamada reproject underscore interp. Esta função faz uma interpolação espacial rápida, que é a abordagem necessária quando estás a alinhar dados standard de imagens solares. Primeiro, defines o teu target. Neste cenário, o target é o map AIA, por isso extrais o seu object WCS. A seguir, passas o teu map de origem, o magnetograma HMI, e esse WCS target para a função de interpolação. A função projeta a grid target sobre os dados de origem. Ela calcula onde os novos pixels ficam no espaço físico, faz uma query ao map HMI original nessas coordenadas precisas, e interpola os valores dos pixels. Por default, a função devolve-te um novo array de dados raw com a forma exata da imagem target, juntamente com um array de footprint. O footprint indica quais pixels caíram fora do field of view original. Como só precisas dos dados para o overlay, podes passar um parâmetro para ignorar o footprint por completo, o que devolve apenas o array interpolado. Para tornares este array raw útil, constróis um novo map SunPy. Emparelhas o teu novo array de dados HMI interpolado com o header de metadados do teu map AIA target. Aqui está o ponto chave. A reprojeção garante matematicamente grids espaciais idênticas. O teu novo map HMI tem agora exatamente as mesmas dimensões e plate scale que o map AIA. O index quinhentos por quinhentos no map recém-alinhado corresponde exatamente à mesma característica solar física que o index quinhentos por quinhentos no map AIA. Agora podes fazer o plot da imagem AIA num conjunto de eixos, e desenhar com confiança os contornos magnéticos do teu map alinhado diretamente por cima. Como a reprojeção altera permanentemente os valores originais dos teus dados através de interpolação para forçar um match de coordenadas, executa sempre este passo de alinhamento em último lugar, mesmo antes da tua visualização final ou matemática de arrays. Obrigado por passares uns minutos comigo. Até à próxima, fica bem.
11

Dados Temporais 1D com TimeSeries

3m 39s

Mude de imagens espaciais para curvas de luz temporais. Explore o objeto TimeSeries para carregar, truncar e concatenar dados de fluxo de raios-X do GOES.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 11 de 12. As imagens solares são visualmente impressionantes, mas por vezes a informação mais crítica é apenas um único valor de fluxo escalar medido mil vezes por segundo. Quando monitorizas a intensidade de uma erupção solar ao longo de uma semana inteira, uma matriz espacial bidimensional é simplesmente a ferramenta errada para o trabalho. Precisas de dados temporais 1D com o TimeSeries. É um erro comum recorreres ao objeto Map por defeito quando começas a usar o SunPy. Mas o Map serve estritamente para dados espaciais bidimensionais. Quando estás a lidar com dados temporais unidimensionais — como uma curva de luz de raios X que abrange vários dias em múltiplos canais de comprimento de onda — usas o TimeSeries. Ele funciona como o equivalente unidimensional do Map, concebido especificamente para lidar com medições indexadas no tempo, preservando com segurança os metadados de observação e as unidades físicas. Internamente, um objeto TimeSeries depende de um DataFrame do pandas para estruturar os teus timestamps e colunas de dados. O problema de trabalhar diretamente em pandas puro é que os dataframes standard não entendem unidades científicas. O TimeSeries encapsula esta estrutura de dados para garantir que as tuas unidades físicas e os metadados do instrumento permanecem firmemente associados durante as operações. Considera carregar uma curva de luz de raios X a partir de um ficheiro do satélite GOES-15. Passas o caminho do ficheiro à função TimeSeries, e ela devolve um objeto que contém múltiplos canais de observação como colunas. Podes inspecionar estas colunas por nome, como os canais de comprimento de onda curto e longo. Aqui está o ponto-chave. Em vez de extraíres arrays numéricos brutos diretamente do dataframe subjacente, extrais as colunas usando o método quantity. Chamas o quantity e passas-lhe o nome da coluna específica que queres. Este método devolve os dados como um objeto Quantity do Astropy. Isto significa que os valores numéricos brutos do fluxo estão estritamente associados às suas unidades físicas, como watts por metro quadrado. Extrair dados desta forma evita completamente erros silenciosos de conversão de unidades mais à frente nos teus cálculos matemáticos. Depois de carregares os teus dados, raramente precisas do ficheiro de observação completo. Podes querer isolar apenas a hora exata em que uma erupção solar atingiu o seu pico. Consegues isto truncando o TimeSeries. Primeiro, defines um objeto TimeRange fornecendo uma string de tempo inicial e uma string de tempo final. De seguida, passas este TimeRange diretamente para o método truncate do teu TimeSeries. Isto faz o slice do dataframe subjacente e devolve um objeto TimeSeries totalmente novo. Os dados são cortados de forma limpa para a tua janela de interesse exata, e todos os metadados associados sobrevivem ao corte. Muitas vezes, a tua análise requer dados que abrangem vários ficheiros de observação separados. Se o teu objetivo é construir um dataset contínuo de uma semana, carregas o segundo ficheiro no seu próprio objeto TimeSeries. Depois, basta chamares o método concatenate no primeiro TimeSeries, passando o segundo como argumento. O SunPy alinha os índices de tempo e faz o merge das linhas de dados. Desde que os metadados do instrumento de ambos os ficheiros sejam compatíveis, obténs um único objeto TimeSeries unificado, pronto para análise contínua ao longo do período de tempo alargado. Ao processar dados temporais, a associação rigorosa dos teus timestamps e valores numéricos às suas unidades físicas é o que separa uma análise científica fiável de uma falha de cálculo silenciosa. Por este episódio é tudo. Obrigado por ouvires, e continua a desenvolver!
12

Modelação de Rotação Diferencial

3m 58s

Tenha em conta a natureza fluida da superfície solar. Aprenda a usar o RotatedSunFrame para prever as coordenadas futuras de uma região ativa à medida que o Sol gira.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. SunPy: Análise de Dados Solares, episódio 12 de 12. O Sol não é uma rocha sólida. O seu equador gira significativamente mais rápido que os seus polos, o que significa que qualquer grelha de coordenadas que lá mapeies se está a desintegrar lentamente. Se rastreares uma região ativa na terça-feira, esses mesmos valores de latitude e longitude apontarão para o espaço vazio na quinta-feira. Para rastrear o plasma real, precisas de um mecanismo chamado Modelação de Rotação Diferencial. As pessoas muitas vezes tratam os corpos celestes como esferas sólidas. Na Terra, uma coordenada geográfica permanece fixa. No Sol, a superfície é fluida. O plasma no equador solar faz uma rotação completa em cerca de vinte e cinco dias, enquanto o plasma perto dos polos demora mais de trinta e quatro dias. Como as coordenadas são inerentemente dependentes do tempo, não podes simplesmente transferir uma posição espacial de um dia para o outro. Tens de ter em conta o deslocamento físico do material solar ao longo do tempo. O SunPy lida com este deslocamento dependente do tempo usando uma frame de coordenadas chamada Rotated Sun Frame. Esta frame permite-te pegar numa coordenada medida num momento inicial e projetar onde essa porção exata de material solar estará num novo momento. Aqui está o ponto chave. A Rotated Sun Frame funciona como um wrapper em torno de uma frame de coordenadas existente. Não calculas a nova latitude e longitude manualmente. Em vez disso, defines uma frame que codifica explicitamente a diferença de tempo e deixas que a engine de transformação de coordenadas faça os cálculos. Supõe que tens as coordenadas de uma região ativa observada na terça-feira. Este é o teu ponto inicial, representado como um objeto SkyCoord. Tem uma posição espacial e um tempo de observação. Para descobrir onde essa região ativa estará na quinta-feira, configuras uma nova Rotated Sun Frame. Primeiro, forneces a frame base, que extrais diretamente da tua coordenada de terça-feira. A seguir, forneces o tempo alvo. Podes especificar o timestamp exato de quinta-feira, ou podes passar uma duração, como um time delta de dois dias. O SunPy tem agora uma frame de coordenadas alvo que entende o modelo de rotação solar. Finalmente, pegas na tua coordenada de terça-feira e transformas essa coordenada nesta nova Rotated Sun Frame. Quando executas esta transformação, o SunPy aplica um perfil de rotação diferencial padrão. Lê a latitude da tua coordenada inicial, calcula a velocidade angular correta para essa latitude específica, multiplica-a pela tua duração de dois dias e desloca a longitude. O output é um novo objeto de coordenadas. A sua latitude e longitude são atualizadas para refletir dois dias de rotação diferencial, indicando com precisão para onde o plasma da tua região ativa se deslocou até quinta-feira. Se a região estava perto do equador, deslocou-se bastante. Se estava perto do polo, moveu-se muito menos. Esta abordagem permite-te avançar ou retroceder as coordenadas no tempo de forma transparente. Como a rotação diferencial altera a localização física dos dados que estás a estudar, vincular cada coordenada a um tempo de observação específico e deslocá-la através do modelo de rotação é a única maneira de manter a precisão em múltiplas observações. Isto conclui a nossa série sobre análise de dados solares. Encorajo-te a explorar a documentação oficial do SunPy, a experimentar estas ferramentas na prática, ou a visitar devstories dot eu para sugerir tópicos para futuras séries. É tudo por este episódio. Obrigado por ouvires, e continua a construir!