Volver al catálogo
Season 12 12 Episodios 49 min 2026

SunPy: Solar Data Analysis

v7.1 — Edición 2026. Un análisis en profundidad de SunPy v7.1 (2026), el entorno de análisis de datos solares de código abierto desarrollado por la comunidad para Python. Domina todo, desde Maps y Coordinates hasta búsquedas con Fido y TimeSeries.

Computación científica Física solar
SunPy: Solar Data Analysis
Reproduciendo ahora
Click play to start
0:00
0:00
1
La identidad central: Quantities y unidades
Descubre por qué SunPy exige unidades físicas para todos los cálculos. Aprende a usar Astropy Quantities para evitar errores críticos de conversión de unidades en tu pipeline de análisis solar.
4m 04s
2
La abstracción de Map
Sumérgete en la estructura de datos fundamental de SunPy: el Map. Aprende a ingerir archivos FITS y a vincular arrays de datos 2D con los metadatos subyacentes del observatorio.
3m 56s
3
Precisión temporal
Domina la representación del tiempo en la física solar utilizando Astropy Time y SunPy TimeRange. Descubre por qué los datetimes estándar de Python fallan en la astrofísica de altas energías.
4m 17s
4
Marcos de coordenadas y observadores
Aprende a navegar por la superficie solar utilizando Astropy SkyCoord y los marcos solares especializados de SunPy. Comprende el papel fundamental de la ubicación del observador y el tiempo de observación.
4m 23s
5
Conectando píxeles y espacio físico
Conecta los píxeles de tu imagen con coordenadas físicas utilizando el World Coordinate System. Aprende a convertir sin fallos entre índices de píxeles y SkyCoords sin necesidad de escalado manual.
3m 49s
6
Búsqueda unificada de datos con Fido
Deja de escribir scrapers personalizados para cada archivo solar. Aprende a usar Fido para ejecutar búsquedas complejas y unificadas a través de múltiples instrumentos y longitudes de onda simultáneamente.
4m 03s
7
Consultas profundas: JSOC y HEK
Realiza consultas avanzadas en el Joint Science Operations Center y la Heliophysics Event Knowledgebase. Recupera metadatos de eventos específicos y recortes de regiones activas.
3m 33s
8
Visualización de Map con calidad de publicación
Transforma arrays FITS tenues en visualizaciones impresionantes listas para publicar. Aprende a configurar colormaps, normalizaciones logarítmicas e intervalos de recorte.
4m 23s
9
Recorte basado en coordenadas
Recorta tus Maps de forma segura sin corromper tus metadatos espaciales. Aprende por qué deberías usar submaps en lugar del slicing estándar de NumPy.
3m 47s
10
Alineación y reproyección de Maps
Combina datos de diferentes instrumentos sin problemas. Aprende a reproyectar matemáticamente un map de un sistema de coordenadas a la cuadrícula de píxeles exacta de otro.
4m 23s
11
Datos temporales 1D con TimeSeries
Pasa de las imágenes espaciales a las curvas de luz temporales. Explora el objeto TimeSeries para cargar, truncar y concatenar datos de flujo de rayos X de GOES.
4m 25s
12
Modelado de la rotación diferencial
Ten en cuenta la naturaleza fluida de la superficie solar. Aprende a usar RotatedSunFrame para predecir las coordenadas futuras de una región activa a medida que el Sol gira.
4m 18s

Episodios

1

La identidad central: Quantities y unidades

4m 04s

Descubre por qué SunPy exige unidades físicas para todos los cálculos. Aprende a usar Astropy Quantities para evitar errores críticos de conversión de unidades en tu pipeline de análisis solar.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 1 de 12. Quizás estés acostumbrado a pasar arrays numéricos tal cual a las funciones y confiar en que las matemáticas funcionen. Pero en física solar, asumir las dimensiones de tus datos puede invalidar silenciosamente todo tu pipeline de análisis. La protección contra esto es el tema de este episodio: La identidad central: Quantities y unidades. Si has intentado pasar un numpy array estándar a una función de SunPy, probablemente te haya saltado una excepción inmediata. Esto no es un bug. SunPy rechaza intencionadamente los números sin procesar. En muchos dominios científicos, un número por sí solo es peligroso. Diez podría significar diez grados, diez segundos de arco o diez metros. Si una función espera matemáticamente radianes y le pasas grados, el Python estándar calculará tan tranquilo la respuesta incorrecta. SunPy evita este fallo silencioso requiriendo el seguimiento explícito de unidades en todo el ecosistema. Esto se hace usando objetos Quantity de Astropy. Un Quantity es simplemente un número, o un array completo de números, vinculado de forma segura a una unidad física. Lo creas multiplicando tus datos en crudo por un objeto unit. Por ejemplo, coges el número quince y lo multiplicas por un unit que representa segundos de arco. El objeto resultante lleva ambas piezas de información juntas. Como los objetos Quantity están construidos sobre arrays estándar, puedes seguir realizando todas tus operaciones matemáticas habituales. Puedes hacerles slice, calcular la media o encontrar el valor máximo, y la unidad correcta seguirá asociada al resultado. Si alguna vez necesitas separarlos, puedes acceder al número en crudo usando el atributo punto value, y a la unidad en sí usando el atributo punto unit. Normalmente, los mantienes juntos porque el objeto sabe cómo manejar sus propias matemáticas. Si sumas metros a kilómetros, el objeto Quantity los escala automáticamente para que la suma sea matemáticamente correcta. También puedes convertir manualmente entre unidades compatibles usando el método punto to. Convertir metros a kilómetros es sencillo porque ambas miden longitud. Pero imagina un escenario donde necesitas convertir una distancia angular medida en el plano del cielo en una distancia física en la superficie del Sol. Estrictamente hablando, un ángulo no es una longitud. Por defecto, el sistema bloqueará esta conversión. Aquí está la clave. Puedes hacer un override de esta estricta comprobación de dimensiones usando una equivalencia. SunPy proporciona una herramienta específica para esto llamada solar angle equivalency. Cuando le pasas esto a tu método de conversión, proporciona el contexto físico que falta. Utiliza la distancia entre el observador y el Sol para traducir el ángulo aparente en una distancia física literal, como kilómetros a través del disco solar. Cierra la brecha entre la geometría observacional y la realidad física. Para forzar este tipo de seguridad en tu propio código, usas el decorator quantity input. Lo colocas encima de la definición de tu función para especificar qué tipo de dimensiones físicas acepta tu función. No obligas al usuario a pasar grados o radianes específicamente. En su lugar, especificas que el input debe ser un ángulo. Si alguien intenta pasar una unidad de tiempo o longitud, el decorator lo captura y lanza un error antes incluso de que la función se ejecute. Este seguimiento riguroso de las dimensiones físicas significa que tu código falla ruidosamente cuando es matemáticamente inválido, en lugar de devolver datos basura silenciosamente. Si disfrutas de estos análisis en profundidad, puedes apoyar el programa buscando DevStoriesEU en Patreon. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue programando!
2

