Как я прогнозирую полярные сияния с помощью открытых данных, Python и облачного сервера

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Доводилось ли вам наблюдать полярное сияние? В окрестностях Санкт-Петербурга это не такое уж и редкое явление, но многие мои друзья и знакомые его ни разу не видели. Как оказалось, они не знают, когда, куда и при каких обстоятельствах отправиться, чтобы его застать. Это побудило меня впервые написать код на Python, чтобы решить проблему. В этой статье расскажу, как я автоматизировал оценку состояния магнитосферы Земли и запустил Telegram-бота на облачном сервере, чтобы получать информацию о предстоящих полярных сияниях.

Чтобы понять, как прогнозировать этот замечательный феномен, нужно немного разобраться в его природе. Впереди несколько абзацев теории и картинок. Тем, кто интересуется вопросом, рекомендую к прочтению. Если вам интереснее результат, переходите по оглавлению к нужному разделу. Я предупредил.

Хочешь выиграть мерч? Попробуй решить IT-кроссворд! Более 256 вопросов, 7 кроссвордов на разные темы из мира IT — ежедневно с 23 по 29 сентября. Достаточно зарегистрироваться по ссылке.



Используйте оглавление, если не хотите читать текст полностью:

→ Что такое полярное сияние
→ Как зарождается полярное сияние
→ Какие данные нужны для прогноза
→ Где брать данные для прогноза
→ Сбор данных для краткосрочного прогноза
→ Сбор данных для трехдневного прогноза
→ Написание Telegram-бота
→ Деплой бота в облако
→ Немного о тонкостях наблюдений

Что такое полярное сияние


Северное полярное сияние (Aurora Borealis, или просто аврора) — это финал длительного, масштабного и достаточно сложного, но все же предсказуемого процесса. Он начинается с магнитных аномалий на Солнце. А заканчивается тем, что свободные электроны из магнитосферы Земли на колоссальной скорости сталкиваются с атомами и молекулами азота и кислорода в верхних слоях атмосферы. Процесс сопровождается испусканием фотонов, что мы и видим как сияние в небе.

Магнитосфера и магнитное поле Земли — одно и то же. Далее я использую оба термина.


Полярное сияние, снятое на смартфон в окрестностях Первого северного форта в Кронштадте.

Чаще всего заметны зеленый (иногда с оттенками желтого) и фиолетовый цвета. Реже можно увидеть красный, совсем редко — синий. Зеленый и красный цвет дают молекулы кислорода, фиолетовый и синий — азота. Кстати, возникает и ультрафиолетовое свечение, но невооруженным глазом его не видно.


Зависимость цвета сияния от химических элементов атмосферы, которые взаимодействуют с электронами. Источник.

Как зарождается полярное сияние


Все начинается на Солнце. Оно, как и все звезды главной последовательности, имеет конвекцию. То есть более горячее вещество из его недр поднимается к поверхности из-за разницы температур и давлений. Примерно то же самое происходит в чайнике с кипящей водой.

Этот процесс мог бы быть самым скучным во Вселенной, если бы не магнитное поле звезды. Иногда оно локально усиливается с обычных 50 до нескольких тысяч гаусс и подавляет конвективные движения. В результате местами количество разогретого вещества из недр звезды на ее поверхности и в фотосфере уменьшается. Участки, где магнитное поле победило конвекцию, недополучают тепла, охлаждаются и визуально кажутся более темными — их называют солнечными пятнами. Кстати, на самом деле они не темные, да и совсем не холодные — их температура составляет около 4 000 градусов по Цельсию.

В больших областях пятен рядом расположены несколько очень сильных магнитных потоков в форме гигантских петель. В некоторые из них без труда поместилась бы наша Земля. Солнечный магнетизм заставляет циркулировать вдоль этих петель колоссальные объемы относительно холодной и более плотной солнечной плазмы. Такие образования называются протуберанцами. Часто, хоть и не всегда, магнитные потоки спутываются и создают напряжение.

Кульминация этого процесса — коллапс протуберанца, который называется корональным выбросом массы, или солнечной вспышкой. При нем плазма Солнца выбрасывается в космос на скорости до 3 000 км/с. На секундочку, это 1% от скорости света. Сгусток вещества по мере движения от звезды увеличивается в объеме и замедляется. В исключительных случаях он может занимать до четверти пространства между Солнцем и Землей.


Корональный выброс массы на снимке спутника SOHO Европейского космического агентства. Земля добавлена для сравнения. Источник.

