Retour au catalogue
Season 12 12 Épisodes 38 min 2026

SunPy: Solar Data Analysis

v7.1 — Édition 2026. Une plongée au cœur de SunPy v7.1 (2026), l'environnement open-source développé par la communauté pour l'analyse de données solaires en Python. Maîtrisez tout, des Maps et Coordinates aux recherches Fido et TimeSeries.

Calcul scientifique Physique solaire
SunPy: Solar Data Analysis
Lecture en cours
Click play to start
0:00
0:00
1
L'identité fondamentale : Quantities et unités
Découvrez pourquoi SunPy exige des unités physiques pour tous les calculs. Apprenez à utiliser les Astropy Quantities pour éviter les erreurs critiques de conversion d'unités dans votre pipeline d'analyse solaire.
3m 49s
2
L'abstraction Map
Plongez dans la structure de données fondamentale de SunPy : la Map. Apprenez à ingérer des fichiers FITS et à lier des tableaux de données 2D avec les métadonnées sous-jacentes de l'observatoire.
3m 15s
3
Précision temporelle
Maîtrisez la représentation du temps en physique solaire à l'aide d'Astropy Time et de SunPy TimeRange. Découvrez pourquoi les datetimes standards de Python échouent pour l'astrophysique des hautes énergies.
3m 33s
4
Référentiels de coordonnées et observateurs
Apprenez à naviguer sur la surface solaire en utilisant Astropy SkyCoord et les référentiels solaires spécialisés de SunPy. Comprenez le rôle critique de la position de l'observateur et de l'heure d'observation.
2m 11s
5
Relier pixels et espace physique
Connectez les pixels de votre image aux coordonnées physiques en utilisant le World Coordinate System. Apprenez à convertir sans faille entre les indices de pixels et les SkyCoords sans mise à l'échelle manuelle.
2m 23s
6
Recherche de données unifiée avec Fido
Arrêtez d'écrire des scrapers personnalisés pour chaque archive solaire. Apprenez à utiliser Fido pour exécuter des recherches complexes et unifiées sur plusieurs instruments et longueurs d'onde simultanément.
3m 12s
7
Requêtes approfondies : JSOC et HEK
Effectuez des requêtes avancées auprès du Joint Science Operations Center et de la Heliophysics Event Knowledgebase. Récupérez les métadonnées d'événements spécifiques et les découpes de régions actives.
3m 15s
8
Visualisation de Map de qualité publication
Transformez des tableaux FITS sombres en visualisations époustouflantes, prêtes pour la publication. Apprenez à configurer les colormaps, les normalisations logarithmiques et les intervalles d'écrêtage.
3m 34s
9
Recadrage prenant en compte les coordonnées
Recadrez vos Maps en toute sécurité sans corrompre vos métadonnées spatiales. Découvrez pourquoi vous devriez utiliser des submaps au lieu du découpage numpy standard.
2m 56s
10
Alignement et reprojection de Maps
Combinez les données de différents instruments de manière transparente. Apprenez à reprojeter mathématiquement une Map d'un système de coordonnées sur la grille de pixels exacte d'un autre.
3m 45s
11
Données temporelles 1D avec TimeSeries
Passez de l'imagerie spatiale aux courbes de lumière temporelles. Explorez l'objet TimeSeries pour charger, tronquer et concaténer les données de flux de rayons X GOES.
3m 36s
12
Modélisation de la rotation différentielle
Prenez en compte la nature fluide de la surface solaire. Apprenez à utiliser RotatedSunFrame pour prédire les futures coordonnées d'une région active pendant que le Soleil tourne.
3m 21s

Épisodes

1

L'identité fondamentale : Quantities et unités

3m 49s

Découvrez pourquoi SunPy exige des unités physiques pour tous les calculs. Apprenez à utiliser les Astropy Quantities pour éviter les erreurs critiques de conversion d'unités dans votre pipeline d'analyse solaire.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. SunPy : Analyse de données solaires, épisode 1 sur 12. Tu as peut-être l'habitude de balancer des arrays numériques bruts dans des fonctions et de faire confiance aux calculs pour que ça passe. Mais en physique solaire, présumer des dimensions de tes données peut invalider silencieusement tout ton pipeline d'analyse. Le garde-fou contre ça, c'est le sujet de cet épisode : L'identité fondamentale, Quantités et Unités. Si tu as déjà essayé de passer un array numpy standard à une fonction SunPy, tu t'es probablement pris une exception immédiate. Ce n'est pas un bug. SunPy rejette intentionnellement les nombres bruts. Dans de nombreux domaines scientifiques, un nombre seul est dangereux. Dix peut représenter dix degrés, dix secondes d'arc ou dix mètres. Si une fonction attend mathématiquement des radians et que tu lui passes des degrés, le Python standard calculera sans problème une réponse fausse. SunPy empêche cet échec silencieux en exigeant un suivi explicite des unités partout dans l'écosystème. Ça se fait à l'aide des objets Quantity d'Astropy. Une Quantity, c'est simplement un nombre, ou un array complet de nombres, lié de manière sécurisée à une unité physique. Tu en crées une en multipliant tes données brutes par un objet unit. Par exemple, tu prends le nombre quinze et tu le multiplies par une unit représentant des secondes d'arc. L'objet qui en résulte porte ces deux informations ensemble. Comme les objets Quantity sont construits par-dessus des arrays standards, tu peux toujours effectuer toutes tes opérations mathématiques habituelles. Tu peux les slicer, calculer la moyenne ou trouver la valeur maximale, et la bonne unité restera attachée au résultat. Si jamais tu as besoin de les séparer, tu peux accéder au nombre brut via l'attribut point value, et à l'unité elle-même via l'attribut point unit. En général, tu les gardes ensemble car l'objet sait comment gérer ses propres calculs. Si tu ajoutes des mètres à des kilomètres, l'objet Quantity les met automatiquement à l'échelle pour que l'addition soit mathématiquement valide. Tu peux aussi faire des conversions manuelles entre unités compatibles en utilisant la méthode point to. Convertir des mètres en kilomètres est simple car les deux mesurent une longueur. Mais imagine un scénario où tu dois convertir une distance angulaire mesurée dans le plan du ciel en une distance physique à la surface du Soleil. À proprement parler, un angle n'est pas une longueur. Par défaut, le système bloquera cette conversion. C'est là qu'est l'astuce. Tu peux override cette vérification stricte des dimensions en utilisant une equivalency. SunPy fournit un outil spécifique pour ça, appelé la solar angle equivalency. Quand tu passes ça à ta méthode de conversion, ça fournit le contexte physique manquant. Ça utilise la distance entre l'observateur et le Soleil pour traduire l'angle apparent en une distance physique littérale, comme des kilomètres à travers le disque solaire. Ça fait le pont entre la géométrie observationnelle et la réalité physique. Pour imposer ce genre de sécurité dans ton propre code, tu utilises le décorateur quantity input. Tu le places au-dessus de la définition de ta fonction pour spécifier quel genre de dimensions physiques ta fonction accepte. Tu ne forces pas l'utilisateur à passer des degrés ou des radians spécifiquement. À la place, tu spécifies que l'input doit être un angle. Si quelqu'un essaie de passer une unité de temps ou de longueur, le décorateur l'attrape et lève une erreur avant même que la fonction ne s'exécute. Ce suivi rigoureux des dimensions physiques signifie que ton code fail bruyamment quand il est mathématiquement invalide, plutôt que de return silencieusement de la garbage data. Si ces deep dives te plaisent, tu peux soutenir l'émission en cherchant DevStoriesEU sur Patreon. C'est tout pour celui-ci. Merci pour ton écoute, et continue à builder !
2

