当前位置: 首页 > news >正文

Python时间序列优化之道滑动与累积窗口的应用技巧

大家好,在时间序列数据处理中,通常会进行滑动窗口计算(rolling)和累积窗口计算(expanding)等操作,以便分析时间序列的变化趋势或累积特征。Pandas提供的rollingexpanding函数提供了简单、高效的实现方式,特别适用于金融、气象、市场营销等领域的数据分析。这些函数能够对时间序列数据进行窗口操作,从而灵活地进行均值、标准差、最大值、最小值等计算。

1.滑动窗口与累积窗口概述

在Pandas中,滑动窗口和累积窗口是处理数据流时常用的两种窗口模型,它们在时间序列分析、事件处理、流处理等领域中非常重要。

滑动窗口是一种动态窗口模型,它在时间轴上滑动以覆盖连续的数据段。窗口的大小是固定的,但随着时间的推移,窗口会沿着数据流向前移动。这种窗口模型允许数据的连续处理,窗口内的数据可以是重叠的。

累积窗口是一种非重叠的窗口模型,每个窗口包含不重叠的数据段。当窗口内的数据被处理完毕后,窗口会向前移动到下一个数据段,开始处理新的数据。

2.rolling函数的用法与应用

rolling函数可以在指定的窗口长度内对数据进行滑动计算。常见应用包括计算移动平均、滑动标准差、滑动最大值和最小值等。rolling函数的基本语法如下:

Series/DataFrame.rolling(window, min_periods=None, center=False).agg(func)
  • window:窗口大小,通常为整数,表示滑动窗口包含的数据点数。

  • min_periods:窗口内计算所需的最小非缺失值数量。默认为窗口大小。

  • center:窗口是否居中对齐,默认为False

2.1 示例数据集

首先,创建一个包含日销售额的示例数据集:

import pandas as pd
import numpy as np# 创建示例数据
date_range = pd.date_range(start="2023-01-01", periods=10)
sales = [100, 150, 120, 130, 170, 160, 180, 200, 210, 220]
df = pd.DataFrame({'日期': date_range, '销售额': sales})
df.set_index('日期', inplace=True)
print("原始数据:\n", df)

原始数据如下:

             销售额
日期             
2023-01-01   100
2023-01-02   150
2023-01-03   120
2023-01-04   130
2023-01-05   170
2023-01-06   160
2023-01-07   180
2023-01-08   200
2023-01-09   210
2023-01-10   220

2.2 滑动均值

滑动均值(moving average)是时间序列分析中最常用的统计方法之一,用于平滑数据。以下计算3天的滑动均值:

# 计算3天滑动均值
df['3天滑动均值'] = df['销售额'].rolling(window=3).mean()
print("3天滑动均值:\n", df)

结果如下:

             销售额  3天滑动均值
日期                     
2023-01-01   100       NaN
2023-01-02   150       NaN
2023-01-03   120     123.33
2023-01-04   130     133.33
2023-01-05   170     140.00
2023-01-06   160     153.33
2023-01-07   180     170.00
2023-01-08   200     180.00
2023-01-09   210     196.67
2023-01-10   220     210.00

3天滑动均值列中,前三行没有足够的数据计算3天均值,因此显示为NaN,从第四行开始展示滑动均值结果。

2.3 滑动标准差

滑动标准差可以反映数据在窗口期内的波动情况。下面计算5天的滑动标准差:

# 计算5天滑动标准差
df['5天滑动标准差'] = df['销售额'].rolling(window=5).std()
print("5天滑动标准差:\n", df)

结果如下:

             销售额  3天滑动均值  5天滑动标准差
日期                                        
2023-01-01   100       NaN        NaN
2023-01-02   150       NaN        NaN
2023-01-03   120     123.33        NaN
2023-01-04   130     133.33        NaN
2023-01-05   170     140.00       27.95
2023-01-06   160     153.33       21.91
2023-01-07   180     170.00       23.32
2023-01-08   200     180.00       25.17
2023-01-09   210     196.67       21.79
2023-01-10   220     210.00       23.33

