[R] 휴일 찾아주는 R function

데이터 분석 중 필요해서 특정 연도의 휴일을 찾아주는 R function 을 작성해 보았습니다. 엔간한 기능은 검색하면 이미 구현된 코드나 패키지를 찾을 수 있는 게 보통이지만 이건 찾기 어렵더라구요. 비슷한 게 있나 싶으면 한국은 또 잘 안되고… 할 수 없이 삽질 끝에 만들어 봤습니다. 앞에 있는 패키지들 다 설치되어 있어야 하구요, https://www.timeanddate.com/holidays/ 라는 사이트에서 조회하는 걸로 했습니다. 이 사이트 문닫으면 다시 코딩해야 ^^;;;;

조회하면 뜨는 웹페이지에서 휴일이 나온 테이블 부분을 읽어와서 data.frame 으로 만든 후 tibble 로 변경해서 (다루기 쉽게 하려고…) 약간의 가공을 거쳐서 제시합니다. 웹페이지 상에서는 정말 쉬는 날 아닌 기념일 등도 조회되는 데 휴일만 걸러낸 결과입니다. 5월 1일 노동절 같은 경우에는 쉬는 곳도 있고 아닌 곳도 있을텐데 이 함수의 경우에는 빠지게 되어 있습니다. 결과 보시면 올해 5월 5일이 일요일에 걸려서 5월 6일이 대체 공휴일인 것까지 제대로 잘 조회됩니다. ^^

holidays <- function(country, yr) {
    require(dplyr)
    require(httr)
    require(rvest)
    require(stringr)
    results <- NULL 
    url <- paste0("https://www.timeanddate.com/holidays/",
		  tolower(country), "/", yr)
    pattern_md <- "(\\d+)월\\s(\\d+)일"
    result <- url %>%
      read_html() %>%
      html_nodes(xpath = '//*[@id="holidays-table"]/tbody' ) %>%
      html_table(header = FALSE) %>%
      as.data.frame() %>%
      as_tibble() %>% 
      filter(str_detect(X4, "((P|p)ublic|(N|n)ational)")) %>% 
      mutate(holiday_ymd =
	       as.Date(paste(yr, str_match(X1, pattern_md)[,2],
			     str_match(X1, pattern_md)[,3], sep ='-'))) %>% 
      select(holiday_ymd, X2, X3) %>%
      rename("weekday" = "X2", "name_of_the_day" = "X3")
    return(result)
  }
> holidays("south-korea", 2024)
# A tibble: 18 × 3
 holiday_ymd weekday name_of_the_day 
   <date>     <chr>  <chr> 
 1 2024-01-01 월요일 New Year's Day 
 2 2024-02-09 금요일 Seollal Holiday 
 3 2024-02-10 토요일 Seollal 
 4 2024-02-11 일요일 Seollal Holiday 
 5 2024-02-12 월요일 Seollal Holiday 
 6 2024-03-01 금요일 Independence Movement Day 
 7 2024-04-10 수요일 National Assembly Election Day
 8 2024-05-05 일요일 Children's Day 
 9 2024-05-06 월요일 Day off for Children's Day 
10 2024-05-15 수요일 Buddha’s Birthday 
11 2024-06-06 목요일 Memorial Day 
12 2024-08-15 목요일 Liberation Day 
13 2024-09-16 월요일 Chuseok Holiday 
14 2024-09-17 화요일 Chuseok 
15 2024-09-18 수요일 Chuseok Holiday 
16 2024-10-03 목요일 National Foundation Day 
17 2024-10-09 수요일 Hangeul Proclamation Day 
18 2024-12-25 수요일 Christmas Day

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다