はじめに
データを分析する際に時系列による可視化は非常に有効です。
- 日毎でのサイトアクセス数の推移
- 前年との売上比較
時系列での推移や、期間比較する際に、平日、休日という観点を考慮する必要がある経験はないでしょうか。
実社会での人間行動に平日、休日の影響はとても大きいです。
リアル店舗での売上などは曜日による影響を受けやすい数値だと言えます。
平日か休日か、といった観点を無しに日別の数値を分析してしまうと、数値の増減要因分析が明後日の方向でなされてしまう…なんてことになりかねません。
本記事ではデータプラットフォーム製品「Domo」を使って時系列データ(日時データ)に平日、休日の概念を加える方法について触れてみます。
平日・休日の定義
日時データから曜日を算出すること自体は難しくありません。日付である限り必ず曜日が存在します。
日付という日時情報を持つカラムに対して曜日を算出するSQLには以下があります。
--曜日の名前(英語)
DAYNAME(`日付`)
--曜日を1〜7に採番(例:1=日曜日)
DAYOFWEEK(`日付`)
平日、休日を簡易的に判定するのであれば、土日とそれ以外での判定で実現できます。
--日曜、土曜を休日、それ以外を平日
CASE
WHEN DAYOFWEEK(`日付`) in (1,7) THEN '休日'
ELSE '平日'
END
しかし、日本には祝日が存在します。
そのため上記の簡易判定だけでは不十分であるケースが多いのではないかと考えます。
更に祝日には「振替休日」や「ハッピーマンデー」により、年によって変動する日もあります。
実社会では嬉しい反面、データ分析においては日時データの平休日判定を厄介なものにしてると言えます。。
祝日の特定
祝日の特定方法について触れていきます。
祝日には固定日と変動日的とかあります。
| 祝日種別 | 祝日 |
|---|---|
| 固定日 | 元日、建国記念日、天皇誕生日、春分の日、昭和の日、憲法記念日、みどりの日、こどもの日、山の日、秋分の日、文化の日、勤労感謝の日 |
| 変動日 | 成人の日、海の日、敬老の日、スポーツの日 |
変動日については○月第□月曜日と規則性があり、計算で算出する事も可能です。
祝日が日曜と重なった時に発生する振替休日についても、祝日法第3条第2項で明確に定められているため算出は可能です。
『国民の祝日』が日曜日に当たるときは、その日後においてその日に最も近い『国民の祝日』でない日を休日とする。
しかし、このルールと異なる日に休日が移動したことが近年ありました。
それは東京五輪開催にあたり施行された「祝祭日移動法」(2020年11月)での2021年の祝日です。
この年は祝日の日数は変わらないものの、通年とは異なる連休や祝日の無い月が発生したイレギュラーな年になりました。
このように人的判定によって決まる特性もあるため、ここでは計算以外の方法をご紹介します。
国民の祝日データの取得
国民の祝日・休日は内閣府よりオーブデータとして公開されています。
このデータは毎年2月に翌年分が更新されます。
ハッピーマンデーや振替休日についても休日として算出済みとなり、日本の正しい祝日休日を確認することができるデータとなっています。
Domoにある豊富なコネクターの中から、「CSV Advanced Connector」を使用することでデータを自動取得します。
STEP1:コネクターを選択
「CSV Advanced Connector」は、CSVファイルを配置されたURLからDomoへ取得するコネクターです。
初回はコネクターアカウントを作成する必要があるため、以下を入力して「接続」しましょう。
USERNAME=Domoで使用しているメールアドレス
PASSWORD=Domoのパスワード
※今回の接続では、SSH KEY、PASSPHRASEは未入力のままで問題ありません。
STEP2:CSVファイルのURLを指定
ここでは必須項目の以下を設定します。
ENTER THE URL TO YOUR CSV FILE
※他項目はデフォルトの設定のままで問題ありません。
ここに入力する値は内閣府Webサイトより取得します。
(スクリーンショットで使用のブラウザはGoogle Chrome)

CSVのリンクをクリックすると、CSVファイルがダウンロードされてしまうので
右クリックでリンクのアドレスを取得するようにします。
取得したURLはこちら
https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv
入力を終えたら、次の画面に進みます。
この画面はデフォルトのままで問題ないので、さらに次の画面へ進みます。

STEP3:スケジュールの設定
このCSVファイルは毎年2月に1回更新されるため、スケジュールも年に1回の設定にします。

記憶では2月更新=2/1だったはずですが、サイトに明記されていないため2月に再度確認したいと思います。
翌年分が更新されるため、執筆時点の次回2026年2月には2027年分の祝日・休日のデータが追加更新されます。
STEP4:設定完了
1955年~最新年のデータが確認できます。
…1955年の祝日は年間9日しかなかったんですね。。
国民の祝日データの活用
ここではサンプルデータを使用して、祝日判定したデータを整形してみましょう。
使用するサンプルデータはある観光地のお土産店の売上データと設定します。
観光地という特性もあり、店の売上傾向として平日<休日となっていたとします。
サンプルデータ単体での可視化では、ある平日が突然異常な売上を出したように見えています。

STEP1:データの結合
STEP2:日付の演算
まずは土日を特定します。
日付の演算タイルで「週の日」を選択するとDAYOFWEEK(日付)と同様に週を1~7に採番することができます。

STEP4:値マッパー
STEP5:スクリプトを追加
続いて、祝日のみ1それ以外を0とする「祝日フラグ」を作成します。
タイルを複数用いて処理することも可能ですが、今回はスクリプトタイルでの簡単なSQLを用いる方法にします。
-- 国民の祝日・休日名称に値があれば1、それ以外は0
case
when `国民の祝日・休日名称` is not null then 1
else 0
end
作成した「土日フラグ」と「祝日フラグ」を用いて、平日/休日の判定を行います。
判定は以下のような計算で行います。
平日:土日フラグ+祝日フラグ = 0
休日:土日フラグ+祝日フラグ ≧ 1
上記の判定を同じスクリプトタイルに、「平日/休日」として作成します。
case
when `土日フラグ`+`祝日フラグ`= 0 then '平日'
else '休日'
end
STEP5:出力DataSet
作成したDataSetを使用したカードはこちらです。
10/12(月)の突出した売上が、平日の異常値ではなく休日による数値だったことが推測できるようになりました。

まとめ
時系列データでは曜日だけでなく祝日を考慮すべき場面があります。
祝日はオープンデータを有効活用することによって簡単に取得可能です。
コネクターを利用することによって自動化することができ、日付を持つデータに対して祝日情報を加えることができます。
本記事がデータ整形、データ分析の一助になれば幸いです。





