Python rpy2 und quantmod Beispiele

Python Programmiersprache hat mir sehr geholfen bei der Entwicklung von Finanzdatenanalyse-Anwendungen. Alternativ dazu gibt es auch die R für die Datenanalyse, bei der es sich um Finanzdatenanalysepakete handelt, zum Beispiel: quantmod .

Nun, dass es rpy2 gibt, um zwischen diesen beiden Sprachen (dh Python & R) zu verbinden. Ich möchte Prototypen einige finanzielle Datenanalyse Anwendungen mit der Macht der Python mit dem Quantmod-Paket.

Mittlerweile habe ich mehrere Stunden damit verbracht, das Internet für einige schnelle Starter-Code-Beispiele in der Python-Programmiersprache zu suchen, die rpy2 (Python-Paket) nennt und Quantmod-Funktionen aufruft. Bisher war ich nicht erfolgreich bei der Suche nach einem geeigneten Material … abgesehen von den rpy2 & quantmod Dokumentationen.

Deshalb ist die Frage wie folgt =>

  1. Weiß jemand von einer geeigneten Ressource / s, um mich mit python & quantmod mit rpy2 zu beginnen?
  2. Alternativ kann man ein einfaches Beispiel / s von pythonischen Code, der Quantmod-Funktionen mit rpy2 aufruft?

Hier ist ein Versuch von mir bei der Implementierung eines Prototyps mit 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") 

Problem mit dem obigen Code (quantmodplot.py) ist, dass es "RuntimeError" wie folgt erzeugt:

  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' 

Ihre Hilfe wird sehr geschätzt …

2 Solutions collect form web for “Python rpy2 und quantmod Beispiele”

Das getSymbols() Bit scheint ein wenig unkonventionell zu sein (R hat schon die Funktionen get() und mget() ).

Das Problem tritt bei importDefaults() (Paket Defaults ), selbst ein seltsames Tier auf: es geht zurück 2 ruft Frames den Stack auf, um den Namen der Funktion aufzurufen (also hier "getSymbols").

Die Funktion getSymbols() in quantmod enthält den Code:

 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") 

Der Aufruf importDefaults("getSymbols) steigt den aufrufenden Stack an, um das Symbol der aufrufenden Funktion zu erhalten, also "getSymbols".

In rpy2 hat eine R-Funktion namens (von Python) kein Symbol in einem R-Einschränkungsrahmen (da der umschließende Rahmen Python ist). In rpy2.robjects Weise ist es wie eine anonyme Funktion für R. Dies könnte vermutlich in der High-Level-Schnittstelle rpy2.robjects verbessert werden, aber ich habe nie die Zeit gefunden, daran zu arbeiten.

Ein Workaround soll sicherstellen, dass die Funktion einen Rufbild und ein Symbol hat:

 from rpy2.robjects.vectors import ListVector base = importr("base") base.do_call("getSymbols", ListVector({'Symbols':"IBM"})) 

Heute habe ich auch den folgenden Ansatz getestet … dh explizit rpy2.robjects anrufen, um R-Skript innerhalb von Python aufzurufen. Beispiel für einen solchen Ansatz sind Zeilen In [5]: In [6]: in der unten python Skript. Interessanterweise scheint dieser Ansatz zu funktionieren:

 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> 

Allerdings läuft ein solches Python-Skript => quantmod.getSymbols("IBM") produziert RRuntimeError !
Daher bleibt das primäre Problem noch ungelöst!

Nun, hier sind einige Umweltdetails über meine Entwicklungsmaschine:

 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 
  • Führender R-Code auf `python` mit SyntaxError: Schlüsselwort kann kein Ausdrucksfehler sein. Nachricht
  • Passliste von python zu R bis rpy2
  • Wie kann ich pyspark RDDs mit R-Funktionen partitionieren
  • Aufspalten und Verketten von Dataframes in Python-Pandas für das Plotten mit rpy2
  • Übergeben einer Python-Variablen auf R mit rpy2
  • Konvertiere R Matrix zu Pandas Dataframe
  • Aufruf von benutzerdefinierten Funktionen von Python mit rpy2
  • Rpy2-Fehler wac-a-mol: R_USER nicht definiert
  • Migration einer logistischen Regression von R nach rpy2
  • Rpy2 konnte nicht korrekt installiert werden
  • Übergeben von Vektoren und params von Python zu R-Funktionen
  • Python ist die beste Programmiersprache der Welt.