La abstracción de Map

3m 56s

Sumérgete en la estructura de datos fundamental de SunPy: el Map. Aprende a ingerir archivos FITS y a vincular arrays de datos 2D con los metadatos subyacentes del observatorio.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 2 de 12. Un enorme array bidimensional de números que representan píxeles solares es completamente inútil si no conoces el instrumento que lo capturó, la longitud de onda o la fecha exacta. Para hacer ciencia real, esos píxeles deben permanecer permanentemente fusionados a su contexto. Este es exactamente el problema que resuelve la abstracción Map. Un error muy común es asumir que un Map de SunPy es solo un wrapper de conveniencia para hacer plots. No lo es. Aunque ciertamente puede dibujar imágenes, en su núcleo, un Map es un contenedor de datos consciente de las coordenadas. Actúa como el pegamento central que evita que pierdas tu metadata cuando manipulas los píxeles subyacentes. Veamos cómo funciona esto en la práctica. Supongamos que has descargado un archivo FITS que contiene una observación AIA a 171 Angstroms. FITS es el formato de archivo estándar para datos astronómicos, y almacena tanto el array de la imagen raw como un header lleno de detalles de la observación. Para llevar esto a tu entorno, pasas la ruta de tu archivo a la función sunpy punto map punto Map. Esta función en realidad actúa como una factory. Lee el archivo, detecta automáticamente qué instrumento tomó la imagen y devuelve un objeto Map especializado. Simplemente llamaremos a nuestro nuevo objeto my_map. Una vez que tienes tu Map, el primer componente principal a explorar es la metadata. Los observatorios solares empaquetan una cantidad tremenda de detalles en el header FITS, y SunPy extrae todo esto en un atributo llamado my_map punto meta. Este atributo se comporta exactamente como un diccionario estándar de Python. Esto significa que puedes leer keys específicas programáticamente para guiar tu análisis. Por ejemplo, si tu script necesita extraer la fecha exacta de observación, simplemente accedes a la key date directamente desde el diccionario meta. SunPy también normaliza muchas de estas keys del header, suavizando las diferencias en cómo varios instrumentos solares nombran sus campos de metadata. Ahora, la segunda parte de esto es la imagen en sí. Aquí está la idea clave. El objeto Map no intenta reinventar cómo funcionan los arrays numéricos. Los datos reales de los píxeles se almacenan en un atributo llamado my_map punto data, y esto no es más que un array de NumPy bidimensional estándar. Como es solo NumPy, no necesitas aprender una nueva sintaxis para hacer tu trabajo matemático. Si quieres encontrar el punto absolutamente más brillante en tu imagen AIA, extraes my_map punto data y ejecutas una función maximum estándar sobre él. Obtienes tu valor de píxel raw al instante. Al mantener el diccionario meta y el array de datos estrechamente envueltos juntos dentro de un único objeto Map, SunPy asegura que tus unidades físicas y el contexto del instrumento nunca se separen de los números raw. Proporciona un único boundary alrededor de todo lo que hace que esos píxeles tengan sentido. El verdadero poder de la abstracción Map no es que dibuje el sol, sino que obliga al array de la imagen raw y al contexto observacional a viajar a través de tu codebase como una unidad única e inseparable. Eso es todo por este episodio. Gracias por escuchar, ¡y sigue construyendo!
3

Precisión temporal

4m 17s

