时序数据特征提取:用 pandas 进行上采样、下采样

# 对温度做分段常数逼近处理,下采样
def constant_appro_low(df_data_by_date_tem):
    df_data_by_date_tem = df_data_by_date_tem.reset_index(drop=True)
    df_appro = pd.DataFrame()
    date_index = pd.date_range(end = '01/01/2019', periods=len(df_data_by_date_tem), freq='D')
    temperature = 'Temperature'
    date_ymd = 'date_ymd'
    df_appro[temperature] = df_data_by_date_tem[temperature]
    df_appro.index = date_index
    # 下采样,取均值
    df_appro_low = pd.DataFrame()
    # 一个小时聚合一次常值, 这里通过 6 个数值进行取一次均值,例如:[0, 5] ,[6, 11] , ... 取均值
    df_appro_low[temperature] = df_appro[temperature].resample(rule='6D').mean()  
    #date_list = df_data_by_date_tem.loc[:len(df_appro_low)-1][date_ymd]
    #df_appro_low[date_ymd] = list(date_list)
    # 差分,做一阶差分
    df_appro_diff = pd.DataFrame()
    df_appro_diff[temperature] = df_appro_low.loc[:][temperature].diff(1) # 1 阶差分
    df_appro_diff[date_ymd] = list(df_data_by_date_tem.loc[:len(df_appro_diff)-1][date_ymd])
    df_appro_diff = df_appro_diff.dropna()
    df_appro_diff = df_appro_diff.reset_index(drop=True)
    df_appro_diff[temperature] = df_appro_diff[temperature].apply(lambda x: round(x, 2))
    return df_appro_diff

以上内容可以参考:

上采样、下采样:https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_9661997349921147196"}&n_type=1&p_from=3
差分处理:https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_9532838616696390580"}&n_type=1&p_from=3

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果时序数据采样时间间隔为15分钟,并且你希望利用LSTM模型对时序数据进行提前4小时的预测,并使用RMSE评估结果,可以按照以下代码进行处理: ```python import numpy as np import pandas as pd from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import LSTM, Dense # 读取数据 data = pd.read_csv('data.csv') # 将时间列转换为日期时间类型 data['Timestamp'] = pd.to_datetime(data['Timestamp']) # 设置时间间隔为15分钟 data = data.set_index('Timestamp') data = data.resample('15T').mean() data = data.interpolate() # 数据预处理 scaler = MinMaxScaler(feature_range=(0, 1)) scaled_data = scaler.fit_transform(data) # 构建训练集和测试集 train_size = int(len(scaled_data) * 0.8) train_data = scaled_data[:train_size, :] test_data = scaled_data[train_size:, :] # 定义函数生成训练集和测试集 def create_dataset(dataset, look_back): X, Y = [], [] for i in range(len(dataset) - look_back): X.append(dataset[i:(i + look_back), 0]) Y.append(dataset[i + look_back, 0]) return np.array(X), np.array(Y) look_back = 16 # 设置时间步长,即4小时/15分钟=16个时间点 train_X, train_Y = create_dataset(train_data, look_back) test_X, test_Y = create_dataset(test_data, look_back) # 将输入数据重塑为LSTM的输入格式 [样本数,时间步长,特征数] train_X = np.reshape(train_X, (train_X.shape[0], train_X.shape[1], 1)) test_X = np.reshape(test_X, (test_X.shape[0], test_X.shape[1], 1)) # 构建LSTM模型 model = Sequential() model.add(LSTM(units=50, return_sequences=True, input_shape=(look_back, 1))) model.add(LSTM(units=50)) model.add(Dense(units=1)) # 编译模型 model.compile(optimizer='adam', loss='mean_squared_error') # 训练模型 model.fit(train_X, train_Y, epochs=100, batch_size=32) # 预测数据 train_predict = model.predict(train_X) test_predict = model.predict(test_X) # 反归一化 train_predict = scaler.inverse_transform(train_predict) train_Y = scaler.inverse_transform([train_Y]) test_predict = scaler.inverse_transform(test_predict) test_Y = scaler.inverse_transform([test_Y]) # 评估模型 from sklearn.metrics import mean_squared_error train_rmse = np.sqrt(mean_squared_error(train_Y[0], train_predict[:, 0])) test_rmse = np.sqrt(mean_squared_error(test_Y[0], test_predict[:, 0])) print("训练集RMSE值:", train_rmse) print("测试集RMSE值:", test_rmse) ``` 请将代码中的`data.csv`替换为你的实际数据文件名,并根据需要进行调整。这段代码将输入数据的时间间隔设置为15分钟,并将提前4小时的预测转换为16个时间点。然后,它使用LSTM模型进行多步预测,并使用均方根误差(RMSE)评估预测结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值