【问题标题】:Preparing Grid weather data for ConvLSTM2d为 ConvLSTM2d 准备网格天气数据
【发布时间】:2021-11-20 01:38:06
【问题描述】:

我正在尝试使用使用每小时网格天气数据的 ConvLSTM2d 模型。我可以将数据放入具有这些维度(num_hours、lat、lon、num_features)的 4d 数组中。 ConvLSTM2d 需要 5d,我计划为序列长度设置一个可能为 24 小时的变量。我的问题是如何在这个数组中创建一个额外的维度来获得序列长度维度?(num_hours,sequence_length,lat,lon,num_features)具有纬度、经度、时间、特征类型和值列的数据框?

* 我意识到在提出问题时拥有​​示例数据集总是更容易,因此我创建了一个集合来模拟问题。

import pandas as pd
import numpy as np

weather_variables = ['windspeed', 'temp','pressure']
lats = [x/10 for x in range(400,500,5)]
lons = [x/10 for x in range(900,1000,5)]
hours = pd.date_range('1/1/2021', '9/28/2021', freq= 'H')

df = []
for i in range (0, len(hours)):
    for weather in weather_variables:
        temp_df = pd.DataFrame(index = lats, columns = lons,data = np.random.randint(0,100,size=(len(lats), len(lons))))
        temp_df = temp_df.unstack().to_frame()
        temp_df.reset_index(inplace= True)
        temp_df['weather_variable'] = weather 
        temp_df['ts'] = hours[i] 
        df.append(temp_df)

df = pd.concat(df)
df.columns = ['lon','lat','value','weather_variable', 'ts']

因此,此代码将创建一个虚拟数据集,其中包含给定小时的 3 个网格。目标是将其转换为重叠的 24 小时序列的 5d 数组。我认为数组看起来像这样 (len(hours)?, 24, 20, 20, 3)

【问题讨论】:

    标签: python numpy keras tensorflow2.0


    【解决方案1】:

    来自ConvLSTM paper

    天气雷达数据每 6 分钟记录一次,因此 每天 240 帧。为了获得用于训练、测试和验证的不相交子集,我们将每个子集划分为 每日序列成 40 个不重叠的帧块,并随机分配 4 个块用于训练,1 个 用于测试的块和用于验证的 1 个块。数据实例是从这些块中使用的 一个 20 帧宽的滑动窗口。因此我们的雷达回波数据集包含 8148 个训练序列, 2037 个测试序列和 2037 个验证序列,所有序列长 20 帧(5 用于输入,15 用于预测)。

    如果我的计算是正确的,每个“非重叠帧块”应该有 6 帧(每天 240 帧/每天 40 块 = 每块 6 帧)。所以我不确定你如何在给定的块中创建一个 20 帧宽的滑动窗口。尽管如此,您可以采取类似的方法:将您的数据划分为特定长度的非重叠窗口。也许您使用 6 小时的数据来预测接下来的 6 小时。我不确定您是否需要将窗口保持在给定的一天之内——从晚上 11 点到凌晨 1 点的变化似乎与从 3 点开始的时间窗口一样有效早上到早上 5 点。

    我认为 Pandas 不会是处理数据的有效方式。我会坚持使用 NumPy 或者可能是 TensorFlow data structure

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2021-08-07
      • 2018-12-07
      • 2012-01-13
      • 1970-01-01
      • 2013-04-28
      • 2022-11-14
      相关资源
      最近更新 更多