Domina la representación del tiempo en la física solar utilizando Astropy Time y SunPy TimeRange. Descubre por qué los datetimes estándar de Python fallan en la astrofísica de altas energías.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 3 de 12. Los datetimes estándar de Python no saben lo que es un segundo intercalar. Al medir el tiempo de transitorios solares de alta energía, un segundo perdido significa que tus datos se alinean con el espacio vacío en lugar de con el pico de la erupción. Por eso, SunPy depende de una sincronización precisa. Muchos desarrolladores utilizan por defecto el módulo datetime estándar de Python por costumbre. Datetime no es una herramienta de precisión. Carece de la precisión astrofísica y del soporte para formatos de tiempo solar que requiere SunPy. Ignora los segundos intercalares y no puede manejar escalas de tiempo especializadas como utime. En su lugar, SunPy requiere que uses objetos Astropy Time. Para llevar tus variados datos a este estricto ecosistema, usas una función llamada parse time. Parse time actúa como un traductor universal de timestamps. Le pasas un string en casi cualquier formato, ya sea un string ISO, una fecha con formato personalizado o un timestamp sacado directamente del header de metadatos de un satélite antiguo. Interpreta el input y devuelve un objeto Astropy Time robusto. Esto es fundamental porque los distintos observatorios solares formatean sus relojes de manera diferente. Parse time normaliza todo en un objeto estándar que sabe exactamente dónde se sitúa en la línea de tiempo universal, teniendo en cuenta cada segundo intercalar por el camino. Una vez que tus timestamps individuales son precisos, necesitas manejar las duraciones. Analizar un evento solar requiere delimitar tus datos dentro de una ventana de observación. Este es el propósito del objeto Time Range. Un Time Range representa un intervalo continuo entre dos puntos exactos. Puedes definirlo proporcionando un tiempo de inicio y un tiempo de fin, pero suele ser más práctico proporcionar un tiempo de inicio y una duración. Imagina que estás configurando una ventana de observación para una erupción solar. Creas un Time Range pasándole un string de inicio, como el año 2010, mes 3, día 4 a diez minutos pasada la medianoche. Para el segundo argumento, en lugar de calcular tú mismo el tiempo de fin exacto, le pasas una cantidad de unidades de Astropy de cuatrocientos segundos. El objeto Time Range absorbe esos inputs, aplica la escala de tiempo correcta y establece un límite rígido para tu evento. Aquí es donde se pone interesante. Ahora, necesitas analizar las fases ascendente y descendente de esa erupción, lo que significa que quieres comparar la primera mitad del evento con la segunda mitad. El objeto Time Range tiene un método integrado llamado split. Llamas a split y especificas el número entero dos. El método calcula al instante el punto medio exacto y devuelve una lista que contiene dos nuevos objetos Time Range. Tu ventana original de cuatrocientos segundos se divide perfectamente en dos subintervalos de doscientos segundos. No hay cálculos de fechas manuales, y absolutamente ningún riesgo de perder una fracción de segundo durante la división. El módulo datetime integrado de Python está pensado para la planificación, pero un objeto Astropy Time es un instrumento científico. Tus límites temporales requieren exactamente el mismo seguimiento estricto de unidades que tus datos espaciales, y depender de estos objetos especializados garantiza que tus ventanas se mantengan físicamente precisas en todo tu pipeline. Eso es todo por este episodio. ¡Hasta la próxima!
4

Marcos de coordenadas y observadores

4m 23s

Aprende a navegar por la superficie solar utilizando Astropy SkyCoord y los marcos solares especializados de SunPy. Comprende el papel fundamental de la ubicación del observador y el tiempo de observación.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 4 de 12. Observas una llamarada solar enorme, registras sus coordenadas horizontales y verticales, y se las envías a un colega. Pero su telescopio está ubicado en un satélite que va a medio camino detrás de la Tierra, y tus números de coordenadas no significan absolutamente nada para él. Esto se debe a que un punto en el Sol no es un punto estático en una cuadrícula plana. Su posición depende completamente de dónde esté ubicado tu telescopio en el sistema solar y de la hora exacta. La forma en que resolvemos esta ambigüedad es mediante Coordinate Frames y Observers. Es un error frecuente definir un punto en la superficie solar simplemente pasándole dos valores numéricos a una variable. Debes especificar explícitamente el contexto. Sin proporcionar la ubicación del observer y la hora de observación, una coordenada solar carece de significado físico. El sistema solar está en constante movimiento. La Tierra orbita, las sondas se desplazan a lo largo de sus trayectorias y el Sol mismo rota. Para definir con seguridad una ubicación en este entorno dinámico, SunPy utiliza un objeto llamado SkyCoord, heredado de la librería Astropy. Un SkyCoord actúa como un contenedor estricto. Toma tus números en crudo y los vincula a un frame de referencia físico específico, obligándote a definir tanto el espacio como el tiempo. El frame más común que te vas a encontrar es el frame Helioprojective. Este frame describe el Sol exactamente como aparece ante la lente de una cámara específica. Es una proyección bidimensional de una esfera tridimensional, medida en ángulos como arcseconds. Básicamente, mide las líneas de visión desde el observer hasta el disco solar. Dado que está fundamentalmente ligado al punto de vista del observer, crear una coordenada Helioprojective requiere que le pases el parámetro observer, que define dónde está el telescopio, y el parámetro obstime, que fija el momento exacto en que se disparó el obturador. Compara eso con el frame HeliographicStonyhurst. Este es un verdadero sistema de coordenadas tridimensional que utiliza la longitud y latitud solares. Es intrínseco al Sol, pero está fijado espacialmente a la configuración del sistema solar. La línea de longitud cero del frame HeliographicStonyhurst está fijada para que siempre apunte directamente a la Tierra. Te da una ubicación física absoluta en la superficie solar en lugar de un ángulo de visión localizado. Aquí es donde se pone interesante. Vamos a ver cómo traducirías entre perspectivas. Supón que tienes un SkyCoord para esa llamarada solar registrada desde la Tierra usando el frame Helioprojective. Quieres averiguar exactamente dónde vería esa misma llamarada en sus propias cámaras una nave espacial que orbita Venus. Primero, instancias tu SkyCoord original con el observer de la Tierra, el tiempo de observación y los arcseconds. Después, recuperas la ubicación física de Venus. SunPy incluye funciones built-in para buscar trayectorias planetarias para un timestamp determinado. Una vez que tienes la coordenada de Venus en ese momento exacto de observación, llamas al método transform en tu coordenada original de la Tierra. Le pasas a este método un frame Helioprojective totalmente nuevo, pero configuras el parámetro observer de este nuevo frame a Venus. SunPy entonces ejecuta la compleja geometría tridimensional por debajo. Calcula las líneas de visión físicas y devuelve un nuevo SkyCoord. Este objeto resultante contiene las coordenadas angulares exactas en las que apareció la llamarada desde el punto de vista de Venus. La conclusión más importante que debes llevarte es que una coordenada solar nunca es solo una ubicación; es una relación estricta entre un objetivo y un observer congelada en un milisegundo específico. Eso es todo por este episodio. ¡Gracias por escuchar y sigue programando!
5

