Как загрузить файл данных CSV в R для использования с Quantmod

Я новичок в R и только начал его использовать. Сейчас я экспериментирую с пакетом Quantmod.

Пакет Quantmod, кажется, делает большую часть того, что я хочу сделать, однако я не хочу использовать функцию getSymbols () для извлечения данных в R. Вместо этого я хочу использовать свои собственные данные, хранящиеся в виде файлов csv на моем локальном диске. .

Я хочу иметь возможность извлекать данные из моих файлов CSV для использования с Quantmod. Я прочитал эту статью, в котором показано, как читать файлы CSV для использования с Quantmod, но мне это не нравится как минимум по двум причинам:

  1. Он записывает новый (переформатированный) файл CSV на диск перед загрузкой в ​​Quantmod. Я бы предпочел проделать любую необходимую работу с памятью, используя R.

  2. В CSV-файле есть заголовки столбцов. Мои данные не имеют заголовков столбцов. Вместо этого поля находятся в заранее определенных фиксированных позициях столбцов (соответствует «стандартному» формату, принятому в таблицах данных Yahoo Finance).

Мне не удалось определить тип данных, возвращаемый функцией getSymbols (). Я ожидал, что он вернет фрейм данных, но когда я проверил его класс, он был идентифицирован как вектор символов, что меня очень удивило (и, честно говоря, не верю, так как я могу построить barChart из содержащихся данных в переменной):

yhoo <- getSymbols("YHOO",src="google")
class(yhoo)
[1] "character"
> yhoo
[1] "YHOO"

Я был бы признателен, если бы кто-нибудь мог показать, как написать небольшую функцию R (скорее всего, оболочку для read.csv), которая будет считывать данные из моего файла CSV и возвращать их как объект R (фрейм данных?) Для использования с Quantmod.

Вот какой-то псевдокод, объясняющий, что я хочу делать:

# in case I need some funcs here for creating data type returned by function
library(quantmod) 

loadCSVDataFile <- function(full_pathname){
    csvdata <- read.csv(full_pathname, header=FALSE,sep=",")
    dates <- csvdata[,1]
    op <- csvdata[,2]
    hi <- csvdata[,3]
    lo <- csvdata[,4]
    cl <- csvdata[,5]
    vol <- csvdata[,6]
    oi <- csvdata[,7]

    # Now combine columns into a data type that matches that returned by the
    # getSymbols() ....
    # return(dataset)
}

[[Обновление]]

Мне STLL не удалось заставить это работать, используя ответы, данные до сих пор ...:

> gbpusd <- as.xts(read.zoo('/path/to/gbpusd.csv', header=FALSE))
> class (gbpusd)
[1] "xts" "zoo"
> barChart(gbpusd)
Error in `[.xts`(x, xsubset) : subscript out of bounds

> gbpusd2 <- getSymbols.csv('gbpusd',,'/path/to/')
Error in missing(verbose) : 'missing' can only be used for arguments
> 
> gbpusd2 <- getSymbols.csv('gbpusd',.GlobalEnv,'/path/to/')
Error in missing(verbose) : 'missing' can only be used for arguments
> 
> 
> gbpusd2 <- getSymbols.csv('gbpusd','.GlobalEnv','/path/to/')
Error in missing(verbose) : 'missing' can only be used for arguments
> 
> gbpusd2 <- getSymbols.csv('gbpusd',env,'/path/to/')
Error in missing(verbose) : 'missing' can only be used for arguments

Что я делаю неправильно?


person Homunculus Reticulli    schedule 23.01.2012    source источник
comment
(1) Можете ли вы переформатировать свой первый пример кода, удалив начальные ›и сделав отступ на 4 пробела; (2) Уверяю вас, что вы не можете построить гистограмму, используя 4 буквы YHOO. Попробуйте класс (YHOO), который дает [1] xts zoo.   -  person neilfws    schedule 23.01.2012
comment
Почему вы пытаетесь определить тип данных, возвращаемый getSymbols? В разделе «Значение» ?getSymbols указано, что он возвращает и как это возвращает. Большинство функций Quantmod также ожидают объект, подобный временному ряду, и data.frames не входят в эту категорию.   -  person Joshua Ulrich    schedule 23.01.2012
comment
Кроме того, в документации сказано не использовать getSymbols.csv () напрямую. Вызовите getSymbols () с src = 'csv' или настройте Quantmod для обработки этого значения по умолчанию с помощью setSymbolLookup ().   -  person Darren Cook    schedule 24.01.2012


