Torna al catalogo
Season 12 12 Episodi 44 min 2026

SunPy: Solar Data Analysis

v7.1 — Edizione 2026. Un'analisi approfondita di SunPy v7.1 (2026), l'ambiente open-source sviluppato dalla community per l'analisi dei dati solari in Python. Padroneggia tutto, da Maps e Coordinates fino alle ricerche con Fido e alle TimeSeries.

Calcolo Scientifico Fisica Solare
SunPy: Solar Data Analysis
In Riproduzione
Click play to start
0:00
0:00
1
L'identità fondamentale: Quantities e unità di misura
Scopri perché SunPy richiede unità di misura fisiche per tutti i calcoli. Impara a usare le Astropy Quantities per prevenire errori critici di conversione delle unità nella tua pipeline di analisi solare.
3m 54s
2
L'astrazione Map
Immergiti nella struttura dati fondamentale di SunPy: la Map. Impara come importare file FITS e collegare gli array di dati 2D con i metadati dell'osservatorio sottostanti.
3m 18s
3
Gestione del tempo di precisione
Padroneggia la rappresentazione del tempo nella fisica solare usando Astropy Time e SunPy TimeRange. Scopri perché i datetimes standard di Python falliscono nell'astrofisica delle alte energie.
3m 30s
4
Sistemi di coordinate e osservatori
Impara a navigare sulla superficie solare usando Astropy SkyCoord e i sistemi di coordinate solari specializzati di SunPy. Comprendi il ruolo critico della posizione dell'osservatore e del tempo di osservazione.
4m 03s
5
Collegare i pixel allo spazio fisico
Collega i pixel della tua immagine alle coordinate fisiche usando il World Coordinate System. Impara a convertire in modo impeccabile tra indici dei pixel e SkyCoords senza ridimensionamenti manuali.
4m 15s
6
Ricerca unificata dei dati con Fido
Smetti di scrivere scraper personalizzati per ogni archivio solare. Impara a usare Fido per eseguire ricerche complesse e unificate su più strumenti e lunghezze d'onda contemporaneamente.
3m 40s
7
Query avanzate: JSOC e HEK
Esegui query avanzate sul Joint Science Operations Center e sull'Heliophysics Event Knowledgebase. Recupera metadati di eventi specifici e ritagli di regioni attive.
3m 23s
8
Visualizzazione di Map di qualità per la pubblicazione
Trasforma array FITS poco luminosi in visualizzazioni straordinarie e pronte per la pubblicazione. Impara a configurare colormaps, normalizzazioni logaritmiche e intervalli di clipping.
4m 14s
9
Ritaglio basato sulle coordinate
Ritaglia in sicurezza le tue Maps senza corrompere i metadati spaziali. Scopri perché dovresti usare le submaps invece dello slicing standard di NumPy.
3m 15s
10
Allineamento e riproiezione di Maps
Combina dati da strumenti diversi senza problemi. Impara come riproiettare matematicamente una map da un sistema di coordinate all'esatta griglia di pixel di un altro.
3m 47s
11
Dati temporali 1D con TimeSeries
Passa dalle immagini spaziali alle curve di luce temporali. Esplora l'oggetto TimeSeries per caricare, troncare e concatenare i dati del flusso di raggi X GOES.
3m 50s
12
Modellazione della rotazione differenziale
Tieni conto della natura fluida della superficie solare. Impara a usare RotatedSunFrame per prevedere le coordinate future di una regione attiva mentre il Sole ruota.
3m 34s

Episodi

1

L'identità fondamentale: Quantities e unità di misura

3m 54s

Scopri perché SunPy richiede unità di misura fisiche per tutti i calcoli. Impara a usare le Astropy Quantities per prevenire errori critici di conversione delle unità nella tua pipeline di analisi solare.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 1 di 12. Potresti essere abituato a passare array numerici semplici alle funzioni e a fidarti che i calcoli tornino. Ma nella fisica solare, presumere le dimensioni dei tuoi dati può invalidare silenziosamente l'intera pipeline di analisi. La salvaguardia contro questo problema è l'argomento di questo episodio: L'identità fondamentale: Quantità e Unità. Se hai provato a passare un array numpy standard a una funzione SunPy, probabilmente hai incontrato un'exception immediata. Questo non è un bug. SunPy rifiuta intenzionalmente i numeri nudi e crudi. In molti domini scientifici, un numero da solo è pericoloso. Dieci potrebbe significare dieci gradi, dieci secondi d'arco o dieci metri. Se una funzione si aspetta matematicamente dei radianti e tu passi dei gradi, il Python standard calcolerà allegramente la risposta sbagliata. SunPy previene questo fallimento silenzioso richiedendo un tracking esplicito delle unità ovunque nell'ecosistema. Questo viene fatto usando gli oggetti Quantity di Astropy. Una Quantity è semplicemente un numero, o un intero array di numeri, legato in modo sicuro a un'unità fisica. Ne crei una moltiplicando i tuoi dati grezzi per un oggetto unit. Per esempio, prendi il numero quindici e lo moltiplichi per un'unità che rappresenta i secondi d'arco. L'oggetto risultante porta con sé entrambe le informazioni. Poiché gli oggetti Quantity sono costruiti sopra gli array standard, puoi continuare a eseguire tutte le tue solite operazioni matematiche. Puoi fare slicing, calcolare la media o trovare il valore massimo, e l'unità corretta resterà attaccata al risultato. Se dovessi mai avere bisogno di separarli, puoi accedere al numero grezzo usando l'attributo punto value, e all'unità stessa usando l'attributo punto unit. Di solito, li tieni insieme perché l'oggetto sa come gestire la propria matematica. Se sommi metri a chilometri, l'oggetto Quantity li scala automaticamente in modo che l'addizione sia matematicamente corretta. Puoi anche convertire manualmente unità compatibili usando il metodo punto to. Convertire i metri in chilometri è semplice perché entrambi misurano una lunghezza. Ma considera uno scenario in cui devi convertire una distanza angolare misurata nel piano del cielo in una distanza fisica sulla superficie del Sole. A rigor di logica, un angolo non è una lunghezza. Di default, il sistema bloccherà questa conversione. Ecco il punto chiave. Puoi fare l'override di questo rigoroso controllo delle dimensioni usando un'equivalency. SunPy fornisce un tool specifico per questo, chiamato solar angle equivalency. Quando lo passi al tuo metodo di conversione, fornisce il contesto fisico mancante. Usa la distanza tra l'osservatore e il Sole per tradurre l'angolo apparente in una distanza fisica letterale, come i chilometri attraverso il disco solare. Colma il divario tra la geometria osservativa e la realtà fisica. Per forzare questo tipo di sicurezza nel tuo codice, usi il decorator quantity input. Lo posizioni sopra la definizione della tua funzione per specificare che tipo di dimensioni fisiche accetta la tua funzione. Non obblighi l'utente a passare specificamente gradi o radianti. Invece, specifichi che l'input deve essere un angolo. Se qualcuno prova a passare un'unità di tempo o di lunghezza, il decorator lo intercetta e lancia un errore prima ancora che la funzione venga eseguita. Questo rigoroso tracking delle dimensioni fisiche significa che il tuo codice fallisce in modo evidente quando è matematicamente non valido, invece di restituire silenziosamente dati spazzatura. Se ti piacciono questi approfondimenti, puoi supportare lo show cercando DevStoriesEU su Patreon. Per questo episodio è tutto. Grazie per l'ascolto, e continua a sviluppare!
2