Conectando píxeles y espacio físico

3m 49s

Conecta los píxeles de tu imagen con coordenadas físicas utilizando el World Coordinate System. Aprende a convertir sin fallos entre índices de píxeles y SkyCoords sin necesidad de escalado manual.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 5 de 12. Tienes una ubicación específica en el Sol, como una erupción activa, y necesitas extraer sus valores de datos exactos de tu matriz de la imagen. Traducir un punto físico esférico en el espacio a una fila y columna en una matriz plana suele requerir una trigonometría tediosa. Hacer de puente entre los píxeles y el espacio físico gestiona esto por ti al instante usando el World Coordinate System. Un Map de SunPy es un array bidimensional de NumPy de píxeles emparejado con metadatos extensos. Estos metadatos definen hacia dónde apuntaba el telescopio, el tamaño físico de cada píxel y la proyección esférica específica utilizada para aplanar la imagen. SunPy agrupa todas estas reglas geométricas en un objeto al que se accede mediante la propiedad WCS del Map. WCS significa World Coordinate System. Este objeto actúa como la capa de traducción entre tu grid de datos plano y el cielo físico. Aquí está la clave. Tienes que mantener el orden de tus coordenadas claro dependiendo del dominio en el que estés. Como los datos de la imagen subyacente son un array de NumPy, espera que el acceso a los datos use el orden de fila y luego columna. Eso significa que el eje Y va antes que el eje X. El World Coordinate System opera en el espacio físico, usando geometría cartesiana estándar donde la X va antes que la Y. Los inputs de coordenadas físicas se ordenan como X y luego Y. El indexing directo del array se ordena como Y y luego X. Mezclar esto es una fuente frecuente de bugs. Ahora, pasemos del cielo físico al grid de píxeles. Supón que quieres encontrar la ubicación exacta del píxel fraccional que corresponde al centro físico de tu Map. El Map proporciona una propiedad llamada center. Esta representa una coordenada física Helioprojective en el espacio. Puedes pasar esa coordenada center directamente al método world to pixel del Map. El World Coordinate System procesa las matemáticas de la proyección y devuelve un objeto que contiene los valores exactos de los píxeles X e Y. Estos valores devueltos son números en coma flotante. Una coordenada física casi nunca cae perfectamente en el centro exacto de un píxel entero discreto. Eso cubre el movimiento hacia adentro, hacia los datos. ¿Qué hay de moverse hacia afuera, hacia el cielo? Podrías encontrar una característica usando un algoritmo de computer vision en tu array plano, quizás en la columna de píxeles cuatrocientos y la fila quinientos. Necesitas conocer su ubicación física real en el Sol. Para hacer esto, usas el método pixel to world del Map. Proporcionas la ubicación del píxel usando Quantities de Astropy para definir las unidades exactas del píxel. El método pasa esos valores de píxel por las matemáticas inversas del World Coordinate System y devuelve un objeto SkyCoord de Astropy preciso. Este objeto te dice exactamente dónde se sitúa ese píxel específico en el espacio Helioprojective, completo con sus unidades físicas adecuadas. El World Coordinate System maneja la trigonometría engorrosa de las proyecciones esféricas para que puedas dejar de preocuparte por los índices raw de la matriz y empezar a analizar ubicaciones físicas reales en el disco solar. Gracias por escuchar. Cuidaos todos.
6

Búsqueda unificada de datos con Fido

4m 03s

