벡터를 이용하여 시계열 데이터를 직접 만들어 보자. 시계열 데이터를 만들 때에는 ts(time series) 객체를 이용한다.
#=== 3. 시계열분석 데이터 만들기 - ts()
# (1) ts() 함수 사용
vect01 <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
ts01 <- ts(vect01,start=2001,frequency=4)
ts01
ts02 <- ts(vect01,start=2001,frequency=12)
ts02
ts03 <- ts(vect01,start=2001,frequency=1)
ts03
(ts04 <- ts(vect01,end=2001,frequency=4))
(ts05 <- ts(vect01,end=2001,frequency=12))
?ts
length : 원소들의 갯수
mode : 원소들의 종류
tsp : 시계열 시작, 종료, 간격
dim : 다중시계열의 행과 열의 수
dimnames : 다중시계열의 행과 열의 이름
● 분기별 데이터 만들기
vect01 <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
ts01 <- ts(vect01,start=2001,frequency=4)
ts01
> ts01
Qtr1 Qtr2 Qtr3 Qtr4
2001 1 2 3 4
2002 5 6 7 8
2003 9 10 11 12
2004 13 14 15 16
length(ts01) # 16
class(ts01) # ts
mode(ts01) # numeric
help(ts)
● 월별 데이터 만들기
ts02 <- ts(vect01,start=2001,frequency=12)
ts02
> ts02
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 13 14 15 16
● 연도별 데이터 만들기
ts03 <- ts(vect01,start=2001,frequency=1)
ts03
> ts03
Time Series:
Start = 2001
End = 2016
Frequency = 1
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
>
(ts04 <- ts(vect01,end=2001,frequency=4))
(ts05 <- ts(vect01,end=2001,frequency=12))
> help(ts)
2019. 1. 30. 17:29
시계열 ts()
R로 시계열 분석 시, frequency를 나눌 때는 데이터가 frequency대로 정확하게 떨어지게 나눠야 함
ex)
ts(data, start=c(2012,3), frequency = 12)
2012년 1월~2018년 2월 자료까지 밖에 없는 경우
2012년 3월을 start 점으로 해줘야 함
'programing > R studio' 카테고리의 다른 글
2019.06.09 |
2019.03.23 |
2019.01.30 |
2018.12.03 |
2018.09.17 |
NAME
PASSWORD
HOMEPAGE
SECRET
PREV 1···8910111213141516···355 NEXT
+ Recent posts
Powered by Tistory, Designed by wallel
Rss Feed and Twitter, Facebook, Youtube, Google+
- 1. 시계열 데이터 맛보기
- 1.1. 시계열 데이터 팩키지와 자료구조
- 1.2. 시계열 데이터 시각화
- 2. 시계열 데이터 다루기
- 2.1. 주식 데이터 1종
- 2.2. 주식 데이터 다수
학습 목표
- 금융공학을 위한 시계열 데이터 기초를 이해한다.
- 금융데이터를 가져와서 데이터를 정제하는 방식을 살펴본다.
시계열 데이터(time series)는 시간 순서로 배열된 데이터의 한 종류로 시간에 걸쳐 순차적으로 기록된다. 시계열 데이터는 널려있다고 해도 과언은 아니다. 주식수익률 데이터를 포함한 재무데이터, 인플레이션, 소비자 물가를 포함한 각종 경제 관련 데이터 및 시간순으로 정당 지지율도 대표적인 시계열 데이터가 된다.
날짜와 시간을 어떻게 R 자료구조로 표현하는 방법과 실무에서 자주 등장하는 불규칙한 시계열 데이터를 일정 간격을 갖는 시계열 데이터로 변환하는 방법에 대해서는 다음 웹사이트를 참고한다.
- 시간 데이터 기초
- 불규칙 시계열 데이터
1. 시계열 데이터 맛보기
1.1. 시계열 데이터 팩키지와 자료구조 1
fts | fts | C++ 시계열 라이브러리 tslib에 대한 R 인터페이스 |
its | its | 불규칙 시계열 데이터를 처리하는 S4 클래스 |
tseries | irts | “POSIXct” 색인을 갖는 불규칙 시계열 객체 |
timeSeries | timeSeries | Rmetrics 팩키지 시계열 유틸리티 |
tis | tis | 시간 색인과 시계열 데이터를 위한 S3 함수와 클래스 |
stats | ts, mts | 일정한 시간 간격을 갖는 시계열 객체 |
zoo | zoo | 불규칙 시계열을 포함하고 전체 관측점을 시계열 순으로 색인한 S3 클래스 |
xts | xts | zoo 클래스 확장 |
시계열 데이터를 R에서 담아내는 객체는 다양하다. C++ tslib을 R로 가져온 것부터 가장 최근 xts 팩키지까지 다양한 방식이 동원된다. 시계열 데이터를 자료구조로 이해할 경우 먼저 등간격을 갖는 일정한 시간 데이터인지, 불규칙한 시간 데이터인지 판단을 해야하고, 그 다음으로 색인여부가 속도와 연관되어 시계열 데이터를 이해하는 중요한 기준이 될 수 있다.
Base 팩키지에 포함된 ts 함수를 사용하면 간단한 시계열 데이터를 생성시킬 수 있다. 특히 window 함수를 활용하여 특정 기간 데이터도 쉽게 뽑아낼 수 있다.
# 0. 환경설정 -------------------------------------------------------------- library(tidyverse) library(lubridate) library(xts) # 1. 시계열 데이터 -------------------------------------------------------------- ## 1.1. 처음부터 생성------------------------------------------------------------ dat <- c(7,5,3,1,3,5,7) dat_ts <- as.ts(dat) dat_tsTime Series: Start = 1 End = 7 Frequency = 1 [1] 7 5 3 1 3 5 7 dat_1987_ts <- ts(dat, start=1987) dat_1987_tsTime Series: Start = 1987 End = 1993 Frequency = 1 [1] 7 5 3 1 3 5 7 dat_quarter_ts <- ts(dat, start=c(1987,3), frequency=4) dat_quarter_ts Qtr1 Qtr2 Qtr3 Qtr4 1987 7 5 1988 3 1 3 5 1989 7 # 특정기간 뽑아내기 window(dat_quarter_ts, start=c(1987,3), end=c(1988,4)) Qtr1 Qtr2 Qtr3 Qtr4 1987 7 5 1988 3 1 3 5## 1.2. 데이터셋에서 불러오기---------------------------------------------------- # 맥주생산량 데이터 beer_df <- read_csv("//raw.githubusercontent.com/jamesrobertlloyd/gp-structure-search/master/data/raw/TSDL/monthly-beer-production-in-austr.csv") names(beer_df) <- c("dtime", "beer") beer_df <- beer_df %>% dplyr::filter(!is.na(beer)) %>% mutate(dtime=ymd(paste0(dtime,"-01"))) # ts 변환 head(beer_df)# A tibble: 6 × 2 dtime beer <date> <dbl> 1 1956-01-01 93.2 2 1956-02-01 96.0 3 1956-03-01 95.2 4 1956-04-01 77.1 5 1956-05-01 70.9 6 1956-06-01 64.8 tail(beer_df)# A tibble: 6 × 2 dtime beer <date> <dbl> 1 1995-03-01 152 2 1995-04-01 127 3 1995-05-01 151 4 1995-06-01 130 5 1995-07-01 119 6 1995-08-01 153 beer_ts <- ts(beer_df[,-1], start=c(1956,01), frequency=12) par(mfrow=c(1,2)) plot(beer_df, main="시계열 정보 활용 못함", xlab="", ylab="맥주생산량") plot(beer_ts, main="시계열 정보 활용 직선으로 연결함", xlab="", ylab="맥주생산량")# xts 변환 beer_xts <- as.xts(beer_df[,-1], order.by=beer_df$dtime) par(mfrow=c(1,1)) plot(beer_xts)시계열 자료구조를 활용하는 이유
시계열 자료구조를 활용하는 이유는 다음 맥주생산량 데이터를 통해 이해하면 쉽다. 시계열 자료구조가 아닌 경우 plot 함수에 던지게 되면 산점도를 찍게 되지만, 시계열 자료구조를 갖는 경우 각 관측점을 연결한 시각화 산출물을 생성시킨다.
xts 팩키지를 활용하면 불규칙, 규칙 시계열 데이터를 자체 색인을 통해 빠르게 접근하고 다양한 시계열 데이터를 자유로이 다룰 수 있는 도구상자를 지원한다.
1.2. 시계열 데이터 시각화 2
시계열 데이터를 시각화할 경우 시계열 시간이 항상 시계열 관측값보다 긴 것이 좋다. 태양의 흑점수(sunspot)를 관측한 데이터의 특징은 흑점개수가 빠르게 증가하고 느리게 감소하는 경향이 있는데 상단 그래프(시간축이 관측축보다 긴 경우)는 이런 경향이 잘 관찰되지만, 하단 그래프(시간축과 관측축이 동일한 경우)는 이런 경향을 확인하기 상대적으로 쉽지 않다.
# 2. 시각화---------------------------------------------------- require(graphics) data(sunspot.year) layout(matrix(c(1:2, 1:2), ncol=2), height=c(.2,.8)) par(mar=c(.2,3.5,0,.5), oma=c(3.5,0,.5,0), mgp=c(2,.6,0), tcl=-.3, las=1) plot(sunspot.year, type='n', xaxt='no', ylab='') grid(lty=1, col=gray(.9)) lines(sunspot.year) plot(sunspots, type='n', ylab='') grid(lty=1, col=gray(.9)) lines(sunspot.year) title(xlab="시간", outer=TRUE, cex.lab=1.2) mtext(side=2, "태양의 흑점개수", line=2, las=0, adj=.75)2. 시계열 데이터 다루기
2.1. 주식 데이터 1종
시계열 데이터의 대표적인 데이터가 주식 데이터로 특정 기업(웹젠)을 살펴보자.
오류
Error in download.file(paste(yahoo.URL, “s=”, Symbols.name, “&a=”, from.m, : cannot open URL ‘//ichart.finance.yahoo.com/table.csv?s=069080.KQ&a=0&b=01&c=2017&d=4&e=18&f=2017&g=d&q=q&y=0&z=069080.KQ&x=.csv’ In addition: Warning message: In download.file(paste(yahoo.URL, “s=”, Symbols.name, “&a=”, from.m, : cannot open URL ‘//ichart.finance.yahoo.com/table.csv?s=069080.KQ&a=0&b=01&c=2017&d=4&e=18&f=2017&g=d&q=q&y=0&z=069080.KQ&x=.csv’: HTTP status was ‘502 Connection refused’
따라서, 아마존을 대상으로 살펴보자. getSymbols 함수로 야후나 구글에서 주식데이터를 긁어오면 시가, 종가 등 다양한 정보를 아래 함수를 혹은 조합해서 활용이 가능하다.
- Op() : 개장가격(opening price)
- Hi() : 최고가(high price)
- Lo() : 최저가(low price)
- Cl() : 마감 종가(close price)
- Vo() : 거래량(traded volume)
- Ad() : 조정된 마감 종가(adjusted close price)
2.2. 주식 데이터 다수
주식 데이터 다수를 가져열 경우 일단 new.env() 함수로 다수 주식데이터를 담아놓는 공간을 마련한다. 그후 split-apply-combine 전략을 적용한다.
# 3. 다수 데이터 긁어오기 ---------------------------------- data_env <- new.env() getSymbols(c("AMZN", "AAPL"), env = data_env, src="google", auto.assign = TRUE, from = "2017-05-01")[1] "AMZN" "AAPL" ## 3.1. 다수 데이터 종가 가져오기 data_lst <- lapply(data_env, Cl) (closed <- do.call(merge, data_lst)) AAPL.Close AMZN.Close 2017-05-01 146.58 948.23 2017-05-02 147.51 946.94 2017-05-03 147.06 941.03 2017-05-04 146.53 937.53 2017-05-05 148.96 934.15 2017-05-08 153.01 949.04 2017-05-09 153.99 952.82 2017-05-10 153.26 948.95 2017-05-11 153.95 947.62 2017-05-12 156.10 961.35 2017-05-15 155.70 957.97 2017-05-16 155.47 966.07 2017-05-17 150.25 944.76