2011-08-08 21 views
0

不使用matplotlib財務模塊。我喜歡將url數據變成一個numpy數組。 在哪裏我可以列標題做數學。像:使用Numpy創建Yahoo財務價格表

prices = r.adj_close 

來源: http://matplotlib.sourceforge.net/examples/pylab_examples/finance_work2.html

除了我不想使用:

fh = finance.fetch_historical_yahoo(ticker, startdate, enddate) 
# a numpy record array with fields: date, open, high, low, close, volume, adj_close) 

r = mlab.csv2rec(fh); fh.close() 
r.sort() 

使用手動創建的網址:

 url = http://ichart.yahoo.com/table.csv?a=2&c=2011&b=30&e=7&d=7&g=d&f=2011&s=msft&ignore=.csv 

     f = urllib.urlopen(url) 
     fr = f.read() 



     hdata = np.asarray(fr, dtype='object') 
     prices = hdata.adj_close 
     print prices 
+1

什麼問題? – agf

+0

閱讀問題。我喜歡將url數據變成一個numpy數組。 – Merlin

+0

什麼對你現在的代碼不起作用?什麼是錯誤信息?而且,如果這是一個問題,請將其作爲一個問題_。您的帖子中沒有任何問題。 – agf

回答

4

使用numpy.loadtxt( )加載csv:

import numpy as np 
import pylab as pl 
import urllib 
url = "http://ichart.yahoo.com/table.csv?a=2&c=2011&b=30&e=7&d=7&g=d&f=2011&s=msft&ignore=.csv" 
f = urllib.urlopen(url) 
title = f.readline().strip().split(",") 
data = np.loadtxt(f, dtype=np.float, delimiter=",", converters={0: pl.datestr2num})) 

第一列是日期,因此請使用pylab.datestr2num將其轉換爲數字。

+0

「pylab.datestr2num將其轉換爲數字」?有沒有什麼辦法保持日期。我不熟悉你爲什麼改變它。我需要日期作爲日期。另外,我會如何做price = data.adj_close? – Merlin

+0

字面問題,我明白了。也許使用日期作爲對象。 – Merlin

+0

prices = data [:,6]或prices = data [:,title.index(「Adj Close」)] – HYRY

0

如果你不希望加載pylab時間字符串轉換,您可以使用mktime功能拉姆達:

import numpy as np 
import urllib 
import time 
url = "http://ichart.yahoo.com/table.csv?a=2&c=2011&b=30&e=7&d=7&g=d&f=2011&s=msft&ignore=.csv" 
f = urllib.urlopen(url) 
title = f.readline().strip().split(",") 
data = np.loadtxt(f, dtype={'names': ('dtime', 'open', 'high','low','close','volume','aclose'), 
          'formats': ('u4', 'f8', 'f8','f8','f8','u4','f8')}, 
        delimiter=",", 
        converters={0: lambda y:int(time.mktime(time.strptime(y,'%Y-%m-%d')))}) 
0

也可以使用S10告訴numpy的第一實體一個長度爲10的字符串。這樣,你不需要使用lambda。

data = np.loadtxt(f, dtype={'names': ('dtime', 'open', 'high','low','close','volume','aclose'), 'formats': ('S10', '<f8', '<f8','<f8','<f8','i','<f8')}, 
          delimiter=",") 

i=integer, <f8 =0.256, f8=0.25600001298, S10="MM-DD-YYYY" 

有關樓F8,U4,S,U8等更多信息,請訪問此link