야후로부터 S & P 500, DJIA 및 30 년 T-Bonds의 일일 데이터를 다운로드하고 데이터를 적절한 시간대에 매핑하여 병합하고 싶습니다. 내 데이터로. 몇 가지 질문이 있습니다.yahoo tickers, time zone and merging
제 첫 번째 문제는 시세가 올바르게되고 있습니다. yahoo의 웹 사이트에서는 시세표가^GSPC,^DJI 및^TYX 인 것처럼 보입니다. 그러나^DJI는 실패합니다. 왜 그런가?
내 두 번째 문제점은 표준 시간대를 GMT로 제한하고 싶습니다. (모든 데이터가 동일한 시계에 있는지, GMT가 중립적 인 선택처럼 보이는지 확인하고 싶습니다.) 그러나 나는 그것을 얻을 수 없었습니다. 일하다.
제 3의 문제점은 야후 데이터를 내 데이터와 병합하고, 다른 방법으로 얻었으며 다른 형식으로 사용할 수 있다는 것입니다. 매일의 데이터이기도합니다.
GMT 표준 시간대로 데이터를 제한하려는 시도입니다. 내 R 스크립트 상단에서 실행됩니다.
df <- structure(list(A = c(-0.011489000171423, -0.00020300000323914,
0.0430639982223511, 0.0201549995690584, 0.0372899994254112, -0.0183669999241829
), B = c(0.00110999995376915, -0.000153000000864267, 0.0497750006616116,
0.0337960012257099, 0.014121999964118, 0.0127800004556775), date = c(9861,
9862, 9863, 9866, 9867, 9868)), .Names = c("A", "B", "date"
), row.names = c("0001-01-01", "0002-01-01", "0003-01-01", "0004-01-01",
"0005-01-01", "0006-01-01"), class = "data.frame")
내가하고 싶은 : 여기
library("tseries")
library("xts")
date.start <- "1999-12-31"
date.end <- "2013-01-01"
# tickers <- c("GSPC","TYX","DJI")
# DJI Fails, why?
# http://finance.yahoo.com/q?s=%5EDJI
tickers <- c("GSPC","TYX") # proceed without DJI
z <- zoo()
index(z) <- as.Date(format(time(z)),tz="")
for (i in 1:length(tickers))
{
cat("Downloading ", i, " out of ", length(tickers) , "\n")
x <- try(get.hist.quote(
instrument = paste0("^",tickers[i])
, start = date.start
, end = date.end
, quote = "AdjClose"
, provider = "yahoo"
, origin = "1970-01-01"
, compression = "d"
, retclass = "zoo"
, quiet = FALSE)
, silent = FALSE)
print(x[1:4]) # check that it's not empty
colnames(x) <- tickers[i]
z <- try(merge(z,x), silent = TRUE)
}
가 dput 내 데이터 세트 (머리 (DF)) : 여기
Sys.setenv(TZ = "GMT")
# > Sys.getenv("TZ")
# [1] "GMT"
# the TZ variable is properly set
# but does not affect the time zone in zoo objects, why?
는 야후의 데이터를 얻을하려면 코드입니다 df의 데이터를 z의 데이터와 병합하십시오. 나는 그것이 작동하도록 할 수 없습니다.
저는 R이 처음이어서 효율성, 모범 사례 등에 대한 조언을 많이드립니다. 감사합니다.
편집 : 솔루션
첫 번째 문제에: GSEE의 제안에 따라 다우 존스 산업 평균 데이터가 quantmod 패키지로 다운로드 할 수 있습니다 : 따라서, 대신 "^ DJI"시세의, yahoo에서 더 이상 사용할 수없는 "DJIA"티커를 사용하십시오. "DJIA"티커에는 캐럿이 없습니다.
두 번째 문제에 대한 조슈아 울리히 (Joshua Ulrich)는 "요일에는 시간 구성 요소가 없기 때문에 날짜에는 시간대가 없습니다."라고 지적합니다.
세 번째 문제 : 데이터 프레임이 agstudy에서 주석으로 지적한대로 손상된 것으로 나타납니다.
: 여기toDate <- function(x){ as.Date(as.character(x), format("%Y%m%d")) } dtz <- read.zoo("myData.csv" , header = TRUE , sep = "," , FUN = toDate ) dtx <- as.xts(dtz)
이 내 CSV 파일에서 적절한 날짜를 가져 오는 데 사용했던 코드 :library(quantmod)
내 솔루션은 quantmod 패키지와 연결된 동물원/XTS 패키지에 의존
csv 파일의 날짜가 "19861231"형식의 단일 열에 저장되었습니다. 올바른 날짜를 얻는 열쇠는 "as.character()"에 날짜를 래핑하는 것이 었습니다. 이 코드의 일부는 R - Stock market data from csv to xts에서 영감을 받았습니다. 나는 동물원/xts 매뉴얼이 도움이된다는 것을 발견했다.
나는 다음이 데이터 세트에서 날짜 범위를 추출 : I 다운로드 다른 데이터가 같은 기간을 포함 있도록
date.start <- start(dtx)
date.end <- end(dtx)
나는 quantmod의 getSymbols 기능과 그 날짜를 사용합니다.
다음은 세 개의 시세 표시기를 모두 사용하는 코드입니다. GSEE는 의견에 지적
tickers <- c("^GSPC","^TYX","DJIA")
data <- new.env() # the data environment will store the data
do.call(cbind, lapply(tickers
, getSymbols
, from = date.start
, to = date.end
, env = data # data saved inside an environment
)
)
ls(data) # see what's inside the data environment
data$GSPC # access a particular ticker
또한 FALSE 옵션
auto.assign =이 옵션과 함께 ENV = 데이터을 (그렇지 않으면 다운로드가 실패) 사용할 수 없습니다, 유의하십시오. 큰 도움을 주셔서 감사합니다.
을 할 방법 . 이 페이지는 제공자 페이지에서 확인할 수 있습니다. http://finance.yahoo.com/q/hp?s=%5ETYX+Historical+Prices – agstudy
귀하의 df가 날짜를 골랐습니다. 따라서 귀하의 시세표와 병합 할 수 없습니다. – agstudy
요일에는 시간 구성 요소가 없으므로 날짜에는 시간대가 없습니다. –