Zurück zum Katalog
Season 12 12 Episoden 48 min 2026

SunPy: Solar Data Analysis

v7.1 — 2026 Edition. Ein tiefer Einblick in SunPy v7.1 (2026), die von der Community entwickelte Open-Source-Umgebung für solare Datenanalyse in Python. Meistern Sie alles von Maps und Coordinates bis hin zu Fido-Suchen und TimeSeries.

Wissenschaftliches Rechnen Sonnenphysik
SunPy: Solar Data Analysis
Aktuelle Wiedergabe
Click play to start
0:00
0:00
1
Die Kernidentität: Quantities und Einheiten
Entdecken Sie, warum SunPy physikalische Einheiten für alle Berechnungen vorschreibt. Lernen Sie, wie Sie Astropy Quantities verwenden, um kritische Fehler bei der Einheitenumrechnung in Ihrer solaren Analyse-Pipeline zu vermeiden.
4m 21s
2
Die Map-Abstraktion
Tauchen Sie in die grundlegende Datenstruktur von SunPy ein: die Map. Erfahren Sie, wie Sie FITS-Dateien einlesen und 2D-Daten-Arrays mit den zugrunde liegenden Observatoriums-Metadaten verknüpfen.
3m 53s
3
Präzises Timing
Meistern Sie die Zeitdarstellung in der Solarphysik mit Astropy Time und SunPy TimeRange. Entdecken Sie, warum Standard-Python-datetimes in der Hochenergie-Astrophysik versagen.
3m 47s
4
Coordinate Frames und Beobachter
Lernen Sie, mit Astropy SkyCoord und den speziellen Solar-Frames von SunPy über die Sonnenoberfläche zu navigieren. Verstehen Sie die entscheidende Rolle von Beobachterstandort und Beobachtungszeit.
4m 14s
5
Die Brücke zwischen Pixeln und physikalischem Raum
Verbinden Sie Ihre Bildpixel mithilfe des World Coordinate System mit physikalischen Koordinaten. Lernen Sie, fehlerfrei zwischen Pixelindizes und SkyCoords zu konvertieren, ohne manuell skalieren zu müssen.
4m 02s
6
Einheitliche Datensuche mit Fido
Hören Sie auf, für jedes Sonnenarchiv eigene Scraper zu schreiben. Lernen Sie, wie Sie Fido nutzen, um komplexe, einheitliche Suchen über mehrere Instrumente und Wellenlängen hinweg gleichzeitig auszuführen.
4m 08s
7
Deep Queries: JSOC und HEK
Führen Sie erweiterte Abfragen gegen das Joint Science Operations Center und die Heliophysics Event Knowledgebase durch. Rufen Sie spezifische Ereignis-Metadaten und Ausschnitte aktiver Regionen ab.
3m 32s
8
Map-Visualisierung in Publikationsqualität
Verwandeln Sie dunkle FITS-Arrays in atemberaubende, publikationsreife Visualisierungen. Erfahren Sie, wie Sie Colormaps, logarithmische Normalisierungen und Clip-Intervalle konfigurieren.
4m 30s
9
Coordinate-Aware Cropping
Schneiden Sie Ihre Maps sicher zu, ohne Ihre räumlichen Metadaten zu beschädigen. Erfahren Sie, warum Sie submaps anstelle von Standard-NumPy-Slicing verwenden sollten.
3m 12s
10
Ausrichten und Reprojizieren von Maps
Kombinieren Sie Daten von verschiedenen Instrumenten nahtlos. Lernen Sie, wie Sie eine Map mathematisch von einem Koordinatensystem auf das exakte Pixelraster eines anderen reprojizieren.
4m 02s
11
1D-Zeitreihendaten mit TimeSeries
Wechseln Sie von räumlichen Bildern zu zeitlichen Lichtkurven. Erkunden Sie das TimeSeries-Objekt, um GOES-Röntgenflussdaten zu laden, abzuschneiden und zu verketten.
3m 59s
12
Modellierung der differenziellen Rotation
Berücksichtigen Sie die fluide Natur der Sonnenoberfläche. Lernen Sie, wie Sie RotatedSunFrame verwenden, um die zukünftigen Koordinaten einer aktiven Region vorherzusagen, während sich die Sonne dreht.
4m 23s

Episoden

1

Die Kernidentität: Quantities und Einheiten

4m 21s

Entdecken Sie, warum SunPy physikalische Einheiten für alle Berechnungen vorschreibt. Lernen Sie, wie Sie Astropy Quantities verwenden, um kritische Fehler bei der Einheitenumrechnung in Ihrer solaren Analyse-Pipeline zu vermeiden.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solardatenanalyse, Folge 1 von 12. Vielleicht bist du es gewohnt, einfach nackte numerische Arrays in Funktionen zu werfen und darauf zu vertrauen, dass die Mathematik schon funktioniert. Aber in der Sonnenphysik kann die bloße Annahme von Datendimensionen deine gesamte Analysis-Pipeline stillschweigend unbrauchbar machen. Die Absicherung dagegen ist das Thema dieser Folge: The Core Identity: Quantities und Units. Wenn du schon mal versucht hast, ein Standard-NumPy-Array an eine SunPy-Funktion zu übergeben, bist du wahrscheinlich sofort auf eine Exception gestoßen. Das ist kein Bug. SunPy lehnt nackte Zahlen absichtlich ab. In vielen wissenschaftlichen Bereichen ist eine Zahl allein gefährlich. Zehn könnte zehn Grad, zehn Bogensekunden oder zehn Meter bedeuten. Wenn eine Funktion mathematisch Radiant erwartet und du Grad übergibst, berechnet Standard-Python fröhlich das falsche Ergebnis. SunPy verhindert diesen Silent Failure, indem es überall im Ökosystem ein explizites Unit-Tracking vorschreibt. Das geschieht mithilfe von Astropy-Quantity-Objekten. Eine Quantity ist einfach eine Zahl, oder ein ganzes Array von Zahlen, das sicher an eine physikalische Unit gebunden ist. Du erstellst eine, indem du deine Rohdaten mit einem Unit-Objekt multiplizierst. Zum Beispiel nimmst du die Zahl fünfzehn und multiplizierst sie mit einer Unit, die Bogensekunden repräsentiert. Das resultierende Objekt trägt beide Informationen zusammen in sich. Weil Quantity-Objekte auf Standard-Arrays aufbauen, kannst du weiterhin all deine gewohnten mathematischen Operationen durchführen. Du kannst sie slicen, den Mean berechnen oder den Maximalwert finden, und die korrekte Unit bleibt an das Ergebnis angehängt. Falls du sie jemals trennen musst, kannst du über das dot-value-Attribut auf die rohe Zahl zugreifen, und auf die Unit selbst über das dot-unit-Attribut. Normalerweise behältst du sie zusammen, weil das Objekt weiß, wie es seine eigene Mathematik handhaben muss. Wenn du Meter zu Kilometern addierst, skaliert das Quantity-Objekt sie automatisch, sodass die Addition mathematisch korrekt ist. Du kannst auch manuell zwischen kompatiblen Units konvertieren, indem du die dot-to-Methode verwendest. Meter in Kilometer zu konvertieren ist unkompliziert, da beide eine Länge messen. Aber stell dir ein Szenario vor, in dem du eine Winkeldistanz, die in der Himmelsebene gemessen wurde, in eine physikalische Distanz auf der Sonnenoberfläche konvertieren musst. Streng genommen ist ein Winkel keine Länge. Standardmäßig blockiert das System diese Konvertierung. Hier ist die entscheidende Erkenntnis: Du kannst dieses strenge Dimension-Checking mit einer Equivalency überschreiben. SunPy bietet dafür ein spezielles Tool namens Solar Angle Equivalency. Wenn du diese an deine Conversion-Methode übergibst, liefert sie den fehlenden physikalischen Kontext. Sie nutzt die Entfernung zwischen dem Beobachter und der Sonne, um den scheinbaren Winkel in eine echte physikalische Distanz zu übersetzen, wie zum Beispiel Kilometer über die Sonnenscheibe. Sie schließt die Lücke zwischen Beobachtungsgeometrie und physikalischer Realität. Um diese Art von Sicherheit in deinem eigenen Code zu erzwingen, verwendest du den quantity-input-Decorator. Du platzierst diesen über deiner Funktionsdefinition, um festzulegen, welche Art von physikalischen Dimensionen deine Funktion akzeptiert. Du zwingst den User nicht, spezifisch Grad oder Radiant zu übergeben. Stattdessen gibst du an, dass der Input ein Winkel sein muss. Wenn jemand versucht, eine Unit für Zeit oder Länge zu übergeben, fängt der Decorator das ab und wirft einen Error, bevor die Funktion überhaupt läuft. Dieses rigorose Tracking von physikalischen Dimensionen bedeutet, dass dein Code laut fehlschlägt, wenn er mathematisch ungültig ist, anstatt stillschweigend Garbage-Daten zurückzugeben. Wenn dir diese Deep Dives gefallen, kannst du die Show unterstützen, indem du auf Patreon nach DevStoriesEU suchst. Das war's für diese Folge. Danke fürs Zuhören und keep building!
2