L'abstraction Map

3m 15s

Plongez dans la structure de données fondamentale de SunPy : la Map. Apprenez à ingérer des fichiers FITS et à lier des tableaux de données 2D avec les métadonnées sous-jacentes de l'observatoire.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. SunPy : Analyse de données solaires, épisode 2 sur 12. Un immense array 2D de nombres représentant des pixels solaires est totalement inutile si tu ne connais pas l'instrument qui l'a capturé, la longueur d'onde ou la date exacte. Pour faire de la vraie science, ces pixels doivent rester fusionnés en permanence avec leur contexte. C'est exactement le problème que résout l'abstraction Map. Une erreur très courante est de penser qu'une Map SunPy n'est qu'un simple wrapper pour faire des plots. Ce n'est pas ça du tout. Même si elle peut tout à fait dessiner des images, à la base, une Map est un data container qui gère les coordonnées. Elle agit comme la glue centrale qui t'empêche de perdre tes metadata quand tu manipules les pixels sous-jacents. Regardons comment ça marche en pratique. Supposons que tu aies téléchargé un fichier FITS contenant une observation AIA à 171 Angströms. FITS est le format de fichier standard pour les données astronomiques, et il stocke à la fois l'array de l'image brute et un header rempli de détails sur l'observation. Pour importer ça dans ton environnement, tu passes le chemin de ton fichier à la fonction sunpy point map point Map. Cette fonction agit en fait comme une factory. Elle lit le fichier, détecte automatiquement quel instrument a pris l'image, et retourne un objet Map spécialisé. On va simplement appeler notre nouvel objet my_map. Une fois que tu as ta Map, le premier composant principal à explorer, ce sont les metadata. Les observatoires solaires intègrent une quantité énorme de détails dans le header FITS, et SunPy extrait tout ça dans un attribut appelé my_map point meta. Cet attribut se comporte exactement comme un dictionnaire Python standard. Ça veut dire que tu peux lire programmatiquement des clés spécifiques pour piloter ton analyse. Par exemple, si ton script a besoin d'extraire la date d'observation exacte, tu accèdes juste à la clé date directement depuis le dictionnaire meta. SunPy normalise aussi beaucoup de ces clés du header, ce qui lisse les différences entre la façon dont les divers instruments solaires nomment leurs champs de metadata. Maintenant, la deuxième partie de tout ça, c'est l'image elle-même. Voici le point clé. L'objet Map ne cherche pas à réinventer la façon dont les arrays numériques fonctionnent. Les données réelles des pixels sont stockées dans un attribut appelé my_map point data, et ce n'est rien de plus qu'un array NumPy 2D standard. Parce que c'est juste du NumPy, tu n'as pas besoin d'apprendre une nouvelle syntaxe pour faire ton travail mathématique. Si tu veux trouver le point le plus lumineux dans ton image AIA, tu extrais my_map point data et tu lances une fonction maximum standard dessus. Tu obtiens instantanément la valeur brute de ton pixel. En gardant le dictionnaire meta et l'array de data bien wrappés ensemble à l'intérieur d'un seul objet Map, SunPy s'assure que tes unités physiques et le contexte de l'instrument ne sont jamais séparés des nombres bruts. Ça fournit une frontière unique autour de tout ce qui donne du sens à ces pixels. La vraie puissance de l'abstraction Map n'est pas qu'elle dessine le soleil, mais qu'elle force l'array de l'image brute et le contexte d'observation à voyager à travers ta codebase comme une seule unité inséparable. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !
3

Précision temporelle

3m 33s

