실무에 있어서 과거의 실적을 가지고, 정기적으로 예측 한다고 하자. 데이터 예측을 할 때는 무조건 기간이 길다고 데이터가 전부 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년 이상은 가지고 있어야 한다.
이것은 날짜 계산이 쉽게 된다. 이 정도이면, 중기, 단기, 장기간 데이터를 구할 수 있다.
댓글 없음:
댓글 쓰기