L'astrazione Map

3m 18s

Immergiti nella struttura dati fondamentale di SunPy: la Map. Impara come importare file FITS e collegare gli array di dati 2D con i metadati dell'osservatorio sottostanti.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 2 di 12. Un enorme array bidimensionale di numeri che rappresentano i pixel solari è completamente inutile se non conosci lo strumento che li ha acquisiti, la lunghezza d'onda o la data esatta. Per fare vera ricerca scientifica, quei pixel devono rimanere permanentemente associati al loro contesto. Questo è esattamente il problema risolto dall'astrazione Map. Un errore molto comune è presumere che una Map di SunPy sia solo un comodo wrapper per fare plot. Non è così. Sebbene possa certamente disegnare immagini, nella sua essenza una Map è un contenitore di dati coordinate-aware. Agisce come il collante centrale che ti impedisce di perdere i tuoi metadati quando manipoli i pixel sottostanti. Vediamo come funziona nella pratica. Supponi di aver scaricato un file FITS contenente un'osservazione AIA a 171 Angstrom. FITS è il formato di file standard per i dati astronomici, e memorizza sia l'array dell'immagine raw sia un header pieno di dettagli sull'osservazione. Per portare questo nel tuo ambiente, passi il tuo file path alla funzione sunpy dot map dot Map. Questa funzione in realtà agisce come una factory. Legge il file, rileva automaticamente quale strumento ha catturato l'immagine e restituisce un oggetto Map specializzato. Chiameremo semplicemente il nostro nuovo oggetto my_map. Una volta che hai la tua Map, il primo componente principale da esplorare sono i metadati. Gli osservatori solari inseriscono un'enorme quantità di dettagli nell'header FITS, e SunPy estrae tutto questo in un attributo chiamato my_map dot meta. Questo attributo si comporta esattamente come un dictionary Python standard. Ciò significa che puoi leggere programmaticamente key specifiche per guidare la tua analisi. Ad esempio, se il tuo script deve estrarre la data esatta dell'osservazione, accedi semplicemente alla key date direttamente dal dictionary meta. SunPy normalizza anche molte di queste key dell'header, appianando le differenze nel modo in cui i vari strumenti solari chiamano i loro campi di metadati. Ora, il secondo elemento è l'immagine stessa. Ecco il punto chiave. L'oggetto Map non cerca di reinventare come funzionano gli array numerici. I dati effettivi dei pixel sono memorizzati in un attributo chiamato my_map dot data, e questo non è altro che un array NumPy bidimensionale standard. Dato che è semplicemente NumPy, non devi imparare una nuova sintassi per fare il tuo lavoro matematico. Se vuoi trovare il punto in assoluto più luminoso nella tua immagine AIA, estrai my_map dot data ed esegui una funzione maximum standard su di esso. Ottieni all'istante il tuo valore raw del pixel. Mantenendo il dictionary meta e il data array strettamente uniti all'interno di un singolo oggetto Map, SunPy garantisce che le tue unità fisiche e il contesto dello strumento non vengano mai separati dai numeri raw. Fornisce un unico confine attorno a tutto ciò che conferisce significato a quei pixel. Il vero potere dell'astrazione Map non è che disegna il sole, ma che forza l'array dell'immagine raw e il contesto osservativo a viaggiare attraverso la tua codebase come un'unica unità inseparabile. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
3

Gestione del tempo di precisione

3m 30s

