Программирование
Автоматизируйте разметку календаря с помощью 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. Всем успехов в обучении👍!