Geo-Python 2024: Итоговое задание
Финальное задание нашего курса включает в себя расчёт и визуализацию сезонных температур из набора данных, охватывающего более чем столетний интервал измерений температуры. Мы будем использовать погодные данные с метеостанции Сондакюла, расположенной в северной части Финляндии.
Также как и с обычными заданиями, вам будет необходимо сохранять результаты своей работы в репозитории на Github/Gitflic.
Задача
Ваша задача – рассчитать средние температуры за зиму, весну, лето и осень за заданный год, а также вывести график годовой температуры.
Данные
Вам дан файл данных с дневными температурами из Соданкюла с января 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, а вам – продемонстрировать приобретённые навыки в ситуации, максимально приближенной к реальной.
В этом упражнении вы должны:
- Прочесть данный файл с помощью pandas и преобразовать отсутствующие значения в NA.
- Заменить значения NA в колонке
TAVG
рассчитанными вами осреднёнными значениями дневной температуры, как указано выше, в подразделе “Данные”. Допускается удалить значения, которые будут отсутствовать даже после этой операции. - Задать и использовать функцию преобразования температур
TAVG
,TMAX
иTMIN
из Фаренгейта в Цельсии, сохранив конвертированные значения в новые колонки. Важно не перезаписывать существующие значения! Конвертацию произвести по следующей формуле:
$$ \Large \begin T_{\mathrm} = (T_{\mathrm} - 32)~/~1.8 \end $$
-
Выберите данные по четырём сезонам за определённый год, заданный вам преподавателем индивидуально и запишите их в переменные
temps_winter
,temps_spring
,temps_summer
иtemps_autumn
.-
Сезоны должны включать следующие месяцы:
- Зима: декабрь, январь, февраль
- Весна: март, апрель, май
- Лето: июнь, июль, август
- Осень: сентябрь, октябрь, ноябрь
-
-
Рассчитайте среднюю температуру за каждый сезон и выведите значение на экран, округлив до целого числа.
- Постройте график(и) температур за каждый сезон.
Отметим, что мы надеемся увидеть использование вами ячеек Markdown с объяснением результатов и комментариями к коду.
Подсказки
-
Для чтения файла данных, используйте следующие параметры метода
read_csv
:sep='\s+'
для указания разделителя данныхna_values=
со значением, равным маске отсутствующих данных (см. раздел “Данные” выше)parse_dates=["DATE"]
для преобразования даты из строки в объект datetimedate_format='%Y%m%d'
задаёт формат строковой даты для корректного преобразования (см. документацию)index_col="DATE"
для индексирования по дате и последующей удобной выборке данныхskiprows=[1]
для исключения строки с разделителями “—–”
-
Для замены отсутствующих значений в колонке
TAVG
вы можете использовать методfillna
, где в качестве аргумента укажите формулу расчёта средней температуры на основе колонокTMAX
иTMIN
. Присвойте результат выполнения этого метода новой колонке. -
Напишите функцию
fahr_to_celsius
для конвертации температуры. Затем используйте методapply
для каждой из трёх колонок с температурой, передав в качестве аргумента вашу функцию. Присвойте результат выполнения этого метода трём новым колонкам. -
Для выбора рядов данных по сезонам вы можете использовать метод
loc
и указать в качестве аргумента предикат из диапазона дат (календарные начало и конец сезона). Так как при чтении данных мы создали индекс на основе даты, будет удобно производить выборку по нему. Вот пример такой выборки с 15 апреля по 15 мая 1986 года:subset = data.loc[(data.index >= "19860415") & (data.index < "19860515")]
-
Метод
mean
позволяет посчитать среднее значение отдельной выборки данных. -
Округление результата при выводе на экран можно сделать двумя способами:
- с помощью метода
round
в pandas, применённого к результату предыдущего вычисления -
средствами форматирования f-строки, например:
print(f"Средняя зимняя температура в 1986 году: {mean_winter:2.0f}")
- с помощью метода
-
Визуализация данных на графике делается с помощью вызова метода
plot
для каждого из наборов данных. Если вызвать этот метод для нескольких наборов в одной ячейке, данные отобразятся на одном графике (как на примере в начале этого задания). Для добавления подписи к осям используйте агрументыylabel
иxlabel
с соответствующим текстом в качестве значения. -
Не забудьте добавить комментарии к коду и сохранить вашу работу в репозитории!