Padroneggia la rappresentazione del tempo nella fisica solare usando Astropy Time e SunPy TimeRange. Scopri perché i datetimes standard di Python falliscono nell'astrofisica delle alte energie.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 3 di 12. I datetime standard di Python non sanno cosa sia un secondo intercalare. Quando misuri i transienti solari ad alta energia, un secondo perso significa che i tuoi dati si allineano con lo spazio vuoto anziché con il picco del flare. Ecco perché SunPy si affida al precision timing. Molti sviluppatori usano di default il modulo datetime standard di Python per abitudine. Datetime non è uno strumento di precisione. Gli manca la precisione astrofisica e il supporto per i formati di tempo solare richiesti da SunPy. Ignora i secondi intercalari e non sa gestire scale temporali specializzate come utime. SunPy, invece, ti richiede di usare gli oggetti Astropy Time. Per portare i tuoi vari dati in questo ecosistema rigoroso, usi una funzione chiamata parse time. Parse time fa da traduttore universale per i timestamp. Gli passi una stringa in quasi ogni formato, che sia una stringa ISO, una data con formattazione custom, o un timestamp preso direttamente dall'header dei metadati di un vecchio satellite. Interpreta l'input e restituisce un robusto oggetto Astropy Time. Questo è fondamentale perché i vari osservatori solari formattano i loro orologi in modo diverso. Parse time normalizza tutto in un oggetto standard che sa esattamente dove si trova sulla timeline universale, tenendo conto di ogni secondo intercalare lungo il percorso. Una volta che i tuoi singoli timestamp sono precisi, devi gestire le durate. Analizzare un evento solare richiede di racchiudere i tuoi dati all'interno di una finestra di osservazione. Questo è lo scopo dell'oggetto Time Range. Un Time Range rappresenta un intervallo continuo tra due punti esatti. Puoi definirlo fornendo un tempo di inizio e un tempo di fine, ma spesso è più pratico fornire un tempo di inizio e una durata. Immagina di impostare una finestra di osservazione per un flare solare. Crei un Time Range passando una stringa di inizio, ad esempio anno 2010, mese 3, giorno 4 a dieci minuti dopo mezzanotte. Come secondo argomento, invece di calcolarti da solo il tempo di fine esatto, passi una quantity di Astropy pari a quattrocento secondi. L'oggetto Time Range assorbe questi input, applica la scala temporale corretta e stabilisce un confine rigido per il tuo evento. È qui che la cosa si fa interessante. Ora devi analizzare le fasi di ascesa e discesa di quel flare, il che significa che vuoi confrontare la prima metà dell'evento con la seconda. L'oggetto Time Range ha un metodo built-in chiamato split. Chiami split e specifichi l'intero due. Il metodo calcola all'istante il punto medio esatto e restituisce una lista contenente due nuovi oggetti Time Range. La tua finestra originale di quattrocento secondi viene divisa perfettamente in due sottointervalli da duecento secondi. Non c'è nessun calcolo manuale sulle date, e assolutamente nessun rischio di perdersi una frazione di secondo durante la divisione. Il modulo datetime built-in di Python è pensato per lo scheduling, ma un oggetto Astropy Time è uno strumento scientifico. I tuoi confini temporali richiedono lo stesso rigoroso tracciamento delle unit dei tuoi dati spaziali, e affidarsi a questi oggetti specializzati garantisce che le tue finestre rimangano fisicamente accurate lungo l'intera pipeline. Per questo episodio è tutto. Alla prossima!
4

Sistemi di coordinate e osservatori

4m 03s

Impara a navigare sulla superficie solare usando Astropy SkyCoord e i sistemi di coordinate solari specializzati di SunPy. Comprendi il ruolo critico della posizione dell'osservatore e del tempo di osservazione.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 4 di 12. Avvisti un enorme brillamento sul Sole, registri le sue coordinate orizzontali e verticali e le invii a un collega. Ma il suo telescopio è posizionato su un satellite che segue la Terra a metà strada, e i tuoi numeri delle coordinate non significano assolutamente nulla per lui. Questo perché un punto sul Sole non è un punto statico su una griglia piana. La sua posizione dipende interamente da dove si trova il tuo telescopio nel sistema solare e dall'ora esatta. Il modo in cui risolviamo questa ambiguità è attraverso i Coordinate Frames e gli Observers. È un errore frequente definire un punto sulla superficie solare semplicemente passando due valori numerici a una variabile. Devi specificare esplicitamente il contesto. Senza fornire la posizione dell'observer e il tempo di osservazione, una coordinata solare è fisicamente priva di significato. Il sistema solare è in costante movimento. La Terra orbita, le sonde si spostano lungo le loro traiettorie e il Sole stesso ruota. Per definire in modo sicuro una posizione in questo ambiente dinamico, SunPy utilizza un oggetto chiamato SkyCoord, ereditato dalla libreria Astropy. Uno SkyCoord funge da contenitore rigoroso. Prende i tuoi numeri grezzi e li associa a uno specifico frame di riferimento fisico, obbligandoti a definire sia lo spazio che il tempo. Il frame più comune che incontrerai è il frame Helioprojective. Questo frame descrive il Sole esattamente come appare all'obiettivo di una specifica fotocamera. È una proiezione bidimensionale di una sfera tridimensionale, misurata in angoli come gli arcosecondi. In sostanza, misura le linee di vista dall'observer al disco solare. Poiché è fondamentalmente legato al punto di vista dell'observer, creare una coordinata Helioprojective richiede di fornire il parametro observer, che definisce dove si trova il telescopio, e il parametro obstime, che fissa l'istante esatto in cui è scattato l'otturatore. Confrontalo con il frame HeliographicStonyhurst. Questo è un vero sistema di coordinate tridimensionale che utilizza la longitudine e la latitudine solari. È intrinseco al Sole, ma spazialmente fisso rispetto alla configurazione del sistema solare. La linea di longitudine zero del frame HeliographicStonyhurst è bloccata in modo da puntare sempre direttamente verso la Terra. Ti fornisce una posizione fisica assoluta sulla superficie solare, anziché un angolo di visualizzazione localizzato. Qui è dove la cosa si fa interessante. Vediamo come puoi passare da una prospettiva all'altra. Supponi di avere uno SkyCoord per quel brillamento solare registrato dalla Terra usando il frame Helioprojective. Vuoi scoprire esattamente dove una sonda spaziale in orbita attorno a Venere vedrebbe quello stesso brillamento nelle sue fotocamere. Per prima cosa, istanzi il tuo SkyCoord originale con l'observer terrestre, il tempo di osservazione e gli arcosecondi. Successivamente, recuperi la posizione fisica di Venere. SunPy include funzioni built-in per cercare le traiettorie planetarie per un dato timestamp. Una volta ottenuta la coordinata di Venere in quell'esatto tempo di osservazione, chiami il metodo transform sulla tua coordinata terrestre originale. Passi a questo metodo un frame Helioprojective nuovo di zecca, ma imposti il parametro observer di questo nuovo frame su Venere. SunPy esegue quindi la complessa geometria tridimensionale dietro le quinte. Calcola le linee di vista fisiche e restituisce un nuovo SkyCoord. Questo oggetto risultante contiene le esatte coordinate angolari in cui il brillamento è apparso dal punto di vista di Venere. L'aspetto più importante da portarsi a casa è che una coordinata solare non è mai solo una posizione; è una relazione rigorosa tra un target e un observer congelata in uno specifico millisecondo. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
5

