Înapoi la catalog
Season 12 12 Episoade 47 min 2026

SunPy: Solar Data Analysis

v7.1 — Ediția 2026. O analiză aprofundată a SunPy v7.1 (2026), mediul open-source dezvoltat de comunitate pentru analiza datelor solare în Python. Stăpânește totul, de la Maps și Coordinates până la căutările Fido și TimeSeries.

Calcul științific Fizică solară
SunPy: Solar Data Analysis
Se redă acum
Click play to start
0:00
0:00
1
Identitatea de bază: Quantities și unități de măsură
Descoperă de ce SunPy impune unități fizice pentru toate calculele. Învață cum să folosești Astropy Quantities pentru a preveni erorile critice de conversie a unităților în pipeline-ul tău de analiză solară.
4m 07s
2
Abstracția Map
Pătrunde în structura de date fundamentală a SunPy: Map. Învață cum să imporți fișiere FITS și să asociezi array-urile de date 2D cu metadatele de observator subiacente.
3m 15s
3
Măsurarea precisă a timpului
Stăpânește reprezentarea timpului în fizica solară folosind Astropy Time și SunPy TimeRange. Descoperă de ce obiectele datetime standard din Python eșuează în astrofizica de înaltă energie.
3m 48s
4
Cadre de coordonate și observatori
Învață să navighezi pe suprafața solară folosind Astropy SkyCoord și cadrele solare specializate din SunPy. Înțelege rolul critic al locației observatorului și al timpului de observație.
4m 22s
5
Conectarea pixelilor cu spațiul fizic
Conectează pixelii imaginii tale la coordonatele fizice folosind World Coordinate System. Învață să convertești impecabil între indicii pixelilor și SkyCoords fără scalare manuală.
3m 45s
6
Căutare unificată a datelor cu Fido
Nu mai scrie scraper-e personalizate pentru fiecare arhivă solară. Învață cum să folosești Fido pentru a executa căutări complexe și unificate pe mai multe instrumente și lungimi de undă simultan.
3m 53s
7
Interogări avansate: JSOC și HEK
Efectuează interogări avansate în Joint Science Operations Center și Heliophysics Event Knowledgebase. Extrage metadate specifice evenimentelor și decupaje ale regiunilor active.
3m 47s
8
Vizualizarea Map la calitate de publicare
Transformă array-urile FITS întunecate în vizualizări uimitoare, gata de publicare. Învață cum să configurezi colormaps, normalizări logaritmice și intervale de decupare.
4m 31s
9
Decupare bazată pe coordonate
Decupează în siguranță obiectele Maps fără a corupe metadatele spațiale. Află de ce ar trebui să folosești submaps în loc de tăierea (slicing) standard din NumPy.
3m 29s
10
Alinierea și reproiectarea obiectelor Map
Combină perfect datele de la diferite instrumente. Învață cum să reproiectezi matematic un map dintr-un sistem de coordonate pe grila exactă de pixeli a altuia.
4m 00s
11
Date temporale 1D cu TimeSeries
Treci de la imagini spațiale la curbe de lumină temporale. Explorează obiectul TimeSeries pentru a încărca, trunchia și concatena datele fluxului de raze X GOES.
4m 13s
12
Modelarea rotației diferențiale
Ia în calcul natura fluidă a suprafeței solare. Învață cum să folosești RotatedSunFrame pentru a prezice coordonatele viitoare ale unei regiuni active pe măsură ce Soarele se rotește.
3m 51s

Episoade

1

Identitatea de bază: Quantities și unități de măsură

4m 07s

Descoperă de ce SunPy impune unități fizice pentru toate calculele. Învață cum să folosești Astropy Quantities pentru a preveni erorile critice de conversie a unităților în pipeline-ul tău de analiză solară.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 1 din 12. Poate că ești obișnuit să pasezi array-uri numerice simple în funcții și să ai încredere că matematica va funcționa. Dar în fizica solară, a face presupuneri despre dimensiunile datelor tale îți poate invalida în tăcere întregul pipeline de analiză. Măsura de siguranță împotriva acestui lucru este subiectul acestui episod: Identitatea de bază: Cantități și Unități. Dacă ai încercat să pasezi un array numpy standard într-o funcție SunPy, probabil te-ai lovit imediat de o excepție. Ăsta nu e un bug. SunPy respinge intenționat numerele simple. În multe domenii științifice, un număr de sine stătător este periculos. Zece ar putea însemna zece grade, zece arcsecunde sau zece metri. Dacă o funcție se așteaptă matematic la radiani și tu îi pasezi grade, Python-ul standard va calcula cu bucurie răspunsul greșit. SunPy previne acest silent failure cerând urmărirea explicită a unităților peste tot în ecosistem. Acest lucru se face folosind obiecte Quantity din Astropy. Un Quantity este pur și simplu un număr, sau un array întreg de numere, legat în siguranță de o unitate fizică. Îl creezi înmulțind datele tale brute cu un obiect unit. De exemplu, iei numărul cincisprezece și îl înmulțești cu un unit care reprezintă arcsecunde. Obiectul rezultat poartă ambele informații împreună. Pentru că obiectele Quantity sunt construite peste array-uri standard, poți efectua în continuare toate operațiile matematice obișnuite. Poți să le dai slice, să calculezi media sau să găsești valoarea maximă, iar unitatea corectă va rămâne atașată rezultatului. Dacă vreodată trebuie să le separi, poți accesa numărul brut folosind atributul dot value, și unitatea în sine folosind atributul dot unit. De obicei, le păstrezi împreună pentru că obiectul știe cum să-și gestioneze propria matematică. Dacă aduni metri la kilometri, obiectul Quantity le scalează automat, astfel încât adunarea să fie corectă din punct de vedere matematic. De asemenea, poți converti manual între unități compatibile folosind metoda dot to. Conversia metrilor în kilometri este simplă, pentru că ambele măsoară lungimea. Dar ia în considerare un scenariu în care trebuie să convertești o distanță unghiulară măsurată în planul cerului într-o distanță fizică pe suprafața Soarelui. Strict vorbind, un unghi nu este o lungime. By default, sistemul va bloca această conversie. Iată ideea cheie. Poți să dai override la această verificare strictă a dimensiunilor folosind o echivalență. SunPy oferă un tool specific pentru asta, numit echivalența solar angle. Când pasezi asta în metoda ta de conversie, furnizează contextul fizic lipsă. Folosește distanța dintre observator și Soare pentru a traduce unghiul aparent într-o distanță fizică literală, cum ar fi kilometri pe discul solar. Acesta face puntea între geometria observațională și realitatea fizică. Pentru a impune acest tip de siguranță în propriul tău cod, folosești decoratorul quantity input. Îl pui deasupra definiției funcției tale pentru a specifica ce fel de dimensiuni fizice acceptă funcția ta. Nu forțezi userul să paseze grade sau radiani în mod specific. În schimb, specifici că inputul trebuie să fie un unghi. Dacă cineva încearcă să paseze o unitate de timp sau lungime, decoratorul o prinde și aruncă o eroare înainte ca funcția măcar să ruleze. Această urmărire riguroasă a dimensiunilor fizice înseamnă că codul tău dă fail zgomotos atunci când este invalid din punct de vedere matematic, în loc să returneze în liniște garbage data. Dacă îți plac aceste deep dive-uri, poți susține emisiunea căutând DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Mulțumesc că ai ascultat și continuă să construiești!
2

