祝日情報は最も信頼できるソースの内閣府から取得しようという話【Python】

Python基礎

スポンサーリンク

国民の祝日、と聞いてポジティブな感情を抱く人が多い一方で、ネガティブな感情を抱く人も一定数存在します。祝日情報を扱うエンジニアです。

祝日情報は基本的に「どこかから取ってくる」か「自分で作る」の二択で実装するのですが、自分で作るのは面倒だし、取ってくるにしても信頼に足るソースがどこかわからない、という方は意外と多いような気がします。

今回は内閣府が提供する祝日情報から情報を取得しよう、というお話です。

国民の祝日について

内閣府では国民の祝日が定義されています。(内閣府:「国民の祝日」について

「国民の祝日」は、国民の祝日に関する法律(昭和23年法律第178号)により、美しい風習を育てつつ、よりよき社会、より豊かな生活を築きあげるために定められた「国民こぞって祝い、感謝し、又は記念する日」です。

国民の祝日に関する法律では、年間に計16の日が「国民の祝日」とされ、それぞれの日の趣旨が定められています。また、「国民の祝日」は、休日とされています。

また、2024年11月6日時点で、来年2025年末までの祝日が掲載されています。

内閣府の祝日情報データ

内閣府からは、祝日情報がCSV形式で一般公開されています。
知る人ぞ知るデータで、もっと周知されてほしいです。

祝日情報CSV:syukujitsu.csv

なぜ"shukujitsu"ではなく"syukujitsu"なのか、個人的には若干気になるところですが、こちらを基にすればAPIっぽくプログラム上で祝日が扱えそうです。

プログラム例

Pythonでいくつかのサンプルを作ってみました。

DataFrameで取り込む

# DataFrameで2行で済ませる方法
import pandas as pd
df = pd.read_csv('https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv', encoding='shift_jis')

dfの中身はこんな感じになります。(1032 rows × 2 columns)

国民の祝日・休日月日国民の祝日・休日名称
01955/1/1元日
11955/1/15成人の日
21955/3/21春分の日
31955/4/29天皇誕生日
41955/5/3憲法記念日
10272025/9/23秋分の日
10282025/10/13スポーツの日
10292025/11/3文化の日
10302025/11/23勤労感謝の日
10312025/11/24休日

辞書やJSONで取り込む

DataFrameは使えなくて・・・という場合もあると思いますので、代替案も用意しました。

import csv
import json
import requests

results = {}
r = requests.get('https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv')
r_content = r.content.decode('shift_jis')
reader = csv.reader(r_content.splitlines(), delimiter=',')
next(reader)
for line in reader:
    if line[1] == '休日':
        line[1] = '振替休日'
    results[line[0]] = line[1]
j = json.dumps(results, ensure_ascii=False)

省略していますが、以下のような結果が得られます。

{'1955/1/1': '元日', '1955/1/15': '成人の日', '1955/3/21': '春分の日', '1955/4/29': '天皇誕生日', '1955/5/3': '憲法記念日', '1955/5/5': 'こどもの日', ... , '2025/9/23': '秋分の日', '2025/10/13': 'スポーツの日', '2025/11/3': '文化の日', '2025/11/23': '勤労感謝の日', '2025/11/24': '振替休日'}

地味に「休日」を「振替休日」に変更しています。
「休日」のままが良い場合は、for句を除いてください。

まとめ

以上、内閣府の祝日情報取得についてでした。

更新データは異なるURLで提供されていたりするみたいなので(やめてほしい・・・)、毎年そのあたりは確認した方が良いと思われます。

Python基礎

Posted by このめ