Die Map-Abstraktion

3m 53s

Tauchen Sie in die grundlegende Datenstruktur von SunPy ein: die Map. Erfahren Sie, wie Sie FITS-Dateien einlesen und 2D-Daten-Arrays mit den zugrunde liegenden Observatoriums-Metadaten verknüpfen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solardatenanalyse, Folge 2 von 12. Ein riesiges, zweidimensionales Array aus Zahlen, das Sonnenpixel repräsentiert, ist völlig nutzlos, wenn du weder das Instrument, das es aufgenommen hat, noch die Wellenlänge oder das genaue Datum kennst. Um echte Wissenschaft zu betreiben, müssen diese Pixel dauerhaft mit ihrem Kontext verschmolzen bleiben. Genau dieses Problem löst die Map-Abstraktion. Ein sehr häufiger Fehler ist die Annahme, dass eine SunPy Map nur ein Convenience Wrapper zum Erstellen von Plots ist. Das ist sie nicht. Zwar kann sie Bilder zeichnen, aber im Kern ist eine Map ein koordinatenbasierter Datencontainer. Sie fungiert als zentrales Bindeglied, das verhindert, dass du deine Metadaten verlierst, wenn du die zugrunde liegenden Pixel manipulierst. Schauen wir uns an, wie das in der Praxis funktioniert. Angenommen, du hast eine FITS-Datei mit einer AIA-Beobachtung bei 171 Angström heruntergeladen. FITS ist das Standarddateiformat für astronomische Daten und speichert sowohl das rohe Image-Array als auch einen Header voller Beobachtungsdetails. Um das in deine Umgebung zu laden, übergibst du deinen Dateipfad an die sunpy dot map dot Map Funktion. Diese Funktion fungiert eigentlich als Factory. Sie liest die Datei, erkennt automatisch, welches Instrument das Bild aufgenommen hat, und gibt ein spezielles Map-Objekt zurück. Wir nennen unser neues Objekt einfach my_map. Sobald du deine Map hast, ist die erste wichtige Komponente, die du dir ansehen solltest, die Metadaten. Sonnenobservatorien packen eine enorme Menge an Details in den FITS-Header, und SunPy extrahiert all das in ein Attribut namens my_map dot meta. Dieses Attribut verhält sich genau wie ein Standard-Python-Dictionary. Das bedeutet, dass du programmatisch bestimmte Keys auslesen kannst, um deine Analyse zu steuern. Wenn dein Skript zum Beispiel das genaue Beobachtungsdatum extrahieren muss, greifst du einfach direkt auf den date Key im Meta-Dictionary zu. SunPy normalisiert außerdem viele dieser Header Keys und gleicht so die Unterschiede aus, wie verschiedene Sonneninstrumente ihre Metadatenfelder benennen. Nun zum zweiten Teil: dem Bild selbst. Hier ist die entscheidende Erkenntnis. Das Map-Objekt versucht nicht, die Funktionsweise numerischer Arrays neu zu erfinden. Die eigentlichen Pixeldaten werden in einem Attribut namens my_map dot data gespeichert, und das ist nichts anderes als ein standardmäßiges, zweidimensionales NumPy-Array. Weil es einfach nur NumPy ist, musst du keine neue Syntax lernen, um deine mathematischen Berechnungen durchzuführen. Wenn du den absolut hellsten Punkt in deinem AIA-Bild finden willst, extrahierst du my_map dot data und führst eine Standard-Maximum-Funktion darüber aus. Du erhältst sofort deinen rohen Pixelwert. Indem das Meta-Dictionary und das Daten-Array eng miteinander in einem einzigen Map-Objekt verpackt bleiben, stellt SunPy sicher, dass deine physikalischen Einheiten und der Instrumentenkontext niemals von den rohen Zahlen getrennt werden. Es schafft eine einzige Grenze um alles, was diesen Pixeln Bedeutung verleiht. Die wahre Stärke der Map-Abstraktion liegt nicht darin, dass sie die Sonne zeichnet, sondern dass sie das rohe Image-Array und den Beobachtungskontext dazu zwingt, als eine einzige, untrennbare Einheit durch deine Codebase zu wandern. Das war's für diese Folge. Vielen Dank fürs Zuhören und viel Spaß beim Entwickeln!
3

Präzises Timing

3m 47s

