Программирование

Автоматизируйте разметку календаря с помощью python

Как создать собственный календарь с помощью модуля python Июль

Введение

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

Зачем настраивать?

В моем случае я нахожусь в стране, где государственный праздник (PH) зависит от штата. Хорошо, если я смогу получить физический календарь с пометкой PH. На рабочем месте у нас также есть «дополнительный» календарь важных событий, например, связанных с проектом, корпоративным событием или даже списком дней рождения нашего коллеги. Используя модуль Python, июль, мы можем автоматизировать маркировку, готовый к печати пользовательский календарь, чтобы отметить любые важные даты, перечисленные в конкретном году.

Необходимо

Первое, что вам нужно, если вы хотите создать свой собственный календарь, — это список важных дат. Я использую список государственных праздников в моей стране (штате) для демонстрации с помощью Jupyter Notebook. Вы можете найти подробности кода на моем github, а также образец списка государственных праздников в формате CSV.

Шаг 1: установить пакет → импортировать → прочитать данные

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

#!pip install july
import pandas as pd
import july
from july.utils import date_range

Как только вам удастся установить, приступайте к импорту пакета. Нам также нужно panda для обработки наших данных. Убедитесь, что вы также вызываете его, прежде чем продолжить. Используя модуль pandas, не забудьте проанализировать дату в столбце Date.

# Read csv file contain list of public holiday
df = pd.read_csv('2022_my_ph.csv',parse_dates=['Date'])
df.head(3)

Шаг 2: обработайте данные

Идея на этом этапе состоит в том, чтобы создать список дат в течение года, т.е. 2022 г. и обратите внимание на важную дату df. Как и в типичном календаре, в выходные дни (суббота и воскресенье) также делается другая отметка. Следовательно, у нас будет две разные отметки: праздничный день и выходной день.

df1должен охватывать список дат, начиная с 1 января по 31 декабря, с ежедневной частотой, как в «d», а другой список df1bдолжен охватывать единственный рабочий день, как в «B».

Вы можете найти дополнительную информацию псевдонимы смещения, если вы хотите создать другой фрейм данных, используя другую временную частоту.

# Create list date range in year 2022
df1 = pd.date_range("2022-01-01","2022-12-31",freq='d')

# Create list date range in year 2022 ONLY for business day
df1b = pd.date_range("2022-01-01","2022-12-31",freq='B')

Следующая строка, df2созданный фрейм данных, содержит набор нулей за 365 дней, и мы интегрируем как df1как дату индекса, так и df2как данные valueв новый фрейм данных df3.

# Create list with value zero (0)
df2 = [0] * 365
# Create data frame df3
df3 = pd.DataFrame(data = df2, index = df1, columns = ['value'])

В новом фрейме данных df3 мы обновим начальный value (ноль) в конкретную дату государственного праздника, указанную в df1, используя свойство индексации iloc. Аналогичное обновление также должно быть сделано для празднования выходных.

Примечание. есть отрицание выражения ~, так как изначально у нас есть список рабочих дней df1b. Вы можете подумать, что этот метод замаскирует государственный праздник, если он приходится на выходные (субботу и воскресенье). Вы правы, и это зависит от того, как мы его используем.

Итак, это все. Мы готовы построить календарь, используя фрейм данных df3.

# Encode the date according to public holiday listed at df
# Update value of df3 in which the df3 index = df['Date']
df3.iloc[df3.index.isin(df['Date'])] = 1

# Update value of df3 in which the df3 index is not same as df1b.
# All weekend, ie. Saturday and Sunday shall be given value '2'
df3.iloc[~df3.index.isin(df1b)] = 2

Шаг 3: начертите календарь

Существует два типа календарей, которые мы можем создать с помощью модуля «Июль»: либо мы рисуем обычный календарь, либо другую версию календаря, например ту, что вы видите в типичном профиле GitHub, обозначающую нашу деятельность по вкладу. Лично я предпочитаю, что мне более чем достаточно обычного календаря с другим цветом в праздничные и выходные дни.

# Calendar plot. 
july.calendar_plot(df3.index, df3['value'],
                   cmap = 'july',
                   date_label = True,
                   figsize = None)

Для некоторых приложений также может подойти календарь в стиле GitHub. Опять же, все зависит от того, как мы его используем. Еще одна вещь, которую следует отметить, этот модуль July был создан на базе matplotlib module. К этому коду можно применить аналогичные настройки параметров, например, cmap того цвета, которым вы предпочитаете отмечать свой календарь.

july.heatmap(dates=df3.index, 
             data=df3['value'], 
             cmap='Pastel1_r',
             month_grid=True, 
             horizontal=True,
             value_label=False,
             date_label=True,
             weekday_label=True,
             month_label=True, 
             year_label=True,
             colorbar=False,
             fontfamily="monospace",
             fontsize=8,
             title=None,
             titlesize='large',
             dpi=100)

Заключение

В этой статье мы рассмотрели простой код для автоматизации вашего календаря маркировки с помощью модуля Python July. Я надеюсь, что вы найдете полезным и полезным напоминание о любом особом случае вашей повседневной деятельности.

Спасибо за прочтение. Не стесняйтесь расширять и настраивать код в этом репозитории Github в соответствии с вашей ситуацией.

Ссылка

[1] Python-модуль Июль

Мне нравится делиться полезными знаниями в области анализа данных и смотреть, как люди могут извлечь из этого пользу. Следуйте за мной на Medium и дайте мне знать, если у вас есть конструктивный вклад и как его улучшить, оставив комментарий. Связаться со мной можно через Linkedin или Twitter. Всем успехов в обучении👍!