Как использовать python, чтобы упростить работу с праздничными днями, в частности, используя пакет holidays
для автоматизации.
Приступая к новой работе в новом 2020 году, одной из первых вещей, которые я помню, была проблема с праздничными днями. Было несколько запросов о данных за первую неделю января. Это произошло из-за того, что 1 января (среда) считалось рабочим днем, а это означало, что различные расчеты и средние значения были искажены. Это напомнило моему коллеге, что таблицу в базе данных SQL необходимо обновить для всех территорий (›20).
Я был свидетелем того, как мой коллега потратил много времени на поиск всех этих выходных дней вручную и составление SQL-запроса. Я помню, как подумал про себя: «В следующем году это буду я». Ну, к счастью, я был неправ.
Несколько недель назад напоминание, которое я поставил себе, чтобы обновить таблицу государственных праздников, сработало. Я провел небольшое исследование и наткнулся на пакет Python holidays.
.
Как можно облегчить себе жизнь:
Используйте пакет python Holidays (ссылка), чтобы автоматически сгенерировать праздничные дни для нужных вам стран/регионов!
Вы можете использовать страну в качестве метода, например:
holidays.England(years=2021)
Или, если вы собираетесь написать функцию для передачи нескольких местоположений, как у меня выше, используйте метод CountryHoliday
.
holidays.CountryHoliday("UnitedStates", years=2021)
Также обратите внимание, что либо используя страну в качестве метода, либо метод CountryHoliday
, вы можете указать провинцию или регион для стран, которые не стандартизированы!
holidays.CountryHoliday("UnitedStates", years=2021, prov="NJ")
Как я облегчил себе жизнь:
Я написал функцию, которая берет словарь местоположений и год, а затем возвращает мне кадр данных о государственных праздниках.
Мой словарь местоположений имеет следующий формат, где идентификатор местоположения относится к компании, в которой я работаю, используемое местоположение — это местоположение holidays
, а провинция также является аббревиатурой holidays
для этого.
locations = {location_id: ["location": "province"]
Это вернуло фрейм данных из более чем 250 строк, что означает, что я избавил себя от необходимости вручную вводить их каждый год. Я также сохранил себе немного здравого смысла, пока учился!
Затем я использовал sqlalchemy
для загрузки моего окончательного фрейма данных с помощью pandas
функции pd.to_sql()
прямо в нужную таблицу, которую мне нужно было обновить.
Ограничения:
Пакет holidays
не включает все страны, однако он имеет открытый исходный код. Если вам чего-то не хватает, вы можете добавить себя в их репозиторий (ссылка).
Проблема, которую я еще не смог преодолеть, — это выходные дни в Таиланде. Они основаны на лунном календаре, и поэтому их сложнее автоматически генерировать по годам — ниже я привожу еще одну идею, которая может обойти это.
Будущие идеи:
- включить веб-скрейпинг для автоматического создания государственных праздников для Таиланда
- используйте интеграцию python с SQL для запуска сценария каждый декабрь (см. мою статью ниже, чтобы узнать, как запускать код python в SQL Server)