Deja de escribir scrapers personalizados para cada archivo solar. Aprende a usar Fido para ejecutar búsquedas complejas y unificadas a través de múltiples instrumentos y longitudes de onda simultáneamente.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de Datos Solares, episodio 6 de 12. Hay decenas de observatorios solares y archivos de datos por ahí, cada uno con sus particularidades. En lugar de aprender diez web APIs diferentes solo para averiguar qué observaciones existen para una erupción solar específica, solo necesitas aprender una herramienta. Esa herramienta es Unified Data Search con Fido. Fido significa Federated Internet Data Obtainer. Actúa como un traductor universal para las APIs de datos solares, reduciendo drásticamente el boilerplate code necesario para encontrar observaciones. Tú le das tus parámetros científicos y Fido gestiona las peticiones de red a múltiples centros de datos en segundo plano. Un error común es pensar que al ejecutar una búsqueda con Fido se descargan automáticamente los datos. No es así. La función search devuelve estrictamente una tabla de metadatos llamada UnifiedResponse. Esto te permite inspeccionar el número de archivos, sus tamaños y sus fuentes antes de comprometerte a transferir nada a tu máquina local. Para realizar una búsqueda, utilizas la función Fido punto search. Construyes tu query pasándole atributos de búsqueda. En SunPy, estos atributos viven en el módulo sunpy punto net punto attrs, que casi siempre se importa simplemente como la letra a. Cada búsqueda requiere un rango de tiempo. Lo defines usando a punto Time, pasándole un string de inicio y un string de fin. A partir de ahí, filtras los resultados usando otros atributos, más comúnmente a punto Instrument. Aquí está la clave. Fido te permite construir queries complejas multi-instrumento en una sola function call usando operadores lógicos estándar. Específicamente, utilizas el carácter pipe para representar un OR lógico. Supón que estás analizando un evento y necesitas datos que cubran una ventana específica de dos horas. Quieres observaciones del instrumento LYRA o del instrumento RHESSI. Sin Fido, escribirías una API request para LYRA, una request completamente diferente para RHESSI, y luego harías un merge manual de las respuestas JSON resultantes. Con Fido, construyes esto de forma nativa. Defines tu ventana de tiempo de dos horas usando a punto Time. Luego, defines tus instrumentos objetivo: a punto Instrument con LYRA, y a punto Instrument con RHESSI. Pones el carácter pipe entre las dos definiciones de instrumentos. Cuando le pasas esto a Fido punto search, le das el atributo de tiempo, una coma, y luego tus atributos de instrumento combinados y agrupados entre paréntesis. Fido lee el operador pipe, divide la request, consulta las bases de datos relevantes para ambos instrumentos durante ese mismo intervalo de tiempo, y hace un merge de todo de nuevo. El UnifiedResponse que recibes de vuelta está organizado de forma intuitiva. Si tu query alcanzó a múltiples proveedores de datos, los resultados se agrupan por proveedor. Puedes hacer un slice e imprimir esta tabla directamente en tu terminal para ver exactamente qué observatorio tiene los datos que necesitas. El verdadero poder de Fido no es solo que encuentra datos solares, sino que normaliza el caos de los archivos dispersos en una sintaxis de Python predecible. Si te gustaría ayudarnos a seguir haciendo estos episodios, puedes apoyar el programa buscando DevStoriesEU en Patreon. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue creando!
7

Consultas profundas: JSOC y HEK

3m 33s

Realiza consultas avanzadas en el Joint Science Operations Center y la Heliophysics Event Knowledgebase. Recupera metadatos de eventos específicos y recortes de regiones activas.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 7 de 12. A veces no sabes la hora exacta en la que ocurrió un evento solar. Solo quieres pedirle a una base de datos que te enseñe todas las eyecciones de masa coronal del mes pasado. Si intentas sacar eso directamente de un archivo de imágenes, obtendrás millones de archivos o absolutamente nada. Para hacer de puente entre los eventos abstractos y los píxeles reales, usamos dos herramientas específicas: la Heliophysics Event Knowledgebase, o HEK, y el Joint Science Operations Center, o JSOC. La HEK es un catálogo de fenómenos solares físicos. Registra erupciones, regiones activas y eyecciones de masa coronal detectadas por diversos algoritmos y observadores humanos. Muchos usuarios hacen una query a la HEK esperando recibir archivos de imagen a cambio. Pero no. La HEK devuelve metadatos del evento. Cuando buscas en ella, obtienes una tabla de datos que contiene horas de inicio, horas pico, bounding polygons y notas de observación. Para buscar en la HEK, usas la función de búsqueda estándar de Fido. Proporcionas un rango de tiempo y luego añades un atributo de evento específico de la HEK. Si estás buscando una eyección de masa coronal, le pasas el atributo HEK CME. La base de datos evalúa esto y devuelve una lista de eventos coincidentes. De esa lista, aíslas el evento específico que quieres y extraes su hora pico. Ahora tienes una coordenada temporal precisa para tu fenómeno. Con esa hora precisa en la mano, pasas al segundo paso: obtener las imágenes reales. Para obtener datos detallados del Solar Dynamics Observatory, le haces una query al JSOC. El JSOC es el archivo principal para instrumentos como AIA y HMI. Almacena las series de datos pesadas que contienen los píxeles reales. Construyes una nueva búsqueda en Fido usando la hora pico que extrajiste de la HEK. Esta vez, le pasas un atributo JSOC Series. Esto le dice al archivo exactamente qué instrumento y producto de datos necesitas. Puedes refinar esto aún más usando un atributo JSOC Segment para extraer solo archivos de datos específicos, en lugar de un data cube completo. Aquí está la clave. A diferencia de las queries genéricas, el JSOC procesa las exportaciones de datos on demand, y requiere identificación de usuario. Debes incluir un atributo JSOC Notify que contenga tu dirección de correo electrónico registrada dentro de tu búsqueda en Fido. Si omites la dirección de correo electrónico, la query fallará. Los servidores del JSOC ponen en cola tu request, preparan el corte exacto de datos que has pedido y lo dejan listo para descargar. Al encadenar estos dos sistemas, automatizas por completo el proceso de descubrimiento. Empiezas con un marco de tiempo amplio, le pides a la HEK que identifique exactamente cuándo ocurrió un evento específico, y le pasas esos timestamps precisos al JSOC para recuperar las imágenes raw. La knowledgebase te da el mapa, y el operations center te da el territorio. Eso es todo por este episodio. Gracias por escuchar, ¡y sigue programando!
8

Visualización de Map con calidad de publicación

4m 23s

