Hi
This is my function. It serves an HTML page after the calculations. I'm
connecting to a MSSQL DB using pyodbc.
def CAPM(self,client):
r=self.r
cds="1590"
bm="20559"
d1 = []
v1 = []
v2 = []
print"Parsing GET Params"
params=client.g[1].split("&")
for items in params:
item=items.split("=")
if(item[0]=="cds"):
cds=unquote(item[1])
elif(item[0]=="bm"):
bm=unquote(item[1])
print "cds: %s bm: %s" % (cds,bm)
print "Fetching data"
t3=datetime.now()
for row in self.cursor.execute("select * from (select * from (
select co_code,dlyprice_date,dlyprice_close from feed_dlyprice P where
co_code in (%s,%s) ) DataTable PIVOT ( max(dlyprice_close) FOR co_code IN
([%s],[%s]) )PivotTable ) a order by dlyprice_date" %(cds,bm,cds,bm)):
d1.append(str(row[0]))
v1.append(row[1])
v2.append(row[2])
t4=datetime.now()
t1=datetime.now()
print "Calculating"
d1.pop(0)
d1vec = robjects.StrVector(d1)
v1vec = robjects.FloatVector(v1)
v2vec = robjects.FloatVector(v2)
r1 = r('Return.calculate(%s)' %v1vec.r_repr())
r2 = r('Return.calculate(%s)' %v2vec.r_repr())
tl =
robjects.rlc.TaggedList([r1,r2],tags=('Geo','Nifty'))
df = robjects.DataFrame(tl)
ts2 = r.timeSeries(df,d1vec)
tsa = r.timeSeries(r1,d1vec)
tsb = r.timeSeries(r2,d1vec)
robjects.globalenv["ta"] = tsa
robjects.globalenv["tb"] = tsb
robjects.globalenv["t2"] = ts2
a = r('table.CAPM(ta,tb)')
t2=datetime.now()
page="<html><title>CAPM</title><body>Result:<br>%s<br>Time
taken by
DB:%s<br>Time taken by R:%s<br>Total time
elapsed:%s<br></body></html>"
%(str(a),str(t4-t3),str(t2-t1),str(t2-t3))
print "Serving page:"
#print page
self.serveResource(page,"text",client)
On Linux
Time taken by DB:0:00:00.024165
Time taken by R:0:00:05.572084
Total time elapsed:0:00:05.596288
On Windows
Time taken by DB:0:00:00.112000
Time taken by R:0:00:02.355000
Total time elapsed:0:00:02.467000
Why is there such a huge difference in the time taken by R on the two
platforms? Am I doing something wrong? It's my first Rpy2 code so I guess
it's badly written.
I'm loading the following libraries:
'PerformanceAnalytics','timeSeries','fPortfolio','fPortfolioBacktest'
I'm using Rpy2 2.1.0 and R 2.11
Regards
Abhijit Bera
[[alternative HTML version deleted]]
Update: it appears that the time taken isn't so much on the Data conversion. The maximum time taken is in CAPM calculation. :( Anyone know why the CAPM calculation would be faster on Windows? On Wed, May 19, 2010 at 5:51 PM, Abhijit Bera <abhibera@gmail.com> wrote:> Hi > > This is my function. It serves an HTML page after the calculations. I'm > connecting to a MSSQL DB using pyodbc. > > def CAPM(self,client): > > r=self.r > > cds="1590" > bm="20559" > > d1 = [] > v1 = [] > v2 = [] > > > print"Parsing GET Params" > > params=client.g[1].split("&") > > for items in params: > item=items.split("=") > > if(item[0]=="cds"): > cds=unquote(item[1]) > elif(item[0]=="bm"): > bm=unquote(item[1]) > > print "cds: %s bm: %s" % (cds,bm) > > print "Fetching data" > > t3=datetime.now() > > for row in self.cursor.execute("select * from (select * from ( > select co_code,dlyprice_date,dlyprice_close from feed_dlyprice P where > co_code in (%s,%s) ) DataTable PIVOT ( max(dlyprice_close) FOR co_code IN > ([%s],[%s]) )PivotTable ) a order by dlyprice_date" %(cds,bm,cds,bm)): > d1.append(str(row[0])) > v1.append(row[1]) > v2.append(row[2]) > > t4=datetime.now() > > t1=datetime.now() > > print "Calculating" > > d1.pop(0) > d1vec = robjects.StrVector(d1) > v1vec = robjects.FloatVector(v1) > v2vec = robjects.FloatVector(v2) > > r1 = r('Return.calculate(%s)' %v1vec.r_repr()) > r2 = r('Return.calculate(%s)' %v2vec.r_repr()) > > tl = robjects.rlc.TaggedList([r1,r2],tags=('Geo','Nifty')) > df = robjects.DataFrame(tl) > > ts2 = r.timeSeries(df,d1vec) > tsa = r.timeSeries(r1,d1vec) > tsb = r.timeSeries(r2,d1vec) > > robjects.globalenv["ta"] = tsa > robjects.globalenv["tb"] = tsb > robjects.globalenv["t2"] = ts2 > a = r('table.CAPM(ta,tb)') > > t2=datetime.now() > > > page="<html><title>CAPM</title><body>Result:<br>%s<br>Time taken by > DB:%s<br>Time taken by R:%s<br>Total time elapsed:%s<br></body></html>" > %(str(a),str(t4-t3),str(t2-t1),str(t2-t3)) > print "Serving page:" > #print page > > self.serveResource(page,"text",client) > > > > On Linux > Time taken by DB:0:00:00.024165 > Time taken by R:0:00:05.572084 > Total time elapsed:0:00:05.596288 > > On Windows > Time taken by DB:0:00:00.112000 > Time taken by R:0:00:02.355000 > Total time elapsed:0:00:02.467000 > > Why is there such a huge difference in the time taken by R on the two > platforms? Am I doing something wrong? It's my first Rpy2 code so I guess > it's badly written. > > I'm loading the following libraries: > 'PerformanceAnalytics','timeSeries','fPortfolio','fPortfolioBacktest' > > I'm using Rpy2 2.1.0 and R 2.11 > > Regards > > Abhijit Bera > > > > >[[alternative HTML version deleted]]
Reasonably Related Threads
- Issue when calling deparse(substitute(x)) from C with "anonymous" R vectors ?
- problem with table.CAPM in PerformanceAnalytics
- rpy2 pie chart
- fisher.test negative value error
- looking for functions that can test/estimate CAMPM, APT, Fama's factor model, etc.