실무에서 많이 사용하는 날짜 정리 R lubridate 시작일, 종료일

     실무에 있어서 과거의 실적을 가지고,   정기적으로 예측 한다고 하자.  데이터 예측을 할 때는 무조건 기간이 길다고 데이터가 전부 fittng 화 되는 것은 아니다.  상황에 따라서는 일정기간을 주어진 상태에서 예측 할 수 있다.  

  

  이럴 때 날짜 정리가 제대로 되어 있지 않다면,  프로그램 정리하는데 시간이 많이 걸린다. R에서는 가장 많이 쓰이는 자료 이므로 반드시 아는 것이 좋다. 

날짜를 정리 하면서,  나는 여러가지 실무적인 Case를 다루고자 한다.   


1) character "20211215" 날짜 Case

    SAP 나  사내 ERP 데이터 IOT 데이터에서  날짜를 가져오면,  항상 위와 같다.  개발자에 위와 같은 Type으로 DBMS에 데이터를 저장하는 Case는  바로 데이터 검색 속도이기 때문이다.  DBMS에서 index를 만들어서 빠르게 검색 할 수 있게 하는 장점이 있다.   그런데,  이런 데이터를 받으면,  아래와 같이 정리해야 한다. 

  library(stringr)
  library(lubridate)
# 입력한 날짜   
  input_date = "20211215"  
  is.character(input_date)
## [1] TRUE
# 날짜 변환 
  con_date = as.Date(input_date, "%Y%m%d")
  con_date
## [1] "2021-12-15"
  is.Date(con_date)
## [1] TRUE


2)  날짜를 charater type으로 변환 

  날짜를 변환 하였으면, 나중에 모델링 하고 나서 정리할때 당연히 charater type로 변환 하여야 한다.  

  input_date <- paste0( year(con_date), # 년도 변환
                        month(con_date),# 월 변환
                        day(con_date) #일 변환 
                      )
   input_date
## [1] "20211215"
   is.character(input_date) 
## [1] TRUE

 year(x), month(x), day(x)는  당연히 아래의 설명과 같이 해당 년도, 월, 일을 불러 온다. 그리고 paste0는 문자열을 붙이는 것이다. 


3)  날짜를 월의  첫째날짜와   마지막날짜  구하기

  단기/중기/ 장기 예측을 나누어서 하려면,  날짜 월의 첫째날짜와 마지막날짜 구하는 것이 매우 중요하다.  

# 다시 날짜 변환 
   con_date = as.Date(input_date, "%Y%m%d")  

# 이번달의  첫번째 일짜 계산   
   lubridate::floor_date(con_date, unit = "month")
## [1] "2021-12-01"
# 이번달의  마지막 일자 계산 
   lubridate::ceiling_date(con_date, "month") -1
## [1] "2021-12-31"
# 저번달의  마지말 일자 계산     
   lubridate::rollback(con_date) 
## [1] "2021-11-30"


4) 예제)  nasdap100  장기/중기/단기 예측 

   주식 nasdap 100의  장기는 3년,  중기는 1년,  단기는 6개월로 해서 주가 수익률을 보겠다.   이것은 상향성이기 때문에  항상 수익이 난다. 

# 현재일로 부터 3년전 조회
  long_date <-  con_date + years(-3)
  
# 현재일로부터 1년전 조회   
  middle_date <-  con_date + years(-1)

# 현재일로 부터 6개월전 조회
  short_date <- con_date + months(-6)

# nasdaq100을 가져온다.  이것은 크롤링하기 때문에 조금 늦다.   
  require(tqk)    
  stock_code = "133690"
  stock <-   tqk_get(stock_code, from= long_date)
# 수익률 계산  장기 
  #맨 마지막 계산 
  last <- nrow(stock)
  long_result <- (stock$close[last] - stock$close[1]) / stock$close[1] *100
  
# 수익률 계산 중기   
  library(dplyr)
  stock_middle <-  filter(stock, date >= middle_date)
  last <- nrow(stock_middle)
  middle_result <- (stock_middle$close[last] - stock_middle$close[1]) /                   stock_middle$close[1] * 100

# 수익률 계산 단기 
  stock_short <- filter(stock, date >= short_date) 
  last <- nrow(stock_short)
  sort_result <- (stock_short$close[last] - stock_short$close[1]) /
                  stock_short$close[1] * 100

 df <- data.frame(보유기간 =  as.factor(c("장기", "중기", "단기")),
             수익률 = c(long_result, middle_result, sort_result))
 
df$보유기간 <-  factor(df$보유기간, levels = c("장기", "중기", "단기"))

df
##   보유기간    수익률
## 1     장기 148.89020
## 2     중기  38.58242
## 3     단기  19.55094
 library(ggplot2)

 df %>% 
      ggplot(aes(보유기간, 수익률, fill= 보유기간)) +
      geom_bar( stat = "identity")


nasdap 100 장기, 중기, 단기 수익률

어찌 되었든  기초 자본만 있으면,  대단한 수익률을 자랑 한다.  

어느 주식 고수 분께서 이런 말씀을 하셨다.   주식은 최소 3년 이상은 가지고 있어야 한다.


이것은  날짜 계산이 쉽게 된다.  이 정도이면,  중기, 단기, 장기간 데이터를 구할 수 있다. 



댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...