2013-05-17 5 views
2

Язык программирования Python очень помог мне в разработке приложений для анализа финансовых данных. Кроме того, для анализа данных также имеется R, в котором имеются специализированные пакеты анализа финансовых данных, например: quantmod.Примеры python rpy2 и quantmod

Теперь, что есть rpy2 для взаимодействия между обоими этими Языки (то есть Python & R). Я хотел бы прототипировать некоторые приложения для анализа финансовых данных, используя силу python с пакетом quantmod.

К настоящему моменту я провел несколько часов в Интернете, чтобы найти примеры быстрого запуска кода на языке программирования python, который использует rpy2 (пакет python) и вызывает функции quantmod. До сих пор мне не удавалось найти подходящий материал ... кроме документации rm2 & quantmod.

Поэтому вопрос следующим образом: =>

  1. знает любой один из подходящего ресурса/с, чтобы я начал с питона & quantmod с помощью rpy2?
  2. В качестве альтернативы, может ли быть один простой пример/s питонического кода, который вызывает функции quantmod с помощью rpy2?

Вот попытка шахты в реализации прототипа с использованием rpy2 & quantmod:

from rpy2.robjects.packages import importr 

sta = {"skeleton.TA": "skeleton_dot_TA", "skeleton_TA": "skeleton_uscore_TA"} 
quantmod = importr('quantmod', robject_translations = sta) 

IBM = quantmod.getSymbols("IBM") 

Проблема с вышеуказанным кодом (quantmodplot.py) является то, что он производит "RuntimeError" следующим образом:

As of 0.4-0, ‘getSymbols’ uses env=parent.frame() and 
auto.assign=TRUE by default. 

This behavior will be phased out in 0.5-0 when the call will 
default to use auto.assign=FALSE. getOption("getSymbols.env") and 
getOptions("getSymbols.auto.assign") are now checked for alternate defaults 

This message is shown once per session and may be disabled by setting 
options("getSymbols.warning4.0"=FALSE). See ?getSymbol for more details 
Error in as.character(sc[[1]]) : 
    cannot coerce type 'closure' to vector of type 'character' 
Traceback (most recent call last): 
    File "quantmodplot.py", line 6, in <module> 
    IBM = quantmod.getSymbols("IBM") 
    File "/usr/local/lib/python2.7/dist-packages/rpy2-2.3.6-py2.7-linux-i686.egg/rpy2/robjects/functions.py", line 86, in __call__ 
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/rpy2-2.3.6-py2.7-linux-i686.egg/rpy2/robjects/functions.py", line 35, in __call__ 
    res = super(Function, self).__call__(*new_args, **new_kwargs) 
rpy2.rinterface.RRuntimeError: Error in as.character(sc[[1]]) : 
    cannot coerce type 'closure' to vector of type 'character' 

Ваша помощь будет принята с благодарностью ...

+0

'RRuntimeError' часто возникает, когда ошибка происходящий из R ... является' getSymbols («IBM») 'работает вообще, когда в R? – lgautier

+0

'getSymbols (« IBM »)' работает в R, например, я могу выполнить приведенный ниже сценарий в R & it отлично работает: 'require ('quantmod')' 'getSymbols ('IBM', src = 'google', from = '2013-01-01') ' ' candleChart (to.minutes10 (IBM), theme = "white", up.col = "gray", dn.col = "black", TA = NULL) ' ' addMACD (10,35,5) ' – Nash

ответ

1

Сегодня я также протестировали следующие pproach ... т. е. явно вызывающий rpy2.robjects для вызова R-скрипта в python. Примером такого подхода являются строки In [5]:In [6]: в нижнем скрипте python. Интересно, что этот подход, кажется, работает:

In [1]: from rpy2.robjects import r 
In [2]: from rpy2.robjects.packages import importr 
In [3]: sta = {"skeleton.TA": "skeleton_dot_TA", "skeleton_TA": "skeleton_uscore_TA"} 
In [4]: quantmod = importr('quantmod', robject_translations = sta) 
In [5]: IBM = r("getSymbols('IBM', src='google', from='2013-01-01')") 
As of 0.4-0, ‘getSymbols’ uses env=parent.frame() and 
auto.assign=TRUE by default. 

This behavior will be phased out in 0.5-0 when the call will 
default to use auto.assign=FALSE. getOption("getSymbols.env") and 
getOptions("getSymbols.auto.assign") are now checked for alternate defaults 

This message is shown once per session and may be disabled by setting 
options("getSymbols.warning4.0"=FALSE). See ?getSymbol for more details 

In [6]: r("candleChart(IBM, TA=NULL)") 
Out[6]: <RS4 - Python:0xae3a14c/R:0xaae455c> 

Однако запуск такой питон скрипт =>quantmod.getSymbols("IBM") производит RRuntimeError!
Следовательно, основная проблема остается нерешенной!

Ну, вот некоторые экологические подробности о моей машине развития:

OS: Ubuntu Linux 12.04 
Python version: '2.7.3' 
Python package: rpy2-2.3.6 
R version: 3.0.0 (2013-04-03) 
R package: quantmod_0.4-0 
2

getSymbols() немного кажется немного нетрадиционный (R уже имеет функцию get() и mget()).

Проблема возникает в importDefaults() (пакет Defaults), сам по себе странный зверь: он возвращается 2 вызывает фреймы в стек, чтобы получить имя вызова функции (так вот здесь «getSymbols»).

getSymbols() Функция в quantmod содержит код:

function (Symbols = NULL, env = parent.frame(), reload.Symbols = FALSE, 
    verbose = FALSE, warnings = TRUE, src = "yahoo", symbol.lookup = TRUE, 
    auto.assign = getOption("getSymbols.auto.assign", TRUE), 
    ...) 
{ 
    # (...code cut out...) 
    importDefaults("getSymbols") 

Вызов importDefaults("getSymbols) идет вверх вызывающий стек, чтобы получить символ вызывающей функции, то есть «getSymbols».

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

Обходной, чтобы убедиться, что функция имеет вызывающий кадр и символ:

from rpy2.robjects.vectors import ListVector 
base = importr("base") 
base.do_call("getSymbols", ListVector({'Symbols':"IBM"})) 
Смежные вопросы