如何在Python中将股票数据从列表输入Alpha Vantage
我刚开始学Python,但对编程的基本概念还是有点了解。我想用Alpha Vantage来获取股票数据进行分析。目前,我只能一次性获取一只股票的数据,还需要用户手动输入:
import pandas as pd
from alpha_vantage.timeseries import TimeSeries
import time
api_key = 'QLIFIFQWRVWXRA4U'
STOCK = str(input('What stock do you want to search? '))
ts = TimeSeries(key=api_key, output_format='pandas')
data, meta_data = ts.get_daily(symbol=STOCK, outputsize = 'compact')
print(data)
我想要解决的问题是,不再让用户输入数据,而是用一个文件来存储多只股票的信息(比如说《财富500强》里的股票),这样程序就可以一个接一个地查找这些股票的数据。之后我可以利用这些数据来进行我想要的分析。比如说,我可能会有这样一个股票列表:
MSFT, F, GM, BROS
我希望程序能自动输入MSFT的数据,而不是让我手动输入。获取到这只股票的数据后,程序再继续处理F的数据,依此类推。
我知道怎么处理输出的数据,但在获取输入这部分我遇到了困难。
谢谢大家的帮助。
我不知道该从哪里开始,除了手动请求用户输入之外。
1 个回答
假设用户创建了一个文本文件,内容是“MSFT, F, GM, BROS”,你可以用Python的内置函数open
把这个文本读进你的环境里。
STOCKS = open(path_to_text, "r").read()
这样就会把变量STOCKS
设置为一个字符串“MSFT, F, GM, BROS”。
对于函数ts.get_daily(symbol=STOCK, outputsize = 'compact')
来说,它需要的STOCK
是股票代码,所以你需要用一个循环,每次添加一个股票代码。
你可以用STOCKS.split(",")
把字符串按逗号分开,这样就会得到一个股票列表["MSFT ", "F ", "GM ", "BROS"]
。你会发现每个股票代码后面都有空格,因为它们也是字符串,所以你需要把这些空格去掉。使用列表推导式,可以写成STOCKS = [i.strip() for i in STOCKS.split(",")]
。
现在你可以用一个循环,把每个股票代码一个一个地传入你的函数。
for STOCK in STOCKS:
data, meta_data = ts.get_daily(symbol=STOCK, outputsize = 'compact')
print(data)
请注意,这样做会在每次循环中打印数据,然后覆盖之前的数据。所以建议把数据保存在一个字典里。
STOCK_DATA = dict()
for STOCK in STOCKS:
fetched_data = dict()
fetched_data["data"], fetched_data["meta_data"] = ts.get_daily(symbol=STOCK, outputsize = 'compact')
STOCK_DATA[STOCK] = fetched_data
print(fetched_data["data"])
之后,你可以通过STOCK_DATA["MSFT"]
或者STOCK["MSFT"]["data"]
找到特定的数据点。虽然也可以用像pandas
这样的库来实现同样的效果,但我更喜欢用原生的方法。