Transforma arrays FITS tenues en visualizaciones impresionantes listas para publicar. Aprende a configurar colormaps, normalizaciones logarítmicas e intervalos de recorte.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 8 de 12. Cargas unos datos solares preciosos, renderizas la imagen y acabas mirando un cuadrado totalmente negro con exactamente un píxel blanco brillante en la esquina. Tus datos están bien, pero tu rango dinámico los oculta por completo. Solucionar esto es de lo que trata la visualización de mapas con calidad de publicación. Cuando los desarrolladores intentan visualizar un map de SunPy por primera vez, suelen extraer el array de datos en crudo y se lo pasan directamente a un comando image show estándar de matplotlib. Esto renderiza los píxeles, pero pierde todo el contexto físico. Pierdes por completo tu sistema de coordenadas, y tus ejes pasan por defecto a ser simples índices del array. SunPy resuelve esto con un método plot integrado directamente en el objeto map. Cuando llamas a plot en tu map, SunPy provisiona automáticamente un eje World Coordinate System, conocido como eje WCS. Esto asegura que tus ticks representen con precisión unidades físicas en el cielo, como segundos de arco. No tienes que abandonar los layouts de matplotlib para usar esto. Puedes crear una figure estándar de matplotlib y añadir un subplot. El truco está en pasar el objeto WCS del map al argumento projection de ese subplot. Luego, simplemente le pasas ese eje específico de vuelta al método plot del map. Esta integración te da el control de formato preciso de matplotlib mientras mantiene la estricta conciencia espacial de SunPy. Ahora, volvamos a ese cuadrado negro con un píxel brillante. Las imágenes solares tienen un contraste extremo. Una erupción solar puede ser decenas de miles de veces más brillante que los tenues bucles coronales que tiene justo al lado. Si mapeas los valores de los datos en crudo de forma lineal a una escala de color visual, la erupción se queda con el extremo superior de la escala, y todo lo demás queda aplastado en la sombra. Aquí está la clave. Tienes que comprimir el rango dinámico antes de renderizar. Esto lo haces en dos pasos usando clipping y normalización. Primero, usa el keyword argument clip interval en el método plot del map. En lugar de dejar que un outlier ultrabrillante defina el valor máximo de tu escala de color, puedes pasarle una tuple que represente los percentiles. Ajustar el clip interval del uno por ciento al noventa y nueve coma cinco por ciento fuerza al método plot a ignorar el uno por ciento más oscuro y el medio por ciento más brillante de los píxeles al calcular los límites de color. El clipping elimina al instante el resplandor de los outliers extremos. Segundo, incluso después del clipping, una escala lineal suele dejar las regiones tranquilas demasiado oscuras. Para solucionar esto, importa la clase LogNorm de matplotlib colors. Le pasas una instancia de LogNorm al keyword norm del método plot del map. Aplicar un estiramiento logarítmico amplifica matemáticamente las estructuras tenues en las regiones oscuras de la imagen, mientras comprime las diferencias visuales en las regiones más brillantes. Cuando aplicas LogNorm, esos tenues y amplios bucles coronales emergen claramente del fondo. Finalmente, configura la paleta visual correcta. SunPy registra automáticamente los colormaps solares estándar dentro de matplotlib. Pasando el keyword argument cmap al método plot, puedes especificar un canal exacto del instrumento. Pasar un string como sdoaia171 aplica la paleta dorada precisa que la comunidad científica utiliza para esa longitud de onda específica. Combinar el método plot integrado para la precisión de las coordenadas, los clip intervals para manejar los outliers, la normalización logarítmica para el rango dinámico y un colormap específico del instrumento, transforma un array casi completamente oscuro en una figure científica detallada y lista para publicar. Me gustaría tomarme un momento para darte las gracias por escucharnos; nos ayuda mucho. ¡Que tengas un buen día!
9

Recorte basado en coordenadas

3m 47s

Recorta tus Maps de forma segura sin corromper tus metadatos espaciales. Aprende por qué deberías usar submaps en lugar del slicing estándar de NumPy.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 9 de 12. Hacer slicing a un array de NumPy es rápido y sencillo. Pero si lo haces con una imagen solar, tus coordenadas espaciales se convertirán en basura al instante. El mecanismo que evita esto es el Coordinate-Aware Cropping. Cuando los desarrolladores de Python necesitan aislar una región activa específica en una imagen solar de disco completo, su primer instinto suele ser hacer slicing directamente al array de datos subyacente. Cogen las filas de cero a cien y las columnas de cero a cien. Esto extrae los píxeles visuales que quieres, pero corrompe por completo el World Coordinate System asociado al archivo. La metadata sigue asumiendo las dimensiones originales de la imagen. Dado que el WCS se basa en un índice de píxel de referencia específico para anclar la cuadrícula de coordenadas, hacer slicing al array sin actualizar el header significa que tus píxeles ya no se corresponden con las ubicaciones físicas correctas en el Sol. Cualquier overlay o medición que intentes hacer a continuación fallará porque los cálculos están desalineados. Para extraer de forma segura una región de interés, SunPy proporciona el método submap. Esto hace un Coordinate-Aware Cropping directamente sobre el propio objeto map. Garantiza que el array de la imagen y la metadata espacial se mantengan perfectamente sincronizados en todo momento. Supongamos que quieres un bounding box ajustado alrededor de una erupción solar. En lugar de adivinar los índices del array, defines el límite usando el espacio físico. Primero, creas un objeto coordinate que representa la esquina inferior izquierda de tu región deseada. Especificas la ubicación en unidades físicas, normalmente segundos de arco, y usas el coordinate frame de tu mapa original para que todo comparta el mismo origen. Luego, creas un segundo objeto coordinate para la esquina superior derecha de tu bounding box. Con esos dos puntos definidos, llamas al método submap en tu mapa original y le pasas las coordenadas inferior izquierda y superior derecha como argumentos. El método lee el bounding box físico, traduce esas coordenadas físicas a índices de píxel exactos y hace el slicing del array de datos por ti. Nunca tienes que calcular los números de fila o columna tú mismo. Aquí está la clave. El método submap no solo devuelve una imagen más pequeña. Reescribe activamente el header WCS para el nuevo map. Calcula la nueva posición del píxel de referencia en relación con tus dimensiones recortadas. Incluso si el píxel de referencia original estaba completamente fuera de tu nuevo bounding box, las matemáticas del WCS se ajustan automáticamente para que la cuadrícula de coordenadas siga siendo perfectamente precisa. El píxel de referencia se desplaza, el array se reduce y el submap resultante es un objeto map totalmente válido que aún sabe exactamente dónde se encuentra en el universo físico. Si omites el objeto map y haces slicing al array raw, rompes la conexión entre tus datos y el cielo físico; deja siempre que el método submap se encargue de las matemáticas de las coordenadas por ti. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue programando!
10