Есть и второй сценарий — корональные дыры. Это более холодные и менее плотные участки солнечной короны, через которые потоку солнечных частиц легче убежать от звезды. Такие дыры являются источниками быстрого солнечного ветра. В целом, они производят тот же эффект, что и корональный выброс массы, но куда слабее. Кроме того, корональные дыры чаще образуются у полюсов Солнца, хотя могут заходить и в экваториальные широты.


Корональные дыры на снимке NASA. Источник.

Когда сгусток солнечного вещества добирается до Земли, начинается самое интересное. Столкнувшись с магнитным полем планеты, выброс деформирует его и придает форму кометного хвоста, вытянутого в направлении от звезды.

В магнитосфере Земли есть свободные электроны, а они обладают массой. Следовательно, им передается огромное количество энергии от столкновения с солнечным веществом. А еще у электронов есть отрицательный заряд, поэтому, получив импульс, они разгоняются до скорости около 20 000 км/с вдоль линий магнитного поля по направлению к магнитным полюсам Земли.

Собственно, далее происходит то, что я кратко описал в самом начале. Эти электроны сталкиваются с атомами азота и кислорода в верхних слоях атмосферы планеты, передают им энергию и приводят в возбужденное состояние, заставляя излучать фотоны. Визуально этот процесс мы и наблюдаем как полярное сияние.

Основная часть электронов, которые сталкиваются в атмосфере с молекулами азота и кислорода, прилетает из хвоста магнитосферы, обращенного от Солнца, а не со стороны звезды, откуда прибыл поток частиц.


Магнитное поле Земли под воздействием солнечного ветра. Здесь показано, что основная часть электронов, вызывающих сияния, прибывает в атмосферу из хвоста магнитосферы, обращенного от солнца, в ночное время. Источник.

Какие данные нужны для прогноза


Теперь мы знаем, как устроены полярные сияния. Значит, по поведению Солнца и магнитосферы Земли можем довольно точно предсказать их появление. Посмотрим, какие параметры нам нужны и как их оценивать.

В своей практике наблюдений полярных сияний я опираюсь не на все показатели, которые описываю ниже и которые включу в прогноз. Тем не менее, для полного понимания составления прогнозов я расскажу и о них.

Индекс F10.7 cm


Мы выяснили, что путь полярного сияния начинается с магнитных аномалий на Солнце. А они выражаются в появлении солнечных пятен. Вот с них и начнем. Для отслеживания этого феномена есть два варианта:

  • солнечный телескоп (или обычный с солнечным фильтром) и ежедневные наблюдения за Солнцем;
  • индекс F10.7 cm (он же 10.7 cm Radio Flux).

Думаю, выбор очевиден. Если не вдаваться в детали, F10.7 cm — это поток радиоволн от Солнца на частоте 2 800 МГц. Параметр измеряется в единицах солнечного потока (solar flux units, sfu) и хорошо коррелирует с появлением солнечных пятен. К тому же ученые еще в 1940-х годах научились легко измерять его с поверхности Земли при любой погоде с погрешностью не более 1%.

Индекс крайне редко опускается ниже 64-67 sfu. Этот уровень характерен для так называемого солнечного минимума — периода в 11-летнем цикле активности Солнца, когда звезда наиболее спокойна. Магнитная активность светила, способная вызвать на Земле слабые и умеренные полярные сияния, усиливает радиопоток по меньшей мере до 210-230 sfu.


График показывает среднемесячные значения F10.7 cm с 2000 по 2019 годы (именно среднемесячные, а не среднегодовые; здесь учтены результаты измерений, сделанных в декабре каждого года). Источник.

Но само по себе повышение значения F10.7 cm не стоит рассматривать как однозначный признак скорого сияния. Вот незадача — пятна не приводят к мгновенному корональному выбросу массы. Магнитным потокам у поверхности звезды нужно некоторое время, чтобы накопить напряжение.

При этом Солнце, как и все во Вселенной, еще и вращается. Его экваториальные регионы делают полный оборот за 27 дней, приполярные — чуть медленнее. Разница в скорости вращения объясняется отсутствием у звезды твердой поверхности. Впрочем, аномалии в приполярных регионах Солнца нам не так интересны, поскольку орбита Земли пролегает в плоскости его эклиптики, а вспышка должна быть направлена точно на планету.

Получается, мы можем довольно точно отследить момент образования солнечных пятен. Но затем Солнце повернется и вспышка улетит в пустоту? Да, чаще всего именно так и бывает. Или активность угасает. Но если приборы на Земле фиксируют резкое усиление радиопотока от звезды, это в любом случае хороший знак.

F10.7 cm — надежный индикатор магнитных возмущений на Солнце. Если он превышает 200 sfu, можно говорить о присутствии на поверхности звезды, обращенной к Земле, стабильных магнитных аномалий.




