如何高效地从雅虎财经下载大量代码?
How can efficiently download a large list of tickers from Yahoo Finance?
我有一个非常大的代码列表,我想使用 Yahoo finance 下载财务数据。
我现在正在使用 python,但也欢迎使用 R 解决方案。
这是一段 python 代码,还附有带有代码的 excel 文件:
import yfinance as yf
from yahoofinancials import YahooFinancials
# get tickers
mf_tickers = pd.read_excel('tickers_mutual_funds.xlsx')
# download data
tickers = mf_tickers.Symbol
funds_financials = YahooFinancials(tickers)
data = funds_financials.get_historical_price_data(start_date='2019-01-01',
end_date='2019-12-31',
time_interval='weekly')
问题是我的计算机加载这种大小的数据需要很长时间,比如几个小时。
加载这些数据的更好、更有效的方法是什么?如前所述,我对 python 或 R 解决方案都很满意。
要加载的文件:
https://www.dropbox.com/s/1l41tk8gxzqvutd/tickers_mutual_funds%20copy.xlsx?dl=0
谢谢
我会提供一个名为 yahooquery 的软件包,其中包含 免责声明:我是该软件包的作者。
您可以这样做:
from yahooquery import Ticker
mf_symbols = pd.read_excel('tickers_mutual_funds.xlsx')
symbols = mf_tickers.Symbol.tolist()
tickers = Ticker(symbols, asynchronous=True)
data = tickers.history(start='2019-01-01', end='2019-12-31', interval='1wk')
在大多数情况下,历史方法将 return 一个 pandas.DataFrame
。但是,您的列表中有很多股票代码在 2019 年不存在,或者根本没有数据。所以,这将是一个字典,每个符号作为一个键。
以下是获取单个数据框的方法:
# Add symbol column to each dataframe
for key in data:
if isinstance(data[key], pd.DataFrame):
data[key]['symbol'] = key
# Concat all dataframes
df = pd.concat([data[k] for k in data if isinstance(data[k], pd.DataFrame)])
这是我 运行 使用上述相同功能时的一些统计数据:
- 运行时间:~5 分钟
- 有效符号(return编辑数据的符号):19,415
- 数据框中的总行数:1,008,180
- 没有数据的符号:6,571
我有一个非常大的代码列表,我想使用 Yahoo finance 下载财务数据。
我现在正在使用 python,但也欢迎使用 R 解决方案。
这是一段 python 代码,还附有带有代码的 excel 文件:
import yfinance as yf
from yahoofinancials import YahooFinancials
# get tickers
mf_tickers = pd.read_excel('tickers_mutual_funds.xlsx')
# download data
tickers = mf_tickers.Symbol
funds_financials = YahooFinancials(tickers)
data = funds_financials.get_historical_price_data(start_date='2019-01-01',
end_date='2019-12-31',
time_interval='weekly')
问题是我的计算机加载这种大小的数据需要很长时间,比如几个小时。
加载这些数据的更好、更有效的方法是什么?如前所述,我对 python 或 R 解决方案都很满意。
要加载的文件: https://www.dropbox.com/s/1l41tk8gxzqvutd/tickers_mutual_funds%20copy.xlsx?dl=0
谢谢
我会提供一个名为 yahooquery 的软件包,其中包含 免责声明:我是该软件包的作者。
您可以这样做:
from yahooquery import Ticker
mf_symbols = pd.read_excel('tickers_mutual_funds.xlsx')
symbols = mf_tickers.Symbol.tolist()
tickers = Ticker(symbols, asynchronous=True)
data = tickers.history(start='2019-01-01', end='2019-12-31', interval='1wk')
在大多数情况下,历史方法将 return 一个 pandas.DataFrame
。但是,您的列表中有很多股票代码在 2019 年不存在,或者根本没有数据。所以,这将是一个字典,每个符号作为一个键。
以下是获取单个数据框的方法:
# Add symbol column to each dataframe
for key in data:
if isinstance(data[key], pd.DataFrame):
data[key]['symbol'] = key
# Concat all dataframes
df = pd.concat([data[k] for k in data if isinstance(data[k], pd.DataFrame)])
这是我 运行 使用上述相同功能时的一些统计数据:
- 运行时间:~5 分钟
- 有效符号(return编辑数据的符号):19,415
- 数据框中的总行数:1,008,180
- 没有数据的符号:6,571