Collegare i pixel allo spazio fisico

4m 15s

Collega i pixel della tua immagine alle coordinate fisiche usando il World Coordinate System. Impara a convertire in modo impeccabile tra indici dei pixel e SkyCoords senza ridimensionamenti manuali.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 5 di 12. Hai una posizione specifica sul Sole, come un brillamento attivo, e devi estrarre i suoi valori esatti dalla matrice dell'immagine. Tradurre un punto fisico sferico nello spazio in una riga e una colonna di una matrice piatta di solito richiede una trigonometria complessa. Fare da ponte tra i pixel e lo spazio fisico gestisce tutto questo per te all'istante usando il World Coordinate System. Una Map di SunPy è un array NumPy bidimensionale di pixel associato a metadati estesi. Questi metadati definiscono dove puntava il telescopio, la dimensione fisica di ogni pixel e la specifica proiezione sferica usata per appiattire l'immagine. SunPy raggruppa tutte queste regole geometriche in un oggetto accessibile tramite la property WCS della mappa. WCS sta per World Coordinate System. Questo oggetto fa da layer di traduzione tra la tua griglia di dati piatta e il cielo fisico. Ecco il punto chiave. Devi mantenere corretto l'ordine delle tue coordinate a seconda del dominio in cui ti trovi. Dato che i dati dell'immagine sottostante sono un array NumPy, l'accesso ai dati è previsto usando l'ordinamento prima per riga e poi per colonna. Questo significa che l'asse y viene prima dell'asse x. Il World Coordinate System opera sullo spazio fisico, usando la geometria cartesiana standard dove x viene prima di y. Gli input delle coordinate fisiche sono ordinati prima x e poi y. L'indicizzazione diretta dell'array è ordinata prima y e poi x. Confonderli è una fonte frequente di bug. Ora, passiamo dal cielo fisico alla griglia di pixel. Supponi di voler trovare l'esatta posizione frazionaria del pixel che corrisponde al centro fisico della tua mappa. La mappa fornisce una property chiamata center. Questa rappresenta una coordinata Helioprojective fisica nello spazio. Puoi passare quella coordinata center direttamente nel metodo world to pixel della mappa. Il World Coordinate System elabora la matematica della proiezione e restituisce un oggetto contenente gli esatti valori x e y del pixel. Questi valori restituiti sono numeri floating-point. Una coordinata fisica non cade quasi mai perfettamente nell'esatto centro di un pixel intero discreto. Questo per quanto riguarda il muoversi verso l'interno, verso i dati. E per muoversi verso l'esterno, verso il cielo? Potresti trovare una feature usando un algoritmo di computer vision sul tuo array piatto, magari al pixel alla colonna quattrocento e riga cinquecento. Devi conoscere la sua effettiva posizione fisica sul Sole. Per farlo, usi il metodo pixel to world della mappa. Fornisci la posizione del pixel usando le Quantities di Astropy per definire le esatte unità del pixel. Il metodo passa quei valori dei pixel attraverso la matematica inversa del World Coordinate System e restituisce un preciso oggetto SkyCoord di Astropy. Questo oggetto ti dice esattamente dove si trova quello specifico pixel nello spazio Helioprojective, completo delle corrette unità fisiche. Il World Coordinate System gestisce la fastidiosa trigonometria delle proiezioni sferiche, così puoi smettere di preoccuparti degli indici grezzi della matrice e iniziare ad analizzare le posizioni fisiche effettive sul disco solare. Grazie per l'ascolto. Statemi bene, tutti.
6

Ricerca unificata dei dati con Fido

3m 40s

Smetti di scrivere scraper personalizzati per ogni archivio solare. Impara a usare Fido per eseguire ricerche complesse e unificate su più strumenti e lunghezze d'onda contemporaneamente.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 6 di 12. Esistono decine di osservatori solari e archivi di dati là fuori, ognuno con le proprie peculiarità. Invece di imparare dieci diverse web API solo per scoprire quali osservazioni esistono per una specifica eruzione solare, ti basta imparare un solo tool. Quel tool è la Unified Data Search con Fido. Fido sta per Federated Internet Data Obtainer. Agisce come un traduttore universale per le API dei dati solari, riducendo drasticamente il codice boilerplate necessario per trovare le osservazioni. Tu gli passi i tuoi parametri scientifici, e Fido gestisce le network request a molteplici data center dietro le quinte. Un errore comune è pensare che lanciare una search con Fido scarichi automaticamente i dati. Non è così. La funzione search restituisce esclusivamente una tabella di metadati chiamata UnifiedResponse. Questo ti permette di ispezionare il numero di file, le loro dimensioni e le loro fonti prima di trasferire qualsiasi cosa sulla tua macchina locale. Per eseguire una search, usi la funzione Fido punto search. Costruisci la tua query passandole degli attributi di ricerca. In SunPy, questi attributi si trovano nel modulo sunpy punto net punto attrs, che viene quasi sempre importato semplicemente con la lettera a. Ogni search richiede un intervallo di tempo. Lo definisci usando a punto Time, passandogli una string di inizio e una string di fine. Da lì, restringi i risultati usando altri attributi, più comunemente a punto Instrument. Ecco il punto chiave. Fido ti permette di costruire query complesse e multi-strumento in una singola function call, usando operatori logici standard. Nello specifico, usi il carattere pipe per rappresentare un OR logico. Supponi di analizzare un evento e di avere bisogno di dati che coprano una specifica finestra di due ore. Vuoi osservazioni dallo strumento LYRA o dallo strumento RHESSI. Senza Fido, dovresti scrivere una API request per LYRA, una request completamente diversa per RHESSI, e poi unire manualmente le JSON response risultanti. Con Fido, costruisci tutto questo in modo nativo. Definisci la tua finestra temporale di due ore usando a punto Time. Poi, definisci i tuoi strumenti target: a punto Instrument con LYRA, e a punto Instrument con RHESSI. Metti il carattere pipe tra le due definizioni degli strumenti. Quando passi il tutto a Fido punto search, gli fornisci l'attributo time, una virgola, e poi i tuoi attributi degli strumenti combinati e racchiusi tra parentesi. Fido legge l'operatore pipe, divide la request, interroga i database pertinenti per entrambi gli strumenti per lo stesso intervallo di tempo, e unisce di nuovo tutto quanto. La UnifiedResponse che ricevi indietro è organizzata in modo intuitivo. Se la tua query ha colpito più data provider, i risultati sono raggruppati per provider. Puoi fare uno slice e printare questa tabella direttamente nel tuo terminale per vedere esattamente quale osservatorio possiede i dati di cui hai bisogno. Il vero potere di Fido non è solo che trova dati solari, ma che normalizza il caos di archivi sparsi in una sintassi Python prevedibile. Se vuoi aiutarci a continuare a fare questi episodi, puoi supportare lo show cercando DevStoriesEU su Patreon. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
7

