u++の備忘録

pandas.DataFrameに祝日の特徴量を作る

はじめに

昨日公開した下記の記事で、以下のような感想を書きました。

祝日フラグは、手動で作成したので地味に辛かった思い出があります。

upura.hatenablog.com

何となく書いたボヤキだったのですが、ありがたいことに次のリプライを頂きました。

お恥ずかしながら、私はこのパッケージの存在を知りませんでした。次の記事でも紹介されている通り、かなり使い勝手の良いライブラリのようです。

st-hakky.hatenablog.com

本記事では、反省と次なる機会への準備を兼ねて、pandas.DataFrameに祝日の特徴量を作る方法をまとめておきます。

データの準備

まずは、日付の行を持つpandas.DataFrameを作成します。

import pandas as pd
from datetime import date, timedelta

today = date.today()
date_time = []
for i in range(1000):
    date_time.append(today + timedelta(days = i))
df = pd.DataFrame({
    'datetime': date_time
})

print(df.head())
     datetime
0  2018-12-21
1  2018-12-22
2  2018-12-23
3  2018-12-24
4  2018-12-25

祝日の特徴量の追加

datetimeごとに、関数を適用します。それだけだとTrue/Falseで値が返ってきますが、機械学習アルゴリズムへの適用を考えると1/0が望ましいので、intに変換しておきました。

import jpholiday

df['is_holiday'] = df['datetime'].map(jpholiday.is_holiday).astype(int)

print(df.head())
     datetime  is_holiday
0  2018-12-21           0
1  2018-12-22           0
2  2018-12-23           1
3  2018-12-24           1
4  2018-12-25           0

単なる祝日だけではなく、振替休日も取り扱っています。

おまけ

数日前にversion 0.0.6がリリースされています。

天皇の即位の日及び即位礼正殿の儀の行われる日を休日とする法律に対応しました。
変更点は下記のとおりです

www.lalcs.com

print(jpholiday.is_holiday_name(date(2019, 5, 1)))
天皇の即位の日

最新情報が迅速に盛り込まれていて、素晴らしいパッケージだと感じました。