Kp-индекс


Это глобальный планетарный индекс геомагнитной активности. Если не углубляться в детали, то чем сильнее Солнце воздействует на магнитосферу Земли, тем выше Kp.

Kp-индекс измеряется по 10-балльной шкале от 0 до 9 с шагом 0,3(3). В спокойные периоды его величина варьируется от 0 до 4. При таких показателях рассчитывать на сияние не стоит (при Kp 3,67 или 4,00 может возникнуть слабое сияние на северном горизонте, но глазом оно будет неразличимо).

Высокая активность магнитосферы Земли приводит к явлению, которое называют магнитными бурями. Национальное управление океанических и атмосферных исследований США (NOAA) оценивает их силу по шестибалльной шкале от 0 до 5 с индексом G. Для удобства показал в таблице, как соотносятся Kp, G, вероятность наблюдения авроры и последствия для электросетей и связи на Земле.


Широты, приведенные в таблице, — это усредненные значения для западного и восточного полушарий Земли. Дело в том, что полярные сияния, если взглянуть на них из космоса, образуют овалы вокруг полюсов. Только не географических, а магнитных. Эти полюса не совпадают, и фактически при одинаковых условиях в западном полушарии аврору видно южнее, чем в восточном.

Удобство Kp-индекса в том, что его можно прогнозировать. На трехдневные показатели можно смотреть с уверенным оптимизмом, примерно прикидывая, когда отправиться за город для наблюдений. Это нам еще пригодится далее. Реальный Kp-индекс — это то, что уже зафиксировано на Земле. Эти данные обновляются каждые три часа.

Повышение Kp-индекса до 5 и выше (магнитные бури G1 и сильнее) дает основания надеяться на наблюдение сияния. Но на широте Петербурга при таких условиях оно может оказаться слабым и едва различимым. При Kp = 9 (G5 — это уже геомагнитный шторм) вы почти наверняка лишитесь интернета, мобильной и спутниковой связи, электричества и всех электроприборов, но полярное сияние будет видно даже в субтропиках.

Хотя Kp-индекс и сила магнитной бури связаны, это не одно и то же. В норме активность Солнца провоцирует возмущения магнитосферы Земли, которые и выражаются Kp-индексом. А эти возмущения, в свою очередь, приводят к магнитным бурям (G). Но иногда что-то в этой логике ломается. Например, 17 сентября 2024 года около 20:00 по московскому времени в NOAA фиксировали повышение Kp-индекса до 5.67, но магнитной бури на планете так и не возникло.

По оценке специалистов NOAA, выбросы солнечной массы, которые способны спровоцировать геомагнитный шторм G5, происходят в среднем четыре раза за 11-летний солнечный цикл. Но обычно — к счастью — они направлены куда угодно, только не на Землю. Вспышки, которых достаточно для появления бурь уровня G1, происходят в среднем 1 700 раз за 11 лет.

Самая мощная магнитная буря в истории наблюдений произошла в 1859 году и получила название «событие Кэррингтона». По словам очевидцев, вызванное ею полярное сияние было настолько ярким, что под ночным небом можно было читать. Тогда самым страшным ее последствием стали неполадки в работе немногочисленного оборудования, например телеграфа. Если бы такая же буря произошла сегодня, человечество столкнулось бы с технологической катастрофой.

Компонент Bt


Дальше к термину «магнитное поле Земли» я добавляю термин «межпланетное магнитное поле». Первое — характеристика нашей планеты. Второе — по сути, часть магнитного поля Солнца, переносимая потоками звездного вещества.

Bt — это общая напряженность межпланетного магнитного поля. В норме рядом с Землей этот параметр составляет около 6 nT (нанотесла). Если он резко растет, скажем до 20 и более nT, значит, магнитосфера планеты испытывает мощное воздействие извне. Его может оказать только массивный поток частиц от Солнца.

Сам по себе Bt лишь указывает на напряженность межпланетного магнитного поля. Но показатель не дает нам никаких важных подробностей. Зато это делает его составляющая — Bz.

Компонент Bz


У межпланетного магнитного поля есть три векторных компонента: Bx, By и Bz. Первые два расположены параллельно плоскости эклиптики и нам не интересны — они никак не влияют на активность полярных сияний. А третий — Bz — перпендикулярен.


Три оси компонентов межпланетного магнитного поля. Источник.

Значение компонента показывает, куда ориентировано межпланетное магнитное поле. Если оно положительное, поле направлено на север, если отрицательное — на юг. Мы знаем, что магнитное поле Земли ориентировано на север, поэтому значение Bz должно быть отрицательным. Когда два поля — земное и межпланетное — направлены к разным полюсам, они не отталкиваются и легко взаимодействуют.

