`import streamlit as st
from datetime import date
import yfinance as yf
from prophet import Prophet
from prophet.plot import plot_plotly
from plotly import graph_objs as go
START = "2014-01-01"
TODAY = date.today().strftime("%Y-%m-%d")
st.title("Stock Prediction App")
stock = (
"AAPL", "GOOG", "MSFT", "GME", "AMZN", "TSLA", "FB", "NFLX", "NVDA", "AMD",
"INTC", "IBM", "ORCL", "SAP", "CRM", "ADBE", "HPQ", "TWTR", "SNAP", "SQ",
"PYPL", "EBAY", "BABA", "JD", "V", "MA", "AXP", "DIS", "PEP", "KO", "MCD",
"WMT", "TGT", "COST", "PFE", "MRK", "JNJ", "GSK", "NKE", "ADDYY", "TM", "F",
"GM", "FCAU", "BA", "GE", "CAT", "DE", "MMM", "UTX", "LMT", "RTX", "NOC",
"GD", "BAC", "C", "WFC", "JPM", "GS", "MS", "AIG", "ALL", "PGR", "TRV",
"CVX", "XOM", "BP", "RDS.A", "TOT", "COP", "PSX", "SLB", "HAL", "EOG",
"DVN", "APA", "BKR", "PXD", "CTXS", "SYMC", "XRX", "GLW", "APH", "ROP",
"TYC", "HON", "DHR", "TXT", "PHG", "SI", "ERIC", "NOK", "VOD", "T", "VZ",
"TMUS", "S", "FTR", "LRCX", "KLAC", "ASML", "TXN", "QCOM", "ZM", "UBER",
"LYFT", "SPOT", "BIIB", "CELG", "REGN", "VRTX", "ALXN", "ILMN", "GILD",
"AMGN", "SBUX", "BBY", "LOW", "HD", "NEM", "NEE", "DUK", "SO", "PPL", "AEE",
"EXC", "PCG", "SRE", "DTE", "PEG", "ETR", "WEC", "ES", "XEL", "FE", "D",
"CNP", "CMS", "AEP", "AWK", "CERN", "CPRT", "DLTR", "EA", "EBIX", "ECL",
"EDU", "FAST", "FISV", "FLIR", "GPN", "IDXX", "IART", "ISRG", "IT", "JKHY",
"JBLU", "JBHT", "JCI", "KLAC", "LH", "LRCX", "MCHP", "MDLZ", "MELI", "MNST",
"MPWR", "MSFT", "MTCH", "MU", "MXIM", "NCLH", "NFLX", "NLOK", "NTRS", "NVR",
"ODFL", "ORLY", "PAYX", "PCAR", "PCTY", "PEP", "PTC", "PXD", "PYPL", "QCOM",
"QRVO", "REGN", "ROST", "SBAC", "SBUX", "SIVB", "SKYW", "SNPS", "SPLK",
"SRCL", "SSNC", "STX", "SWKS", "SYNH", "TCOM", "TSCO", "TSLA", "TTWO",
"TXN", "UAL", "ULTA", "VRSK", "VRSN", "VRTX", "WBA", "WDAY", "WDC", "WLTW",
"WM", "WYNN", "XEL", "XLNX", "XRAY", "ZION", "ZM", "ATVI", "ADP", "CSCO",
"CSX", "CTAS", "CTSH", "CTXS", "EXPD", "FAST", "FISV", "HAS", "HSIC", "INCY",
"INTU", "ISRG", "JBHT", "LRCX", "MAR", "MCHP", "MDLZ", "MELI", "MNST", "MRNA",
"MRVL", "MSFT", "MTCH", "MU", "MXIM", "NTAP", "NVDA", "ODFL", "OKTA", "ORLY",
"PANW", "PAYX", "PCAR", "PDD", "PEP", "PTON", "PYPL", "QCOM", "REGN", "ROST",
"SBUX", "SGEN", "SIRI", "SNPS", "SPLK", "SWKS", "TCOM", "TSLA", "TTWO",
"TXN", "UAL", "ULTA", "VRSK", "VRSN", "VRTX", "WBA", "WDAY", "XEL", "XLNX",
"ZM"
)
selected_stock = st.selectbox("Select dataset for prediction", stock)
n_years = st.slider("Years of Prediction", 1, 4)
period = n_years * 365
@st.cache_data
def load_data(ticker):
data = yf.download(ticker, START, TODAY)
data.reset_index(inplace=True)
return data
data_load_state = st.text("Load Data...")
data = load_data(selected_stock)
data_load_state.text("Loading Data... done!")
st.subheader('Raw Data')
st.write(data.tail())`
我正在创建一个基本网站,根据以前的数据预测股票走势,但是,当尝试从雅虎财经 API 检索数据时,它返回一个空值,我该怎么办?当我实际运行该网站时,选择栏工作正常,但由于数据值为空,下表为空。
在使用 Streamlit 时遇到雅虎财经 API 未检索数据的问题,原因可能是:
- 雅虎财经 API 更改: 雅虎财经经常更改其 API,因此使用的库版本可能已过时。
-
缓存问题:
Streamlit 的
@st.cache_data
装饰器可能会缓存过时的数据。 - 速率限制: 雅虎财经 API 可能对请求频率有限制,如果发送过多的请求,的 IP 地址可能会被暂时封禁。
- 代码错误: 的代码中可能存在导致 API 请求失败的错误。
以下是可以尝试的几种解决方案:
1. 更新库:
-
确保使用的是
yfinance
库的最新版本。可以使用以下命令更新:bash pip install --upgrade yfinance
2. 清除缓存:
- 尝试从 Streamlit 应用程序中清除缓存。可以通过单击 Streamlit 界面右上角的汉堡菜单,然后选择“Clear cache”来完成此操作。
-
尝试删除或重命名
load_data
函数上的@st.cache_data
装饰器,以查看它是否是问题的原因。
3. 处理速率限制:
-
在的代码中添加错误处理,以捕获任何
yfinance
引发的异常。可以使用try-except
块来实现此目的。例如:python @st.cache_data def load_data(ticker): try: data = yf.download(ticker, START, TODAY) data.reset_index(inplace=True) return data except Exception as e: st.error(f"Error fetching data: {e}") return None
-
如果需要频繁地获取数据,请考虑使用 API 密钥或在请求之间添加延迟。
4. 检查代码错误:
- 仔细检查的代码,确保 API 端点、股票代码和日期格式正确无误。
-
尝试在 Streamlit 应用程序之外运行
yf.download()
函数,以确保它可以检索数据。
其他建议:
- 考虑使用其他股票数据 API,例如 Alpha Vantage 或 Tiingo。
- 查看 yfinance GitHub 存储库,了解其他用户是否报告了类似的问题。
通过尝试这些解决方案,应该能够解决雅虎财经 API 未检索数据的问题。
标签:python,streamlit,yahoo-finance,yahoo-api From: 78810322