Meistern Sie die Zeitdarstellung in der Solarphysik mit Astropy Time und SunPy TimeRange. Entdecken Sie, warum Standard-Python-datetimes in der Hochenergie-Astrophysik versagen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solardatenanalyse, Folge 3 von 12. Standard-Python-Datetimes wissen nicht, was eine Schaltsekunde ist. Wenn du hochenergetische solare Transienten zeitlich erfasst, bedeutet eine verpasste Sekunde, dass deine Daten auf leeren Raum statt auf den Peak des Flares ausgerichtet sind. Deshalb verlässt sich SunPy auf Precision Timing. Viele Entwickler nutzen aus Gewohnheit standardmäßig das Python datetime Modul. Datetime ist kein Präzisionswerkzeug. Ihm fehlt die astrophysikalische Präzision und der Support für solare Zeitformate, die SunPy benötigt. Es ignoriert Schaltsekunden und kann keine speziellen Zeitskalen wie utime verarbeiten. Stattdessen verlangt SunPy von dir, Astropy Time Objekte zu verwenden. Um deine vielfältigen Daten in dieses strenge Ökosystem zu bringen, verwendest du eine Funktion namens parse time. Parse time fungiert als universeller Übersetzer für Timestamps. Du übergibst ihr einen String in fast jedem Format, egal ob es ein ISO-String, ein custom-formatiertes Datum oder ein Timestamp ist, der direkt aus einem alten Satelliten-Metadata-Header gezogen wurde. Sie interpretiert den Input und gibt ein robustes Astropy Time Objekt zurück. Das ist extrem wichtig, weil verschiedene Sonnenobservatorien ihre Uhren unterschiedlich formatieren. Parse time normalisiert alles in ein Standard-Objekt, das genau weiß, wo es sich auf der universellen Timeline befindet, und dabei jede Schaltsekunde auf dem Weg berücksichtigt. Sobald deine einzelnen Timestamps präzise sind, musst du mit Durations umgehen. Die Analyse eines solaren Events erfordert, dass du deine Daten auf ein Beobachtungsfenster eingrenzt. Das ist der Zweck des Time Range Objekts. Eine Time Range repräsentiert eine durchgehende Spanne zwischen zwei exakten Punkten. Du kannst sie definieren, indem du eine Startzeit und eine Endzeit angibst, aber oft ist es praktischer, eine Startzeit und eine Duration zu übergeben. Stell dir vor, du richtest ein Beobachtungsfenster für einen Solar Flare ein. Du erstellst eine Time Range, indem du einen Start-String übergibst, wie zum Beispiel das Jahr 2010, Monat 3, Tag 4 um zehn Minuten nach Mitternacht. Für das zweite Argument übergibst du, anstatt die genaue Endzeit selbst zu berechnen, eine Astropy Unit Quantity von vierhundert Sekunden. Das Time Range Objekt verarbeitet diese Inputs, wendet die korrekte Zeitskala an und etabliert eine feste Grenze für dein Event. Hier wird es interessant. Jetzt musst du die ansteigenden und abfallenden Phasen dieses Flares analysieren, was bedeutet, dass du die erste Hälfte des Events mit der zweiten Hälfte vergleichen willst. Das Time Range Objekt hat eine built-in Methode namens split. Du rufst split auf und gibst den Integer zwei an. Die Methode berechnet sofort den exakten Mittelpunkt und gibt eine Liste mit zwei neuen Time Range Objekten zurück. Dein ursprüngliches Vierhundert-Sekunden-Fenster wird perfekt in zwei Zweihundert-Sekunden-Subintervalle unterteilt. Es gibt keine manuelle Date Math und absolut kein Risiko, bei der Division den Bruchteil einer Sekunde zu verlieren. Das built-in Python datetime Modul ist fürs Scheduling gedacht, aber ein Astropy Time Objekt ist ein wissenschaftliches Instrument. Deine zeitlichen Grenzen erfordern genau dasselbe strenge Unit Tracking wie deine räumlichen Daten, und dich auf diese spezialisierten Objekte zu verlassen, garantiert, dass deine Fenster in deiner gesamten Pipeline physikalisch akkurat bleiben. Das war's für dieses Mal. Bis zum nächsten Mal!
4

Coordinate Frames und Beobachter

4m 14s

Lernen Sie, mit Astropy SkyCoord und den speziellen Solar-Frames von SunPy über die Sonnenoberfläche zu navigieren. Verstehen Sie die entscheidende Rolle von Beobachterstandort und Beobachtungszeit.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solardatenanalyse, Folge 4 von 12. Du entdeckst einen gewaltigen Flare auf der Sonne, erfasst seine horizontalen und vertikalen Koordinaten und schickst sie an einen Kollegen. Sein Teleskop ist aber auf einem Satelliten geparkt, der auf halber Strecke hinter der Erde herfliegt, und deine Koordinaten bedeuten ihm absolut gar nichts. Das liegt daran, dass ein Punkt auf der Sonne kein statischer Punkt auf einem flachen Gitter ist. Seine Position hängt komplett davon ab, wo dein Teleskop im Sonnensystem geparkt ist und wie spät es genau ist. Wir lösen diese Mehrdeutigkeit durch Coordinate Frames und Observers. Es ist ein häufiger Fehler, einen Punkt auf der Sonnenoberfläche zu definieren, indem man einfach zwei numerische Werte in eine Variable packt. Du musst den Kontext explizit angeben. Ohne die Angabe einer Observer-Location und einer Observation-Time ist eine Sonnenkoordinate physikalisch bedeutungslos. Das Sonnensystem ist ständig in Bewegung. Die Erde kreist auf ihrer Bahn, Sonden driften entlang ihrer Trajektorien, und die Sonne selbst rotiert. Um in dieser dynamischen Umgebung einen Standort sicher zu definieren, nutzt SunPy ein Objekt namens SkyCoord, das von der Astropy-Library geerbt wird. Ein SkyCoord fungiert als strikter Container. Es nimmt deine rohen Zahlen und bindet sie an ein spezifisches physikalisches Frame, wodurch du gezwungen bist, sowohl Raum als auch Zeit zu definieren. Das häufigste Frame, dem du begegnen wirst, ist das Helioprojective Frame. Dieses Frame beschreibt die Sonne exakt so, wie sie für ein bestimmtes Kameraobjektiv aussieht. Es ist eine zweidimensionale Projektion einer dreidimensionalen Kugel, gemessen in Winkeln wie Bogensekunden. Im Grunde misst es die Sichtlinien vom Observer zur Sonnenscheibe. Da es fundamental an den Blickwinkel des Observers gebunden ist, musst du beim Erstellen einer Helioprojective-Koordinate den observer-Parameter übergeben, der definiert, wo sich das Teleskop befindet, und den obstime-Parameter, der den exakten Moment festhält, in dem der Auslöser geklickt hat. Vergleich das mal mit dem HeliographicStonyhurst Frame. Das ist ein echtes dreidimensionales Koordinatensystem, das solare Länge und Breite verwendet. Es ist intrinsisch für die Sonne, aber räumlich an das Layout des Sonnensystems fixiert. Die Null-Grad-Längengradlinie des HeliographicStonyhurst Frames ist so fixiert, dass sie immer direkt auf die Erde zeigt. Das gibt dir eine absolute physikalische Position auf der Sonnenoberfläche anstelle eines lokalisierten Blickwinkels. Hier wird es interessant. Lass uns durchgehen, wie du zwischen den Perspektiven umrechnest. Angenommen, du hast ein SkyCoord für diesen solaren Flare, der von der Erde aus mit dem Helioprojective Frame aufgezeichnet wurde. Du möchtest nun genau herausfinden, wo ein Raumschiff, das die Venus umkreist, denselben Flare in seinen eigenen Kameras sehen würde. Zuerst instanziierst du dein ursprüngliches SkyCoord mit dem Earth-Observer, der Observation-Time und den Bogensekunden. Als Nächstes rufst du die physikalische Position der Venus ab. SunPy enthält Built-in-Funktionen, um planetare Trajektorien für einen bestimmten Timestamp nachzuschlagen. Sobald du die Koordinate für die Venus zu genau dieser Observation-Time hast, rufst du die transform-Methode auf deiner ursprünglichen Erd-Koordinate auf. Du übergibst dieser Methode ein brandneues Helioprojective Frame, aber du setzt den observer-Parameter dieses neuen Frames auf Venus. SunPy führt dann unter der Haube die komplexe dreidimensionale Geometrie aus. Es berechnet die physikalischen Sichtlinien und gibt ein neues SkyCoord zurück. Dieses resultierende Objekt enthält die exakten Winkelkoordinaten, an denen der Flare aus dem Blickwinkel der Venus erschien. Die wichtigste Erkenntnis, die du mitnehmen solltest, ist, dass eine Sonnenkoordinate niemals nur ein Ort ist; sie ist eine strikte Beziehung zwischen einem Target und einem Observer, eingefroren in einer spezifischen Millisekunde. Das wär's für diese Folge. Danke fürs Zuhören, und keep building!
5

