YOGYUI

2022년 공휴일을 알아보자 (feat. 공공데이터포털) 본문

Software/Python

2022년 공휴일을 알아보자 (feat. 공공데이터포털)

요겨 2021. 12. 22. 17:28
반응형

2022년 공휴일 정보

 

공공데이터포털(data.go.kr)의 "한국천문연구원_특일 정보" Open API를 활용하면 공휴일 정보를 알 수 있다

API 활용 관련글 바로가기

 

2021년도 이제 끝나가니, 2022년은 공휴일이 무슨 요일인지 한번 훑어보자

import datetime
import requests
import pandas as pd
from bs4 import BeautifulSoup, element
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

def getHolidayDataFrame(year: int) -> pd.DataFrame:
    url = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo"
    api_key_encoded = "Your key from data.go.kr"
    api_key_decoded = requests.utils.unquote(api_key_encoded, encoding="utf-8")
    
    params = {
        "ServiceKey": api_key_decoded,
        "solYear": year,
        "numOfRows": 100
    }
    
    weekday_name = ["월", "화", "수", "목", "금", "토", "일"]
    
    response = requests.get(url, params=params)
    xml = BeautifulSoup(response.text, "lxml")
    
    def parseItem(item: element.Tag) -> dict:
        dt = datetime.datetime.strptime(item.find("locdate").text.strip(), '%Y%m%d')
        item_dict = {
            "이름": item.find("datename").text.strip(),
            "날짜": dt,
            "요일": weekday_name[dt.weekday()]
        }
        return item_dict
    
    item_list = [parseItem(x) for x in xml.find("items")]
    return pd.DataFrame(item_list)

if __name__ == "__main__":
    df_holiday_2022 = getHolidayDataFrame(2022)
    
    app = QApplication([])
    app.setStyle('fusion')
    table = QTableWidget()
    table.setColumnCount(len(df_holiday_2022.columns))
    table.setHorizontalHeaderLabels(df_holiday_2022.columns)
    table.setRowCount(len(df_holiday_2022))
    table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
    table.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
    for row in range(table.rowCount()):
        record = df_holiday_2022.iloc[row]
        item = QTableWidgetItem(record['이름'])
        table.setItem(row, 0, item)
        item = QTableWidgetItem(record['날짜'].strftime('%Y-%m-%d'))
        item.setTextAlignment(Qt.AlignVCenter | Qt.AlignHCenter)
        table.setItem(row, 1, item)
        weekday = record['요일']
        item = QTableWidgetItem(weekday)
        item.setTextAlignment(Qt.AlignVCenter | Qt.AlignHCenter)
        if weekday in ['토', '일']:
            item.setForeground(QBrush(Qt.red))
        table.setItem(row, 2, item)
    table.show()
    app.exec()

실행결과

[참고]
제헌절(7월 17일)은 국경일이지만 2008년부터 공휴일에서 제외되었다
식목일(4월 5일)은 2006년부터 공휴일에서 제외되었다

추석 마지막날과 한글날이 일요일이라 2일의 대체공휴일 발생

19일의 공휴일이 예정되어 있다

In [1]: df_holiday_2022
Out[1]: 
          이름         날짜      요일
0       1월1일      2022-01-01   토
1         설날      2022-01-31   월
2         설날      2022-02-01   화
3         설날      2022-02-02   수
4        삼일절     2022-03-01   화
5     대통령선거일   2022-03-09   수
6       어린이날     2022-05-05  목
7     부처님오신날   2022-05-08   일
8   전국동시지방선거 2022-06-01   수
9        현충일     2022-06-06   월
10       광복절     2022-08-15   월
11        추석      2022-09-09   금
12        추석      2022-09-10   토
13        추석      2022-09-11   일
14     대체공휴일    2022-09-12  월
15       개천절     2022-10-03   월
16       한글날     2022-10-09   일
17     대체공휴일   2022-10-10   월
18     기독탄신일   2022-12-25   일

 

이 중 주말(토, 일)을 제외하면

df_holiday_2022_weekday = df_holiday_2022[~df_holiday_2022['요일'].str.contains('토') & ~df_holiday_2022['요일'].str.contains('일')]
In [2]: len(df_holiday_2022_weekday)
Out[2]: 13

주중 공휴일은 총 13일이다

Thanks to 대통령선거, 전국동시지방선거 ^^

(어째 매번 차악次惡을 뽑는 선거가 계속되는건지... 헬조선의 미래가 위태롭다)

 

끝~!

반응형
Comments