Abstracția Map

3m 15s

Pătrunde în structura de date fundamentală a SunPy: Map. Învață cum să imporți fișiere FITS și să asociezi array-urile de date 2D cu metadatele de observator subiacente.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 2 din 12. Un array bidimensional masiv de numere care reprezintă pixeli solari este complet inutil dacă nu cunoști instrumentul care l-a capturat, lungimea de undă sau data exactă. Pentru a face știință cu adevărat, acei pixeli trebuie să rămână permanent fuzionați cu contextul lor. Asta este exact problema pe care o rezolvă abstractizarea Map. O greșeală foarte comună este să presupui că un Map din SunPy este doar un wrapper convenabil pentru a face plot-uri. Nu este. Deși cu siguranță poate desena imagini, la bază, un Map este un container de date care ține cont de coordonate. Acționează ca un lipici central care te împiedică să îți pierzi metadata atunci când manipulezi pixelii din spate. Hai să vedem cum funcționează asta în practică. Să presupunem că ai descărcat un fișier FITS care conține o observație AIA la 171 de Angstromi. FITS este formatul de fișier standard pentru datele astronomice și stochează atât array-ul de imagini raw, cât și un header plin de detalii despre observație. Pentru a aduce asta în environment-ul tău, pasezi calea fișierului în funcția sunpy dot map dot Map. Această funcție acționează de fapt ca un factory. Citește fișierul, detectează automat ce instrument a făcut imaginea și returnează un obiect Map specializat. Vom numi noul nostru obiect my_map. Odată ce ai obiectul Map, prima componentă principală de explorat este metadata. Observatoarele solare împachetează o cantitate enormă de detalii în header-ul FITS, iar SunPy extrage toate astea într-un atribut numit my_map dot meta. Acest atribut se comportă exact ca un dictionary Python standard. Asta înseamnă că poți citi programatic anumite keys pentru a-ți ghida analiza. De exemplu, dacă scriptul tău trebuie să extragă data exactă a observației, accesezi pur și simplu key-ul date direct din dictionary-ul meta. SunPy normalizează, de asemenea, multe dintre aceste keys din header, netezind diferențele dintre modul în care diverse instrumente solare își denumesc câmpurile de metadata. Acum, a doua parte din asta este imaginea în sine. Iată ideea de bază. Obiectul Map nu încearcă să reinventeze modul în care funcționează array-urile numerice. Datele efective ale pixelilor sunt stocate într-un atribut numit my_map dot data, iar acesta nu este altceva decât un array NumPy standard, bidimensional. Pentru că este doar NumPy, nu trebuie să înveți o sintaxă nouă pentru a-ți face calculele matematice. Dacă vrei să găsești cel mai luminos punct absolut din imaginea ta AIA, extragi my_map dot data și rulezi o funcție maximum standard peste el. Obții instantaneu valoarea raw a pixelului. Păstrând dictionary-ul meta și array-ul de date strâns legate într-un singur obiect Map, SunPy se asigură că unitățile tale fizice și contextul instrumentului nu sunt niciodată separate de numerele raw. Oferă o singură graniță în jurul a tot ceea ce face ca acei pixeli să aibă sens. Adevărata putere a abstractizării Map nu constă în faptul că desenează soarele, ci în faptul că forțează array-ul de imagine raw și contextul observațional să călătorească prin codebase-ul tău ca o singură unitate inseparabilă. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!
3

Măsurarea precisă a timpului

3m 48s