可以看到,从第五行开始,5天滑动标准差列开始显示标准差结果。滑动标准差常用于分析波动情况,例如股票价格的波动性分析。

2.4 自定义滑动计算函数

rolling函数允许传入自定义函数进行复杂的滑动计算,以下示例展示使用自定义函数计算3天窗口的最大值与最小值之差:

# 自定义滑动计算函数
df['3天范围'] = df['销售额'].rolling(window=3).apply(lambda x: x.max() - x.min())
print("3天窗口的最大最小差:\n", df)

结果如下表所示:

             销售额  3天滑动均值  5天滑动标准差  3天范围
日期                                        
2023-01-01   100       NaN        NaN     NaN
2023-01-02   150       NaN        NaN     NaN
2023-01-03   120     123.33       NaN    30.0
2023-01-04   130     133.33       NaN    30.0
2023-01-05   170     140.00      27.95    50.0
2023-01-06   160     153.33      21.91    50.0
2023-01-07   180     170.00      23.32    50.0
2023-01-08   200     180.00      25.17    40.0
2023-01-09   210     196.67      21.79    30.0
2023-01-10   220     210.00      23.33    20.0

自定义滑动计算函数灵活性强,可以满足各种特定计算需求。

3.expanding函数的用法与应用

expanding函数从数据起点开始逐步增加窗口长度,适用于累积计算,常用于累计求和、累计均值等操作。expanding函数的基本语法如下:

Series/DataFrame.expanding(min_periods=1).agg(func)
  • min_periods:计算窗口所需的最小非缺失值数量。

3.1 累积均值

累积均值表示从数据起点到当前点的平均值,通常用于观察数据的长期趋势。

计算销售额的累积均值:

# 计算累积均值
df['累积均值'] = df['销售额'].expanding().mean()
print("累积均值:\n", df)

结果如下表所示:

             销售额  3天滑动均值  5天滑动标准差  3天范围    累积均值
日期                                        
2023-01-01   100       NaN       NaN      NaN   100.00
2023-01-02   150       NaN       NaN      NaN   125.00
2023-01-03   120     123.33      NaN    30.0   123.33
2023-01-04   130     133.33      NaN    30.0   125.00
2023-01-05   170     140.00     27.95   50.0   134.00
2023-01-06   160     153.33     21.91   50.0   138.33
2023-01-07   180     170.00     23.32   50.0   144.29
2023-01-08   200     180.00     25.17   40.0   151.25
2023-01-09   210     196.67     21.79   30.0   158.89
2023-01-10   220     210.00     23.33   20.0   166.00

可以看到,累积均值从初始值开始逐步加入新值进行平均,帮助我们分析数据的长期变化趋势。

3.2 累积最大值与最小值

累积最大值和最小值分别表示从数据起点到当前点的最大值和最小值,用于分析数据的累积范围。

以下代码展示了如何计算销售额的累积最大值和最小值:

# 计算累积最大值和累积最小值
df['累积最大值'] = df['销售额'].expanding().max()
df['累积最小值'] = df['销售额'].expanding().min()
print("累积最大值和最小值:\n", df)

结果如下表所示:

             销售额  3天滑动均值  5天滑动标准差  3天范围  累积均值  累积最大值  累积最小值
日期                                                                
2023-01-01   100       NaN        NaN     NaN  100.00   100      100
2023-01-02   150       NaN        NaN     NaN  125.00   150      100
2023-01-03   120     123.33       NaN    30.0  123.33   150      100
2023-01-04   130     133.33       NaN    30.0  125.00   150      100
2023-01-05   170     140.00      27.95   50.0  134.00   170      100
2023-01-06   160     153.33      21.91   50.0  138.33   170      100
2023-01-07   180     170.00      23.32   50.0  144.29   180      100
2023-01-08   200     180.00      25.17   40.0  151.25   200      100
2023-01-09   210     196.67      21.79   30.0  158.89   210      100
2023-01-10   220     210.00      23.33   20.0  166.00   220      100