Ответы (3)


Я могу заставить его работать, но вы должны определить, какие параметры необходимы для вашей настройки.

library(quantmod)

# create sample data
getSymbols("SPY")
write.zoo(SPY, file="SPY.csv", sep=",")

# set symbol lookup
setSymbolLookup(SPY=list(src="csv",format="%Y-%m-%d"))
# call getSymbols(.csv) with auto.assign=FALSE
spy <- getSymbols("SPY", auto.assign=FALSE)
barChart(spy)
person Joshua Ulrich    schedule 23.01.2012
comment
+1 За код. Фрагмент кода стоит 1К слов. Наконец-то мне удалось понять, что я делаю не так. Спасибо! - person Homunculus Reticulli; 24.01.2012

Распространенная идиома:

yhoo = as.xts(read.zoo("yhoo.csv",header=T))

Если вы хотите использовать функцию Quantmod, вы можете указать getSymbols() использовать файл csv. См. http://www.quantmod.com/documentation/getSymbols.csv.html Т.е.

getSymbols('yhoo',src='csv')

(Я следовал вашему соглашению о нижнем регистре, но помните, что имена файлов будут чувствительны к регистру; по умолчанию используется текущий каталог, и его можно явно указать с помощью параметра dir, см. ?getSymbols.csv)

person Darren Cook    schedule 23.01.2012
comment
Функции работают не так, как я ожидал. то есть я не могу использовать загруженные данные с функциями Quantmod (например, barChart ()). См. Мой обновленный вопрос. - person Homunculus Reticulli; 23.01.2012

Если вы включите в свой код ls (), вы обнаружите, что пропустили переменную:

yhoo <- getSymbols("YHOO", src = "google")
ls()
# [1] "yhoo" "YHOO"
class(yhoo)
# [1] "character"
class(YHOO)
# [1] "xts" "zoo"

Итак, getSymbols () создает две переменные: вектор символов "yhoo" и "YHOO", объект расширяемого временного ряда класса (xts), который расширяет класс zoo для хранение данных нерегулярных временных рядов.

Чтобы просмотреть документацию, используйте:

?xts # or ?zoo

В частности, документация для xts описывает функцию as.xts () для преобразования из матрицы в xts. Оттуда должно быть легко читать в ваших собственных файлах CSV с помощью read.csv или read.table и преобразовывать в объекты xts.

person neilfws    schedule 23.01.2012
comment
+1 и обратите внимание, что вы можете использовать auto.assign=FALSE, чтобы остановить побочный эффект getSymbols создания объекта в глобальной среде. Например. yhoo <- getSymbols("YHOO", src="google", auto.assign=FALSE) присвоит результат getSymbols yhoo вместо YHOO. - person Joshua Ulrich; 23.01.2012
comment
@JoshuaUlrich: меня интересует getSymbols.csv (), так как я хочу загружать данные из моих локальных файлов csv (а не из Интернета) - person Homunculus Reticulli; 23.01.2012
comment
@HomunculusReticulli: getSymbols.csv имеет тот же аргумент auto.assign (хотя он передается через ... и явно не указан, но вы можете увидеть, что это обрабатывается, посмотрев на исходный код). - person Joshua Ulrich; 23.01.2012
comment
@JoshuaUlrich: спасибо за отзыв. Но пробовали ли вы на самом деле то, что рекомендуете? (потому что это не работает, когда я пробую). Под словом «не работает» я КОНКРЕТНО имею в виду следующее: 1. Кажется, что функция загружает файл данных (когда я вызываю getSymbols () с src = csv и соответствующими параметрами папки и символа. ОДНАКО, когда я вызываю barChart () для возвращаемой переменной я получаю следующую ошибку: Ошибка в try.xts (x, error = chartSeries требует объекта xtsible): chartSeries требуется объект xtsible. - person Homunculus Reticulli; 24.01.2012
comment
@HomunculusReticulli: Нет, я не пробовал, потому что вы не предоставили воспроизводимый пример. - person Joshua Ulrich; 24.01.2012