Maîtrisez la représentation du temps en physique solaire à l'aide d'Astropy Time et de SunPy TimeRange. Découvrez pourquoi les datetimes standards de Python échouent pour l'astrophysique des hautes énergies.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. SunPy : Analyse de données solaires, épisode 3 sur 12. Les datetimes standard de Python ne savent pas ce qu'est une seconde intercalaire. Quand tu chronomètres des transitoires solaires à haute énergie, une seconde ratée signifie que tes données s'alignent avec le vide spatial au lieu du pic de l'éruption. C'est pour ça que SunPy se base sur le Precision Timing. Par habitude, beaucoup de développeurs utilisent le module datetime standard de Python par défaut. Datetime n'est pas un outil de précision. Il lui manque la précision astrophysique et le support du format de temps solaire requis par SunPy. Il ignore les secondes intercalaires et ne peut pas gérer les échelles de temps spécifiques comme utime. À la place, SunPy exige que tu utilises les objets Astropy Time. Pour intégrer tes données variées dans cet écosystème strict, tu utilises une fonction appelée parse time. Parse time agit comme un traducteur universel pour les timestamps. Tu lui passes une string dans presque n'importe quel format, que ce soit une string ISO, une date au format personnalisé ou un timestamp extrait directement d'un ancien header de métadonnées satellite. Il interprète l'input et renvoie un objet Astropy Time robuste. C'est crucial car les différents observatoires solaires formatent leurs horloges différemment. Parse time normalise tout en un objet standard qui connaît exactement sa position sur la timeline universelle, en prenant en compte chaque seconde intercalaire en cours de route. Une fois que tes timestamps individuels sont précis, tu dois gérer les durées. L'analyse d'un événement solaire nécessite de délimiter tes données dans une fenêtre d'observation. C'est le but de l'objet Time Range. Un Time Range représente un intervalle continu entre deux points exacts. Tu peux le définir en fournissant une heure de début et une heure de fin, mais il est souvent plus pratique de fournir une heure de début et une durée. Imagine que tu configures une fenêtre d'observation pour une éruption solaire. Tu crées un Time Range en passant une start string, comme l'année 2010, mois 3, jour 4 à minuit dix. Pour le deuxième argument, plutôt que de calculer l'heure de fin exacte toi-même, tu passes une quantité d'unité Astropy de quatre cents secondes. L'objet Time Range absorbe ces inputs, applique la bonne échelle de temps et établit une limite rigide pour ton événement. C'est là que ça devient intéressant. Maintenant, tu dois analyser les phases de montée et de descente de cette éruption, ce qui veut dire que tu veux comparer la première moitié de l'événement à la seconde moitié. L'objet Time Range possède une méthode built-in appelée split. Tu appelles split et tu spécifies l'entier deux. La méthode calcule instantanément le point médian exact et renvoie une list contenant deux nouveaux objets Time Range. Ta fenêtre initiale de quatre cents secondes est parfaitement divisée en deux sous-intervalles de deux cents secondes. Il n'y a pas de calcul de date manuel, et absolument aucun risque de perdre une fraction de seconde pendant la division. Le module datetime built-in de Python est fait pour la planification, mais un objet Astropy Time est un instrument scientifique. Tes limites temporelles nécessitent exactement le même suivi strict des unités que tes données spatiales, et s'appuyer sur ces objets spécialisés garantit que tes fenêtres restent physiquement précises tout au long de ton pipeline. C'est tout pour cette fois. À la prochaine !
4

Référentiels de coordonnées et observateurs

2m 11s

Apprenez à naviguer sur la surface solaire en utilisant Astropy SkyCoord et les référentiels solaires spécialisés de SunPy. Comprenez le rôle critique de la position de l'observateur et de l'heure d'observation.

Télécharger
Bonjour, c'est Alex de DEV STORIES DOT EU. SunPy : Analyse de données solaires, épisode 4 sur 12. Tu repères une énorme éruption sur le Soleil, tu enregistres ses coordonnées horizontales et verticales, et tu les envoies à un collègue. Mais son télescope est garé sur un satellite à la traîne, à mi-chemin derrière la Terre, et tes coordonnées ne veulent absolument rien dire pour lui. C'est parce qu'un point sur le Soleil n'est pas un point statique sur une grille plate. Sa position dépend entièrement de l'endroit où ton télescope est garé dans le système solaire, et de l'heure qu'il est exactement. La façon dont on résout cette ambiguïté, c'est grâce aux Coordinate Frames et aux Observers. C'est une erreur fréquente de définir un point à la surface du Soleil en passant simplement deux valeurs numériques dans une variable. Tu dois nommer explicitement le contexte. Sans fournir la position d'un observer et un temps d'observation, une coordonnée solaire n'a aucun sens physique. Le système solaire est constamment en mouvement. La Terre orbite, les sondes dérivent le long de leurs trajectoires, et le Soleil lui-même tourne. Pour définir une position de manière sûre dans cet environnement dynamique, SunPy utilise un objet appelé SkyCoord, hérité de la library Astropy. Un SkyCoord agit comme un conteneur strict. Il prend tes nombres bruts et les lie à un frame de référence physique spécifique, en te forçant à définir à la fois l'espace et le temps. Le frame le plus courant que tu vas rencontrer, c'est le frame Helioprojective. Ce frame décrit le Soleil exactement comme il apparaît à un objectif de caméra spécifique. C'est une projection en deux dimensions d'une sphère en trois dimensions, mesurée avec des angles comme les arcseconds. Il mesure essentiellement les lignes de visée de l'observer jusqu'au disque solaire. Comme il est fondamentalement lié au point de vue de l'observer, créer une coordonnée Helioprojective te demande de fournir le paramètre observer, qui définit où se trouve le télescope, et le paramètre obstime, qui verrouille le moment exact où l'obturateur s'est déclenché. Compare ça avec le frame HeliographicStonyhurst. C'est un véritable système de coordonnées en trois dimensions qui utilise la longitude et la latitude solaires. Il est intrinsèque au Soleil, mais spatialement fixe par rapport à la disposition du système solaire. La ligne de longitude zéro degré du frame HeliographicStonyhurst est verrouillée pour pointer toujours directement vers la Terre. Ça te donne un emplacement physique absolu sur la surface solaire, plutôt qu'un angle de vue localisé. C'est là que ça devient intéressant. Voyons comment tu ferais pour traduire entre les perspectives. Supposons que tu aies un SkyCoord pour cette éruption solaire enregistrée depuis la Terre en utilisant le frame Helioprojective. Tu veux découvrir exactement où un vaisseau spatial en orbite autour de Vénus verrait cette même éruption sur ses propres caméras. D'abord, tu instancies ton SkyCoord d'origine avec l'observer Terre, le temps d'observation, et les arcseconds. Ensuite, tu récupères l'emplacement physique de Vénus. SunPy inclut des fonctions built-in pour chercher les trajectoires planétaires pour un timestamp donné. Une fois que tu as la coordonnée de Vénus à ce temps d'observation exact, tu appelles la méthode transform sur ta coordonnée terrestre d'origine. Tu passes à cette méthode un tout nouveau frame Helioprojective, mais tu règles le paramètre observer de ce nouveau frame sur Vénus. SunPy exécute ensuite la géométrie complexe en trois dimensions sous le capot. Il calcule les lignes de visée physiques et retourne un nouveau SkyCoord. Cet objet résultant contient les coordonnées angulaires exactes auxquelles l'éruption est apparue depuis le point de vue de Vénus. L'idée la plus critique à retenir, c'est qu'une coordonnée solaire n'est jamais juste un emplacement ; c'est une relation stricte entre une cible et un observer, figée à une milliseconde spécifique. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de builder !
5

