当前位置: 首页 > 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 注意力机制 视觉-语言投影器 综合实现 训练及注意事项 总结 应用场景举例 基于文本的图像生成或编辑:你输入 “生成一张…...

学习笔记:黑马程序员JavaWeb开发教程(2024.11.29)

10.5 案例-部门管理-新增 如何接收来自前端的数据: 接收到json数据之后,利用RequestBody注解,将前端响应回来的json格式的数据封装到实体类中 对代码中Controller层的优化 发现路径中都有/depts,可以将每个方法对应请求路径中的…...

文档加密怎么做才安全?

公司的文档包含很多机密文件,这些文件不仅关乎公司的核心竞争力,还涉及到客户隐私、商业策略等敏感信息。因此,文档的保管和传递一直是我们工作的重中之重。 为了确保机密文件的安全,公司需要制定了一系列严格的保密措施。从文件的…...

使用Setup Factory将C#的程序打包成安装包

一、软件下载 https://download.csdn.net/download/qq_65356682/90042701 可以直接下载 二、软件使用 打开 1、创建一个新的项目 2、设置如下信息,也可以不设置,最好填非空的、 产品名就是你安装成功后生成文件的名称 3、如下文件夹路径就是你C#中ex…...

解决 java -jar 报错:xxx.jar 中没有主清单属性

问题复现 在使用 java -jar xxx.jar 命令运行 Java 应用程序时,遇到了以下错误: xxx.jar 中没有主清单属性这个错误表示 JAR 文件缺少必要的启动信息,Java 虚拟机无法找到应用程序的入口点。本文将介绍该错误的原因以及如何通过修改 pom.xm…...

Java HashSet 介绍

怀旧网个人博客网站地址:怀旧网,博客详情:Java HashSet 介绍 哈希值介绍 创建一个实体类 public class Student {private String name;private int age;public Student(String name, int age) {this.name name;this.age age;} }使用测试…...

2024年几款免费的AI对话工具介绍

目前几款免费的AI对话工具介绍 文章目录 目前几款免费的AI对话工具介绍一、前言二、AI对话工具介绍1、讯飞星火认知大模型2、百度文心一言3、通义千问4、豆包5、百川大模型6、智谱清言7、月子暗面-KIMI下面是国外的 AI 对话工具: 8、Replika8、Cleverbot9、Coze 三、…...

Gazebo构建模型(含GNSS、IMU、LiDAR、Camera传感器)

将GNSS、IMU、LiDAR、Camera传感器和机器人的base分别放在不同的文件中。这样可以提高模型的可维护性和模块化。下面是一个示例,展示如何将这些部分分别放在不同的.xacro文件中,然后通过导入的方式组合在一起。 1. 创建基础文件:my_robot.xa…...

#Js篇: 链式判断运算符 ?.和Null判断运算符 ??和逻辑赋值运算符||= = ??=

链式判断运算符 ?. ?.运算符,直接在链式调用的时候判断,左侧的对象是否为null或undefined。如果是的,就不再往下运算,而是返回undefined。 链判断运算符?.有三种写法。 obj?.prop // 对象属性是否存在 obj?.[expr] // 同上…...

IDEA敲Web前端快捷键

1.html基础格式 英文符号TAB键 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, mini…...

【Vue3】【Naive UI】<NDropdown>标签

【Vue3】【Naive UI】 标签 基本设置自定义渲染交互事件其他属性 【VUE3】【Naive UI】&#xff1c;NCard&#xff1e; 标签 【VUE3】【Naive UI】&#xff1c;n-button&#xff1e; 标签 【VUE3】【Naive UI】&#xff1c;a&#xff1e; 标签 【VUE3】【Naive UI】&#xff1c…...

wordpress怎么在导航栏添加搜索框/google搜索

你需要一份复印件&#xff1a;b a.copy()b a创建一个引用&#xff0c;因此a is b它们都指向内存中的相同位置&#xff0c;a.copy()实际上创建了一个新对象。在^{pr2}$如果使用basic slicing对数组进行切片&#xff0c;则id将不同&#xff0c;但任何更改都将反映在a和b中&…...

大良营销网站建设平台/如何给企业做网络推广

要想跨平台运行程序还得装虚拟机&#xff0c;装系统&#xff0c;非常麻烦&#xff0c;PlayOnMac是一款类似于虚拟机的软件&#xff0c;可让您在Mac轻松安装和使用专为Windows系统设计的众多游戏和软件&#xff0c;您无需拥有Windows许可证即可使用PlayOnMac&#xff0c;方便又好…...

手机网站建设案例/台湾搜索引擎

问题&#xff1a;三个线程的执行顺序是什么&#xff1f; public class Test {public static Thread t1new Thread(new Runnable() {Overridepublic void run() {System.out.println("t111111进行执行");}});public static Thread t2new Thread(new Runnable() {Over…...

深圳做营销型网站/免费b站在线观看人数在哪里找到

如前所述&#xff0c;最好让所有代码找到问题所在 . 我想你没有在处理设置中添加函数“bufferUntil()”&#xff0c;所以每次串口收到一个值时&#xff0c;它只显示它 . 我可以为你提出一个解决方案&#xff0c;它不是唯一的解决方案&#xff0c;但似乎有效 .在您的Arduino代码…...

做外贸首先要做网站/seo最新

护士站的客户端采用windows moblie&#xff0c;后台数据通过web service提供&#xff0c;在这次护士站的开发中&#xff0c;我负责的工作就是web service的开发。 首先介绍下什么叫web service&#xff0c;简单来说&#xff0c;web service相当于一种远程的函数调用。我们可以将…...

wordpress twenty thirteen/惠州seo推广优化

74HC595驱动4位7段数码管 1、74HC595介绍 74HCT595 是一个 8 位串行输入/串行或并行输出移位寄存器,带有一个存储寄存器和三态输出。移位寄存器和存储寄存器都有独立的时钟。该器件具有串行输入 (DS) 和串行输出 (Q7S) 以启用级联和异步复位 MR 输入。 MR 上的低电平将复位移…...