Использование Numpy для создания таблицы цен финансов Yahoo - PullRequest
0 голосов
/ 08 августа 2011

Без использования финансового модуля matplotlib. Мне нравится получать данные URL в массиве NumPy. где я могу к колонке, чтобы сделать математику. Нравится:

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:

        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

Ответы [ 3 ]

4 голосов
/ 08 августа 2011

используйте 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 голосов
/ 19 августа 2015

Можно также использовать S10, чтобы сообщить numpy, что первая сущность - это строка длиной 10. Таким образом, вам не нужно использовать лямбду.

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"

Для получения дополнительной информации о f, f8, u4, S, u8 и т. Д., Перейдите по этой ссылке .

0 голосов
/ 04 января 2012

Если вы не хотите загружать 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')))})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...