Die Brücke zwischen Pixeln und physikalischem Raum

4m 02s

Verbinden Sie Ihre Bildpixel mithilfe des World Coordinate System mit physikalischen Koordinaten. Lernen Sie, fehlerfrei zwischen Pixelindizes und SkyCoords zu konvertieren, ohne manuell skalieren zu müssen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solar Data Analysis, Folge 5 von 12. Du hast einen bestimmten Punkt auf der Sonne, zum Beispiel einen aktiven Flare, und musst seine exakten Datenwerte aus deiner Image-Matrix extrahieren. Einen sphärischen, physikalischen Punkt im Raum auf eine Row und Column in einer flachen Matrix herunterzubrechen, erfordert normalerweise ziemlich nervige Trigonometrie. Die Brücke zwischen Pixeln und physikalischem Raum schlägt hier das World Coordinate System, das das sofort für dich erledigt. Eine SunPy Map ist ein zweidimensionales NumPy-Array aus Pixeln, gepaart mit umfangreichen Metadaten. Diese Metadaten definieren, wohin das Teleskop gerichtet war, die physikalische Größe jedes Pixels und die spezifische sphärische Projektion, die verwendet wurde, um das Bild abzuflachen. SunPy bündelt all diese geometrischen Regeln in einem Object, auf das über die WCS Property der Map zugegriffen wird. WCS steht für World Coordinate System. Dieses Object fungiert als Translation Layer zwischen deinem flachen Data Grid und dem physikalischen Himmel. Hier ist die entscheidende Erkenntnis: Du musst die Reihenfolge deiner Koordinaten genau im Auge behalten, je nachdem, in welcher Domain du dich befindest. Da die zugrunde liegenden Bilddaten ein NumPy-Array sind, erwartet es den Datenzugriff in der Reihenfolge Row, dann Column. Das bedeutet, die y-Achse kommt vor der x-Achse. Das World Coordinate System arbeitet im physikalischen Raum und nutzt die Standard-kartesische Geometrie, bei der x vor y kommt. Physikalische Koordinaten-Inputs werden in der Reihenfolge x, dann y angegeben. Direktes Array Indexing erfolgt in der Reihenfolge y, dann x. Das zu verwechseln, ist eine häufige Quelle für Bugs. Wechseln wir nun vom physikalischen Himmel zum Pixel Grid. Angenommen, du möchtest die exakte, fraktionale Pixel-Location finden, die dem physikalischen Zentrum deiner Map entspricht. Die Map bietet eine Property namens center. Diese repräsentiert eine physikalische helioprojektive Koordinate im Raum. Du kannst diese Center-Koordinate direkt an die world to pixel Methode der Map übergeben. Das World Coordinate System verarbeitet die Projektions-Mathematik und gibt ein Object mit den exakten x- und y-Pixelwerten zurück. Diese zurückgegebenen Werte sind Floating-Point-Numbers. Eine physikalische Koordinate landet fast nie perfekt genau in der Mitte eines diskreten Integer-Pixels. Das deckt den Weg nach innen zu den Daten ab. Was ist mit dem Weg nach außen zum Himmel? Vielleicht findest du ein Feature mithilfe eines Computer-Vision-Algorithmus auf deinem flachen Array, zum Beispiel bei Pixel-Column vierhundert und Row fünfhundert. Du musst seine tatsächliche physikalische Location auf der Sonne kennen. Dafür nutzt du die pixel to world Methode der Map. Du übergibst die Pixel-Location mithilfe von Astropy Quantities, um die genauen Pixel-Units zu definieren. Die Methode schiebt diese Pixelwerte durch die umgekehrte Mathematik des World Coordinate Systems und gibt ein präzises Astropy SkyCoord Object zurück. Dieses Object verrät dir genau, wo dieses spezifische Pixel im helioprojektiven Raum sitzt, komplett mit den richtigen physikalischen Units. Das World Coordinate System übernimmt die lästige Trigonometrie sphärischer Projektionen, sodass du dir keine Gedanken mehr über rohe Matrix-Indices machen musst und anfangen kannst, tatsächliche physikalische Locations auf der Sonnenscheibe zu analysieren. Danke fürs Zuhören. Macht's gut zusammen.
6

Einheitliche Datensuche mit Fido

4m 08s