Query avanzate: JSOC e HEK

3m 23s

Esegui query avanzate sul Joint Science Operations Center e sull'Heliophysics Event Knowledgebase. Recupera metadati di eventi specifici e ritagli di regioni attive.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Solar Data Analysis, episodio 7 di 12. A volte non sai l'ora esatta in cui si è verificato un evento solare. Vuoi semplicemente chiedere a un database di mostrarti tutte le espulsioni di massa coronale del mese scorso. Se provi a estrarre questi dati direttamente da un archivio di immagini, otterrai milioni di file o assolutamente nulla. Per colmare il divario tra eventi astratti e pixel reali, usiamo due tool specifici: l'Heliophysics Event Knowledgebase, o HEK, e il Joint Science Operations Center, o JSOC. L'HEK è un catalogo di fenomeni solari fisici. Registra brillamenti, regioni attive ed espulsioni di massa coronale rilevate da vari algoritmi e osservatori umani. Molti utenti fanno query all'HEK aspettandosi di ricevere in risposta dei file immagine. Ma non è così. L'HEK restituisce i metadata dell'evento. Quando fai una ricerca, ottieni una data table contenente orari di inizio, orari di picco, bounding polygon e note di osservazione. Per cercare nell'HEK, usi la funzione di ricerca standard di Fido. Fornisci un time range, e poi aggiungi uno specifico attribute dell'evento HEK. Se stai cercando un'espulsione di massa coronale, passi l'attribute HEK CME. Il database valuta la richiesta e restituisce una lista di eventi corrispondenti. Da quella lista, isoli l'evento specifico che ti interessa ed estrai il suo tempo di picco. Ora hai una coordinata temporale precisa per il tuo fenomeno. Con questo tempo preciso alla mano, passi al secondo step: il fetch delle immagini vere e proprie. Per i dati dettagliati del Solar Dynamics Observatory, fai una query al JSOC. Il JSOC è l'archivio principale per strumenti come AIA e HMI. Salva le data series più pesanti che contengono i pixel effettivi. Costruisci una nuova ricerca Fido usando il tempo di picco che hai estratto dall'HEK. Questa volta, passi un attribute JSOC Series. Questo dice all'archivio esattamente di quale strumento e data product hai bisogno. Puoi affinare ulteriormente la ricerca usando un attribute JSOC Segment per estrarre solo file di dati specifici, anziché un intero data cube. Ecco il punto chiave. A differenza delle query generiche, il JSOC elabora l'export dei dati on demand, e richiede l'identificazione dell'utente. Devi includere un attribute JSOC Notify contenente il tuo indirizzo email registrato all'interno della tua ricerca Fido. Se ometti l'indirizzo email, la query fallirà. I server JSOC mettono in coda la tua richiesta, preparano l'esatto taglio di dati che hai chiesto e lo mettono in stage per il download. Mettendo in chain questi due sistemi, automatizzi completamente il processo di discovery. Parti da un timeframe ampio, chiedi all'HEK di individuare esattamente quando si è verificato un evento specifico, e passi quei timestamp precisi al JSOC per recuperare le immagini raw. La knowledgebase ti dà la mappa, e l'operations center ti dà il territorio. Per questo episodio è tutto. Grazie per averci ascoltato, e continua a sviluppare!
8

Visualizzazione di Map di qualità per la pubblicazione

4m 14s