Relier pixels et espace physique

2m 23s

Connectez les pixels de votre image aux coordonnées physiques en utilisant le World Coordinate System. Apprenez à convertir sans faille entre les indices de pixels et les SkyCoords sans mise à l'échelle manuelle.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. SunPy : Analyse de données solaires, épisode 5 sur 12. Tu as une position précise sur le Soleil, comme une éruption active, et tu dois extraire ses valeurs de données exactes à partir de ta matrice d'image. Convertir un point physique sphérique dans l'espace vers une ligne et une colonne dans une matrice plane nécessite généralement une trigonométrie bien pénible. Faire le lien entre les pixels et l'espace physique gère ça pour toi instantanément en utilisant le World Coordinate System. Une Map SunPy est un array NumPy bidimensionnel de pixels associé à des métadonnées détaillées. Ces métadonnées définissent où le télescope pointait, la taille physique de chaque pixel, et la projection sphérique spécifique utilisée pour aplatir l'image. SunPy regroupe toutes ces règles géométriques dans un objet accessible via la property WCS de la Map. WCS signifie World Coordinate System. Cet objet sert de couche de traduction entre ta grille de données plane et le ciel physique. Voici l'idée clé. Tu dois bien garder en tête l'ordre de tes coordonnées selon le domaine dans lequel tu te trouves. Parce que les données d'image sous-jacentes sont un array NumPy, l'accès aux données attend un ordre ligne puis colonne. Ça veut dire que l'axe y vient avant l'axe x. Le World Coordinate System opère sur l'espace physique, en utilisant la géométrie cartésienne standard où x vient avant y. Les inputs de coordonnées physiques sont ordonnés x puis y. L'indexation directe de l'array est ordonnée y puis x. Mélanger les deux est une source fréquente de bugs. Passons maintenant du ciel physique à la grille de pixels. Supposons que tu veuilles trouver la position exacte en pixel fractionnaire qui correspond au centre physique de ta Map. La Map fournit une property appelée center. Ça représente une coordonnée Helioprojective physique dans l'espace. Tu peux passer cette coordonnée center directement dans la method world to pixel de la Map. Le World Coordinate System traite les mathématiques de projection et retourne un objet contenant les valeurs exactes des pixels x et y. Ces valeurs retournées sont des nombres à virgule flottante. Une coordonnée physique ne tombe presque jamais parfaitement en plein centre d'un pixel entier discret. Voilà pour ce qui est de descendre dans les données. Et pour remonter vers le ciel ? Tu pourrais trouver une caractéristique en utilisant un algorithme de computer vision sur ton array plat, peut-être au pixel de la colonne quatre cents et de la ligne cinq cents. Tu as besoin de connaître sa position physique réelle sur le Soleil. Pour faire ça, tu utilises la method pixel to world de la Map. Tu fournis la position du pixel en utilisant des Quantities Astropy pour définir les unités exactes du pixel. La method fait passer ces valeurs de pixel à travers les mathématiques inverses du World Coordinate System et retourne un objet Astropy SkyCoord précis. Cet objet t'indique exactement où se trouve ce pixel spécifique dans l'espace Helioprojective, avec les bonnes unités physiques. Le World Coordinate System gère la trigonométrie pénible des projections sphériques pour que tu puisses arrêter de t'inquiéter des indices bruts de la matrice et commencer à analyser les positions physiques réelles sur le disque solaire. Merci d'avoir écouté. Prenez soin de vous, tout le monde.
6

Recherche de données unifiée avec Fido

3m 12s