Hören Sie auf, für jedes Sonnenarchiv eigene Scraper zu schreiben. Lernen Sie, wie Sie Fido nutzen, um komplexe, einheitliche Suchen über mehrere Instrumente und Wellenlängen hinweg gleichzeitig auszuführen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solar Data Analysis, Folge 6 von 12. Es gibt da draußen Dutzende von Sonnenobservatorien und Datenarchiven, jedes mit seinen eigenen Macken. Anstatt zehn verschiedene Web APIs zu lernen, nur um herauszufinden, welche Beobachtungen für einen bestimmten Solar Flare existieren, musst du nur ein einziges Tool lernen. Dieses Tool ist die Unified Data Search mit Fido. Fido steht für Federated Internet Data Obtainer. Es fungiert als universeller Übersetzer für Solar Data APIs und reduziert den Boilerplate-Code, den du brauchst, um Beobachtungen zu finden, drastisch. Du übergibst deine wissenschaftlichen Parameter, und Fido kümmert sich im Hintergrund um die Network Requests an mehrere Datenzentren. Ein weit verbreiteter Irrtum ist, dass das Ausführen einer Fido-Suche die Daten automatisch herunterlädt. Das tut sie nicht. Die Search-Funktion gibt ausschließlich eine Metadaten-Tabelle namens UnifiedResponse zurück. So kannst du die Anzahl der Files, ihre Größen und ihre Quellen überprüfen, bevor du irgendetwas auf deine lokale Maschine überträgst. Um eine Suche durchzuführen, nutzt du die Fido dot search Funktion. Du baust deine Query auf, indem du ihr Search Attributes übergibst. In SunPy leben diese Attribute im sunpy dot net dot attrs Modul, welches fast immer einfach als der Buchstabe a importiert wird. Jede Suche benötigt eine Time Range. Diese definierst du mit a dot Time, indem du einen Start-String und einen End-String übergibst. Von da an grenzt du die Ergebnisse mit anderen Attributen ein, am häufigsten mit a dot Instrument. Hier ist die entscheidende Erkenntnis. Fido erlaubt es dir, komplexe Multi-Instrument-Queries in einem einzigen Function Call mit standardmäßigen logischen Operatoren zu bauen. Genauer gesagt nutzt du das Pipe-Zeichen, um ein logisches OR darzustellen. Angenommen, du analysierst ein Event und brauchst Daten für ein bestimmtes zweistündiges Zeitfenster. Du willst Beobachtungen entweder vom LYRA-Instrument oder vom RHESSI-Instrument. Ohne Fido würdest du einen API Request für LYRA schreiben, einen völlig anderen Request für RHESSI, und dann die resultierenden JSON Responses manuell mergen. Mit Fido baust du das nativ. Du definierst dein zweistündiges Zeitfenster mit a dot Time. Dann definierst du deine Instrument-Targets: a dot Instrument mit LYRA, und a dot Instrument mit RHESSI. Du setzt das Pipe-Zeichen zwischen die beiden Instrument-Definitionen. Wenn du das an Fido dot search übergibst, gibst du ihm das Time-Attribut, ein Komma, und dann deine kombinierten Instrument-Attribute gruppiert in Klammern. Fido liest den Pipe-Operator, splittet den Request, fragt die relevanten Datenbanken für beide Instrumente über diese identische Zeitspanne ab und mergt alles wieder zusammen. Die UnifiedResponse, die du zurückbekommst, ist intuitiv organisiert. Wenn deine Query mehrere Data Provider getroffen hat, werden die Results nach Provider gruppiert. Du kannst diese Tabelle direkt in deinem Terminal slicen und printen, um genau zu sehen, welches Observatorium die Daten hat, die du brauchst. Die wahre Stärke von Fido ist nicht nur, dass es Solar-Daten findet, sondern dass es das Chaos verstreuter Archive in eine vorhersehbare Python-Syntax normalisiert. Wenn du uns helfen möchtest, weiterhin diese Episoden zu machen, kannst du die Show unterstützen, indem du auf Patreon nach DevStoriesEU suchst. Das war's für diese Folge. Danke fürs Zuhören und keep building!
7

Deep Queries: JSOC und HEK

3m 32s

Führen Sie erweiterte Abfragen gegen das Joint Science Operations Center und die Heliophysics Event Knowledgebase durch. Rufen Sie spezifische Ereignis-Metadaten und Ausschnitte aktiver Regionen ab.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solar Data Analysis, Folge 7 von 12. Manchmal kennst du den genauen Zeitpunkt eines Sonnenereignisses nicht. Du willst einfach eine Datenbank abfragen, um dir alle Coronal Mass Ejections vom letzten Monat anzeigen zu lassen. Wenn du versuchst, das direkt aus einem Image-Archiv zu pullen, bekommst du entweder Millionen von Files oder gar nichts. Um die Lücke zwischen abstrakten Events und tatsächlichen Pixeln zu schließen, nutzen wir zwei spezifische Tools: die Heliophysics Event Knowledgebase, oder HEK, und das Joint Science Operations Center, oder JSOC. Die HEK ist ein Katalog für physikalische Sonnenphänomene. Sie erfasst Flares, Active Regions und Coronal Mass Ejections, die von verschiedenen Algorithmen und menschlichen Beobachtern detektiert wurden. Viele User machen eine Query an die HEK und erwarten, Image-Files zurückzubekommen. Das tun sie aber nicht. Die HEK gibt Event-Metadata zurück. Wenn du darin suchst, bekommst du eine Data Table mit Start Times, Peak Times, Bounding Polygons und Observation Notes. Um die HEK zu durchsuchen, nutzt du die Standard-Fido-Search-Funktion. Du übergibst eine Time Range und fügst dann ein spezifisches HEK Event Attribute hinzu. Wenn du nach einer Coronal Mass Ejection suchst, übergibst du das HEK CME Attribute. Die Datenbank wertet das aus und gibt eine Liste passender Events zurück. Aus dieser Liste isolierst du das gewünschte Event und extrahierst seine Peak Time. Jetzt hast du eine präzise zeitliche Koordinate für dein Phänomen. Mit dieser genauen Zeit in der Hand gehst du zum zweiten Schritt über: dem Abrufen der eigentlichen Bilder. Für detaillierte Solar Dynamics Observatory Daten fragst du das JSOC ab. Das JSOC ist das primäre Archiv für Instrumente wie AIA und HMI. Es speichert die riesigen Data Series, die die tatsächlichen Pixel enthalten. Du baust eine neue Fido-Search mit der Peak Time, die du aus der HEK extrahiert hast. Dieses Mal übergibst du ein JSOC Series Attribute. Das sagt dem Archiv genau, welches Instrument und Data Product du brauchst. Du kannst das noch weiter verfeinern, indem du ein JSOC Segment Attribute nutzt, um nur spezifische Data Files zu pullen, anstatt eines kompletten Data Cubes. Hier ist der entscheidende Punkt. Im Gegensatz zu generischen Queries verarbeitet JSOC Data Exports on demand, und es erfordert eine User Identification. Du musst ein JSOC Notify Attribute mit deiner registrierten E-Mail-Adresse in deine Fido-Search einbauen. Wenn du die E-Mail-Adresse weglässt, wird die Query fehlschlagen. Die JSOC-Server packen deinen Request in eine Queue, bereiten den exakten Data Cut vor, den du angefragt hast, und stagen ihn für den Download. Indem du diese beiden Systeme aneinander chainst, automatisierst du den Discovery-Prozess komplett. Du startest mit einem groben Timeframe, bittest die HEK, genau zu pinpointen, wann ein spezifisches Event passiert ist, und übergibst diese präzisen Timestamps an das JSOC, um die Raw Imagery abzurufen. Die Knowledgebase gibt dir die Karte, und das Operations Center gibt dir das Territorium. Das war's für diese Folge. Danke fürs Zuhören und keep building!
8

Map-Visualisierung in Publikationsqualität

4m 30s