Stăpânește reprezentarea timpului în fizica solară folosind Astropy Time și SunPy TimeRange. Descoperă de ce obiectele datetime standard din Python eșuează în astrofizica de înaltă energie.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 3 din 12. Datetime-urile standard din Python nu știu ce este o secundă intercalară. Când cronometrezi fenomene solare tranzitorii de înaltă energie, o secundă ratată înseamnă că datele tale se aliniază cu spațiul gol în loc de vârful erupției. De aceea, SunPy se bazează pe timing de precizie. Mulți dezvoltatori folosesc implicit modulul datetime standard din Python din obișnuință. Datetime nu este un instrument de precizie. Îi lipsește precizia astrofizică și suportul pentru formatul de timp solar cerute de SunPy. Ignoră secundele intercalare și nu poate gestiona scale de timp specializate precum utime. În schimb, SunPy îți cere să folosești obiecte Astropy Time. Pentru a-ți aduce datele variate în acest ecosistem strict, folosești o funcție numită parse time. Parse time acționează ca un traducător universal pentru timestamp-uri. Îi pasezi un string în aproape orice format, fie că este un string ISO, o dată cu formatare custom sau un timestamp extras direct dintr-un header de metadate al unui satelit vechi. Interpretează inputul și returnează un obiect Astropy Time robust. Acest lucru este esențial deoarece diferite observatoare solare își formatează ceasurile diferit. Parse time normalizează totul într-un obiect standard care știe exact unde se află pe timeline-ul universal, luând în calcul fiecare secundă intercalară pe parcurs. Odată ce timestamp-urile tale individuale sunt precise, trebuie să gestionezi duratele. Analizarea unui eveniment solar necesită încadrarea datelor tale într-o fereastră de observație. Acesta este scopul obiectului Time Range. Un Time Range reprezintă o perioadă continuă între două puncte exacte. Îl poți defini oferind un timp de start și un timp de final, dar adesea este mai practic să oferi un timp de start și o durată. Imaginează-ți că setezi o fereastră de observație pentru o erupție solară. Creezi un Time Range pasând un string de start, cum ar fi anul 2010, luna 3, ziua 4 la zece minute după miezul nopții. Pentru al doilea argument, în loc să calculezi singur timpul exact de final, pasezi o cantitate de tip unit din Astropy de patru sute de secunde. Obiectul Time Range absoarbe aceste inputuri, aplică scala de timp corectă și stabilește o limită rigidă pentru evenimentul tău. Aici devine interesant. Acum, trebuie să analizezi fazele ascendente și descendente ale acelei erupții, ceea ce înseamnă că vrei să compari prima jumătate a evenimentului cu a doua jumătate. Obiectul Time Range are o metodă built-in numită split. Apelezi split și specifici integer-ul doi. Metoda calculează instantaneu punctul de mijloc exact și returnează o listă care conține două noi obiecte Time Range. Fereastra ta originală de patru sute de secunde este perfect împărțită în două subintervale de două sute de secunde. Nu ai de făcut calcule manuale cu datele calendaristice și nu există absolut niciun risc de a pierde o fracțiune de secundă în timpul împărțirii. Modulul datetime built-in din Python este gândit pentru scheduling, dar un obiect Astropy Time este un instrument științific. Limitele tale temporale necesită exact același tracking strict al unităților ca și datele tale spațiale, iar folosirea acestor obiecte specializate garantează că ferestrele tale rămân precise din punct de vedere fizic pe întregul pipeline. Asta e tot pentru acest episod. Ne auzim data viitoare!
4

Cadre de coordonate și observatori

4m 22s

Învață să navighezi pe suprafața solară folosind Astropy SkyCoord și cadrele solare specializate din SunPy. Înțelege rolul critic al locației observatorului și al timpului de observație.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 4 din 12. Observi o erupție masivă pe Soare, îi înregistrezi coordonatele orizontale și verticale și le trimiți unui coleg. Dar telescopul lui este parcat pe un satelit care se află pe orbită la jumătatea distanței în spatele Pământului, iar numerele coordonatelor tale nu înseamnă absolut nimic pentru el. Asta pentru că un punct de pe Soare nu este un punct static pe o grilă plană. Poziția sa depinde în întregime de locul în care este parcat telescopul tău în sistemul solar și de ora exactă. Modul în care rezolvăm această ambiguitate este prin intermediul Coordinate Frames și Observers. Este o greșeală frecventă să definești un punct de pe suprafața solară prin simpla pasare a două valori numerice într-o variabilă. Trebuie să denumești explicit contextul. Fără a oferi locația unui observer și un timp de observație, o coordonată solară nu are niciun sens fizic. Sistemul solar este în continuă mișcare. Pământul orbitează, sondele se deplasează de-a lungul traiectoriilor lor, iar Soarele însuși se rotește. Pentru a defini în siguranță o locație în acest mediu dinamic, SunPy folosește un obiect numit SkyCoord, moștenit din librăria Astropy. Un SkyCoord acționează ca un container strict. Preia numerele brute și le leagă de un cadru de referință fizic specific, forțându-te să definești atât spațiul, cât și timpul. Cel mai comun frame pe care îl vei întâlni este frame-ul Helioprojective. Acest frame descrie Soarele exact așa cum apare pe lentila unei anumite camere. Este o proiecție bidimensională a unei sfere tridimensionale, măsurată în unghiuri precum arcseconds. În esență, măsoară liniile de vizibilitate de la observer la discul solar. Pentru că este fundamental legat de punctul de observație, crearea unei coordonate Helioprojective necesită să furnizezi parametrul observer, care definește unde se află telescopul, și parametrul obstime, care blochează momentul exact în care a declanșat camera. Compară asta cu frame-ul HeliographicStonyhurst. Acesta este un sistem de coordonate tridimensional real, care folosește longitudinea și latitudinea solară. Este intrinsec Soarelui, dar fixat spațial de configurația sistemului solar. Linia de longitudine de zero grade a frame-ului HeliographicStonyhurst este blocată astfel încât să indice mereu direct spre Pământ. Îți oferă o locație fizică absolută pe suprafața solară, în loc de un unghi de vizualizare localizat. Aici devine interesant. Hai să vedem cum ai face o translație între perspective. Să presupunem că ai un SkyCoord pentru acea erupție solară înregistrată de pe Pământ folosind frame-ul Helioprojective. Vrei să afli exact unde o navă spațială care orbitează Venus ar vedea aceeași erupție pe propriile camere. Mai întâi, instanțiezi SkyCoord-ul original cu observer-ul Pământ, timpul de observație și arcseconds. Apoi, preiei locația fizică a lui Venus. SunPy include funcții built-in pentru a căuta traiectoriile planetare pentru un anumit timestamp. Odată ce ai coordonata pentru Venus la acel moment exact de observație, apelezi metoda transform pe coordonata originală a Pământului. Pasezi acestei metode un frame Helioprojective complet nou, dar setezi parametrul observer al acestui nou frame la Venus. SunPy rulează apoi geometria tridimensională complexă în fundal. Calculează liniile fizice de vizibilitate și returnează un nou SkyCoord. Acest obiect rezultat conține coordonatele unghiulare exacte la care a apărut erupția din punctul de vedere al lui Venus. Cea mai importantă idee de reținut este că o coordonată solară nu este niciodată doar o locație; este o relație strictă între un target și un observer, înghețată la o anumită milisecundă. Asta e tot pentru acest episod. Îți mulțumesc pentru audiție și continuă să construiești!
5

