Исследование прошлых прогнозов

Измерение – это краеугольный камень всех наук. Без него, как мы могли бы проверить наши гипотезы?

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

В прошлом году в моей ленте LinkedIn появился устаревший мем, насмехающийся над Элом Гором, помеченный хэштегом #катастрофизация. Темой стали его комментарии в 2007 и 2009 годах о том, что Арктическое море будет лишено летнего льда в течение семи лет. Несколько фактчекинговых сайтов подтвердили это утверждение как в основном верное и сослались на следующую цитату:

«Некоторые из моделей подсказывают доктору (Виславу) Масловскому, что существует 75-процентная вероятность того, что вся северная полярная ледяная шапка в течение некоторых летних месяцев может полностью освободиться ото льда в течение следующих пяти-семи лет».

- Эл Гор, декабрь 2009 г.

В то время как многие люди принимают мемы за чистую монету, специалисты по данным обладают способностью вникать в данные и делать собственные выводы. В этом проекте Quick Success Data Science мы будем использовать библиотеки Python pandas и Matplotlib, чтобы тщательно изучить поведение арктического морского льда за последние четыре десятилетия и протестировать комментарии и мемы.

Комментарий об изменении климата

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

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

В данном случае Эл Гор был достаточно мудр, чтобы оградить свои комментарии вероятностями и такими словами, как «предполагать» и «мог бы». К сожалению, эти преграды легко теряются при создании мемов.

Национальный центр данных по снегу и льду

Чтобы подтвердить или опровергнуть прогноз Гора, нам нужно знать минимальную протяженность морского льда за рассматриваемый период. К счастью, у нас есть доступ к всеобъемлющему общедоступному набору данных, собранному Национальным центром данных по снегу и льду, входящим в состав Совместного института исследований в области наук об окружающей среде (CIRES) в Университете Колорадо, Боулдер [1]. В этом наборе данных используются спутниковые снимки для отслеживания и наблюдения за изменениями арктического морского льда.

Данные предоставляются как с ежемесячным, так и с дневным шагом. Как правило, ежемесячные итоги рекомендуются для наблюдения за тенденциями морского льда. Однако, чтобы обеспечить получение минимальногоизмеренного экстента за каждый месяц, мы будем использовать ежедневныеданные и выберем день с наименьшим значением для представления целого месяца.

Хотя набор данных с ежедневными приращениями доступен в формате CSV по предоставленной ссылке, я уже подготовил файл и сохранил его в этом Gist для простоты использования.

Чтобы решить поставленный вопрос, мы будем использовать pandas для подготовки данных и Matplotlib для построения их в виде линейной диаграммы. Мы нанесем на график все данные, но в основном сосредоточимся на минимальных значениях, которые происходят каждое лето.

Код

Следующий код был введен в JupyterLab и описан по ячейке.

Импорт библиотек

Для этого проекта нам нужны только надежные библиотеки Matplotlib и pandas. Вы можете установить их с помощью conda, используя:

conda install matplotlib pandas

и с помощью pip:

pip install matplotlib

pip install pandas

mdates module Matplotlib поможет нам аннотировать наш график временным промежутком, в течение которого Гор постулировал свободное ото льда Арктическое море. Вот импорт:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

Загрузка и подготовка данных

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

# Read the data:
URL = 'https://bit.ly/3NLoDzx'
df = pd.read_csv(URL, skiprows=[1])

# Remove leading whitespace from the column names:
df.columns = df.columns.str.strip()

# Drop unnecessary columns:
df = df.drop(df.columns[[4, 5]], axis=1)

# Group by monthly MINIMUM ice extent:
df = df.groupby(['Year', 'Month']).agg({'Extent': ['min']}).reset_index()

# Create a 'date' column from the 'Year' and 'Month' columns:
cols = ['Year', 'Month']
df['date'] = df[cols].apply(lambda x: '-'.join(x.values.astype(str)), 
                            axis="columns")
df['date'] = pd.to_datetime(df['date'])

# Set the 'date' column as the DataFrame index:
df = df.set_index(df['date'])

# Drop unnecessary year, month, and date columns:
df = df.drop(df.columns[[0, 1, 3]], axis=1)

# Calculate the yearly moving average:
df['yearly_ma'] = df.Extent.rolling(12).mean()

# Check the results:
df.tail(3)

График данных