Verwandeln Sie dunkle FITS-Arrays in atemberaubende, publikationsreife Visualisierungen. Erfahren Sie, wie Sie Colormaps, logarithmische Normalisierungen und Clip-Intervalle konfigurieren.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solar Data Analysis, Folge 8 von 12. Du lädst wunderschöne Solardaten, renderst das Bild und starrst am Ende auf ein komplett schwarzes Quadrat mit genau einem hellen weißen Pixel in der Ecke. Deine Daten sind völlig in Ordnung, aber dein Dynamic Range verdeckt sie komplett. Genau darum geht es bei der Publication-Quality Map Visualization: dieses Problem zu beheben. Wenn Entwickler zum ersten Mal eine SunPy Map visualisieren wollen, ziehen sie sich oft das rohe Data Array und übergeben es direkt an einen Standard matplotlib image show Befehl. Das rendert zwar die Pixel, aber der gesamte physikalische Kontext geht verloren. Du verlierst dein Koordinatensystem komplett, und deine Achsen verwenden als Default einfache Array-Indizes. SunPy löst das mit einer eingebauten plot Methode direkt auf dem Map-Objekt. Wenn du plot auf deiner Map aufrufst, stellt SunPy automatisch eine World Coordinate System Achse bereit, bekannt als WCS-Achse. Das stellt sicher, dass deine Tick Marks physikalische Einheiten am Himmel, wie zum Beispiel Bogensekunden, exakt darstellen. Du musst nicht auf matplotlib Layouts verzichten, um das zu nutzen. Du kannst eine Standard matplotlib Figure erstellen und ein Subplot hinzufügen. Der Trick ist, das WCS-Objekt der Map in das projection Argument dieses Subplots zu übergeben. Danach übergibst du diese spezifische Achse einfach wieder an die plot Methode der Map. Diese Integration gibt dir die präzise Formatierungskontrolle von matplotlib, während die strikte räumliche Genauigkeit von SunPy erhalten bleibt. Nun zurück zu dem schwarzen Quadrat mit dem einen hellen Pixel. Sonnenbilder haben einen extremen Kontrast. Ein Sonnenausbruch kann zehntausende Male heller sein als die schwachen Koronalschleifen direkt daneben. Wenn du die rohen Datenwerte linear auf eine visuelle Farbskala mappst, beansprucht der Sonnenausbruch das obere Ende der Skala, und alles andere verschwindet im Schatten. Hier ist die entscheidende Erkenntnis: Du musst den Dynamic Range vor dem Rendern komprimieren. Das machst du in zwei Schritten mit Clipping und Normalization. Erstens, nutze das clip interval Keyword Argument in der plot Methode der Map. Anstatt einen extrem hellen Ausreißer den Maximalwert deiner Farbskala definieren zu lassen, kannst du ein Tuple übergeben, das Percentiles repräsentiert. Wenn du das clip interval von 1 Prozent auf 99,5 Prozent setzt, zwingt das die plot Methode, das dunkelste Prozent und das hellste halbe Prozent der Pixel beim Berechnen der Farbgrenzen zu ignorieren. Clipping durchbricht sofort das grelle Licht extremer Ausreißer. Zweitens: Selbst nach dem Clipping lässt eine lineare Skala ruhige Bereiche meistens zu dunkel. Um das zu beheben, importierst du die LogNorm Klasse aus matplotlib colors. Du übergibst eine Instanz von LogNorm an das norm Keyword der Map plot Methode. Einen logarithmischen Stretch anzuwenden, verstärkt mathematisch die schwachen Strukturen in den dunklen Bereichen des Bildes, während die visuellen Unterschiede in den helleren Bereichen komprimiert werden. Wenn du LogNorm anwendest, treten diese schwachen, geschwungenen Koronalschleifen deutlich aus dem Hintergrund hervor. Schließlich legst du die korrekte visuelle Palette fest. SunPy registriert automatisch Standard Solar Colormaps innerhalb von matplotlib. Indem du das cmap Keyword Argument an die plot Methode übergibst, kannst du einen exakten Instrumentenkanal angeben. Einen String wie sdoaia171 zu übergeben, wendet die präzise goldfarbene Palette an, die die wissenschaftliche Community für diese spezifische Wellenlänge nutzt. Die Kombination der eingebauten plot Methode für Koordinatengenauigkeit, clip intervals zur Behandlung von Ausreißern, logarithmischer Normalization für den Dynamic Range und einer instrumentenspezifischen Colormap verwandelt ein fast komplett dunkles Array in eine detaillierte, publikationsreife wissenschaftliche Figure. Ich möchte mir kurz einen Moment nehmen, um dir fürs Zuhören zu danken – das hilft uns sehr. Mach's gut!
9

Coordinate-Aware Cropping

3m 12s

Schneiden Sie Ihre Maps sicher zu, ohne Ihre räumlichen Metadaten zu beschädigen. Erfahren Sie, warum Sie submaps anstelle von Standard-NumPy-Slicing verwenden sollten.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solardatenanalyse, Folge 9 von 12. Ein NumPy-Array zu slicen, ist schnell und einfach. Aber wenn du das bei einem Sonnenbild machst, werden deine räumlichen Koordinaten sofort unbrauchbar. Der Mechanismus, der das verhindert, ist Coordinate-Aware Cropping. Wenn Python-Entwickler eine bestimmte aktive Region auf einem Full-Disk-Sonnenbild isolieren müssen, ist ihr erster Instinkt oft, das zugrundeliegende Data-Array direkt zu slicen. Sie greifen sich die Zeilen null bis hundert und die Spalten null bis hundert. Das extrahiert zwar die visuellen Pixel, die du haben willst, aber es zerstört das World Coordinate System, das an die Datei angehängt ist, komplett. Die Metadaten gehen weiterhin von den ursprünglichen Bilddimensionen aus. Da das WCS einen bestimmten Reference Pixel Index nutzt, um das Coordinate Grid zu verankern, bedeutet das Slicen des Arrays ohne ein Update des Headers, dass deine Pixel nicht mehr auf die korrekten physikalischen Positionen auf der Sonne mappen. Jedes Overlay oder jede Messung, die du danach versuchst, wird fehlschlagen, weil die Mathematik nicht mehr stimmt. Um eine Region of Interest sicher zu extrahieren, bietet SunPy die submap-Methode. Diese führt ein Coordinate-Aware Cropping direkt auf dem Map-Objekt selbst durch. Das stellt sicher, dass das Image-Array und die räumlichen Metadaten jederzeit perfekt synchronisiert bleiben. Angenommen, du möchtest eine enge Bounding Box um einen Solar Flare legen. Anstatt Array-Indizes zu raten, definierst du die Grenze über den physikalischen Raum. Zuerst erstellst du ein Coordinate-Objekt, das die untere linke Ecke deiner gewünschten Region repräsentiert. Du gibst die Position in physikalischen Einheiten an, typischerweise Bogensekunden, und nutzt den Coordinate Frame deiner ursprünglichen Map, damit alles denselben Ursprung teilt. Dann erstellst du ein zweites Coordinate-Objekt für die obere rechte Ecke deiner Box. Mit diesen beiden definierten Punkten rufst du die submap-Methode auf deiner ursprünglichen Map auf und übergibst die Koordinaten für unten links und oben rechts als Argumente. Die Methode liest die physikalische Bounding Box, übersetzt diese physikalischen Koordinaten in exakte Pixel-Indizes und slicet das Data-Array für dich. Du musst die Zeilen- oder Spaltennummern nie selbst berechnen. Hier ist die wichtigste Erkenntnis. Die submap-Methode liefert nicht einfach nur ein kleineres Bild zurück. Sie überschreibt aktiv den WCS-Header für die neue Map. Sie berechnet die neue Position des Reference Pixels relativ zu deinen zugeschnittenen Dimensionen. Selbst wenn das ursprüngliche Reference Pixel komplett außerhalb deiner neuen Bounding Box lag, wird die WCS-Mathematik automatisch angepasst, sodass das Coordinate Grid perfekt exakt bleibt. Das Reference Pixel verschiebt sich, das Array schrumpft, und die resultierende Submap ist ein vollständig gültiges Map-Objekt, das immer noch genau weiß, wo es sich im physikalischen Universum befindet. Wenn du das Map-Objekt umgehst und das Raw-Array direkt slicest, brichst du die Verbindung zwischen deinen Daten und dem physikalischen Himmel. Lass die Koordinaten-Mathematik also immer von der submap-Methode für dich erledigen. Das war's für diese Folge. Danke fürs Zuhören und keep building!
10

