【Python】 공휴일 정보 추가

목적



시계열 데이터의 분석으로 요일 의존성을 검증할 때, 공휴일 정보도 추가하고 싶다.

목표



시계열 데이터 프레임의 날짜 열에 dt.weekday 로 요일 열 "weekday"추가하고 月:0、火:1、水:2、木:3、金:4、土:5、日:6 로 한 후, 공휴일 해당일에 祝:7 를 덮어씁니다.
게다가 캘린더에서는 평일이 되고 있는 연말연시휴가기간 등 경제활동이 휴일모드로 되어 있는 날도 임의로 祝:7로 취급할 수 있도록 한다.

실천


import pandas as pd

2019년 → 2020년 연말연시를 포함한 기간의 일시 정보의 데이터 프레임 "df"를 처리
# 日付列"date"をタイムスタンプ型にする
df["date"] = pd.to_datetime(df["date"])

# 曜日情報列"weekday"をデータフレームに追加
df["weekday"] = df["date"].dt.weekday

연말 연시 휴가 기간 중(2019-12-30:월요일, 2019-12-31 새해 전날:화요일, 2020-01-01 설날:수요일, 2020-01-02:목요일, 2020-01-03:금요일)은 모두 평일판정👇

1955년 이후의 일본의 공휴일이 리스트업된 csv데이터를 취득할 수 있는 내각부 web페이지『 국민의 공휴일에 대해서 』에서 공휴일 데이터 "syukujitsu.csv "
!!ATTN!!
"syukujitsu.csv"는 엄격한 공휴일 밖에 나열되어 있지 않다(연말 연시 휴가 기간이나 추석 휴가 등 경제 활동이 휴일 모드인 평일은 별도로 정의해 리스트에 임의 추가할 필요)
# "syukujitsu.csv"読み込み
syukujitsu = pd.read_csv("https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv", encoding="SHIFT-JIS")

# "国民の祝日・休日月日"列をタイムスタンプ型にする
syukujitsu["国民の祝日・休日月日"] = pd.to_datetime(syukujitsu["国民の祝日・休日月日"])

2019년→2020년 연말연시 기간을 짜서 표시하면 설날만 올라온다👇

경제가 휴일 모드의 새해 전날이나 세가 날도 공휴일과 같이 취급하고 싶다!
 → 공휴일처럼 취급하고 싶은 휴일을 리스트 업 해 데이터 프레임으로 한다
# 年末年始休暇の追加休日リスト"add"
add = ["2019/12/30", "2019/12/31", "2020/1/2", "2020/1/3"]

# 追加休日リストをデータフレーム"ADD"にする
ADD = pd.DataFrame(add, columns=["国民の祝日・休日月日"])
ADD["国民の祝日・休日月日"] = pd.to_datetime(ADD["国民の祝日・休日月日"])

내각부의 휴일 데이터 프레임에 작성한 추가 휴일 데이터 프레임을 결합하여 휴일 데이터 프레임을 업데이트
# "syukujitsu"と"ADD"を結合して更新した祝日データフレーム"syuku"
syuku = pd.concat([syukujitsu, ADD]).sort_values("国民の祝日・休日月日").reset_index(drop=True)

2019년→2020년 연말연시에 기간을 짜서 표시하면 설날을 포함한 연말연시휴가 기간도 공휴일로 올라왔다👇

날짜 및 시간 정보의 데이터 프레임 "df"의 요일 정보 열에 업데이트 된 공휴일 데이터 프레임 "syuku"에 나열된 날에 祝:7
# 祝日フラグ7を該当日に付与する
for i in syuku["国民の祝日・休日月日"]:
    df["weekday"].mask(df["date"] == i, 7, inplace=True)

공휴일 데이터 프레임에서 지정한 날의 "weekday"를 7로 덮어쓰기 완료👇

좋은 웹페이지 즐겨찾기