Trasforma array FITS poco luminosi in visualizzazioni straordinarie e pronte per la pubblicazione. Impara a configurare colormaps, normalizzazioni logaritmiche e intervalli di clipping.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 8 di 12. Carichi un bellissimo set di dati solari, renderizzi l'immagine e ti ritrovi a fissare un quadrato completamente nero con esattamente un solo pixel bianco brillante in un angolo. I tuoi dati sono perfetti, ma il dynamic range li nasconde completamente. Risolvere questo problema è l'obiettivo della visualizzazione di map di qualità da pubblicazione. Quando gli sviluppatori provano a visualizzare una map SunPy per la prima volta, spesso estraggono l'array di dati grezzi e lo passano direttamente a un comando image show standard di matplotlib. Questo renderizza i pixel, ma fa perdere tutto il contesto fisico. Perdi completamente il tuo sistema di coordinate e i tuoi assi passano di default a semplici indici di array. SunPy risolve questo problema con un metodo plot built-in direttamente sull'oggetto map. Quando chiami plot sulla tua map, SunPy crea automaticamente un asse World Coordinate System, noto come asse WCS. Questo garantisce che i tuoi tick mark rappresentino accuratamente le unità fisiche nel cielo, come i secondi d'arco. Non devi abbandonare i layout di matplotlib per usare questa funzionalità. Puoi creare una figure standard di matplotlib e aggiungere un subplot. Il trucco consiste nel passare l'oggetto WCS della map all'argomento projection di quel subplot. Quindi, ti basta passare quello specifico asse di nuovo al metodo plot della map. Questa integrazione ti offre il controllo preciso della formattazione di matplotlib, mantenendo al contempo la rigorosa consapevolezza spaziale di SunPy. Ora, torniamo a quel quadrato nero con un pixel luminoso. Le immagini solari hanno un contrasto estremo. Un brillamento solare può essere decine di migliaia di volte più luminoso dei deboli anelli coronali adiacenti. Se mappi linearmente i valori dei dati grezzi su una color scale visiva, il brillamento occupa la parte superiore della scala e tutto il resto viene schiacciato nell'ombra. Ecco il punto chiave. Devi comprimere il dynamic range prima del rendering. Lo fai in due passaggi usando il clipping e la normalizzazione. Primo, usa il keyword argument clip interval nel metodo plot della map. Invece di lasciare che un singolo outlier ultra-luminoso definisca il valore massimo della tua color scale, puoi fornire una tuple che rappresenta i percentili. Impostare il clip interval dall'uno percento al novantanove virgola cinque percento forza il metodo plot a ignorare l'uno percento più scuro e il mezzo percento più luminoso dei pixel durante il calcolo dei limiti di colore. Il clipping elimina istantaneamente l'abbagliamento degli outlier estremi. Secondo, anche dopo il clipping, una scala lineare di solito lascia le regioni quiete troppo scure. Per risolvere questo problema, importa la classe LogNorm da matplotlib colors. Passi un'istanza di LogNorm alla keyword norm del metodo plot della map. Applicare uno stretch logaritmico amplifica matematicamente le strutture deboli nelle regioni scure dell'immagine, comprimendo al contempo le differenze visive nelle regioni più luminose. Quando applichi LogNorm, quei deboli e ampi anelli coronali emergono chiaramente dallo sfondo. Infine, imposta la palette visiva corretta. SunPy registra automaticamente le colormap solari standard all'interno di matplotlib. Passando il keyword argument cmap al metodo plot, puoi specificare un canale strumentale preciso. Passare una string come sdoaia171 applica la precisa palette color oro utilizzata dalla comunità scientifica per quella specifica lunghezza d'onda. Combinare il metodo plot built-in per la precisione delle coordinate, i clip interval per la gestione degli outlier, la normalizzazione logaritmica per il dynamic range e una colormap specifica per lo strumento, trasforma un array quasi completamente scuro in una figure scientifica dettagliata e pronta per la pubblicazione. Vorrei prendermi un momento per ringraziarti per l'ascolto: ci aiuta tantissimo. Buona giornata!
9

Ritaglio basato sulle coordinate

3m 15s

Ritaglia in sicurezza le tue Maps senza corrompere i metadati spaziali. Scopri perché dovresti usare le submaps invece dello slicing standard di NumPy.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 9 di 12. Fare lo slicing di un array NumPy è veloce e semplice. Ma se lo fai su un'immagine solare, le tue coordinate spaziali diventeranno all'istante spazzatura. Il meccanismo che impedisce questo è il Coordinate-Aware Cropping. Quando gli sviluppatori Python devono isolare una specifica regione attiva su un'immagine solare a disco intero, il loro primo istinto è spesso quello di fare direttamente lo slicing dell'array di dati sottostante. Prendono le righe da zero a cento e le colonne da zero a cento. Questo estrae i pixel visivi che vuoi, ma corrompe completamente il World Coordinate System associato al file. I metadati continuano a presupporre le dimensioni originali dell'immagine. Poiché il WCS si basa su uno specifico indice di pixel di riferimento per ancorare la griglia di coordinate, fare lo slicing dell'array senza aggiornare l'header significa che i tuoi pixel non corrispondono più alle posizioni fisiche corrette sul Sole. Qualsiasi overlay o misurazione tu provi a fare in seguito fallirà, perché i calcoli non saranno più allineati. Per estrarre in modo sicuro una regione di interesse, SunPy offre il metodo submap. Questo esegue un Coordinate-Aware Cropping direttamente sull'oggetto map stesso. Assicura che l'array dell'immagine e i metadati spaziali rimangano perfettamente sincronizzati in ogni momento. Supponi di volere un bounding box stretto attorno a un brillamento solare. Invece di indovinare gli indici dell'array, definisci il confine usando lo spazio fisico. Per prima cosa, crei un oggetto coordinate che rappresenta l'angolo in basso a sinistra della tua regione desiderata. Specifichi la posizione in unità fisiche, in genere arcosecondi, e usi il coordinate frame della tua map originale, in modo che tutto condivida la stessa origine. Poi, crei un secondo oggetto coordinate per l'angolo in alto a destra del tuo box. Con questi due punti definiti, chiami il metodo submap sulla tua map originale e passi le coordinate in basso a sinistra e in alto a destra come argomenti. Il metodo legge il bounding box fisico, traduce quelle coordinate fisiche in indici di pixel esatti e fa lo slicing dell'array di dati per te. Non devi mai calcolare tu stesso i numeri di riga o di colonna. Ecco il punto chiave. Il metodo submap non si limita a restituire un'immagine più piccola. Riscrive attivamente l'header WCS per la nuova map. Calcola la nuova posizione del pixel di riferimento rispetto alle tue dimensioni ritagliate. Anche se il pixel di riferimento originale era completamente fuori dal tuo nuovo bounding box, la matematica del WCS viene adattata automaticamente in modo che la griglia di coordinate rimanga perfettamente accurata. Il pixel di riferimento si sposta, l'array si restringe e la submap risultante è un oggetto map perfettamente valido che sa ancora esattamente dove si trova nell'universo fisico. Se bypassi l'oggetto map e fai lo slicing dell'array grezzo, rompi il collegamento tra i tuoi dati e il cielo fisico; lascia sempre che sia il metodo submap a gestire la matematica delle coordinate per te. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
10