Arrêtez d'écrire des scrapers personnalisés pour chaque archive solaire. Apprenez à utiliser Fido pour exécuter des recherches complexes et unifiées sur plusieurs instruments et longueurs d'onde simultanément.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. SunPy : Analyse des données solaires, épisode 6 sur 12. Il existe des dizaines d'observatoires solaires et d'archives de données, chacun avec ses particularités. Au lieu d'apprendre dix web APIs différentes juste pour savoir quelles observations existent pour une éruption solaire spécifique, tu n'as besoin d'apprendre qu'un seul outil. Cet outil, c'est Unified Data Search avec Fido. Fido signifie Federated Internet Data Obtainer. Il agit comme un traducteur universel pour les APIs de données solaires, réduisant considérablement le boilerplate code nécessaire pour trouver des observations. Tu lui donnes tes paramètres scientifiques, et Fido gère les network requests vers plusieurs centres de données en arrière-plan. Une idée reçue courante est que lancer une recherche Fido télécharge automatiquement les données. Ce n'est pas le cas. La fonction search renvoie strictement une table de métadonnées appelée UnifiedResponse. Ça te permet d'inspecter le nombre de fichiers, leurs tailles et leurs sources avant de t'engager à transférer quoi que ce soit sur ta machine locale. Pour faire une recherche, tu utilises la fonction Fido point search. Tu construis ta query en lui passant des attributs de recherche. Dans SunPy, ces attributs vivent dans le module sunpy point net point attrs, qui est presque toujours importé simplement comme la lettre a. Chaque recherche nécessite un time range. Tu le définis en utilisant a point Time, en lui passant une start string et une end string. À partir de là, tu affines les résultats en utilisant d'autres attributs, le plus souvent a point Instrument. Voici le point clé. Fido te permet de construire des queries complexes multi-instruments en un seul function call en utilisant des opérateurs logiques standards. Plus précisément, tu utilises le caractère pipe pour représenter un OR logique. Supposons que tu analyses un événement et que tu aies besoin de données couvrant une fenêtre spécifique de deux heures. Tu veux des observations soit de l'instrument LYRA, soit de l'instrument RHESSI. Sans Fido, tu écrirais une API request pour LYRA, une request complètement différente pour RHESSI, et ensuite tu mergerais manuellement les réponses JSON qui en résultent. Avec Fido, tu construis ça nativement. Tu définis ta fenêtre de temps de deux heures en utilisant a point Time. Ensuite, tu définis tes cibles d'instruments : a point Instrument avec LYRA, et a point Instrument avec RHESSI. Tu mets le caractère pipe entre les deux définitions d'instruments. Quand tu passes ça dans Fido point search, tu lui donnes l'attribut de temps, une virgule, et ensuite tes attributs d'instruments combinés regroupés entre parenthèses. Fido lit l'opérateur pipe, split la request, interroge les bases de données pertinentes pour les deux instruments sur ce même laps de temps, et merge le tout. La UnifiedResponse que tu récupères est organisée de manière intuitive. Si ta query a touché plusieurs data providers, les résultats sont groupés par provider. Tu peux slice et print cette table directement dans ton terminal pour voir exactement quel observatoire détient les données dont tu as besoin. La vraie puissance de Fido n'est pas juste qu'il trouve des données solaires, mais qu'il normalise le chaos des archives dispersées en une seule syntaxe Python prévisible. Si tu veux nous aider à continuer de faire ces épisodes, tu peux soutenir l'émission en cherchant DevStoriesEU sur Patreon. C'est tout pour celui-ci. Merci d'avoir écouté, et continue de builder !
7

Requêtes approfondies : JSOC et HEK

3m 15s

Effectuez des requêtes avancées auprès du Joint Science Operations Center et de la Heliophysics Event Knowledgebase. Récupérez les métadonnées d'événements spécifiques et les découpes de régions actives.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. SunPy : Analyse des données solaires, épisode 7 sur 12. Parfois, tu ne connais pas l'heure exacte à laquelle un événement solaire s'est produit. Tu veux juste interroger une base de données pour qu'elle te montre toutes les éjections de masse coronale du mois dernier. Si tu essaies de récupérer ça directement depuis une archive d'images, tu obtiendras soit des millions de fichiers, soit rien du tout. Pour faire le lien entre ces événements abstraits et les pixels réels, on utilise deux outils spécifiques : la Heliophysics Event Knowledgebase, ou HEK, et le Joint Science Operations Center, ou JSOC. Le HEK est un catalogue de phénomènes solaires physiques. Il recense les éruptions, les régions actives et les éjections de masse coronale détectées par divers algorithmes et observateurs humains. Beaucoup d'utilisateurs interrogent le HEK en espérant recevoir des fichiers d'images en retour. Mais ce n'est pas le cas. Le HEK renvoie des métadonnées d'événements. Quand tu fais une recherche dessus, tu obtiens une table de données contenant les heures de début, les heures de pic, les polygones de délimitation et les notes d'observation. Pour chercher dans le HEK, tu utilises la fonction de recherche standard de Fido. Tu fournis une plage de temps, puis tu ajoutes un attribut d'événement HEK spécifique. Si tu cherches une éjection de masse coronale, tu passes l'attribut HEK CME. La base de données évalue ça et te renvoie une liste d'événements correspondants. À partir de cette liste, tu isoles l'événement précis que tu veux et tu extrais son heure de pic. Tu as maintenant une coordonnée temporelle précise pour ton phénomène. Avec cette heure précise en main, tu passes à la deuxième étape : récupérer les images réelles. Pour les données détaillées du Solar Dynamics Observatory, tu interroges le JSOC. Le JSOC est l'archive principale pour des instruments comme AIA et HMI. Il stocke les lourdes séries de données qui contiennent les pixels réels. Tu construis une nouvelle recherche Fido en utilisant l'heure de pic que tu as extraite du HEK. Cette fois, tu passes un attribut JSOC Series. Ça indique exactement à l'archive de quel instrument et de quel produit de données tu as besoin. Tu peux affiner ça encore plus en utilisant un attribut JSOC Segment pour récupérer uniquement des fichiers de données spécifiques, plutôt qu'un cube de données entier. Voici le point clé. Contrairement aux requêtes génériques, le JSOC traite les exports de données à la demande, et il nécessite une identification de l'utilisateur. Tu dois inclure un attribut JSOC Notify contenant ton adresse email enregistrée dans ta recherche Fido. Si tu oublies l'adresse email, la requête va échouer. Les serveurs du JSOC mettent ta requête en file d'attente, préparent l'extrait exact de données que tu as demandé, et le mettent à disposition pour le téléchargement. En chaînant ces deux systèmes ensemble, tu automatises complètement le processus de découverte. Tu commences avec une plage de temps large, tu demandes au HEK de cibler exactement quand un événement spécifique s'est produit, et tu passes ces timestamps précis au JSOC pour récupérer les images brutes. La base de connaissances te donne la carte, et le centre d'opérations te donne le territoire. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !
8

Visualisation de Map de qualité publication

3m 34s

