用Python预测600519)的股价涨跌,我们可以采用时间序列预测模型,如Facebook的Prophet模型或Long Short-Term Memory (LSTM) 神经网络。由于Prophet更适合初学者且更易于使用,我们将使用Prophet进行股价预测。
以下是步骤:
- 获取股票数据。
- 导入必要的库并加载数据。
- 对数据进行预处理,使其适合Prophet模型。
- 训练Prophet模型并进行预测。
- 评估模型并进行可视化。
步骤 1: 获取股票数据
可以使用库从Yahoo Finance获取贵州茅台的股票数据。
pip install yfinance
pip install prophet
步骤 2: 导入必要的库并加载数据
import yfinance as yf
import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt
# 下载股票数据
ticker = '600519.SS' # 在上海证券交易所的股票代码
data = yf.download(ticker, start='2020-01-01', end='2023-12-31')
# 查看数据
print(data.head())
步骤 3: 对数据进行预处理
Prophet要求数据框必须包含两列:ds
(日期)和 y
(数值)。我们需要确保数据框符合这个格式。
# 选择收盘价作为预测目标,并重命名列以适应Prophet的要求
data = data.reset_index()
data.rename(columns={'Date': 'ds', 'Close': 'y'}, inplace=True)
# 查看数据
print(data.head())
步骤 4: 训练Prophet模型并进行预测
# 初始化Prophet模型
model = Prophet()
# 拟合模型
model.fit(data)
# 创建未来的数据框(未来30天)
future = model.make_future_dataframe(periods=30)
# 进行预测
forecast = model.predict(future)
# 查看预测结果
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
# 可视化预测结果
fig1 = model.plot(forecast)
plt.show()
步骤 5: 评估模型并进行可视化
可以通过可视化实际值和预测值来评估模型。
# 合并预测结果和原始数据
merged = pd.merge(data, forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']], on='ds', how='left')
# 可视化结果
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(merged['ds'], merged['y'], label='Actual')
ax.plot(merged['ds'], merged['yhat'], label='Forecast')
ax.fill_between(merged['ds'], merged['yhat_lower'], merged['yhat_upper'], color='gray', alpha=0.2)
plt.legend()
plt.show()
完整代码
import yfinance as yf
import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt
# 下载贵州茅台的股票数据
ticker = '600519.SS' # 贵州茅台在上海证券交易所的股票代码
data = yf.download(ticker, start='2020-01-01', end='2023-12-31')
# 选择收盘价作为预测目标,并重命名列以适应Prophet的要求
data = data.reset_index()
data.rename(columns={'Date': 'ds', 'Close': 'y'}, inplace=True)
# 初始化Prophet模型
model = Prophet()
# 拟合模型
model.fit(data)
# 创建未来的数据框(未来30天)
future = model.make_future_dataframe(periods=30)
# 进行预测
forecast = model.predict(future)
# 合并预测结果和原始数据
merged = pd.merge(data, forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']], on='ds', how='left')
# 可视化结果
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(merged['ds'], merged['y'], label='Actual')
ax.plot(merged['ds'], merged['yhat'], label='Forecast')
ax.fill_between(merged['ds'], merged['yhat_lower'], merged['yhat_upper'], color='gray', alpha=0.2)
plt.legend()
plt.show()
a. 尝试运行上述代码来验证其功能。
b. 使用LSTM模型进行预测,并比较其与Prophet模型的性能。