累积最大值和最小值可以帮助识别数据中的波峰和波谷,进一步理解数据的波动范围。

3.3 两种窗口函数对比

功能rollingexpanding
窗口类型固定窗口累积窗口
窗口长度固定(指定窗口大小)动态(从起点到当前)
适用计算滑动均值、滑动标准差、滑动最值等累积和、累积均值、累积最大/最小值等
应用场景短期波动分析(如股票的滑动平均)累积趋势分析(如总销售额的增长)

rolling适用于分析短期波动,观察窗口内的均值或标准差,广泛应用于金融、气象等领域。而expanding更适用于分析长期累积变化,帮助理解总体趋势,例如累计销售额或累计增长趋势。

Pandas中的rollingexpanding函数为时间序列数据提供了灵活的窗口计算支持。rolling函数适用于滑动窗口分析,帮助观察数据的短期波动;expanding函数则适合累积计算,用于分析长期趋势。在日常的数据分析中,合理选择这两个函数并结合自定义函数,可以高效、灵活地进行时间序列的深度分析。

相关文章:

Python时间序列优化之道滑动与累积窗口的应用技巧

大家好,在时间序列数据处理中,通常会进行滑动窗口计算(rolling)和累积窗口计算(expanding)等操作,以便分析时间序列的变化趋势或累积特征。Pandas提供的rolling和expanding函数提供了简单、高效的实现方式,特别适用于金融、气象、…...

Buffered 和 BuffWrite

Buffered和BuffWrite是Java IO包中的两个类,用于提高IO操作的效率。 Buffered是一个缓冲区类,可以将一个InputStream或者一个Reader包装起来,提供了一定的缓冲区大小,可以一次读取多个字节或字符,减少了读取的次数&am…...

【娱乐项目】基于cnchar库与JavaScript的汉字查询工具

Demo介绍 利用了 cnchar 库来进行汉字相关的信息查询,并展示了汉字的拼音、笔画数、笔画顺序、笔画动画等信息用户输入一个汉字后,点击查询按钮,页面会展示该汉字的拼音、笔画数、笔画顺序,并绘制相应的笔画动画和测试图案 cnchar…...

泷羽sec-蓝队基础之网络七层杀伤链 (下)学习笔记

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

FPGA 开发工程师

目录 一、FPGA 开发工程师的薪资待遇 二、FPGA 开发工程师的工作内容 1. 负责嵌入式 FPGA 方案设计,包括仿真、软件编写和调试等工作。 2. 使用工具软件建立 FPGA 综合工程,编写综合策略和时序约束。 3. 进行 FPGA 设计的优化与程序维护&#xff0c…...

【Leetcode 每日一题】3250. 单调数组对的数目 I

问题背景 给你一个长度为 n n n 的 正 整数数组 n u m s nums nums。 如果两个 非负 整数数组 ( a r r 1 , a r r 2 ) (arr_1, arr_2) (arr1​,arr2​) 满足以下条件,我们称它们是 单调 数组对: 两个数组的长度都是 n n n。 a r r 1 arr_1 arr1​ 是…...

较类中的方法和属性比较

在 Python 中,类中有以下几种常见的方法和属性,它们的作用和用法有所不同。以下是详细比较: --- ### **1. 实例方法** - **定义**:使用 def 定义,第一个参数是 self,表示实例对象本身。 - **作用**&#…...

nVisual可视化资源管理工具

nVisual主要功能 支持自定义层次化的场景结构 与物理世界结构一致,从全国到区域、从室外到室内、从机房到设备。 支持自定义多种空间场景 支持图片、CAD、GIS、3D等多种可视化场景搭建。 丰富的模型库 支持图标、机柜、设备、线缆等多种资源对象创建。 资源可…...