Ausrichten und Reprojizieren von Maps

4m 02s

Kombinieren Sie Daten von verschiedenen Instrumenten nahtlos. Lernen Sie, wie Sie eine Map mathematisch von einem Koordinatensystem auf das exakte Pixelraster eines anderen reprojizieren.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solardatenanalyse, Folge 10 von 12. Nur weil zwei verschiedene Instrumente die Sonne in exakt derselben Sekunde fotografieren, heißt das nicht, dass ihre Pixel exakt übereinanderliegen. Wenn du sie direkt übereinanderlegst, bekommst du ein verschobenes Chaos. Das Aligning und Reprojecting von Maps löst dieses Problem. Wenn du Daten vom Atmospheric Imaging Assembly, oder AIA, und dem Helioseismic and Magnetic Imager, oder HMI, vergleichst: Beide Instrumente sitzen auf demselben Satelliten. Sie nehmen Bilder gleichzeitig auf. Ein häufiger Fehler ist die Annahme, dass diese beiden Full-Disk-Images direkt übereinandergelegt werden können, nur weil das Timing stimmt. Aber die Instrumente haben unterschiedliche Plate Scales, was bedeutet, dass ihre einzelnen Pixel unterschiedliche physikalische Bereiche abdecken. Außerdem haben sie leichte Pointing-Offsets. Wenn du ein hochauflösendes extremes Ultraviolett-Bild von AIA und ein niedriger auflösendes Magnetogramm von HMI nimmst, stimmen ihre Grids einfach nicht überein. Angenommen, du möchtest die magnetischen Konturen aus den HMI-Daten perfekt über die koronalen Loops im AIA-Bild plotten. Dazu musst du die HMI-Daten in das World Coordinate System, oder WCS, der AIA-Map casten. Das WCS ist das mathematische Framework, das in der Map eingebettet ist und eine Pixelposition in eine tatsächliche physikalische Koordinate am Himmel übersetzt. SunPy übernimmt diese Transformation über ein externes Package namens reproject. Du verwendest eine Funktion namens reproject underscore interp. Diese Funktion führt eine schnelle räumliche Interpolation durch. Das ist der nötige Ansatz, wenn du Standard-Solar-Imaging-Daten ausrichtest. Zuerst definierst du dein Target. In diesem Szenario ist das Target die AIA-Map, also extrahierst du ihr WCS-Objekt. Als Nächstes übergibst du deine Source-Map, das HMI-Magnetogramm, und dieses Target-WCS an die Interpolationsfunktion. Die Funktion projiziert das Target-Grid auf die Source-Daten. Sie berechnet, wo die neuen Pixel im physikalischen Raum liegen, fragt die ursprüngliche HMI-Map an diesen präzisen Koordinaten ab und interpoliert die Pixelwerte. Standardmäßig gibt dir die Funktion ein neues Raw-Data-Array zurück, das exakt die gleiche Shape wie das Target-Image hat, zusammen mit einem Footprint-Array. Der Footprint zeigt an, welche Pixel außerhalb des ursprünglichen Field of View lagen. Da du die Daten nur für das Overlay brauchst, kannst du einen Parameter übergeben, um den Footprint komplett zu ignorieren, wodurch nur das interpolierte Array zurückgegeben wird. Um dieses Raw-Array nutzbar zu machen, konstruierst du eine neue SunPy-Map. Du paarst dein neu interpoliertes HMI-Data-Array mit dem Metadata-Header von deiner Target-AIA-Map. Hier ist die entscheidende Erkenntnis. Die Reprojection garantiert mathematisch identische Spatial-Grids. Deine neue HMI-Map hat nun exakt dieselben Dimensions und dieselbe Plate Scale wie die AIA-Map. Index fünfhundert mal fünfhundert in der neu ausgerichteten Map entspricht exakt demselben physikalischen solaren Merkmal wie Index fünfhundert mal fünfhundert in der AIA-Map. Du kannst nun das AIA-Image auf einem Set von Axes plotten und die magnetischen Konturen aus deiner ausgerichteten Map direkt darüber zeichnen. Weil die Reprojection deine ursprünglichen Datenwerte durch Interpolation dauerhaft verändert, um einen Coordinate-Match zu erzwingen, solltest du diesen Alignment-Schritt immer ganz zum Schluss durchführen, direkt vor deiner finalen Visualisierung oder Array-Math. Danke, dass du ein paar Minuten mit mir verbracht hast. Bis zum nächsten Mal, mach's gut.
11

1D-Zeitreihendaten mit TimeSeries

3m 59s