Conectarea pixelilor cu spațiul fizic

3m 45s

Conectează pixelii imaginii tale la coordonatele fizice folosind World Coordinate System. Învață să convertești impecabil între indicii pixelilor și SkyCoords fără scalare manuală.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 5 din 12. Ai o locație specifică pe Soare, cum ar fi o erupție activă, și trebuie să extragi valorile exacte ale datelor din matricea imaginii tale. Traducerea unui punct fizic sferic din spațiu într-un rând și o coloană dintr-o matrice plată necesită de obicei o trigonometrie complicată. Conectarea pixelilor cu spațiul fizic rezolvă asta pentru tine instantaneu, folosind World Coordinate System. Un SunPy Map este un array NumPy bidimensional de pixeli, asociat cu metadate extinse. Aceste metadate definesc unde era îndreptat telescopul, dimensiunea fizică a fiecărui pixel și proiecția sferică specifică folosită pentru a aplatiza imaginea. SunPy grupează toate aceste reguli geometrice într-un obiect accesat prin proprietatea WCS a map-ului. WCS vine de la World Coordinate System. Acest obiect acționează ca un layer de traducere între grila ta plată de date și cerul fizic. Iată ideea de bază. Trebuie să fii atent la ordinea coordonatelor în funcție de domeniul în care te afli. Pentru că datele imaginii din spate sunt un array NumPy, acesta așteaptă accesarea datelor folosind ordinea rând, apoi coloană. Asta înseamnă că axa y vine înaintea axei x. World Coordinate System operează în spațiul fizic, folosind geometria carteziană standard, unde x vine înaintea lui y. Inputurile de coordonate fizice sunt ordonate x, apoi y. Indexarea directă a array-ului este ordonată y, apoi x. Încurcarea lor este o sursă frecventă de bug-uri. Acum, să trecem de la cerul fizic la grila de pixeli. Să presupunem că vrei să găsești locația fracționară exactă a pixelului care corespunde centrului fizic al map-ului tău. Map-ul oferă o proprietate numită center. Aceasta reprezintă o coordonată fizică Helioprojective în spațiu. Poți pasa acea coordonată center direct în metoda world to pixel a map-ului. World Coordinate System procesează matematica proiecției și returnează un obiect care conține valorile exacte x și y ale pixelului. Aceste valori returnate sunt numere floating-point. O coordonată fizică aproape niciodată nu pică perfect fix în centrul unui pixel integer discret. Asta acoperă mișcarea spre interior, către date. Dar cum rămâne cu mișcarea spre exterior, către cer? S-ar putea să găsești un feature folosind un algoritm de computer vision pe array-ul tău plat, poate la pixelul de pe coloana patru sute și rândul cinci sute. Trebuie să afli locația sa fizică reală pe Soare. Pentru a face asta, folosești metoda pixel to world a map-ului. Oferi locația pixelului folosind Astropy Quantities pentru a defini unitățile exacte ale pixelului. Metoda trece acele valori ale pixelilor prin matematica inversă din World Coordinate System și returnează un obiect Astropy SkyCoord precis. Acest obiect îți spune exact unde se află acel pixel specific în spațiul Helioprojective, complet cu unitățile fizice adecvate. World Coordinate System gestionează trigonometria complicată a proiecțiilor sferice, astfel încât să poți înceta să te mai îngrijorezi de indecșii raw ai matricei și să începi să analizezi locațiile fizice reale de pe discul solar. Mulțumesc că m-ați ascultat. Aveți grijă de voi, tuturor.
6

Căutare unificată a datelor cu Fido

3m 53s

Nu mai scrie scraper-e personalizate pentru fiecare arhivă solară. Învață cum să folosești Fido pentru a executa căutări complexe și unificate pe mai multe instrumente și lungimi de undă simultan.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 6 din 12. Există zeci de observatoare solare și arhive de date, fiecare cu propriile particularități. În loc să înveți zece API-uri web diferite doar pentru a afla ce observații există pentru o anumită erupție solară, trebuie să înveți un singur tool. Acel tool este Unified Data Search cu Fido. Fido vine de la Federated Internet Data Obtainer. Acționează ca un traducător universal pentru API-urile de date solare, reducând drastic codul boilerplate necesar pentru a găsi observații. Îi dai parametrii tăi științifici, iar Fido gestionează network request-urile către mai multe centre de date, în fundal. O concepție greșită comună este că rularea unui search Fido descarcă automat datele. Nu se întâmplă asta. Funcția de search returnează strict un tabel de metadate numit UnifiedResponse. Asta îți permite să inspectezi numărul de fișiere, dimensiunile și sursele lor înainte să te angajezi să transferi ceva pe mașina ta locală. Pentru a face un search, folosești funcția Fido punct search. Îți construiești query-ul pasându-i atribute de search. În SunPy, aceste atribute trăiesc în modulul sunpy punct net punct attrs, care este aproape mereu importat simplu ca litera a. Fiecare search necesită un interval de timp. Îl definești folosind a punct Time, pasându-i un string de start și un string de end. De acolo, restrângi rezultatele folosind alte atribute, cel mai frecvent a punct Instrument. Iată ideea cheie. Fido îți permite să construiești query-uri complexe, multi-instrument, într-un singur function call, folosind operatori logici standard. Mai exact, folosești caracterul pipe pentru a reprezenta un OR logic. Să presupunem că analizezi un eveniment și ai nevoie de date care acoperă o fereastră specifică de două ore. Vrei observații fie de la instrumentul LYRA, fie de la instrumentul RHESSI. Fără Fido, ai scrie un API request pentru LYRA, un request complet diferit pentru RHESSI, și apoi ai face merge manual la răspunsurile JSON rezultate. Cu Fido, construiești asta nativ. Îți definești fereastra de timp de două ore folosind a punct Time. Apoi, îți definești instrumentele target: a punct Instrument cu LYRA, și a punct Instrument cu RHESSI. Pui caracterul pipe între cele două definiții de instrumente. Când pasezi asta în Fido punct search, îi dai atributul de time, o virgulă, și apoi atributele de instrument combinate, grupate în paranteze. Fido citește operatorul pipe, face split la request, face query pe bazele de date relevante pentru ambele instrumente pe acel interval de timp identic, și face merge la tot înapoi. UnifiedResponse-ul pe care îl primești înapoi este organizat intuitiv. Dacă query-ul tău a lovit mai mulți data providers, rezultatele sunt grupate după provider. Poți da slice și print la acest tabel direct în terminalul tău pentru a vedea exact care observator deține datele de care ai nevoie. Adevărata putere a lui Fido nu este doar că găsește date solare, ci că normalizează haosul arhivelor împrăștiate într-o singură sintaxă Python predictibilă. Dacă vrei să ne ajuți să continuăm să facem aceste episoade, poți susține emisiunea căutând DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Mulțumesc că ne-ai ascultat, și continuă să construiești!
7