自动类型推导(auto 和 decltype)

​​​​​​一、auto关键字 基本概念 在 C 11 中引入了auto关键字用于自动类型推导。它可以让编译器根据变量的初始化表达式自动推断出变量的类型。这在处理复杂的类型,如迭代器、lambda 表达式的类型等情况时非常有用。 使用示例 例如,在迭代器的使用中…...

新型大语言模型的预训练与后训练范式,谷歌的Gemma 2语言模型

前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内的完整…...

基于投影寻踪博弈论-云模型的滑坡风险评价

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于投影寻踪博弈论-云模型的滑坡风险评价 基于投影寻踪博弈论-云模型的滑坡风险评价是一个复杂而有趣的主题,涉及到博弈论、风险评估和模糊逻辑等领域的交叉应用。这个方法结合了博弈论中的投影寻踪技术…...

WRF-Chem模式安装、环境配置、原理、调试、运行方法;数据准备及相关参数设置方法

大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的,也是区域的,甚至是全球的。本地的污染物排放除了对当地造成严重影响外,同时还会在…...

Spring中每次访问数据库都要创建SqlSession吗?

一、SqlSession是什么二、源码分析1)mybatis获取Mapper流程2)Spring创建Mapper接口的代理对象流程3)MapperFactoryBean#getObject调用时机4)SqlSessionTemplate创建流程5)SqlSessionInterceptor拦截逻辑6)开…...

力扣刷题TOP101:6.BM7 链表中环的入口结点

目录: 目的 思路 复杂度 记忆秘诀 python代码 目的 {1,2},{3,4,5}, 3 是环入口。 思路 这个任务是找到带环链表的环入口。可以看作是上一题龟兔赛跑(Floyd 判圈算法)的延续版:乌龟愤愤不平地举报兔子跑得太快,偷偷…...

浅谈telnet和ping

telnet 和 ping 是网络诊断工具,用于测试网络连接性和故障排查,但它们有不同的用途和功能。以下是它们的主要区别: 1. ping 功能描述 用途:ping 命令用于测试主机与目标地址(IP或域名)之间的连通性。工作…...

P4-3【应用数组进行程序设计 | 第三节】——知识要点:字符数组

知识要点:字符数组 视频: P4-3【应用数组进行程序设计 | 第三节】——知识要点:字符数组 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 本任务要求输入一行字符,统计其中的单词数,单词之间用…...

彻底理解微服务配置中心的作用

常见的配置中心有SpringCloudConfig、Apollo、Nacos等,理解它的作用,无非两点,一是配置中心能做什么,不使用配置中心会出现什么问题。 作用:配置中心是用来集中管理服务的配置,它是用来提高系统配置的维护…...

SpringBoot开发——详细讲解 Spring Boot 项目中的 POM 配置

文章目录 一、POM 文件简介二、单模块项目的 POM 配置1. 创建基本的 Spring Boot 单模块项目2. 重点解析三、多模块项目的 POM 配置1. 多模块项目结构2. 父模块 POM 文件3. 子模块 POM 文件4. 重点解析结语在 Spring Boot 项目中,POM(Project Object Model)文件起着关键作用…...

pyspark实现基于协同过滤的电影推荐系统

最近在学一门大数据的课,课程要求很开放,任意做一个大数据相关的项目即可,不知道为什么我就想到推荐算法,一直到着手要做之前还没有新的更好的来代替,那就这个吧。 推荐算法 推荐算法的发展由来已久,但和…...

视觉语言模型(VLM)学习笔记

目录 应用场景举例 VLM 的总体架构包括: 深度解析:图像编码器的实现 图像编码器:视觉 Transformer 注意力机制 视觉-语言投影器 综合实现 训练及注意事项 总结 应用场景举例 基于文本的图像生成或编辑:你输入 “生成一张…...

LM2904运算放大器的实战应用:精准监测电池电压的电路设计