Transformez des tableaux FITS sombres en visualisations époustouflantes, prêtes pour la publication. Apprenez à configurer les colormaps, les normalisations logarithmiques et les intervalles d'écrêtage.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. SunPy : Analyse de données solaires, épisode 8 sur 12. Tu charges de magnifiques données solaires, tu fais le rendu de l'image, et tu te retrouves à fixer un carré totalement noir avec exactement un seul pixel blanc brillant dans le coin. Tes données sont bonnes, mais ta plage dynamique les masque complètement. C'est exactement le but de la visualisation de map de qualité publication : corriger ça. Quand les devs essaient de visualiser une map SunPy pour la première fois, ils récupèrent souvent l'array de données brutes et le passent directement à une commande image show standard de matplotlib. Ça fait le rendu des pixels, mais ça perd tout le contexte physique. Tu perds complètement ton système de coordonnées, et tes axes reviennent par défaut à de simples indices d'array. SunPy résout ça avec une méthode plot intégrée directement sur l'objet map. Quand tu appelles plot sur ta map, SunPy provisionne automatiquement un axe World Coordinate System, connu sous le nom d'axe WCS. Ça garantit que tes graduations représentent précisément les unités physiques dans le ciel, comme les secondes d'arc. Tu n'as pas besoin d'abandonner les layouts matplotlib pour utiliser ça. Tu peux créer une figure matplotlib standard et ajouter un subplot. L'astuce, c'est de passer l'objet WCS de la map dans l'argument projection de ce subplot. Ensuite, tu passes simplement cet axe spécifique en retour à la méthode plot de la map. Cette intégration te donne le contrôle précis du formatage de matplotlib tout en gardant la stricte conscience spatiale de SunPy. Maintenant, revenons à ce carré noir avec un pixel brillant. Les images solaires ont un contraste extrême. Une éruption solaire peut être des dizaines de milliers de fois plus brillante que les faibles boucles coronales juste à côté. Si tu mappes les valeurs de données brutes de façon linéaire sur une échelle de couleurs visuelle, l'éruption s'accapare le haut de l'échelle, et tout le reste est écrasé dans l'ombre. Voici l'idée clé. Tu dois compresser la plage dynamique avant le rendu. Tu fais ça en deux étapes en utilisant le clipping et la normalisation. Premièrement, utilise le keyword argument clip interval dans la méthode plot de la map. Au lieu de laisser un outlier ultra-brillant définir la valeur maximale de ton échelle de couleurs, tu peux fournir un tuple représentant des percentiles. Régler le clip interval de 1 % à 99,5 % force la méthode plot à ignorer le 1 % de pixels le plus sombre et le demi pour cent le plus brillant lors du calcul des limites de couleur. Le clipping élimine instantanément l'éblouissement des outliers extrêmes. Deuxièmement, même après le clipping, une échelle linéaire laisse généralement les régions calmes trop sombres. Pour corriger ça, importe la classe LogNorm depuis matplotlib colors. Tu passes une instance de LogNorm dans le keyword norm de la méthode plot de la map. Appliquer un étirement logarithmique amplifie mathématiquement les structures faibles dans les régions sombres de l'image, tout en compressant les différences visuelles dans les régions plus brillantes. Quand tu appliques LogNorm, ces vastes et faibles boucles coronales émergent clairement de l'arrière-plan. Enfin, définis la bonne palette visuelle. SunPy enregistre automatiquement les colormaps solaires standards dans matplotlib. En passant le keyword argument cmap à la méthode plot, tu peux spécifier un canal d'instrument exact. Passer une string comme sdoaia171 applique la palette de couleur dorée précise que la communauté scientifique utilise pour cette longueur d'onde spécifique. Combiner la méthode plot intégrée pour la précision des coordonnées, les clip intervals pour gérer les outliers, la normalisation logarithmique pour la plage dynamique, et une colormap spécifique à l'instrument, transforme un array presque complètement sombre en une figure scientifique détaillée, prête pour la publication. Je voudrais prendre un moment pour te remercier de ton écoute, ça nous aide beaucoup. Passe une excellente journée !
9

Recadrage prenant en compte les coordonnées

2m 56s

Recadrez vos Maps en toute sécurité sans corrompre vos métadonnées spatiales. Découvrez pourquoi vous devriez utiliser des submaps au lieu du découpage numpy standard.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. SunPy : Analyse de données solaires, épisode 9 sur 12. Slicer un array NumPy, c'est rapide et facile. Mais si tu fais ça sur une image solaire, tes coordonnées spatiales vont instantanément devenir n'importe quoi. Le mécanisme qui empêche ça, c'est le Coordinate-Aware Cropping. Quand les développeurs Python ont besoin d'isoler une région active spécifique sur une image solaire complète, leur premier réflexe, c'est souvent de slicer directement le data array sous-jacent. Ils prennent les lignes de zéro à cent et les colonnes de zéro à cent. Ça extrait les pixels visuels que tu veux, mais ça corrompt complètement le World Coordinate System attaché au fichier. Les metadata supposent toujours que l'image a ses dimensions d'origine. Comme le WCS se base sur un index de pixel de référence spécifique pour ancrer la grille de coordonnées, slicer l'array sans mettre à jour le header signifie que tes pixels ne correspondent plus aux bons emplacements physiques sur le Soleil. Toute superposition ou mesure que tu essaieras de faire ensuite va planter, parce que les calculs seront faussés. Pour extraire une région d'intérêt en toute sécurité, SunPy propose la méthode submap. Ça effectue un Coordinate-Aware Cropping directement sur l'objet map lui-même. Ça garantit que l'array de l'image et les metadata spatiales restent parfaitement synchronisés à tout moment. Supposons que tu veuilles une bounding box bien ajustée autour d'une éruption solaire. Au lieu de deviner les indices de l'array, tu définis la limite en utilisant l'espace physique. D'abord, tu crées un objet de coordonnées qui représente le coin inférieur gauche de la région que tu veux. Tu spécifies la position en unités physiques, généralement en secondes d'arc, et tu utilises le coordinate frame de ta map d'origine pour que tout partage la même origine. Ensuite, tu crées un deuxième objet de coordonnées pour le coin supérieur droit de ta box. Une fois ces deux points définis, tu appelles la méthode submap sur ta map d'origine et tu passes les coordonnées en bas à gauche et en haut à droite comme arguments. La méthode lit la bounding box physique, traduit ces coordonnées physiques en indices de pixels exacts, et slice le data array pour toi. Tu n'as jamais besoin de calculer les numéros de ligne ou de colonne toi-même. Voici le point clé. La méthode submap ne fait pas que renvoyer une image plus petite. Elle réécrit activement le header WCS pour la nouvelle map. Elle calcule la nouvelle position du pixel de référence par rapport à tes dimensions recadrées. Même si le pixel de référence d'origine était complètement en dehors de ta nouvelle bounding box, les calculs du WCS sont automatiquement ajustés pour que la grille de coordonnées reste parfaitement précise. Le pixel de référence se décale, l'array rétrécit, et la submap qui en résulte est un objet map entièrement valide qui sait toujours exactement où il se trouve dans l'univers physique. Si tu contournes l'objet map et que tu slices l'array brut, tu casses le lien entre tes données et le ciel physique ; laisse toujours la méthode submap gérer les calculs de coordonnées pour toi. C'est tout pour cet épisode. Merci de ton écoute, et continue à coder !
10