Interogări avansate: JSOC și HEK

3m 47s

Efectuează interogări avansate în Joint Science Operations Center și Heliophysics Event Knowledgebase. Extrage metadate specifice evenimentelor și decupaje ale regiunilor active.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 7 din 12. Uneori nu știi momentul exact în care s-a produs un eveniment solar. Vrei doar să ceri unei baze de date să-ți arate toate Ejecțiile de Masă Coronală de luna trecută. Dacă încerci să faci un pull direct dintr-o arhivă de imagini, vei obține fie milioane de fișiere, fie nimic. Pentru a acoperi distanța dintre evenimentele abstracte și pixelii reali, folosim două tool-uri specifice: Heliophysics Event Knowledgebase, sau HEK, și Joint Science Operations Center, sau JSOC. HEK este un catalog de fenomene solare fizice. Acesta înregistrează erupții, regiuni active și ejecții de masă coronală detectate de diverși algoritmi și observatori umani. Mulți utilizatori fac un query către HEK așteptându-se să primească fișiere de imagine în schimb. Dar nu primesc asta. HEK returnează metadata evenimentelor. Când îi dai un search, primești un tabel de date care conține timpii de start, timpii de peak, bounding polygons și note de observație. Pentru a căuta în HEK, folosești funcția standard de search Fido. Oferi un time range, iar apoi adaugi un attribute specific de eveniment HEK. Dacă ești în căutarea unei ejecții de masă coronală, pasezi acel attribute HEK CME. Baza de date evaluează asta și returnează o listă de evenimente care fac match. Din acea listă, izolezi evenimentul specific pe care îl vrei și îi extragi timpul de peak. Acum ai o coordonată temporală precisă pentru fenomenul tău. Cu acel timp precis în mână, treci la al doilea pas: faci fetch la imaginile reale. Pentru date detaliate de la Solar Dynamics Observatory, faci un query către JSOC. JSOC este arhiva principală pentru instrumente precum AIA și HMI. Stochează acele data series grele care conțin pixelii reali. Construiești un nou search Fido folosind timpul de peak pe care l-ai extras din HEK. De data aceasta, pasezi un attribute JSOC Series. Asta îi spune arhivei exact de ce instrument și data product ai nevoie. Poți rafina asta și mai mult folosind un attribute JSOC Segment pentru a face pull doar la anumite fișiere de date, în loc de un data cube întreg. Aici este ideea cheie. Spre deosebire de query-urile generice, JSOC procesează exporturile de date on demand și necesită identificarea utilizatorului. Trebuie să incluzi un attribute JSOC Notify care să conțină adresa ta de e-mail înregistrată, în interiorul acelui search Fido. Dacă omiți adresa de e-mail, query-ul va da fail. Serverele JSOC îți pun request-ul în queue, pregătesc exact porțiunea de date pe care ai cerut-o și îi fac stage pentru download. Făcând un chain între aceste două sisteme, automatizezi complet procesul de discovery. Începi cu un timeframe larg, ceri HEK-ului să identifice exact când a avut loc un anumit eveniment și pasezi acele timestamps precise către JSOC pentru a prelua imaginile raw. Knowledgebase-ul îți dă harta, iar operations center-ul îți dă teritoriul. Asta e tot pentru acest episod. Mersi că m-ai ascultat și continuă să construiești!
8

Vizualizarea Map la calitate de publicare

4m 31s