Alineación y reproyección de Maps

4m 23s

Combina datos de diferentes instrumentos sin problemas. Aprende a reproyectar matemáticamente un map de un sistema de coordenadas a la cuadrícula de píxeles exacta de otro.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 10 de 12. Que dos instrumentos diferentes tomen una foto del Sol exactamente en el mismo segundo no significa que sus píxeles coincidan. Superponerlos directamente te dará como resultado un desastre desalineado. Alinear y reproyectar mapas soluciona esto. Al comparar datos del Atmospheric Imaging Assembly, o AIA, y del Helioseismic and Magnetic Imager, o HMI, ambos instrumentos están en el mismo satélite. Capturan imágenes simultáneamente. Un error común es asumir que estas dos imágenes de disco completo se pueden superponer directamente solo porque el tiempo coincide. Pero los instrumentos tienen diferentes escalas de placa, lo que significa que sus píxeles individuales cubren áreas físicas distintas. También tienen ligeros offsets de apuntamiento. Si coges una imagen ultravioleta extrema de alta resolución del AIA y un magnetograma de menor resolución del HMI, sus grids simplemente no se alinean. Imagina que quieres plotear los contornos magnéticos de los datos HMI perfectamente sobre los bucles coronales de la imagen AIA. Para hacer esto, tienes que convertir los datos HMI al World Coordinate System, o WCS, del mapa AIA. El WCS es el framework matemático embebido en el mapa que traduce la ubicación de un píxel a una coordenada física real en el cielo. SunPy gestiona esta transformación mediante un package externo llamado reproject. Usas una función llamada reproject underscore interp. Esta función realiza una interpolación espacial rápida, que es el enfoque necesario cuando estás alineando datos de imágenes solares estándar. Primero, defines tu target. En este escenario, el target es el mapa AIA, así que extraes su objeto WCS. A continuación, pasas tu mapa source, el magnetograma HMI, y ese WCS target a la función de interpolación. La función proyecta el grid target sobre los datos source. Calcula dónde se sitúan los nuevos píxeles en el espacio físico, hace una query al mapa HMI original en esas coordenadas exactas, e interpola los valores de los píxeles. Por defecto, la función te devuelve un nuevo array de raw data con la forma exacta de la imagen target, junto con un array de footprint. El footprint indica qué píxeles cayeron fuera del campo de visión original. Como solo necesitas los datos para la superposición, puedes pasar un parámetro para ignorar el footprint por completo, lo que devuelve únicamente el array interpolado. Para que este array raw sea útil, construyes un nuevo mapa SunPy. Emparejas tu nuevo array de datos HMI interpolado con el header de metadata de tu mapa AIA target. Aquí está la clave. La reproyección garantiza matemáticamente grids espaciales idénticos. Tu nuevo mapa HMI ahora tiene exactamente las mismas dimensiones y escala de placa que el mapa AIA. El índice quinientos por quinientos en el mapa recién alineado corresponde exactamente a la misma característica solar física que el índice quinientos por quinientos en el mapa AIA. Ahora puedes plotear la imagen AIA en un set de ejes, y dibujar con confianza los contornos magnéticos de tu mapa alineado directamente encima. Como la reproyección altera permanentemente los valores de tus datos originales mediante interpolación para forzar una coincidencia de coordenadas, realiza siempre este paso de alineación al final, justo antes de tu visualización final o del array math. Gracias por pasar unos minutos conmigo. Hasta la próxima, que te vaya bien.
11

Datos temporales 1D con TimeSeries

4m 25s

