如何对股票数据的结构化列表进行排序以供以后在 Python 中访问?

Bla*_*der 2 python dictionary stocks list yahoo-api

我对 Python 非常陌生,想构建一个黑盒股票交易程序,该程序可以找到股票收益率之间的各种相关性,并给出买入、卖出、持有等响应。我发现了一个简洁易用的 Python 模块用于检索名为 ystockquote 的股票数据,该数据从 Yahoo! 金融。该模块可以在http://www.goldb.org/ystockquote.html找到

它的功能之一是以以下形式输出股票的历史价格 ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos']。我可以给它一个日期范围来执行此操作,它给我一个嵌套列表,其中包含一个包含每天的上述信息的列表。

我的问题是如何将这些单独的数据点(日期、开盘价、最高价、最低价等)组织成一个结构,以便我稍后在脚本中调用并进行排序。我需要这个过程易于自动化。我可能会发现哪些算法或数据结构有用?

mac*_*ing 5

您可能正在寻找字典结构而不是列表:

>>> prices = dict()
>>> prices['2011-01-02'] = {'Open':20.00, 'High':30.00, 'Low':10.00, 'Close':21.00, 'Volume':14.00, 'Adj Clos':120}
>>> prices['2010-11-09'] = {'Open':22.00, 'High':50.00, 'Low':20.00, 'Close':42.00, 'Volume':10.00, 'Adj Clos':666}
>>> prices
{'2011-01-02': {'Volume': 14.0, 'Adj Clos': 120, 'High': 30.0, 'Low': 10.0, 'Close': 21.0, 'Open': 20.0}, '2010-11-09': {'Volume': 10.0, 'Adj Clos': 666, 'High': 50.0, 'Low': 20.0, 'Close': 42.0, 'Open': 22.0}}
Run Code Online (Sandbox Code Playgroud)

在这里,我在主“价格”字典的每个条目中嵌套了一个字典。字典的第一层以日期为键,并映射到包含该日期价格信息的字典。

>>> prices['2011-01-02']
{'Volume': 14.0, 'Adj Clos': 120, 'High': 30.0, 'Low': 10.0, 'Close': 21.0, 'Open': 20.0}
Run Code Online (Sandbox Code Playgroud)

字典的第二层使用属性名称作为键,并映射到属性值本身。

>>> prices['2010-11-09']['Open']
22.0
>>> prices['2010-11-09']['Close']
42.0
Run Code Online (Sandbox Code Playgroud)

看来,对于get_historical_prices你所指的函数,每一天都作为表单的一个条目输出[Date, Open, High, Low, Close, Volume, Adj_Clos]。如果你想为这些条目的列表构建一个字典,你需要做三件事:

首先,您需要为每个条目建立索引以将Date与其他元素分开,因为这是您将用于索引 dict 的第一个维度的内容。您可以使用 获取第一个元素,使用 获取entry[0]其余元素entry[1:]

>>> entry = ['2011-01-02', 20.00, 30.00, 10.00, 21.00, 14.00, 120]
>>> date = entry[0]
>>> date
'2011-01-02'
>>> values = entry[1:]
>>> values
[20.0, 30.0, 10.0, 21.0, 14.0, 120]
Run Code Online (Sandbox Code Playgroud)

其次,由于您希望将每个其他元素与特定键相关联,您应该按照提供给您的数据元素的相同顺序列出这些键。使用该zip()函数,您可以组合两个列表pand q,从每个列表中取出第 i 个元素并制作zip(p,q)[i] == (p[i], q[i]). 通过这种方式,您可以创建一个 (key, value) 对列表,您可以将其传递给字典构造函数:

>>> keys = ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos']
>>> pairs = zip(keys, entry[1:])
>>> pairs
[('Open', 20.0), ('High', 30.0), ('Low', 10.0), ('Close', 21.0), ('Volume', 14.0), ('Adj Clos', 120)]
Run Code Online (Sandbox Code Playgroud)

最后,您要构建您的字典,并将其索引到整个历史记录中的适当日期:

>>> stockdict = dict(pairs)
>>> stockdict
{'Volume': 14.0, 'Adj Clos': 120, 'High': 30.0, 'Low': 10.0, 'Close': 21.0, 'Open': 20.0}
>>> histodict = dict()
>>> histodict[date] = stockdict
Run Code Online (Sandbox Code Playgroud)

您可以通过history两种方式遍历嵌套列表以构建字典,第一种是使用传统for循环:

keys = ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos']
histodict = dict()
for item in history:
    date = item[0]
    values = item[1:]
    histodict[date] = dict(zip(keys, values))
Run Code Online (Sandbox Code Playgroud)

或者,如果您想使用更高级的 Python 技术,请尝试使用嵌套的 dict生成器语句

keys = ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos']
histodict = dict((item[0], dict(zip(keys, item[1:]))) for item in history)
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉编程,那么最后一个很糟糕,但我鼓励您阅读该链接;请记住,在使用 Python 编程时,Google 是您的朋友。我希望我在这里给了你足够的关键字和想法来开始学习,剩下的就交给你了。