Transformă array-urile FITS întunecate în vizualizări uimitoare, gata de publicare. Învață cum să configurezi colormaps, normalizări logaritmice și intervale de decupare.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Solar Data Analysis, episodul 8 din 12. Încarci un set superb de date solare, randezi imaginea și ajungi să te uiți la un pătrat complet negru cu exact un pixel alb strălucitor în colț. Datele tale sunt în regulă, dar dynamic range-ul le ascunde complet. Să repari asta este exact scopul vizualizării hărților la calitate de publicație. Când developerii încearcă pentru prima dată să vizualizeze o hartă SunPy, adesea extrag array-ul de date brute și îl dau direct într-o comandă standard matplotlib image show. Asta randează pixelii, dar pierde tot contextul fizic. Îți pierzi complet sistemul de coordonate, iar axele tale trec pe default la simpli indecși de array. SunPy rezolvă asta cu o metodă plot built-in, direct pe obiectul map. Când apelezi plot pe map-ul tău, SunPy generează automat o axă World Coordinate System, cunoscută ca o axă WCS. Asta te asigură că tick mark-urile tale reprezintă cu acuratețe unitățile fizice de pe cer, cum ar fi arcsecundele. Nu trebuie să abandonezi layout-urile matplotlib ca să folosești asta. Poți crea o figură standard matplotlib și să adaugi un subplot. Trucul este să pasezi obiectul WCS al map-ului în argumentul projection al acelui subplot. Apoi, pur și simplu pasezi acea axă specifică înapoi în metoda plot a map-ului. Această integrare îți oferă controlul precis de formatare din matplotlib, păstrând în același timp awareness-ul spațial strict din SunPy. Acum, să ne întoarcem la acel pătrat negru cu un pixel luminos. Imaginile solare au un contrast extrem. O erupție solară poate fi de zeci de mii de ori mai luminoasă decât buclele coronale slabe de lângă ea. Dacă mapezi valorile datelor brute liniar pe o scală vizuală de culori, erupția acaparează capătul superior al scalei, iar tot restul este strivit în umbră. Aici e ideea cheie. Trebuie să comprimi dynamic range-ul înainte de randare. Faci asta în doi pași, folosind clipping și normalizare. Mai întâi, folosește keyword argument-ul clip interval în metoda plot a map-ului. În loc să lași un outlier ultra-luminos să definească valoarea maximă a scalei tale de culori, poți furniza un tuple care reprezintă percentile. Setarea clip interval-ului de la unu la sută la nouăzeci și nouă virgulă cinci la sută forțează metoda plot să ignore cel mai întunecat unu la sută și cea mai luminoasă jumătate de procent din pixeli atunci când calculează limitele de culoare. Clipping-ul elimină instantaneu strălucirea outlierelor extreme. În al doilea rând, chiar și după clipping, o scală liniară lasă de obicei regiunile liniștite prea întunecate. Ca să repari asta, importă clasa LogNorm din matplotlib colors. Pasezi o instanță de LogNorm în keyword-ul norm al metodei plot de pe map. Aplicarea unui stretch logaritmic amplifică matematic structurile slabe din regiunile întunecate ale imaginii, comprimând în același timp diferențele vizuale din regiunile mai luminoase. Când aplici LogNorm, acele bucle coronale slabe și ample ies clar din fundal. În cele din urmă, setează paleta vizuală corectă. SunPy înregistrează automat colormap-uri solare standard în matplotlib. Pasând keyword argument-ul cmap metodei plot, poți specifica un canal exact al instrumentului. Dacă pasezi un string precum sdoaia171, se aplică paleta precisă de culoare aurie pe care comunitatea științifică o folosește pentru acea lungime de undă specifică. Combinând metoda plot built-in pentru acuratețea coordonatelor, clip interval-urile pentru gestionarea outlierelor, normalizarea logaritmică pentru dynamic range și un colormap specific instrumentului, transformi un array aproape complet întunecat într-o figură științifică detaliată, gata de publicare. Aș vrea să îți mulțumesc un moment pentru că ne asculți — ne ajută foarte mult. Să ai o zi super!
9

Decupare bazată pe coordonate

3m 29s

Decupează în siguranță obiectele Maps fără a corupe metadatele spațiale. Află de ce ar trebui să folosești submaps în loc de tăierea (slicing) standard din NumPy.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 9 din 12. Slicing-ul unui array NumPy este rapid și ușor. Dar dacă o faci pe o imagine solară, coordonatele tale spațiale vor deveni instantaneu gunoi. Mecanismul care previne asta este Coordinate-Aware Cropping. Când developerii Python trebuie să izoleze o anumită regiune activă pe o imagine solară full-disk, primul lor instinct este adesea să facă slice direct pe array-ul de date din spate. Ei iau rândurile de la zero la o sută și coloanele de la zero la o sută. Asta extrage pixelii vizuali pe care îi vrei, dar corupe complet World Coordinate System-ul atașat fișierului. Metadata presupune în continuare dimensiunile originale ale imaginii. Pentru că WCS se bazează pe un index specific al pixelului de referință pentru a ancora grila de coordonate, slicing-ul array-ului fără actualizarea header-ului înseamnă că pixelii tăi nu se mai mapează la locațiile fizice corecte de pe Soare. Orice overlay sau măsurătoare pe care încerci să o faci după aceea va eșua, pentru că matematica nu mai este aliniată. Pentru a extrage în siguranță o regiune de interes, SunPy oferă metoda submap. Aceasta face un cropping coordinate-aware direct pe obiectul map în sine. Asta asigură că array-ul imaginii și metadata spațială rămân perfect sincronizate în permanență. Să presupunem că vrei un bounding box strâns în jurul unei erupții solare. În loc să ghicești indecșii array-ului, definești limita folosind spațiul fizic. Mai întâi, creezi un obiect coordinate care reprezintă colțul din stânga jos al regiunii dorite. Specifici locația în unități fizice, de obicei arcsecunde, și folosești coordinate frame-ul de la map-ul tău original, astfel încât totul să împartă aceeași origine. Apoi, creezi un al doilea obiect coordinate pentru colțul din dreapta sus al box-ului tău. Cu aceste două puncte definite, apelezi metoda submap pe map-ul tău original și pasezi coordonatele din stânga jos și dreapta sus ca argumente. Metoda citește bounding box-ul fizic, traduce acele coordonate fizice în indecși exacți de pixeli și face slice pe array-ul de date pentru tine. Nu trebuie niciodată să calculezi tu singur numerele rândurilor sau coloanelor. Iată ideea cheie. Metoda submap nu returnează doar o imagine mai mică. Rescrie activ header-ul WCS pentru noul map. Calculează noua poziție a pixelului de referință în raport cu dimensiunile tale de crop. Chiar dacă pixelul de referință original era complet în afara noului tău bounding box, matematica WCS este ajustată automat, astfel încât grila de coordonate să rămână perfect precisă. Pixelul de referință se mută, array-ul se micșorează, iar submap-ul rezultat este un obiect map complet valid, care încă știe exact unde se află în universul fizic. Dacă ocolești obiectul map și faci slice pe array-ul raw, rupi legătura dintre datele tale și cerul fizic; lasă întotdeauna metoda submap să se ocupe de matematica coordonatelor pentru tine. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!
10