Allineamento e riproiezione di Maps

3m 47s

Combina dati da strumenti diversi senza problemi. Impara come riproiettare matematicamente una map da un sistema di coordinate all'esatta griglia di pixel di un altro.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 10 di 12. Solo perché due strumenti diversi scattano una foto del Sole nello stesso identico secondo, non significa che i loro pixel siano allineati. Sovrapporli direttamente ti darebbe un disastro disallineato. Allineare e riproiettare le mappe risolve questo problema. Quando confronti i dati dell'Atmospheric Imaging Assembly, o AIA, e dell'Helioseismic and Magnetic Imager, o HMI, entrambi gli strumenti si trovano sullo stesso satellite. Catturano immagini simultaneamente. Un errore comune è presumere che queste due immagini full-disk possano essere sovrapposte direttamente solo perché il timing coincide. Ma gli strumenti hanno plate scale diverse, il che significa che i loro singoli pixel coprono aree fisiche diverse. Hanno anche dei lievi offset di puntamento. Se prendi un'immagine ad alta risoluzione nell'ultravioletto estremo dall'AIA e un magnetogramma a risoluzione più bassa dall'HMI, le loro grid semplicemente non si allineano. Mettiamo che tu voglia plottare i contorni magnetici dai dati HMI perfettamente sopra i loop coronali nell'immagine AIA. Per farlo, devi castare i dati HMI nel World Coordinate System, o WCS, della mappa AIA. Il WCS è il framework matematico integrato nella mappa che traduce la posizione di un pixel in una coordinata fisica reale nel cielo. SunPy gestisce questa trasformazione tramite un package esterno chiamato reproject. Usi una funzione chiamata reproject underscore interp. Questa funzione esegue una veloce interpolazione spaziale, che è l'approccio necessario quando allinei dati di imaging solare standard. Innanzitutto, definisci il tuo target. In questo scenario, il target è la mappa AIA, quindi estrai il suo object WCS. Successivamente, passi la tua mappa source, il magnetogramma HMI, e quel WCS di target nella funzione di interpolazione. La funzione proietta la grid di target sui dati source. Calcola dove si trovano i nuovi pixel nello spazio fisico, fa una query sulla mappa HMI originale a quelle precise coordinate e interpola i valori dei pixel. Di default, la funzione ti restituisce un nuovo array di dati raw con la stessa shape dell'immagine di target, insieme a un array footprint. Il footprint indica quali pixel sono finiti fuori dal field of view originale. Dato che ti servono solo i dati per l'overlay, puoi passare un parametro per ignorare completamente il footprint, il che ti restituisce solo l'array interpolato. Per rendere utile questo array raw, costruisci una nuova mappa SunPy. Abbini il tuo nuovo array di dati HMI interpolato con l'header dei metadata della tua mappa AIA di target. Ecco il punto chiave. La reprojection garantisce matematicamente delle grid spaziali identiche. La tua nuova mappa HMI ora ha le stesse identiche dimensioni e plate scale della mappa AIA. L'index cinquecento per cinquecento nella mappa appena allineata corrisponde esattamente alla stessa caratteristica fisica solare dell'index cinquecento per cinquecento nella mappa AIA. Ora puoi plottare l'immagine AIA su un set di assi, e disegnare con sicurezza i contorni magnetici dalla tua mappa allineata direttamente sopra. Dato che la reprojection altera in modo permanente i valori dei tuoi dati originali tramite interpolazione per forzare un match di coordinate, esegui sempre questo step di allineamento per ultimo, subito prima della tua visualizzazione finale o della tua array math. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
11

Dati temporali 1D con TimeSeries

3m 50s