Alignement et reprojection de Maps

3m 45s

Combinez les données de différents instruments de manière transparente. Apprenez à reprojeter mathématiquement une Map d'un système de coordonnées sur la grille de pixels exacte d'un autre.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. SunPy : Analyse des données solaires, épisode 10 sur 12. Ce n'est pas parce que deux instruments différents prennent une photo du Soleil à la même seconde que leurs pixels s'alignent. Si tu les superposes directement, tu vas obtenir un truc complètement décalé. L'alignement et la reprojection des maps règlent ce problème. Quand tu compares les données de l'Atmospheric Imaging Assembly, ou AIA, et du Helioseismic and Magnetic Imager, ou HMI, il faut savoir que les deux instruments sont sur le même satellite. Ils capturent des images simultanément. Une erreur classique, c'est de supposer que ces deux images full-disk peuvent être superposées directement juste parce que le timing correspond. Mais les instruments ont des plate scales différentes, ce qui veut dire que leurs pixels individuels couvrent des zones physiques différentes. Ils ont aussi de légers décalages de pointage. Si tu prends une image dans l'extrême ultraviolet en haute résolution de l'AIA et un magnétogramme en plus basse résolution du HMI, leurs grilles ne s'alignent tout simplement pas. Dis-toi que tu veux plotter les contours magnétiques des données HMI parfaitement par-dessus les boucles coronales de l'image AIA. Pour faire ça, tu dois projeter les données HMI dans le World Coordinate System, ou WCS, de la map AIA. Le WCS, c'est le framework mathématique intégré dans la map qui traduit la position d'un pixel en une vraie coordonnée physique dans le ciel. SunPy gère cette transformation via un package externe qui s'appelle reproject. Tu utilises une fonction qui s'appelle reproject underscore interp. Cette fonction fait une interpolation spatiale rapide, ce qui est l'approche nécessaire quand tu alignes des données d'imagerie solaire standard. D'abord, tu définis ta target. Dans ce scénario, la target c'est la map AIA, donc tu extrais son objet WCS. Ensuite, tu passes ta map source, le magnétogramme HMI, et ce WCS target dans la fonction d'interpolation. La fonction projette la grille target sur les données sources. Elle calcule où les nouveaux pixels se trouvent dans l'espace physique, elle requête la map HMI d'origine à ces coordonnées précises, et elle interpole les valeurs des pixels. Par défaut, la fonction te renvoie un nouvel array de données brutes avec exactement la même shape que l'image target, ainsi qu'un array footprint. Le footprint indique quels pixels sont tombés en dehors du champ de vision d'origine. Vu que tu as seulement besoin des données pour l'overlay, tu peux passer un paramètre pour ignorer complètement le footprint, ce qui te renvoie juste l'array interpolé. Pour rendre cet array brut utile, tu construis une nouvelle map SunPy. Tu associes ton nouvel array de données HMI interpolé avec le header de metadata de ta map AIA target. Voici le point essentiel. La reprojection garantit mathématiquement des grilles spatiales identiques. Ta nouvelle map HMI a maintenant exactement les mêmes dimensions et la même plate scale que la map AIA. L'index cinq cents par cinq cents dans la map nouvellement alignée correspond exactement à la même structure solaire physique que l'index cinq cents par cinq cents dans la map AIA. Tu peux maintenant plotter l'image AIA sur un système d'axes, et dessiner sereinement les contours magnétiques de ta map alignée directement par-dessus. Parce que la reprojection modifie définitivement les valeurs de tes données d'origine via l'interpolation pour forcer une correspondance des coordonnées, fais toujours cette étape d'alignement en dernier, juste avant ta visualisation finale ou tes calculs sur les arrays. Merci d'avoir passé quelques minutes avec moi. À la prochaine, prends soin de toi.
11

Données temporelles 1D avec TimeSeries

3m 36s