Alinierea și reproiectarea obiectelor Map

4m 00s

Combină perfect datele de la diferite instrumente. Învață cum să reproiectezi matematic un map dintr-un sistem de coordonate pe grila exactă de pixeli a altuia.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 10 din 12. Doar pentru că două instrumente diferite fac o poză a Soarelui exact în aceeași secundă nu înseamnă că pixelii lor se aliniază. Dacă le suprapui direct, vei obține o harababură nealiniată. Alinierea și reproiectarea hărților rezolvă această problemă. Când compari datele de la Atmospheric Imaging Assembly, sau AIA, și de la Helioseismic and Magnetic Imager, sau HMI, ambele instrumente se află pe același satelit. Ele captează imagini simultan. O greșeală comună este să presupui că aceste două imagini full-disk pot fi suprapuse direct doar pentru că timing-ul se potrivește. Dar instrumentele au plate scales diferite, ceea ce înseamnă că pixelii lor individuali acoperă zone fizice diferite. Au, de asemenea, mici pointing offsets. Dacă iei o imagine în ultraviolet extrem, de înaltă rezoluție, de la AIA și o magnetogramă de rezoluție mai mică de la HMI, grilele lor pur și simplu nu se aliniază. Să zicem că vrei să dai plot la contururile magnetice din datele HMI perfect peste buclele coronale din imaginea AIA. Pentru a face asta, trebuie să aduci datele HMI în World Coordinate System, sau WCS, al hărții AIA. WCS este framework-ul matematic încorporat în hartă care traduce locația unui pixel într-o coordonată fizică reală pe cer. SunPy gestionează această transformare printr-un package extern numit reproject. Folosești o funcție numită reproject underscore interp. Această funcție efectuează o interpolare spațială rapidă, care este abordarea necesară atunci când aliniezi date standard de imagistică solară. Mai întâi, îți definești target-ul. În acest scenariu, target-ul este harta AIA, așa că extragi obiectul său WCS. Apoi, pasezi harta source, magnetograma HMI, și acel WCS target în funcția de interpolare. Funcția proiectează grila target pe datele source. Calculează unde se află noii pixeli în spațiul fizic, face query pe harta HMI originală la acele coordonate precise și interpolează valorile pixelilor. By default, funcția îți returnează un nou array de raw data cu forma exactă a imaginii target, alături de un array footprint. Footprint-ul indică ce pixeli au căzut în afara câmpului vizual original. Din moment ce ai nevoie doar de date pentru overlay, poți pasa un parametru pentru a ignora complet footprint-ul, ceea ce returnează doar array-ul interpolat. Pentru a face acest raw array util, construiești o nouă hartă SunPy. Asociezi noul tău array de date HMI interpolat cu metadata header-ul din harta ta AIA target. Iată ideea cheie. Reproiectarea garantează matematic grile spațiale identice. Noua ta hartă HMI are acum exact aceleași dimensiuni și plate scale ca harta AIA. Indexul cinci sute pe cinci sute din harta nou aliniată corespunde exact aceleiași caracteristici solare fizice ca indexul cinci sute pe cinci sute din harta AIA. Acum poți da plot imaginii AIA pe un set de axe și poți desena cu încredere contururile magnetice din harta ta aliniată direct deasupra. Deoarece reproiectarea îți modifică permanent valorile datelor originale prin interpolare pentru a forța o potrivire a coordonatelor, efectuează întotdeauna acest pas de aliniere la final, chiar înainte de vizualizarea finală sau de array math. Mersi că ai petrecut câteva minute cu mine. Până data viitoare, numai bine.
11

Date temporale 1D cu TimeSeries

4m 13s

