Python时间序列优化之道滑动与累积窗口的应用技巧
大家好,在时间序列数据处理中,通常会进行滑动窗口计算(rolling)和累积窗口计算(expanding)等操作,以便分析时间序列的变化趋势或累积特征。Pandas提供的rolling和expanding函数提供了简单、高效的实现方式,特别适用于金融、气象、市场营销等领域的数据分析。这些函数能够对时间序列数据进行窗口操作,从而灵活地进行均值、标准差、最大值、最小值等计算。
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 两种窗口函数对比
| 功能 | rolling | expanding |
|---|---|---|
| 窗口类型 | 固定窗口 | 累积窗口 |
| 窗口长度 | 固定(指定窗口大小) | 动态(从起点到当前) |
| 适用计算 | 滑动均值、滑动标准差、滑动最值等 | 累积和、累积均值、累积最大/最小值等 |
| 应用场景 | 短期波动分析(如股票的滑动平均) | 累积趋势分析(如总销售额的增长) |
rolling适用于分析短期波动,观察窗口内的均值或标准差,广泛应用于金融、气象等领域。而expanding更适用于分析长期累积变化,帮助理解总体趋势,例如累计销售额或累计增长趋势。
Pandas中的rolling和expanding函数为时间序列数据提供了灵活的窗口计算支持。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 设计的优化与程序维护,…...
【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 注意力机制 视觉-语言投影器 综合实现 训练及注意事项 总结 应用场景举例 基于文本的图像生成或编辑:你输入 “生成一张…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
