用下面这个代码对股票价格进行预测,想要得到一个收盘价的预测结果的表格,请问应该怎么做
import pandas as pd
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
data=pd.read_excel(r'C:\Users\86159\Desktop\五粮液.xlsx')
X = data['日期'].values.reshape(-1,1)
y = data['收盘'].values.reshape(-1,1)
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
y = scaler.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=42)
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_rbf.fit(X_train, y_train)
y_pred = svr_rbf.predict(X_test)
r2 = r2_score(y_test, y_pred)
print('R-squared:', r2)
future_dates = pd.date_range(start='2022-12-26', end='2022-12-31')
print(len(future_dates))
test_x=[round(random.randint(8,24)+random.uniform(0,1),2) for _ in range(len(future_dates))]
result_df = pd.DataFrame({'y_test':y_test.reshape(-1),'y_pred':y_pred.reshape(-1)})
即可
下面展示一些 内联代码片
。
import numpy as np
def driving_time_one_moment(W_I,M_J,TRAVELTIME_IJ,Y_IJ):
print(np.sum(np.dot(np.dot(W_I,Y_IJ),TRAVELTIME_IJ.T)))
return np.sum(np.dot(np.dot(W_I,Y_IJ),TRAVELTIME_IJ.T))
def waiting_time_one_moment(W_I,M_J,TRAVELTIME_IJ,Y_IJ):
tc=8 # 服务时间,24小时提供服务;
tf=2 #每辆车充电时长;
# 第一步:计算用户达到率
Tao_J=np.dot(W_I,Y_IJ/tc)
# 第二步:单位时间内充电站平均服务能力
U_J=M_J/tf
# 第三步:充电站排队系统服务强度:,由于ROU_J会存在大于1的情况,从而会促使后面求解
ROU_J=Tao_J/U_J
# 第四步:充电站内充电桩全部空闲概率:
P_J=np.full(shape=(1,M_J.shape[1]),fill_value=0.0)
for j in range(M_J.shape[1]):
temp = 0
for k in range(M_J.shape[1]):
temp+=(np.power(M_J[0,j]*ROU_J[0,j],k))/(np.math.factorial(k))
p_j0=1/(temp+(np.power(M_J[0,j]*ROU_J[0,j],M_J[0,j]))/(np.math.factorial(M_J[0,j])*(1-ROU_J[0,j])))
P_J[0,j]=p_j0
# 第五步:计算排队等候时间期望
W_Jq=np.full(shape=(1,M_J.shape[1]),fill_value=0.0)
for j in range(M_J.shape[1]):
w_jq=(np.power(M_J[0,j],M_J[0,j])*np.power(ROU_J[0,j],M_J[0,j]+1)*P_J[0,j])/(ROU_J[0,j]*np.math.factorial(M_J[0,j])*np.power(1-ROU_J[0,j],2))
W_Jq[0,j]=w_jq
# 第六步:所有用户的总的等待花费时间
T2=0
for j in range(M_J.shape[1]):
T2+=W_Jq[0,j]*Tao_J[0,j]*tc
print(T2)
if __name__ == '__main__':
# 需求量;
W_I = np.array([[10, 20, 30, 50]])
# 充电桩供给量;
M_J = np.array([[5, 10, 15]])
# 行是demand,列是provider
TRAVELTIME_IJ = np.array([[1, 1.5, 2.5],
[1.5, 1, 2],
[1, 1.5, 1],
[2.5, 1.5, 1]])
# 出行时间的阻尼函数,衰减函数
F_DIJ = 1 / TRAVELTIME_IJ
Sum_Dij_I = np.sum(F_DIJ, axis=1)
# 计算选择权重
Y_IJ = np.full(shape=(TRAVELTIME_IJ.shape), fill_value=0.0)
for i in range(W_I.shape[1]):
Y_IJ[i, :] = F_DIJ[i, :] / Sum_Dij_I[i]
# 计算驾车时间
driving_time_one_moment(W_I,M_J,TRAVELTIME_IJ,Y_IJ)
# 计算等候时间
waiting_time_one_moment(W_I,M_J,TRAVELTIME_IJ,Y_IJ)
python
# 将测试集和预测结果合并成一个DataFrame
df=pd.DataFrame({'Actual':y_test.flatten(),'Predicted':y_pred.flatten()})
# 输出前10行数据
print(df.head(10))
python
import pandas as pd
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
data=pd.read_excel(r'C:\Users\86159\Desktop\五粮液.xlsx')
X = data['日期'].values.reshape(-1,1)
y = data['收盘'].values.reshape(-1,1)
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
y = scaler.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=42)
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_rbf.fit(X_train, y_train)
y_pred = svr_rbf.predict(X_test)
r2 = r2_score(y_test, y_pred)
print('R-squared:', r2)
# 将测试集和预测结果合并成一个DataFrame
df=pd.DataFrame({'Actual':y_test.flatten(),'Predicted':y_pred.flatten()})
# 输出前10行数据
print(df.head(10))
引用chatGPT作答,要预测未来的股票收盘价,需要将未来的日期作为输入,而不是使用现有的日期。可以使用 pandas 的 date_range 函数来生成未来日期的时间序列。然后,使用相同的 MinMaxScaler 对日期进行缩放,并将其转换为 numpy 数组。最后,使用训练好的 SVR 模型来预测收盘价。
以下是一个示例代码,它生成未来 30 天的日期,并使用模型预测这些日期的收盘价:
import pandas as pd
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# 读取数据
data=pd.read_excel(r'C:\Users\86159\Desktop\五粮液.xlsx')
# 特征和目标变量
X = data['日期'].values.reshape(-1,1)
y = data['收盘'].values.reshape(-1,1)
# 缩放数据
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
y = scaler.fit_transform(y)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练模型
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_rbf.fit(X_train, y_train)
# 预测测试集
y_pred = svr_rbf.predict(X_test)
r2 = r2_score(y_test, y_pred)
print('R-squared:', r2)
# 生成未来日期
future_dates = pd.date_range(start='2023-05-09', end='2023-06-07')
# 缩放未来日期并转换为 numpy 数组
future_dates_scaled = scaler.transform(future_dates.values.reshape(-1,1))
# 预测未来收盘价
future_close_prices = svr_rbf.predict(future_dates_scaled)
# 将预测结果和日期转换为 DataFrame,并保存到 Excel 文件中
future_df = pd.DataFrame({'日期': future_dates, '收盘': future_close_prices})
future_df.to_excel('predicted_prices.xlsx', index=False)
在上面的代码中,将未来 30 天的日期存储在 future_dates 变量中,从 2023 年 5 月 9 日到 2023 年 6 月7 日。然后,使用 MinMaxScaler 对这些日期进行缩放,并将它们转换为 numpy 数组,存储在 future_dates_scaled 变量中。
接下来,使用训练好的 SVR 模型对缩放后的未来日期进行预测,得到未来 30 天的收盘价,存储在 future_close_prices 变量中。
最后,将预测结果和日期转换为 pandas 的 DataFrame,并将其保存到 Excel 文件中,以便进一步分析和可视化。