Treci de la imagini spațiale la curbe de lumină temporale. Explorează obiectul TimeSeries pentru a încărca, trunchia și concatena datele fluxului de raze X GOES.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 11 ​​din 12. Imaginile solare sunt uimitoare vizual, dar uneori cea mai critică informație este doar o singură valoare scalară de flux măsurată de o mie de ori pe secundă. Când urmărești intensitatea unei erupții solare pe parcursul unei săptămâni întregi, o matrice spațială bidimensională este pur și simplu instrumentul nepotrivit pentru treaba asta. Ai nevoie de date temporale 1D cu TimeSeries. Este o greșeală comună să folosești obiectul Map by default atunci când începi cu SunPy. Dar Map este strict pentru date spațiale bidimensionale. Când ai de-a face cu date temporale unidimensionale - cum ar fi o curbă de lumină cu raze X care se întinde pe mai multe zile, pe mai multe canale de lungime de undă - folosești TimeSeries. Acesta acționează ca echivalentul unidimensional pentru Map, conceput special pentru a gestiona măsurători indexate în timp, păstrând în siguranță metadatele observației și unitățile fizice. În spate, un obiect TimeSeries se bazează pe un DataFrame pandas pentru a-ți structura timestamp-urile și coloanele de date. Problema când lucrezi direct cu pandas raw este că dataframe-urile standard nu înțeleg unitățile științifice. TimeSeries încapsulează această structură de date pentru a se asigura că unitățile tale fizice și metadatele instrumentului rămân ferm atașate în timpul operațiunilor. Să presupunem că încarci o curbă de lumină cu raze X dintr-un fișier al satelitului GOES-15. Pasezi path-ul fișierului către funcția TimeSeries, iar aceasta returnează un obiect care conține mai multe canale de observație sub formă de coloane. Poți inspecta aceste coloane după nume, cum ar fi canalele de lungime de undă scurtă și lungă. Iată ideea cheie. În loc să extragi array-uri numerice raw direct din dataframe-ul de bază, extragi coloanele folosind metoda quantity. Apelezi quantity și îi pasezi numele specific al coloanei pe care o vrei. Această metodă returnează datele ca un obiect Astropy Quantity. Asta înseamnă că valorile numerice raw ale fluxului sunt strict legate de unitățile lor fizice, cum ar fi wați pe metru pătrat. Extragerea datelor în acest fel previne complet erorile silențioase de conversie a unităților downstream, în calculele tale matematice. Odată ce ți-ai încărcat datele, rareori ai nevoie de întregul fișier de observație. S-ar putea să vrei doar să izolezi ora exactă la care o erupție solară a atins vârful. Obții asta trunchind TimeSeries-ul. Mai întâi, definești un obiect TimeRange oferind un string pentru timpul de început și un string pentru timpul de sfârșit. Apoi, pasezi acest TimeRange direct în metoda truncate a TimeSeries-ului tău. Asta dă slice dataframe-ului de bază și returnează un obiect TimeSeries complet nou. Datele sunt tăiate curat exact la fereastra ta de interes, iar toate metadatele asociate supraviețuiesc tăierii. Adesea, analiza ta necesită date care se întind pe mai multe fișiere de observație separate. Dacă obiectivul tău este să construiești un dataset continuu pe o săptămână, încarci al doilea fișier în propriul său obiect TimeSeries. Apoi, pur și simplu apelezi metoda concatenate pe primul TimeSeries, pasându-l pe al doilea ca argument. SunPy aliniază indecșii de timp și îmbină rândurile de date. Atâta timp cât metadatele instrumentului din ambele fișiere sunt compatibile, primești înapoi un singur obiect TimeSeries unificat, gata pentru analiză continuă pe parcursul intervalului de timp extins. Atunci când procesezi date temporale, legarea strictă a timestamp-urilor și a valorilor numerice de unitățile lor fizice este ceea ce diferențiază o analiză științifică fiabilă de o eroare silențioasă de calcul. Asta e tot pentru acest episod. Mulțumesc că asculți, și continuă să construiești!
12

Modelarea rotației diferențiale

3m 51s

Ia în calcul natura fluidă a suprafeței solare. Învață cum să folosești RotatedSunFrame pentru a prezice coordonatele viitoare ale unei regiuni active pe măsură ce Soarele se rotește.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. SunPy: Analiza datelor solare, episodul 12 din 12. Soarele nu este o rocă solidă. Ecuatorul său se rotește semnificativ mai repede decât polii, ceea ce înseamnă că orice grilă de coordonate pe care o mapezi pe el se destramă încet. Dacă urmărești o regiune activă marți, aceleași valori de latitudine și longitudine vor indica un spațiu gol până joi. Pentru a urmări plasma reală, ai nevoie de un mecanism numit Modeling Differential Rotation. Oamenii tratează adesea corpurile cerești ca pe niște sfere solide. Pe Pământ, o coordonată geografică rămâne fixă. Pe Soare, suprafața este fluidă. Plasma de la ecuatorul solar face o rotație completă în aproximativ douăzeci și cinci de zile, în timp ce plasmei din apropierea polilor îi ia peste treizeci și patru de zile. Deoarece coordonatele sunt inerent dependente de timp, nu poți pur și simplu să transferi o poziție spațială de la o zi la alta. Trebuie să ții cont de deplasarea fizică a materialului solar în timp. SunPy gestionează această deplasare dependentă de timp folosind un coordinate frame numit Rotated Sun Frame. Acest frame îți permite să iei o coordonată măsurată la un moment inițial și să proiectezi unde se va afla exact acea parcelă de material solar la un moment nou. Iată ideea cheie. Rotated Sun Frame acționează ca un wrapper în jurul unui coordinate frame existent. Nu calculezi manual noua latitudine și longitudine. În schimb, definești un frame care codifică explicit diferența de timp și lași motorul de transformare a coordonatelor să facă calculele. Să presupunem că ai coordonatele pentru o regiune activă observată marți. Acesta este punctul tău inițial, reprezentat ca un obiect SkyCoord. Are o poziție spațială și un timp de observație. Pentru a afla unde se va afla acea regiune activă joi, configurezi un nou Rotated Sun Frame. Mai întâi, furnizezi base frame-ul, pe care îl extragi direct din coordonata de marți. Apoi, furnizezi target time-ul. Poți specifica timestamp-ul exact de joi sau poți pasa o durată, cum ar fi un time delta de două zile. SunPy are acum un target coordinate frame care înțelege modelul de rotație solară. În cele din urmă, iei coordonata de marți și o transformi în acest nou Rotated Sun Frame. Când rulezi această transformare, SunPy aplică un profil standard de rotație diferențială. Citește latitudinea coordonatei tale de start, calculează viteza unghiulară corectă pentru acea latitudine specifică, o înmulțește cu durata ta de două zile și deplasează longitudinea. Output-ul este un nou obiect de tip coordonată. Latitudinea și longitudinea sa sunt actualizate pentru a reflecta două zile de rotație diferențială, indicând exact unde a ajuns plasma regiunii tale active până joi. Dacă regiunea era aproape de ecuator, s-a deplasat mult. Dacă era aproape de pol, s-a mișcat mult mai puțin. Această abordare îți permite să muți coordonatele înainte sau înapoi în timp fără probleme. Deoarece rotația diferențială modifică locația fizică a datelor pe care le studiezi, legarea fiecărei coordonate de un anumit timp de observație și deplasarea acesteia prin modelul de rotație este singura modalitate de a menține acuratețea pe parcursul mai multor observații. Asta încheie seria noastră despre analiza datelor solare. Te încurajez să explorezi documentația oficială SunPy, să încerci aceste tool-uri hands-on, sau să vizitezi devstories dot eu pentru a sugera subiecte pentru seriile viitoare. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!