Wechseln Sie von räumlichen Bildern zu zeitlichen Lichtkurven. Erkunden Sie das TimeSeries-Objekt, um GOES-Röntgenflussdaten zu laden, abzuschneiden und zu verketten.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solardatenanalyse, Folge 11 von 12. Sonnenbilder sind visuell beeindruckend, doch manchmal ist die wichtigste Information nur ein einziger skalarer Flux-Wert, der tausendmal pro Sekunde gemessen wird. Wenn du die Intensität eines Solar Flares über eine ganze Woche verfolgst, ist eine zweidimensionale räumliche Matrix schlichtweg das falsche Werkzeug. Du brauchst 1D Temporal Data mit TimeSeries. Es ist ein häufiger Fehler, beim Einstieg in SunPy standardmäßig zum Map-Objekt zu greifen. Aber Map ist streng genommen nur für zweidimensionale räumliche Daten gedacht. Wenn du mit eindimensionalen zeitlichen Daten arbeitest – wie einer Röntgenlichtkurve, die sich über mehrere Tage und verschiedene Wellenlängenkanäle erstreckt – benutzt du TimeSeries. Es fungiert als das eindimensionale Äquivalent zu Map, speziell entwickelt, um zeitindizierte Messungen zu verarbeiten, während Beobachtungs-Metadaten und physikalische Einheiten sicher erhalten bleiben. Unter der Haube verlässt sich ein TimeSeries-Objekt auf einen pandas DataFrame, um deine Timestamps und Datenspalten zu strukturieren. Das Problem, wenn du direkt mit raw pandas arbeitest, ist, dass Standard-Dataframes keine wissenschaftlichen Einheiten verstehen. TimeSeries wrappt diese Datenstruktur, um sicherzustellen, dass deine physikalischen Einheiten und Instrumenten-Metadaten während deiner Operationen fest verbunden bleiben. Stell dir vor, du lädst eine Röntgenlichtkurve aus einer GOES-15-Satellitendatei. Du übergibst den Dateipfad an die TimeSeries-Funktion, und sie gibt ein Objekt zurück, das mehrere Beobachtungskanäle als Spalten enthält. Du kannst diese Spalten über ihren Namen inspizieren, wie zum Beispiel die Short-Wavelength- und Long-Wavelength-Kanäle. Hier ist der entscheidende Punkt. Anstatt rohe numerische Arrays direkt aus dem zugrundeliegenden Dataframe zu extrahieren, extrahierst du Spalten mit der quantity-Methode. Du rufst quantity auf und übergibst den spezifischen Spaltennamen, den du haben willst. Diese Methode gibt die Daten als ein Astropy Quantity-Objekt zurück. Das bedeutet, dass die rohen numerischen Flux-Werte strikt an ihre physikalischen Einheiten gebunden sind, wie zum Beispiel Watt pro Quadratmeter. Daten auf diese Weise zu extrahieren, verhindert komplett stille Einheitenumrechnungsfehler downstream in deinen mathematischen Berechnungen. Sobald du deine Daten geladen hast, brauchst du selten die gesamte Beobachtungsdatei. Vielleicht möchtest du nur die genaue Stunde isolieren, in der ein Solar Flare seinen Höhepunkt hatte. Das erreichst du, indem du die TimeSeries kürzt. Zuerst definierst du ein TimeRange-Objekt, indem du einen Start-Time-String und einen End-Time-String übergibst. Dann übergibst du diese TimeRange direkt in die truncate-Methode deiner TimeSeries. Das slicet den zugrundeliegenden Dataframe und gibt ein brandneues TimeSeries-Objekt zurück. Die Daten werden sauber auf dein exaktes Zeitfenster zugeschnitten, und alle dazugehörigen Metadaten überleben den Cut. Oft erfordert deine Analyse Daten, die sich über mehrere separate Beobachtungsdateien erstrecken. Wenn es dein Ziel ist, ein kontinuierliches, einwöchiges Dataset zu bauen, lädst du deine zweite Datei in ihr eigenes TimeSeries-Objekt. Dann rufst du einfach die concatenate-Methode auf der ersten TimeSeries auf und übergibst die zweite als Argument. SunPy richtet die Time-Indizes aus und mergt die Datenzeilen. Solange die Instrumenten-Metadaten beider Dateien kompatibel sind, bekommst du ein einzelnes, vereintes TimeSeries-Objekt zurück, bereit für die kontinuierliche Analyse über den erweiterten Zeitraum. Wenn du Temporal Data verarbeitest, ist die strikte Bindung deiner Timestamps und numerischen Werte an ihre physikalischen Einheiten genau das, was eine zuverlässige wissenschaftliche Analyse von einem stillen Berechnungsfehler trennt. Das war's für diese Folge. Danke fürs Zuhören und keep building!
12

Modellierung der differenziellen Rotation

4m 23s

Berücksichtigen Sie die fluide Natur der Sonnenoberfläche. Lernen Sie, wie Sie RotatedSunFrame verwenden, um die zukünftigen Koordinaten einer aktiven Region vorherzusagen, während sich die Sonne dreht.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. SunPy: Solar Data Analysis, Folge 12 von 12. Die Sonne ist kein massiver Fels. Ihr Äquator rotiert deutlich schneller als ihre Pole, was bedeutet, dass jedes Koordinatennetz, das du darauf abbildest, langsam auseinanderreißt. Wenn du am Dienstag eine aktive Region trackst, zeigen dieselben Breiten- und Längengrade am Donnerstag ins Leere. Um das tatsächliche Plasma zu tracken, brauchst du einen Mechanismus namens Modeling Differential Rotation. Oft behandelt man Himmelskörper wie feste Kugeln. Auf der Erde bleibt eine geografische Koordinate an Ort und Stelle. Auf der Sonne ist die Oberfläche jedoch flüssig. Plasma am Sonnenäquator vollführt eine komplette Rotation in etwa fünfundzwanzig Tagen, während Plasma in Polnähe über vierunddreißig Tage braucht. Da Koordinaten von Natur aus zeitabhängig sind, kannst du eine räumliche Position nicht einfach von einem Tag auf den nächsten übertragen. Du musst die physikalische Verschiebung des Sonnenmaterials im Laufe der Zeit berücksichtigen. SunPy handhabt diese zeitabhängige Verschiebung mit einem Coordinate Frame namens Rotated Sun Frame. Mit diesem Frame kannst du eine Koordinate nehmen, die zu einem Anfangszeitpunkt gemessen wurde, und projizieren, wo genau sich dieses Sonnenmaterial zu einem neuen Zeitpunkt befinden wird. Hier ist die wichtigste Erkenntnis: Der Rotated Sun Frame fungiert als Wrapper um einen bestehenden Coordinate Frame. Du berechnest die neuen Breiten- und Längengrade nicht manuell. Stattdessen definierst du einen Frame, der die Zeitdifferenz explizit codiert, und überlässt der Coordinate Transformation Engine die Mathematik. Angenommen, du hast die Koordinaten einer aktiven Region, die am Dienstag beobachtet wurde. Das ist dein Ausgangspunkt, dargestellt als SkyCoord-Objekt. Es hat eine räumliche Position und eine Observation Time. Um herauszufinden, wo sich diese aktive Region am Donnerstag befinden wird, richtest du einen neuen Rotated Sun Frame ein. Zuerst übergibst du den Base Frame, den du direkt aus deiner Dienstagskoordinate extrahierst. Als Nächstes übergibst du die Target Time. Du kannst den genauen Timestamp von Donnerstag angeben oder eine Dauer übergeben, wie ein Time Delta von zwei Tagen. SunPy hat nun einen Target Coordinate Frame, der das Sonnenrotationsmodell versteht. Schließlich nimmst du deine Dienstagskoordinate und transformierst sie in diesen neuen Rotated Sun Frame. Wenn du diese Transformation ausführst, wendet SunPy ein Standardprofil für die differentielle Rotation an. Es liest den Breitengrad deiner Ausgangskoordinate, berechnet die korrekte Winkelgeschwindigkeit für genau diesen Breitengrad, multipliziert sie mit deiner Dauer von zwei Tagen und verschiebt den Längengrad. Der Output ist ein neues Coordinate Object. Seine Breiten- und Längengrade werden aktualisiert, um zwei Tage differentieller Rotation widerzuspiegeln, und zeigen genau, wohin das Plasma deiner aktiven Region bis Donnerstag gedriftet ist. Wenn die Region in Äquatornähe war, hat sie sich stark verschoben. War sie in Polnähe, hat sie sich viel weniger bewegt. Dieser Ansatz erlaubt es dir, Koordinaten nahtlos in der Zeit vor- oder zurückzubewegen. Weil die differentielle Rotation die physikalische Position der Daten verändert, die du untersuchst, ist die Verknüpfung jeder Koordinate mit einer spezifischen Observation Time und deren Verschiebung durch das Rotationsmodell der einzige Weg, um die Genauigkeit über mehrere Beobachtungen hinweg zu erhalten. Damit schließen wir unsere Serie zur Solar Data Analysis ab. Ich ermutige dich, die offizielle SunPy-Dokumentation zu erkunden, diese Tools hands-on auszuprobieren oder devstories dot eu zu besuchen, um Themen für zukünftige Serien vorzuschlagen. Das war's für diese Folge. Vielen Dank fürs Zuhören und keep building!