В следующем коде с комментариями ежемесячные минимальные данные об экстенте и годовое скользящее среднее отображаются в виде линейной диаграммы. Семилетний период после выступления Эла Гора в 2009 году выделен красным цветом и помечен как «Следующие 7 лет Гора».

# Create the plot:
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title('Arctic Sea Ice Monthly MINIMUM Extent', size=15)
ax.plot(df['Extent'], lw=2)
ax.plot(df['yearly_ma'], color='k')
ax.set_ylim([0, 20])
ax.tick_params(axis='both', 
               which='major', 
               labelsize=12)
ax.grid()

# Add a legend:
ax.legend(['Ice Extent (10^6 sq km)', 'Yearly Moving Ave'],
           frameon=True,
           loc=3,
           prop={'size': 14},
           facecolor='#a1c9f4',
           edgecolor='k',
           fancybox=True,
           shadow=True,
           framealpha=1)

# Add a shaded span for Gore's prediction:
ax.axvspan(*mdates.datestr2num(['2009-12-14', '2016-1-1']), 
           color='red', 
           alpha=0.3)

# Annotate the 7-year span referenced by Gore in 2009:
ax.text(0.655, 0.8, 
        "Gore's Next 7 Years", 
        transform=ax.transAxes, 
        fontsize=14)

# Set the x and y labels:
font1 = {'family': 'arial', 
         'color': 'black', 
         'size': 15}
ax.set_xlabel('Year', fontdict=font1)
ax.set_ylabel('Arctic Sea Ice Extent (10^6 sq km)', 
              fontdict=font1)

plt.show()

Пилообразная синяя линия на графике показывает минимальную протяженность арктического морского льда для каждого месяца. Пик каждого колебания представляет минимальную протяженность зимнего времени (обычно самая высокая в марте). Впадина каждого колебания представляет минимальную протяженность летнего времени (обычно минимальную в сентябре). Черная линия — это скользящее среднее за год, которое отфильтровывает сезонный «шум» и показывает общую тенденцию площади морского льда за 44-летний период.

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

Исход

В течение семи лет после 2009 г. Арктическое море не освободилось ото льда, хотя 16 сентября 2012 г. оно достигло нового минимума в 3,34 миллиона квадратных километров. Это значительно меньше, чем в сентябре 1981 г. минимум 6,9 млн квадратных километров и даже минимум 2009 года в 5,0 млн квадратных километров. Фактически, с 2009 по 2012 год наблюдалась устойчивая нисходящая траектория.

После 2012 года значения, казалось, несколько стабилизировались, и к лету 2021 года кривая скользящего среднего фактически начала расти.

Хотя Эл Гор не «понял это правильно», его заявление действительно оставляло место для фактического результата. Модели, на которые он ссылался, включали 25-процентную вероятность того, что немного льда останется в Арктическом море в течение лета.

Одна вещь, которую мы должны извлечь из этого, заключается в том, что климат Земли — сложный зверь. Конкретные и краткосрочные прогнозы относительно его поведения должны быть тщательно продуманы. Хотя создание ощущения срочности может быть важным, это может легко привести к неприятным последствиям, что приведет к насмешкам и снижению доверия.

Цитаты

[1] Феттерер, Ф., К. Ноулз, В. Н. Мейер, М. Савойя и А. К. Винднагель. Индекс морского льда, версия 3. 2017 г. Распространяется Национальным центром данных по снегу и льду. https://doi.org/10.7265/N5K072F8. Дата обращения 18–06–2022.

Конкретными веб-сайтами исходных данных для этого проекта были http://nsidc.org/data/nsidc-0081.html и http://nsidc.org/data/nsidc-0051.html (диапазон данных: октябрь 1978 г. - июнь 2022 г.).

Дополнительные сведения о данных перечислены на листе ниже:

В соответствии с политикой цитирования NSIDC, фотографии, изображения или текст с веб-сайта NSIDC могут быть загружены и использованы, если конкретно не указаны ограничения на их использование. Спутниковые снимки могут быть загружены и использованы бесплатно при условии указания авторства. Если не указано иное, фотографии и изображения могут использоваться в коммерческих целях; однако их нельзя перепродать.

Многие изображения на сайте содержат подпись и конкретную кредитную информацию. В противном случае общий формат кредита должен быть следующим: «Изображение/фотография предоставлены Национальным центром данных по снегу и льду, Университет Колорадо, Боулдер».

Спасибо!

Благодарим за чтение и, пожалуйста, подпишитесь на меня для новых проектов Quick Success Data Science в будущем.