按着写了代码,没啥语法错误,为啥运行报错?新求问
```python
# 导入所需的库
import pandas as pd
import pandas_datareader.data as web
import statsmodels.api as sm
import matplotlib.pyplot as plt
# 获取宁德时代的股票数据,代码为 300750.SZ
start = '2022-01-01' # 起始日期
end = '2023-12-31' # 结束日期
data = web.DataReader('300750.SZ', 'yahoo', start, end) # 从 Yahoo 财经获取数据
# 查看数据的前五行
data.head()
# 提取收盘价作为预测目标
close = data['Close']
# 绘制收盘价的时间序列图
plt.plot(close)
plt.title('Ningde Times Stock Price')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.show()
# 使用 AIC 准则进行 ARMA 模型的阶数选择
aic = pd.DataFrame() # 创建一个空的数据框用于存储 AIC 值
for p in range(5): # 遍历自回归阶数 p 的可能取值
for q in range(5): # 遍历移动平均阶数 q 的可能取值
try: # 尝试建立和拟合 ARMA(p,q) 模型
model = sm.tsa.ARMA(close, order=(p,q)) # 建立模型
result = model.fit() # 拟合模型
aic.loc[p,q] = result.aic # 记录 AIC 值
except: # 如果出现错误,跳过该组合
continue
# 找到最小的 AIC 值对应的 p 和 q 值
min_aic = aic.min().min() # 最小的 AIC 值
p_min, q_min = aic.stack().idxmin() # 最小 AIC 值对应的 p 和 q 值
# 输出最优的模型阶数
print(f'The optimal order of the ARMA model is ({p_min},{q_min})')
# 使用最优的模型阶数重新建立和拟合 ARMA 模型,并查看模型摘要
model_opt = sm.tsa.ARMA(close, order=(p_min,q_min)) # 建立最优模型
result_opt = model_opt.fit() # 拟合最优模型
print(result_opt.summary()) # 输出模型摘要
# 对未来 10 天进行预测,并绘制预测结果和真实数据的对比图
forecast = result_opt.forecast(steps=10) # 预测未来 10 天的收盘价,返回预测值,标准误差和置信区间三个数组
pred = forecast[0] # 预测值数组
# 创建一个新的数据框用于存储真实数据和预测数据,并计算百分比变化率
df = pd.DataFrame()
df['real'] = close[-10:] # 真实数据为最近 10 天的收盘价
df['pred'] = pred # 预测数据为预测的未来 10 天的收盘价
df['real_pct_change'] = df['real'].pct_change
报错
D:\0\python.exe D:\pythonProject\demo\demo01.py
Traceback (most recent call last):
File "D:\pythonProject\demo\demo01.py", line 10, in <module>
data = web.DataReader('300750.SZ', 'yahoo', start, end) # 从 Yahoo 财经获取数据
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\0\Lib\site-packages\pandas\util\_decorators.py", line 211, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "D:\0\Lib\site-packages\pandas_datareader\data.py", line 379, in DataReader
).read()
^^^^^^
File "D:\0\Lib\site-packages\pandas_datareader\base.py", line 253, in read
df = self._read_one_data(self.url, params=self._get_params(self.symbols))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\0\Lib\site-packages\pandas_datareader\yahoo\daily.py", line 153, in _read_one_data
data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: string indices must be integers, not 'str'
进程已结束,退出代码1