m0_74420115 2024-04-28 19:55 采纳率: 71.9%
浏览 1
已结题

python怎么切换数据

在下面的代码中数据是来源于哪里,怎么把数据切换成D盘下面的“data.csv”文件里面的数据,然后用下面的代码进行拟合

import pandas_datareader.data as web
import datetime
start = datetime.datetime(2000,1,1)
end = datetime.datetime(2024,1,1)
df = web.DataReader('GOOGL', 'stooq',start,end)
def Stock_Price_LSTM_Data_Precesing(df,mem_his_days,pre_days):
    df.dropna(inplace=True)
    df.sort_index(inplace=True)
    df['label']= df['Close'].shift(-pre_days)
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    sca_X=scaler.fit_transform(df.iloc[:,:-1])
    
    
    mem_his_days = 10
    
    from collections import deque
    deq = deque(maxlen=mem_his_days)
    
    X = []
    for i in sca_X:
        deq.append(list(i))
        if len(deq)==mem_his_days:
            X.append(list(deq))
    X_lately = X[-pre_days:]
    X = X[:-pre_days]
    y = df['label'].values[mem_his_days-1:-pre_days]
    
    
    import numpy as np
    X = np.array(X)
    y = np.array(y)
    return X,y,X_lately
X,y,X_lately = Stock_Price_LSTM_Data_Precesing(df,5,10)
print(len(X))
print(len(y))
print(len(X_lately))
pre_days = 10
mem_days=[5,10,15]
lstm_layers=[1,2,3]
dense_layers=[1,2,3]
units = [16,32]
from tensorflow.keras.callbacks import ModelCheckpoint
for the_mem_days in mem_days:
    for the_lstm_layers in lstm_layers:
        for the_dense_layers in dense_layers:
            for the_units in units:
                filepath="./models3/{val_mape:.2f}_{epoch:02d}_men_1_lstm_1_dense_1_unit_16.weights.h5"
                checkpoint = ModelCheckpoint(
                    filepath=filepath,
                    save_weights_only=True,
                    monitor='val_mape',
                    mode='min',
                    save_best_only=True)
                X,y,X_lately = Stock_Price_LSTM_Data_Precesing(df,the_mem_days,pre_days)
                from sklearn.model_selection import train_test_split
                X_train,X_test,y_train,y_test = train_test_split(X,y,shuffle=False,test_size=0.1)
                import tensorflow as tf
                from tensorflow.keras.models import Sequential
                from tensorflow.keras.layers import LSTM,Dense,Dropout
                model = Sequential()
                model.add(LSTM(the_units,input_shape=X.shape[1:],activation='relu',return_sequences=True))
                model.add(Dropout(0.1))
                for i in range(the_lstm_layers):
                    model.add(LSTM(the_units,activation='relu',return_sequences=True))
                    model.add(Dropout(0.1))
                
                model.add(LSTM(the_units,activation='relu'))
                model.add(Dropout(0.1))
                for i in range(the_dense_layers):
                    model.add(Dense(the_units,activation='relu'))
                    model.add(Dropout(0.1))
                
                model.add(Dense(1))
                model.compile(optimizer='adam',
                             loss='mse',
                             metrics=['mape'])
                model.fit(X_train,y_train,batch_size=32,epochs=50,validation_data=(X_test,y_test),callbacks=[checkpoint])

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-28 19:55
    关注

    引自免费微信小程序:皆我百晓生

    为了将数据从在线源切换到本地的 "data.csv" 文件,你需要先确保 "data.csv" 文件位于你的 Python 脚本可以访问的路径下。接下来,我们将修改 Stock_Price_LSTM_Data_Precesing 函数,以便从 CSV 文件读取数据而不是使用 pandas_datareader

    首先,确保你有一个名为 "data.csv" 的文件,其中包含与原始代码中 'GOOGL' 相同的股票数据(日期、开盘价、收盘价、最高价、最低价等)。然后,按照以下步骤修改代码:

    1. 导入 pandas 库。
    2. 使用 pandas.read_csv() 函数从 "data.csv" 文件中读取数据。
    3. 将其他部分的代码保持不变,因为处理数据的方法是一样的。

    以下是修改后的代码:

    import pandas as pd
    import numpy as np
    import datetime
    
    # 从本地CSV文件加载数据
    def load_data_from_csv(file_path):
        df = pd.read_csv(file_path, parse_dates=['Date'], index_col='Date')
        return df
    
    start = datetime.datetime(2000, 1, 1)
    end = datetime.datetime(2024, 1, 1)
    
    # 从本地CSV文件加载数据
    df = load_data_from_csv("D:/data.csv")
    
    # 其他部分保持不变
    def Stock_Price_LSTM_Data_Precesing(df, mem_his_days, pre_days):
        # ... (这里省略了函数内部的代码,保持不变)
    
    # ... (这里省略了后续的训练和模型构建部分,保持不变)
    

    这段代码会从指定的 D 盘路径下的 "data.csv" 文件中读取数据,并使用它来进行数据预处理和模型训练。确保 "data.csv" 文件中的日期列被正确识别为日期类型,通常这个列会被命名为 "Date"。如果没有,你需要根据实际情况调整 parse_dates 参数。同时,如果你的 CSV 文件格式有别于 Stooq 数据库返回的数据格式,你可能还需要对数据进行适当的清洗和转换。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 4月28日