README.md

Geo-Python 2024: Итоговое задание

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

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

Задача

Ваша задача – рассчитать средние температуры за зиму, весну, лето и осень за заданный год, а также вывести график годовой температуры.

Seasonal anomaly plot

Данные

Вам дан файл данных с дневными температурами из Соданкюла с января 1908 года по октябрь 2020 года. Данные были загружены с ресурса NOAA Global Historical Climate Network database в формате текстовых данных. Первые пять строк приведены ниже, чтобы дать вам представление о структуре данных.

STATION           STATION_NAME                                       DATE     TAVG     TMAX     TMIN     
----------------- -------------------------------------------------- -------- -------- -------- -------- 
GHCND:FI000007501                                   SODANKYLA-AWS-FI 19080101 -9999    2        -37      
GHCND:FI000007501                                   SODANKYLA-AWS-FI 19080102 -9999    6        -26      
GHCND:FI000007501                                   SODANKYLA-AWS-FI 19080103 -9999    7        -27  

Как вы могли уже понять, температуры приведены в градусах по Фаренгейту. Вашему вниманию представлены следующие колонки:

  • DATE: Дата в формате ‘YEARMODA’, где ‘YEAR’ – это 4 цифры года, ‘MO’ – две цифры месяца и ‘DA’ – это день.
  • TAVG: Средняя дневная температура в градусах по Фаренгейту
  • TMAX: Макс. дневная температура в градусах по Фаренгейту
  • TMIN: Мин. дневная температура в градусах по Фаренгейту

Отсутствующие данные помечены как -9999. Более детальная информация доступна на сайте NOAA.

Важные замечания по поводу данных!

Вы заметите, что в колонке TAVG много отсутствующих значений. Для тех дней, когда TAVG не определена, вы можете рассчитать среднюю дневную температуру, осреднив значения TMAX и TMIN и записав полученное значение в новую колонку. Важно не перезаписывать существующие значения TAVG вашими осреднёнными данными!

Что необходимо сделать

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

В этом упражнении вы должны:

  1. Прочесть данный файл с помощью pandas и преобразовать отсутствующие значения в NA.
  2. Заменить значения NA в колонке TAVG рассчитанными вами осреднёнными значениями дневной температуры, как указано выше, в подразделе “Данные”. Допускается удалить значения, которые будут отсутствовать даже после этой операции.
  3. Задать и использовать функцию преобразования температур TAVG, TMAX и TMIN из Фаренгейта в Цельсии, сохранив конвертированные значения в новые колонки. Важно не перезаписывать существующие значения! Конвертацию произвести по следующей формуле:

$$ \Large \begin T_{\mathrm} = (T_{\mathrm} - 32)~/~1.8 \end $$

  1. Выберите данные по четырём сезонам за определённый год, заданный вам преподавателем индивидуально и запишите их в переменные temps_winter, temps_spring, temps_summer и temps_autumn.

    • Сезоны должны включать следующие месяцы:

      • Зима: декабрь, январь, февраль
      • Весна: март, апрель, май
      • Лето: июнь, июль, август
      • Осень: сентябрь, октябрь, ноябрь
  2. Рассчитайте среднюю температуру за каждый сезон и выведите значение на экран, округлив до целого числа.

  3. Постройте график(и) температур за каждый сезон.

Отметим, что мы надеемся увидеть использование вами ячеек Markdown с объяснением результатов и комментариями к коду.

Подсказки

  1. Для чтения файла данных, используйте следующие параметры метода read_csv:

    • sep='\s+' для указания разделителя данных
    • na_values= со значением, равным маске отсутствующих данных (см. раздел “Данные” выше)
    • parse_dates=["DATE"] для преобразования даты из строки в объект datetime
    • date_format='%Y%m%d' задаёт формат строковой даты для корректного преобразования (см. документацию)
    • index_col="DATE"для индексирования по дате и последующей удобной выборке данных
    • skiprows=[1] для исключения строки с разделителями “—–”
  2. Для замены отсутствующих значений в колонке TAVG вы можете использовать метод fillna, где в качестве аргумента укажите формулу расчёта средней температуры на основе колонок TMAX и TMIN. Присвойте результат выполнения этого метода новой колонке.

  3. Напишите функцию fahr_to_celsius для конвертации температуры. Затем используйте метод apply для каждой из трёх колонок с температурой, передав в качестве аргумента вашу функцию. Присвойте результат выполнения этого метода трём новым колонкам.

  4. Для выбора рядов данных по сезонам вы можете использовать метод loc и указать в качестве аргумента предикат из диапазона дат (календарные начало и конец сезона). Так как при чтении данных мы создали индекс на основе даты, будет удобно производить выборку по нему. Вот пример такой выборки с 15 апреля по 15 мая 1986 года:

    subset = data.loc[(data.index >=  "19860415") & (data.index < "19860515")] 
    
  5. Метод mean позволяет посчитать среднее значение отдельной выборки данных.

  6. Округление результата при выводе на экран можно сделать двумя способами:

    • с помощью метода round в pandas, применённого к результату предыдущего вычисления
    • средствами форматирования f-строки, например:

      print(f"Средняя зимняя температура в 1986 году: {mean_winter:2.0f}")
      
  7. Визуализация данных на графике делается с помощью вызова метода plot для каждого из наборов данных. Если вызвать этот метод для нескольких наборов в одной ячейке, данные отобразятся на одном графике (как на примере в начале этого задания). Для добавления подписи к осям используйте агрументы ylabel и xlabel с соответствующим текстом в качестве значения.

  8. Не забудьте добавить комментарии к коду и сохранить вашу работу в репозитории!

Конвейеры
0 успешных
0 с ошибкой