Passez de l'imagerie spatiale aux courbes de lumière temporelles. Explorez l'objet TimeSeries pour charger, tronquer et concaténer les données de flux de rayons X GOES.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. SunPy : Analyse de données solaires, épisode 11 sur 12. Les images solaires sont visuellement époustouflantes, mais parfois, l’information la plus cruciale se résume à une simple valeur de flux scalaire mesurée mille fois par seconde. Quand tu suis l'intensité d'une éruption solaire sur une semaine entière, une matrice spatiale en 2D n'est tout simplement pas le bon outil. Il te faut des données temporelles en 1D avec TimeSeries. C'est une erreur courante d'utiliser l'objet Map par défaut quand on débute avec SunPy. Mais Map est strictement réservé aux données spatiales en 2D. Quand tu manipules des données temporelles en 1D, comme une courbe de lumière aux rayons X qui s'étend sur plusieurs jours à travers plusieurs canaux de longueur d'onde, tu utilises TimeSeries. C'est l'équivalent en 1D de Map, conçu spécifiquement pour gérer les mesures indexées dans le temps tout en préservant les métadonnées d'observation et les unités physiques. Sous le capot, un objet TimeSeries s'appuie sur un DataFrame pandas pour structurer tes timestamps et tes colonnes de données. Le problème quand tu travailles directement avec du pandas brut, c'est que les dataframes standards ne comprennent pas les unités scientifiques. TimeSeries encapsule cette structure de données pour garantir que tes unités physiques et les métadonnées de tes instruments restent bien attachées pendant les opérations. Imaginons que tu charges une courbe de lumière aux rayons X à partir d'un fichier du satellite GOES-15. Tu passes le chemin du fichier à la fonction TimeSeries, et elle te retourne un objet contenant plusieurs canaux d'observation sous forme de colonnes. Tu peux inspecter ces colonnes par leur nom, comme les canaux à courte et longue longueur d'onde. Voici le point clé. Au lieu d'extraire des arrays numériques bruts directement depuis le dataframe sous-jacent, tu extrais les colonnes en utilisant la méthode quantity. Tu appelles quantity et tu lui passes le nom spécifique de la colonne que tu veux. Cette méthode retourne les données sous la forme d'un objet Astropy Quantity. Ça veut dire que les valeurs de flux numériques brutes sont strictement liées à leurs unités physiques, comme les watts par mètre carré. Extraire les données de cette façon évite complètement les erreurs silencieuses de conversion d'unités plus loin dans tes calculs mathématiques. Une fois que tu as chargé tes données, tu as rarement besoin de tout le fichier d'observation. Tu veux peut-être juste isoler l'heure exacte où une éruption solaire a atteint son pic. Tu fais ça en tronquant le TimeSeries. D'abord, tu définis un objet TimeRange en fournissant une string pour l'heure de début et une string pour l'heure de fin. Ensuite, tu passes ce TimeRange directement dans la méthode truncate de ton TimeSeries. Ça slice le dataframe sous-jacent et ça retourne un tout nouvel objet TimeSeries. Les données sont proprement coupées à ta fenêtre d'intérêt exacte, et toutes les métadonnées associées survivent à la coupe. Souvent, ton analyse nécessite des données qui s'étendent sur plusieurs fichiers d'observation séparés. Si ton but est de construire un dataset continu sur une semaine, tu charges ton deuxième fichier dans son propre objet TimeSeries. Ensuite, tu appelles simplement la méthode concatenate sur le premier TimeSeries, en passant le deuxième comme argument. SunPy aligne les index temporels et fusionne les lignes de données. Tant que les métadonnées des instruments des deux fichiers sont compatibles, tu récupères un seul objet TimeSeries unifié, prêt pour une analyse continue sur la période étendue. Quand tu traites des données temporelles, lier strictement tes timestamps et tes valeurs numériques à leurs unités physiques, c'est ce qui sépare une analyse scientifique fiable d'une erreur de calcul silencieuse. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de coder !
12

Modélisation de la rotation différentielle

3m 21s

Prenez en compte la nature fluide de la surface solaire. Apprenez à utiliser RotatedSunFrame pour prédire les futures coordonnées d'une région active pendant que le Soleil tourne.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. SunPy : Analyse des données solaires, épisode 12 sur 12. Le Soleil n'est pas un bloc de roche solide. Son équateur tourne beaucoup plus vite que ses pôles, ce qui signifie que toute grille de coordonnées que tu y projettes se déchire lentement. Si tu suis une région active le mardi, ces mêmes valeurs de latitude et de longitude pointeront vers le vide le jeudi. Pour suivre le plasma réel, tu as besoin d'un mécanisme appelé Modeling Differential Rotation. On considère souvent les corps célestes comme des sphères solides. Sur Terre, une coordonnée géographique reste fixe. Sur le Soleil, la surface est fluide. Le plasma à l'équateur solaire effectue une rotation complète en environ vingt-cinq jours, tandis que le plasma près des pôles met plus de trente-quatre jours. Comme les coordonnées dépendent intrinsèquement du temps, tu ne peux pas simplement reporter une position spatiale d'un jour à l'autre. Tu dois tenir compte du déplacement physique de la matière solaire au fil du temps. SunPy gère ce déplacement temporel grâce à un coordinate frame appelé Rotated Sun Frame. Ce frame te permet de prendre une coordonnée mesurée à un instant initial et de projeter où cette portion exacte de matière solaire se trouvera à un nouvel instant. Voici l'idée principale. Rotated Sun Frame agit comme un wrapper autour d'un coordinate frame existant. Tu ne calcules pas la nouvelle latitude et longitude manuellement. À la place, tu définis un frame qui encode explicitement la différence de temps, et tu laisses le moteur de transformation de coordonnées faire les calculs. Supposons que tu aies les coordonnées d'une région active observée mardi. C'est ton point initial, représenté par un objet SkyCoord. Il possède une position spatiale et une heure d'observation. Pour trouver où cette région active sera jeudi, tu configures un nouveau Rotated Sun Frame. D'abord, tu fournis le base frame, que tu extrais directement de ta coordonnée du mardi. Ensuite, tu fournis le target time. Tu peux spécifier le timestamp exact du jeudi, ou tu peux passer une durée, comme un time delta de deux jours. SunPy a maintenant un target coordinate frame qui comprend le modèle de rotation solaire. Enfin, tu prends ta coordonnée du mardi et tu la transformes dans ce nouveau Rotated Sun Frame. Quand tu lances cette transformation, SunPy applique un profil de rotation différentielle standard. Il lit la latitude de ta coordonnée de départ, calcule la vitesse angulaire correcte pour cette latitude spécifique, la multiplie par ta durée de deux jours, et décale la longitude. L'output est un nouvel objet de coordonnées. Sa latitude et sa longitude sont mises à jour pour refléter deux jours de rotation différentielle, indiquant précisément où le plasma de ta région active a dérivé d'ici jeudi. Si la région était près de l'équateur, elle s'est beaucoup décalée. Si elle était près du pôle, elle a beaucoup moins bougé. Cette approche te permet d'avancer ou de reculer les coordonnées dans le temps de manière transparente. Parce que la rotation différentielle modifie l'emplacement physique des données que tu étudies, lier chaque coordonnée à un temps d'observation spécifique et la décaler via le modèle de rotation est le seul moyen de maintenir la précision sur plusieurs observations. Ceci conclut notre série sur l'analyse des données solaires. Je t'encourage à explorer la documentation officielle de SunPy, à tester ces outils par toi-même, ou à visiter devstories dot eu pour suggérer des sujets pour de futures séries. C'est tout pour cet épisode. Merci de ton écoute, et continue à développer !