1. LM2904运算放大器:电池监测的"火眼金睛" 第一次接触电池电压监测时,我拿着万用表手动测量的狼狈场景至今难忘。直到发现LM2904这颗神器,才真正体会到什么叫"科技改变工作方式"。这款双运放芯片就像给电路装上了24小时…...

fMRI(2-1)后续分析流程包括ALFF / fALFF, ReHo,VMHC,DC,Seed FC,FC,dFC,BCT,小世界,组水平分析,VBM,组水平 GLM

fMRI 后续分析流程对应脚本: run_post_analysis.m 前置依赖: run_full_pipeline.m (v3.2) 完成输出 工具链: DPABI v6.x BCT (2019_03_03) SPM25✅ 总体概览 run_full_pipeline 输出results/Y_filtered.mat ← 去噪滤波时间序列矩阵results/Filtered_*.nii ← …...

OpenClaw语音控制之 从语音到执行命令

15.1 流水线总览 15.1.1 整体架构设计 OpenClaw 的语音命令处理流水线是一个典型的事件驱动架构,整个系统由多个解耦的处理阶段组成,每个阶段通过消息队列或回调机制进行异步通信。这种设计确保了系统在高并发场景下的稳定性,同时便于各阶段的独立扩展和故障隔离。 从宏观…...

运维怎么转行网络安全?(非常详细)从零基础入门到精通,收藏这一篇就够了

运维怎么转行网络安全?(非常详细)从零基础入门到精通,收藏这一篇就够了 经常有人问我:干网工、干运维多年遇瓶颈,想学点新技术给自己涨涨“身价”,应该怎么选择? 聪明人早已经用脚…...

别再死记硬背了!PR关键帧动画的3种实战打法,从图形移动到文字特效一网打尽

PR关键帧动画实战指南:从基础操作到创意特效 在短视频内容爆炸式增长的今天,动态视觉元素已成为吸引观众注意力的关键武器。Adobe Premiere Pro(简称PR)作为专业视频编辑软件,其关键帧动画功能是每位内容创作者必须掌握…...

AIAgent如何48小时内完成三甲医院级影像初筛?——2026奇点大会披露的FDA认证推理引擎架构

第一章:AIAgent如何48小时内完成三甲医院级影像初筛?——2026奇点大会披露的FDA认证推理引擎架构 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点大会上,DeepMed Labs首次公开其通过FDA 510(k)路径认证的AIAgent推理引擎v3.2——…...

直流无刷减速电机驱动控制的关键技术与安全设计

1. 直流无刷减速电机驱动基础 第一次接触直流无刷减速电机时,我被它安静高效的特性惊艳到了。相比传统有刷电机,这种电机通过电子换相取代了机械电刷,寿命直接提升5-10倍。但真正上手驱动时,发现里面门道比想象中复杂得多。 核心在…...

避坑指南:vue-flip-page翻页组件在移动端的适配问题与解决方案

Vue-Flip-Page移动端适配实战:从卡顿到流畅的进阶指南 移动端翻页组件的特殊挑战 在移动端使用翻页组件时,我们面对的是一个与桌面端完全不同的交互环境。手指触控的精度远低于鼠标点击,屏幕尺寸和比例千差万别,硬件性能也参差不齐…...

30 分钟搞定答辩 PPT!Paperxie AI 生成器:本科生的毕业开挂神器

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 一、 毕业答辩的 “最后一道坎”:PPT 比论文还磨人? 论文定稿的那一刻,你以为终于能松口…...

YOLOv8实战指南:从零开始构建计算机视觉应用

1. YOLOv8入门:为什么选择这个计算机视觉神器 第一次接触YOLOv8时,我完全被它的速度惊到了。当时我正在做一个智能停车场的项目,需要在实时视频流中检测车辆。试过几个主流模型后,YOLOv8的表现简直像开了挂——在保持高精度的同时…...