0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

eleganttで祝日を考慮したガントチャートを作成する

Last updated at Posted at 2024-07-06

7月と言えば海の日がありますが、祝日があるととスケジュール管理が面倒ですね。

eleganttは少ないコード量でガントチャートが描けるライブラリですが、ちょっとした工夫で祝日に考慮したガントチャートを生成することができます。この方法はeleganttに限らず、祝日を扱う一般的な方法だと思いますので、ぜひ参考にしてみてください。

まず、変更前のコードから。カレンダーがすぐ確認できるようGoogle Colab上でIpythonを使って表示させています。祝日を考慮していないので海の日が完了日になってますね。

import elegantt
from IPython.display import display

g = elegantt.EleGantt()
s = """
プロジェクトA: 2024-07-08,3d
プロジェクトA2: 3d
"""
g.auto_draw(s)
display(g.im)

image.png

これに対してholidaysという祝日を取得できるライブラリを使って、祝日対応させてみます。

まずholidaysで「JP」の祝日を設定し、pandasのdate_rangeとtolistで作った連続した日付のリストに対して祝日か否かを判定し、祝日の場合はmy_holidaysに加えます。

import holidays
import pandas as pd

jp_holiday = holidays.country_holidays('JP')
my_holidays = []
days = 10

date_list = pd.date_range(
    start=pd.Timestamp("today").normalize(),
    end=pd.Timestamp("today")+pd.Timedelta(days=days)
).tolist()

for date in date_list:
  if date in jp_holiday:
    print(date, jp_holiday.get(date))
    my_holidays.append(date.strftime('%Y-%m-%d'))
  else:
    print(date)

print(my_holidays)

実行すると下記のように出力します。なお、これは7月6日に実行したからこうなりますが、祝日がない時期に実行する場合はpd.Timestamp("today")という箇所をpd.Timestamp("2024-07-06")に書き換えれば同じように出力されます。

2024-07-06 00:00:00
2024-07-07 00:00:00
2024-07-08 00:00:00
2024-07-09 00:00:00
2024-07-10 00:00:00
2024-07-11 00:00:00
2024-07-12 00:00:00
2024-07-13 00:00:00
2024-07-14 00:00:00
2024-07-15 00:00:00 Marine Day
2024-07-16 00:00:00
['2024-07-15']

サンプルなのでdays=10としましたが実際は365日ぐらい設定しておいた方がいいと思います。

こうして生成したmy_holidaysをeleganttのset_holidaysで指定すれば、祝日を考慮したガントチャートが手軽に生成できます。

g.set_holidays(my_holidays)
g.auto_draw(s)
display(g.im)

image.png

なお、会社の創立記念日などカレンダーに乗ってない祝日を設定したい場合はmy_holidaysに下記のように設定しておき、holidaysで判定した結果をappendすれば動作します。

my_holidays = ["2024-07-10"]

韓国語版はこちら。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?