Pasa de las imágenes espaciales a las curvas de luz temporales. Explora el objeto TimeSeries para cargar, truncar y concatenar datos de flujo de rayos X de GOES.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de datos solares, episodio 11 de 12. Las imágenes solares son visualmente impresionantes, pero a veces la información más crítica es solo un valor de flujo escalar medido mil veces por segundo. Cuando sigues la intensidad de una erupción solar durante toda una semana, una matriz espacial bidimensional es simplemente la herramienta equivocada para el trabajo. Necesitas datos temporales 1D con TimeSeries. Es un error común recurrir al objeto Map por defecto al empezar con SunPy. Pero Map es estrictamente para datos espaciales bidimensionales. Cuando trabajas con datos temporales unidimensionales, como una curva de luz de rayos X que abarca varios días en múltiples canales de longitud de onda, usas TimeSeries. Actúa como el equivalente unidimensional de Map, diseñado específicamente para manejar mediciones indexadas en el tiempo mientras conserva de forma segura los metadatos de observación y las unidades físicas. Bajo el capó, un objeto TimeSeries se basa en un DataFrame de pandas para estructurar tus timestamps y columnas de datos. El problema de trabajar directamente con raw pandas es que los dataframes estándar no entienden de unidades científicas. TimeSeries encapsula esta estructura de datos para asegurar que tus unidades físicas y los metadatos del instrumento permanezcan firmemente unidos durante las operaciones. Imagina que cargas una curva de luz de rayos X desde un archivo del satélite GOES-15. Le pasas la ruta del archivo a la función TimeSeries, y te devuelve un objeto que contiene múltiples canales de observación como columnas. Puedes inspeccionar estas columnas por nombre, como los canales de longitud de onda corta y longitud de onda larga. Aquí está la clave. En lugar de extraer arrays numéricos en crudo directamente del dataframe subyacente, extraes las columnas usando el método quantity. Llamas a quantity y le pasas el nombre de la columna específica que quieres. Este método devuelve los datos como un objeto Astropy Quantity. Esto significa que los valores numéricos de flujo en crudo están estrictamente vinculados a sus unidades físicas, como vatios por metro cuadrado. Extraer los datos de esta manera evita por completo los errores silenciosos de conversión de unidades más adelante en tus cálculos matemáticos. Una vez que tienes tus datos cargados, rara vez necesitas el archivo de observación completo. Puede que solo quieras aislar la hora exacta en que una erupción solar alcanzó su pico. Esto lo consigues truncando el TimeSeries. Primero, defines un objeto TimeRange proporcionando un string de tiempo de inicio y un string de tiempo de fin. Luego, pasas este TimeRange directamente al método truncate de tu TimeSeries. Esto hace un slice del dataframe subyacente y devuelve un objeto TimeSeries totalmente nuevo. Los datos se recortan limpiamente a tu ventana de interés exacta, y todos los metadatos asociados sobreviven al corte. A menudo, tu análisis requiere datos que abarcan varios archivos de observación independientes. Si tu objetivo es construir un dataset continuo de una semana, cargas tu segundo archivo en su propio objeto TimeSeries. Luego, simplemente llamas al método concatenate en el primer TimeSeries, pasándole el segundo como argumento. SunPy alinea los índices de tiempo y fusiona las filas de datos. Siempre que los metadatos del instrumento de ambos archivos sean compatibles, obtienes un único objeto TimeSeries unificado, listo para un análisis continuo durante el período de tiempo extendido. Al procesar datos temporales, vincular estrictamente tus timestamps y valores numéricos a sus unidades físicas es lo que separa un análisis científico fiable de un fallo de cálculo silencioso. Eso es todo por este episodio. Gracias por escuchar, ¡y sigue creando!
12

Modelado de la rotación diferencial

4m 18s

Ten en cuenta la naturaleza fluida de la superficie solar. Aprende a usar RotatedSunFrame para predecir las coordenadas futuras de una región activa a medida que el Sol gira.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. SunPy: Análisis de Datos Solares, episodio 12 de 12. El Sol no es una roca sólida. Su ecuador gira mucho más rápido que sus polos, lo que significa que cualquier cuadrícula de coordenadas que le apliques se va desintegrando lentamente. Si rastreas una región activa un martes, esos mismos valores de latitud y longitud apuntarán al espacio vacío el jueves. Para rastrear el plasma real, necesitas un mecanismo llamado Modelado de Rotación Diferencial. A menudo, tratamos a los cuerpos celestes como esferas sólidas. En la Tierra, una coordenada geográfica permanece fija. En el Sol, la superficie es fluida. El plasma en el ecuador solar completa una rotación en unos veinticinco días, mientras que el plasma cerca de los polos tarda más de treinta y cuatro días. Como las coordenadas dependen inherentemente del tiempo, no puedes simplemente transferir una posición espacial de un día para otro. Tienes que tener en cuenta el desplazamiento físico del material solar a lo largo del tiempo. SunPy maneja este desplazamiento dependiente del tiempo usando un coordinate frame llamado Rotated Sun Frame. Este frame te permite coger una coordenada medida en un momento inicial y proyectar dónde estará esa porción exacta de material solar en un momento nuevo. Aquí está la clave. Rotated Sun Frame actúa como un wrapper alrededor de un coordinate frame existente. No calculas la nueva latitud y longitud manualmente. En su lugar, defines un frame que codifica explícitamente la diferencia de tiempo, y dejas que el motor de transformación de coordenadas haga los cálculos. Supón que tienes las coordenadas de una región activa observada el martes. Este es tu punto inicial, representado como un objeto SkyCoord. Tiene una posición espacial y un tiempo de observación. Para averiguar dónde estará esa región activa el jueves, configuras un nuevo Rotated Sun Frame. Primero, proporcionas el base frame, que extraes directamente de tu coordenada del martes. A continuación, proporcionas el tiempo objetivo. Puedes especificar el timestamp exacto del jueves, o puedes pasar una duración, como un time delta de dos días. SunPy ahora tiene un target coordinate frame que entiende el modelo de rotación solar. Finalmente, coges tu coordenada del martes y la transformas a este nuevo Rotated Sun Frame. Cuando ejecutas esta transformación, SunPy aplica un perfil de rotación diferencial estándar. Lee la latitud de tu coordenada inicial, calcula la velocidad angular correcta para esa latitud específica, la multiplica por tu duración de dos días y desplaza la longitud. El output es un nuevo objeto de coordenadas. Su latitud y longitud se actualizan para reflejar dos días de rotación diferencial, señalando exactamente adónde se ha desplazado el plasma de tu región activa para el jueves. Si la región estaba cerca del ecuador, se desplazó mucho. Si estaba cerca del polo, se movió mucho menos. Este enfoque te permite avanzar o retroceder coordenadas en el tiempo sin problemas. Como la rotación diferencial cambia la ubicación física de los datos que estás estudiando, vincular cada coordenada a un tiempo de observación específico y desplazarla a través del modelo de rotación es la única manera de mantener la precisión en múltiples observaciones. Con esto terminamos nuestra serie sobre análisis de datos solares. Te animo a explorar la documentación oficial de SunPy, probar estas herramientas de forma práctica, o visitar devstories dot eu para sugerir temas para futuras series. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue programando!