Как использовать 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)

https://lilycolmangoff.medium.com/python-sql-how-to-enable-the-execution-of-python-scripts-within-sql-server-e146c73a455b