时间序列预测中的数据滑窗操作实例(python实现)

 更新时间:2022年03月08日 11:31:46   作者:Chace_B  
滑动窗口操作非常普遍,非常有用,它们也很容易在Python中实现,下面这篇文章主要给大家介绍了关于时间序列预测中的数据滑窗操作python实现的相关资料,需要的朋友可以参考下

撰写背景

面向数据分析的小白,水平有限,错误难免,欢迎指正。

什么是数据滑窗

进行机器学习时,一般都要涉及到划分训练集和测试集的步骤。特别地,在做数据预测时,一般把预测的依据(也就是历史数据)称作X,把需要预测的数据称为y。即首先把原始数据划分为train_X, train_y这两个训练数据集和test_X, test_y这两个测试数据集。

对于时间序列数据的预测,往往是建立由好几个历史数据预测下一时刻的未来数据,这时候为了充分利用全部数据,应该对原始数据集进行滑窗操作,如下图所示。

请添加图片描述

这里展示的是多个特征的时间序列,其中每一行数据均属于同一时刻。假设,我们要以H( humidity)、PT(pressure)、PE(power)三个特征为预测依据,取当前和上三个时刻共四个时刻的已知数据对下一时刻的PE(功率)进行预测,那么对于X数据集的滑窗就应该如上图所示,而对y数据集的滑窗应该如下图所示。

请添加图片描述

下面给出滑窗实例。

代码实现

滑窗函数

def sliding_window(DataSet, X_width, y_width, gap = 1, multi_vector = None, X_data = True):
    '''
    DataSet has to be as a DataFrame
    '''
    if X_data:
        if multi_vector:
            a,b = DataSet.shape
        else:
            a = DataSet.shape[0]
            b = 1
        c = (a-X_width-y_width-a%gap)/gap
        X = np.reshape(DataSet.iloc[0:X_width,:].values,(1,X_width,b))
        for i in range(len(DataSet) - X_width - y_width):
            i += 1
            if i > c:
                break
            j = i * gap
            tmp = DataSet.iloc[j:j + X_width,:].values
            tmp = np.reshape(tmp,(1,X_width,b))
            X = np.concatenate([X,tmp],0)
        return X
    else:
        if multi_vector:
            print('y_data-error:expect 1D ,given %dD'%DataSet.shape[1])
            return;
        else:
            a = DataSet.shape[0]
        c = (a-X_width-y_width-a%gap)/gap
        y = np.reshape(DataSet.iloc[X_width:X_width + y_width,0].values,(1,y_width))
        for i in range(len(DataSet) - X_width - y_width):
            i += 1
            if i > c:
                break
            j = i * gap + X_width
            tmp = DataSet.iloc[j:j + y_width,:].values
            tmp = np.reshape(tmp,(1,y_width))
            y = np.concatenate([y,tmp])
        return y

单特征时间序列

单特征时间序列是指仅有一个特征的一维时间序列,如股票收盘价、风电场风速数据、日营业额等。对单特征时间序列滑窗操作如下:

#DataSet训练数据集
#X_width使用的历史数据长度
#y_width要预测的数据长度
#X_data是否是X数据集
train_X = sliding_window(DataSet, X_width, y_width)
train_y = sliding_window(DataSet, X_width, y_width, X_data = None)

假设训练数据集是一个100*1的序列,使用24个数据预测未来的1个数据,那么滑窗操作就将原数据做了这样的变换:

多特征时间序列

多特征时间序列指时间序列的特征不止一个,如上文所举的H、PT、PE三特征序列。这种数据一般使用在待预测的数据跟多个特征相关性较高的场合中,如气象数据嵌入的风速预测、股市数据嵌入的收盘价格预测等。进行多特征时间序列滑窗操作如下:

#DataSet训练数据集
#X_width使用的历史数据长度
#y_width要预测的数据长度
#multi_vector是否为多特征
#X_data是否是X数据集
train_X = sliding_window(DataSet, X_width, y_width, multi_vector = True)
test_y = sliding_window(DataSet, X_width, y_width, multi_vector = True, X_data = None)

假设训练数据集是一个100*3的序列,使用24个数据预测未来的1个数据,那么滑窗操作就将原数据做了这样的变换:

注意事项

DataSet必须是DataFrame格式。

y数据集只能是一维。

总结

到此这篇关于时间序列预测中的数据滑窗操作(python实现)的文章就介绍到这了,更多相关python数据滑窗操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python图像处理实现两幅图像合成一幅图像的方法【测试可用】

    Python图像处理实现两幅图像合成一幅图像的方法【测试可用】

    这篇文章主要介绍了Python图像处理实现两幅图像合成一幅图像的方法,结合实例形式分析了Python使用Image.blend()接口与Image.composite()接口进行图像合成的相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • python enumerate内置函数用法总结

    python enumerate内置函数用法总结

    这篇文章主要介绍了python enumerate内置函数用法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python实现简单的用户交互方法详解

    Python实现简单的用户交互方法详解

    这篇文章给大家分享了关于Python实现简单的用户交互的相关知识点内容,有需要的朋友们可以学习下。
    2018-09-09
  • python 动态加载的实现方法

    python 动态加载的实现方法

    脚本语言都有一个优点,就是动态加载,python也有这个特性。这篇文章主要介绍了python 动态加载的实现方法,需要的朋友可以参考下
    2017-12-12
  • Python时间处理模块Time和DateTime

    Python时间处理模块Time和DateTime

    这篇文章主要为大家介绍了Python时间处理模块Time和DateTime使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python基础之元编程知识总结

    Python基础之元编程知识总结

    很多人不理解“元编程”是个什么东西,关于它也没有一个十分准确的定义.这篇文章要说的是Python里的元编程,实际上也不一定就真的符合“元编程”的定义.只不过我无法找到一个更准确的名字来代表这篇文章的主题,所以就借了这么一个名号,需要的朋友可以参考下
    2021-05-05
  • Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

    Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

    这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个目录下,需要的可以了解下
    2025-03-03
  • Python的函数使用详解

    Python的函数使用详解

    大家好,本篇文章主要讲的是Python的函数使用详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Python 字符串与二进制串的相互转换示例

    Python 字符串与二进制串的相互转换示例

    今天小编就为大家分享一篇Python 字符串与二进制串的相互转换示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python利用雪花算法实现生成唯一ID

    Python利用雪花算法实现生成唯一ID

    雪花算法是在一个项目体系中生成全局唯一ID标识的一种方式,偶然间看到了Python使用雪花算法不尽感叹真的是太便捷了。本文就来聊聊这具体的实现方法,感兴趣的可以了解一下
    2022-11-11

最新评论