Passa dalle immagini spaziali alle curve di luce temporali. Esplora l'oggetto TimeSeries per caricare, troncare e concatenare i dati del flusso di raggi X GOES.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 11 di 12. Le immagini solari sono visivamente spettacolari, ma a volte l'informazione più importante è un singolo valore di flusso scalare misurato mille volte al secondo. Quando monitori l'intensità di un brillamento solare per un'intera settimana, una matrice spaziale bidimensionale è semplicemente lo strumento sbagliato. Hai bisogno di dati temporali unidimensionali con TimeSeries. Un errore comune è quello di ricorrere di default all'oggetto Map quando inizi a usare SunPy. Ma Map è strettamente per i dati spaziali bidimensionali. Quando hai a che fare con dati temporali unidimensionali, come una curva di luce a raggi X che si estende per diversi giorni su più canali di lunghezza d'onda, usi TimeSeries. Funziona come l'equivalente unidimensionale di Map, progettato specificamente per gestire misurazioni indicizzate nel tempo, preservando in modo sicuro i metadati di osservazione e le unità fisiche. Dietro le quinte, un oggetto TimeSeries si basa su un DataFrame di pandas per strutturare i tuoi timestamp e le colonne di dati. Il problema di lavorare direttamente in pandas puro è che i dataframe standard non capiscono le unità scientifiche. TimeSeries incapsula questa struttura dati per assicurare che le tue unità fisiche e i metadati dello strumento rimangano saldamente attaccati durante le operazioni. Immagina di caricare una curva di luce a raggi X da un file del satellite GOES-15. Passi il percorso del file alla funzione TimeSeries, e questa ti restituisce un oggetto che contiene più canali di osservazione come colonne. Puoi ispezionare queste colonne per nome, come ad esempio i canali a lunghezza d'onda corta e a lunghezza d'onda lunga. Ecco il punto chiave. Invece di estrarre array numerici grezzi direttamente dal dataframe sottostante, estrai le colonne usando il metodo quantity. Chiami quantity e gli passi il nome specifico della colonna che desideri. Questo metodo restituisce i dati come un oggetto Astropy Quantity. Questo significa che i valori numerici grezzi del flusso sono strettamente legati alle loro unità fisiche, come i watt per metro quadrato. Estrarre i dati in questo modo previene completamente gli errori silenziosi di conversione delle unità a valle nei tuoi calcoli matematici. Una volta caricati i tuoi dati, raramente hai bisogno dell'intero file di osservazione. Potresti voler isolare solo l'ora esatta in cui un brillamento solare ha raggiunto il picco. Ottieni questo risultato troncando la TimeSeries. Per prima cosa, definisci un oggetto TimeRange fornendo una stringa per il tempo di inizio e una stringa per il tempo di fine. Poi passi questo TimeRange direttamente nel metodo truncate della tua TimeSeries. Questo esegue uno slice del dataframe sottostante e restituisce un oggetto TimeSeries nuovo di zecca. I dati vengono tagliati in modo pulito alla tua esatta finestra di interesse, e tutti i metadati associati sopravvivono al taglio. Spesso, la tua analisi richiede dati che si estendono su più file di osservazione separati. Se il tuo obiettivo è costruire un dataset continuo lungo una settimana, carichi il tuo secondo file in un suo oggetto TimeSeries. Poi, chiami semplicemente il metodo concatenate sulla prima TimeSeries, passando la seconda come argomento. SunPy allinea gli indici temporali e unisce le righe di dati. Finché i metadati dello strumento di entrambi i file sono compatibili, ottieni indietro un singolo oggetto TimeSeries unificato, pronto per l'analisi continua sull'intervallo di tempo esteso. Quando elabori dati temporali, legare rigorosamente i tuoi timestamp e i valori numerici alle loro unità fisiche è ciò che separa un'analisi scientifica affidabile da un silenzioso fallimento di calcolo. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
12

Modellazione della rotazione differenziale

3m 34s

Tieni conto della natura fluida della superficie solare. Impara a usare RotatedSunFrame per prevedere le coordinate future di una regione attiva mentre il Sole ruota.

Download
Ciao, sono Alex di DEV STORIES DOT EU. SunPy: Analisi dei dati solari, episodio 12 di 12. Il Sole non è una roccia solida. Il suo equatore ruota molto più velocemente dei poli, il che significa che qualsiasi griglia di coordinate che ci mappi sopra si sta lentamente lacerando. Se tracci una regione attiva martedì, gli stessi valori di latitudine e longitudine indicheranno uno spazio vuoto entro giovedì. Per tracciare il plasma effettivo, ti serve un meccanismo chiamato Modeling Differential Rotation. Spesso tendiamo a trattare i corpi celesti come sfere solide. Sulla Terra, una coordinata geografica rimane fissa. Sul Sole, la superficie è fluida. Il plasma all'equatore solare compie una rotazione completa in circa venticinque giorni, mentre il plasma vicino ai poli impiega oltre trentaquattro giorni. Poiché le coordinate sono intrinsecamente dipendenti dal tempo, non puoi semplicemente riportare una posizione spaziale da un giorno all'altro. Devi tenere conto dello spostamento fisico del materiale solare nel tempo. SunPy gestisce questo spostamento dipendente dal tempo utilizzando un coordinate frame chiamato Rotated Sun Frame. Questo frame ti permette di prendere una coordinata misurata a un tempo iniziale e proiettare dove si troverà esattamente quella porzione di materiale solare a un nuovo tempo. Ecco il punto chiave. Il Rotated Sun Frame funge da wrapper attorno a un coordinate frame esistente. Non calcoli la nuova latitudine e longitudine manualmente. Invece, definisci un frame che codifica esplicitamente la differenza di tempo, e lasci che l'engine di trasformazione delle coordinate faccia i calcoli. Supponi di avere le coordinate di una regione attiva osservata martedì. Questo è il tuo punto iniziale, rappresentato come uno SkyCoord object. Ha una posizione spaziale e un tempo di osservazione. Per trovare dove si troverà quella regione attiva giovedì, imposti un nuovo Rotated Sun Frame. Innanzitutto, fornisci il base frame, che estrai direttamente dalla tua coordinata di martedì. Successivamente, fornisci il target time. Puoi specificare il timestamp esatto di giovedì, oppure puoi passare una durata, come un time delta di due giorni. SunPy ora ha un target coordinate frame che comprende il modello di rotazione solare. Infine, prendi la tua coordinata di martedì e la trasformi in questo nuovo Rotated Sun Frame. Quando esegui questa trasformazione, SunPy applica un profilo di rotazione differenziale standard. Legge la latitudine della tua coordinata di partenza, calcola la velocità angolare corretta per quella specifica latitudine, la moltiplica per la tua durata di due giorni e sposta la longitudine. L'output è un nuovo coordinate object. La sua latitudine e longitudine vengono aggiornate per riflettere due giorni di rotazione differenziale, individuando con precisione dove il plasma della tua regione attiva si è spostato entro giovedì. Se la regione era vicina all'equatore, si è spostata di molto. Se era vicina al polo, si è spostata molto meno. Questo approccio ti permette di spostare le coordinate avanti o indietro nel tempo in modo fluido. Poiché la rotazione differenziale modifica la posizione fisica dei dati che stai studiando, legare ogni coordinata a uno specifico tempo di osservazione e spostarla attraverso il modello di rotazione è l'unico modo per mantenere la precisione tra più osservazioni. Con questo si conclude la nostra serie sull'analisi dei dati solari. Ti incoraggio a esplorare la documentazione ufficiale di SunPy, a provare questi tool in prima persona, o a visitare devstories dot eu per suggerire argomenti per le prossime serie. Questo è tutto per questo episodio. Grazie per l'ascolto e continua a costruire!