На изменение Bz влияет солнечный ветер: его скорость, плотность, волны и другие характеристики. В нормальных условиях, когда в магнитосфере Земли ничего интересного не происходит, компонент достаточно стабилен и слегка варьируется около 0 nT. Когда до Земли добирается корональный выброс массы, он привносит в магнитное поле хаос, и значение компонента начинает меняться.

Хорошо, если Bz опускается хотя бы до -10 nT. В идеале — ниже -20. Проблема здесь только в том, что этот параметр крайне чувствителен к возмущениям и непредсказуем. Впрочем, достаточно мощный корональный выброс массы обычно делает межпланетное магнитное поле нестабильным, ориентируя его то на юг, то на север. Следовательно, сияние в течение ночи может то разгораться, то угасать.

В идеальных условиях очень низкий Bz должен совпадать по времени с магнитной бурей — это гарантия возникновения полярного сияния. Будучи направленным на север (Bz > 0), межпланетное магнитное поле не даст возникнуть авроре даже при максимально сильном геомагнитном шторме (G5). Зато при слабых бурях (G1) и ориентации межпланетного поля на юг появляется шанс увидеть хотя бы слабую аврору.

Скорость солнечного ветра


Напрямую скорость солнечного ветра не влияет на вероятность возникновения полярного сияния. Однако выброс солнечной массы, способный его вызвать, в любом случае будет двигаться быстро — не менее 450-500 км/с. Я учитываю этот показатель, чтобы рассчитать, когда добравшийся до спутника выброс окажется на Земле (о самом спутнике — чуть ниже).

Погода на Земле


Думаю, тут все просто. Вот что нам понадобится для наблюдений.

  • Темнота. Свечение хорошо видно на темном небе, но не видно на светлом. Имейте в виду, что полная Луна и городская засветка мешают наблюдениям.
  • Ясное небо. Сияния возникают на высотах от 80 до 500 км, что выше любых облаков. Высота объясняется тем, что именно верхние слои атмосферы ионизируются солнечным излучением. В результате этого там появляются необходимые для сияния свободные электроны.

Следить за облачностью не всегда нужно именно там, где вы находитесь. Например, я живу в Санкт-Петербурге. Это почти 60-й градус северной широты. А сияния при слабых магнитных бурях (G ≤ 1, Kp ≤ 5) происходят на широтах к северу от 60 градуса. То есть смотреть нужно в направлении северного горизонта, а не вверх. Даже если прямо над головой облака, но к северу ясно, шанс увидеть сияние сохраняется.


Полярное сияние во время магнитной бури, которое удалось заснять даже при засветке неба.

Для отслеживания погоды я пользуюсь сайтом Windy. Помимо прочего, он дает очень точный прогноз облачности и тумана, а также предлагает информативную визуализацию. Это крайне полезно при выборе места для наблюдений.

Где брать данные для прогноза


Большинство показателей собираются на Земле. Например, данные о радиопотоке от Солнца фиксирует обсерватория Национального исследовательского совета Канады. А Kp-индекс — это среднее значение К-индексов, зафиксированных в 13 геомагнитных обсерваториях, расположенных между 44 и 60 градусами северной и южной геомагнитных широт.

Тем не менее, что бы ни фиксировалось на Земле, нам нужны данные и из космоса. Допустим, на Солнце только что произошла вспышка, направленная точно на Землю. Через три-четыре дня (в зависимости от скорости потока) солнечные частицы достигнут первой орбитальной точки Лагранжа (L1) примерно в 1,5 млн км от Земли. Это такая точка между нашей планетой и Солнцем, в которой силы гравитации двух космических тел уравновешивают друг друга. Если туда поместить какой-нибудь объект, он будет оставаться почти неподвижным относительно Земли и двигаться вместе с ней вокруг звезды.

Собственно, лучшее, что туда можно поместить, — исследовательский спутник. Нам повезло: в точке Лагранжа находится аппарат DSCOVR от NASA и NOAA. Он передает на Землю важные данные о погоде в космосе.


Анимация движения Земли и спутника DSCOVR. Источник.

Кстати, есть пять точек Лагранжа в системе Земля-Солнце.


Точки Лагранжа. В точке L1 находится DSCOVR и другие спутники. В точке L2 — телескоп Джеймс Уэбб. Источник.

NOAA собирает у себя данные с DSCOVR и исследовательского оборудования на Земле. То, что интересно нам, собрано на сайте управления в разделе Aurora Dashboard.

Более того, у NOAA есть свое мобильное приложение Aurora Forecast с красивой визуализацией. Там можно посмотреть как готовый прогноз, так и отдельные параметры, хотя почему-то не все. Так зачем вообще это все, если есть удобное приложение? Считаю вопрос риторическим. Это маленький веселый pet-проект.

Сбор данных для краткосрочного прогноза


Как я сказал в самом начале, это мой первый опыт работы с Python. Используя обрывки знаний с Хабра, Stack Overflow, YouTube и других источников, я написал код, который делает ровно то, что мне нужно. Но настоящий Python-разработчик сказал, что в таком виде показывать код никому нельзя. Проблема тут в том, что объяснить происходящее далее я могу только на том, что написал сам. А облагороженную версию от коллеги оставлю под спойлером.

Полный код
import re
import json
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
class AuroraParser:
    service = Service(ChromeDriverManager().install())
    URL = "https://www.swpc.noaa.gov/communities/aurora-dashboard-experimental"
    def __init__(self, wind_speed, const_distance):
        self.driver = webdriver.Chrome(service=AuroraParser.service)
        self.wind_speed = wind_speed
        self.const_distance = const_distance
    def get_source_code(self) -> None:
        self.driver.get(AuroraParser.URL)
        while True:
            try:
                e = self.driver.find_element(By.ID, "WindSpeed")
                self.wind_speed = float(e.text)
                e2 = self.driver.find_element(By.ID, "Flux")
                e3 = self.driver.find_element(By.ID, "Bt")
                e4 = self.driver.find_element(By.ID, "Bz")
                e5 = self.driver.find_element(By.XPATH, "/html/body/div[4]/section/div/div/div/div/section[1]/div/div/div[1]/div[4]/div[1]/div/div[2]/div[4]/div[1]")
                p = requests.get("https://services.swpc.noaa.gov/products/noaa-planetary-k-index.json")
                Kp = json.loads(p.text)
                with open("Kp.txt", "w") as l:
                    l.write(str(Kp))
                with open("Kp.txt", "r") as l:
                    text = l.read()
                    pattern = r"\d+\.\d+"
                    numbers = re.findall(pattern, text)
                    if numbers:
                        last_number = numbers[-1]
                        with open("parameters.txt", "w") as a:
                            a.write("Solar Wind Speed: " + str(self.wind_speed) + " km/s" + "\n")
                            a.write("Flux: " + e2.text + " sfu" + "\n")
                            a.write("Bt: " + e3.text + " nT" + "\n")
                            a.write("Bz: " + e4.text + " nT" + "\n")
                            a.write("Storm: " + e5.text + " " "\n")
                            a.write(f"Kp: {last_number}" + "\n")
                            a.write("\n" + "Time to Earth: " + str(round(self.const_distance / self.wind_speed, 1)) + " minutes" + "\n")
                break
            except TimeoutException as _ex:
                print(_ex)
                break
        with open("parameters.txt", "r") as b:
            for line in b:
                location_vars = {"Storm: G ":65, "G1":60, "G2":55, "G3":50, "G4":45, "G5":40}
                with open("parameters.txt", "a", encoding="utf-8") as b:
                        for loc_var in location_vars.keys():
                            if loc_var in line:
                               b.write(f"Location: north to {location_vars[loc_var]}" + "° when Bz<0" + "\n")
        with open("parameters.txt", "r", encoding="utf-8") as c:
            content = c.read()
            with open("parameters.txt", "a", encoding="utf-8") as c:
                if re.search(r"-\d{1}", content):
                    c.write("Low chance to see aurora 						
Источник: https://habr.com/ru/companies/selectel/articles/846436/


Интересные статьи

Интересные статьи

Наша команда специализируется на разработке и развитии функционала корпоративного портала группы компаний НЛМК.На практике мы сталкиваемся с самыми разными задачами: от вывода ленты новостей компании ...
Меня зовут Маргарита Даминова, вместе с Еленой Бронниковой мы решили обобщить опыт команды продуктовой аналитики Юлы и поделиться им в статье, где расскажем о нашем подходе в области поисковых экспери...
ВведениеВ данной статье я бы хотел рассмотреть проблему обновления PHP в виртуальной машине BitrixVM, и действия, которые возможно применить если выполнение переезда на машину с обновленным ПО невозмо...
Вам приходилось сталкиваться с ситуацией, когда сайт или портал Битрикс24 недоступен, потому что на диске неожиданно закончилось место? Да, последний бэкап съел все место на диске в самый неподходящий...
Чтобы разместить на самолёте более новые и крупные двигатели, в Боинг решили подвинуть их вперёд. Это изменение изменило и аэродинамику самолёта. Для компенсации этого в Боинг добавили один д...