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

informer辅助笔记:utils/timefeatures.py

定义了一套与时间特征相关的类和函数,旨在从时间序列数据中提取有用的时间特征,以支持各种时间序列分析和预测任务 

from typing import Listimport numpy as np
import pandas as pd
from pandas.tseries import offsets
from pandas.tseries.frequencies import to_offset

1 TimeFeature 类

  • 这是一个基础类,其他与时间特征相关的类都继承自它。
  • 它提供了一个基本框架,但没有实现具体的功能。
class TimeFeature:def __init__(self):passdef __call__(self, index: pd.DatetimeIndex) -> np.ndarray:passdef __repr__(self):return self.__class__.__name__ + "()"

 2 时间特征类

SecondOfMinuteMinuteOfHourHourOfDayDayOfWeekDayOfMonthDayOfYearMonthOfYearWeekOfYear:这些类都继承自TimeFeature,每个类都实现了一个特定的时间特征提取方法。例如,HourOfDay类提取一天中的小时数并进行规范化处理,使得值在[-0.5, 0.5]之间。

class SecondOfMinute(TimeFeature):"""Minute of hour encoded as value between [-0.5, 0.5]"""def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:return index.second / 59.0 - 0.5class MinuteOfHour(TimeFeature):"""Minute of hour encoded as value between [-0.5, 0.5]"""def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:return index.minute / 59.0 - 0.5class HourOfDay(TimeFeature):"""Hour of day encoded as value between [-0.5, 0.5]"""def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:return index.hour / 23.0 - 0.5class DayOfWeek(TimeFeature):"""Hour of day encoded as value between [-0.5, 0.5]"""def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:return index.dayofweek / 6.0 - 0.5class DayOfMonth(TimeFeature):"""Day of month encoded as value between [-0.5, 0.5]"""def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:return (index.day - 1) / 30.0 - 0.5class DayOfYear(TimeFeature):"""Day of year encoded as value between [-0.5, 0.5]"""def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:return (index.dayofyear - 1) / 365.0 - 0.5class MonthOfYear(TimeFeature):"""Month of year encoded as value between [-0.5, 0.5]"""def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:return (index.month - 1) / 11.0 - 0.5class WeekOfYear(TimeFeature):"""Week of year encoded as value between [-0.5, 0.5]"""def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:return (index.week - 1) / 52.0 - 0.5

3 time_features_from_frwquency_str

def time_features_from_frequency_str(freq_str: str) -> List[TimeFeature]:"""根据给定的频率字符串(如"12H", "5min", "1D"等)返回一组适当的时间特征类实例"""features_by_offsets = {offsets.YearEnd: [],offsets.QuarterEnd: [MonthOfYear],offsets.MonthEnd: [MonthOfYear],offsets.Week: [DayOfMonth, WeekOfYear],offsets.Day: [DayOfWeek, DayOfMonth, DayOfYear],offsets.BusinessDay: [DayOfWeek, DayOfMonth, DayOfYear],offsets.Hour: [HourOfDay, DayOfWeek, DayOfMonth, DayOfYear],offsets.Minute: [MinuteOfHour,HourOfDay,DayOfWeek,DayOfMonth,DayOfYear,],offsets.Second: [SecondOfMinute,MinuteOfHour,HourOfDay,DayOfWeek,DayOfMonth,DayOfYear,],}'''特征映射字典 features_by_offsets:这个字典将pandas的时间偏移类(如YearEnd、QuarterEnd、MonthEnd等)映射到对应的时间特征类列表。例如,对于每月的数据(MonthEnd),它映射到MonthOfYear类;对于每小时的数据(Hour),它映射到HourOfDay、DayOfWeek、DayOfMonth和DayOfYear类。'''offset = to_offset(freq_str)#使用pandas的to_offset函数将频率字符串(如"12H")转换为相应的pandas时间偏移对象。for offset_type, feature_classes in features_by_offsets.items():if isinstance(offset, offset_type):return [cls() for cls in feature_classes]'''遍历映射字典,检查提供的偏移对象是否属于字典中的某个偏移类型。如果找到匹配,为每个相关的特征类创建一个实例,并将这些实例作为列表返回。'''supported_freq_msg = f"""Unsupported frequency {freq_str}The following frequencies are supported:Y   - yearlyalias: AM   - monthlyW   - weeklyD   - dailyB   - business daysH   - hourlyT   - minutelyalias: minS   - secondly"""raise RuntimeError(supported_freq_msg)

4 time_features

'''
从日期数据中提取有用的时间特征
'''
def time_features(dates, timeenc=0, freq='h'):"""> `time_features` takes in a `dates` dataframe with a 'dates' column and extracts the date down to `freq` where freq can be any of the following if `timeenc` is 0:> * m - [month]> * w - [month]> * d - [month, day, weekday]> * b - [month, day, weekday]> * h - [month, day, weekday, hour]> * t - [month, day, weekday, hour, *minute]>> If `timeenc` is 1, a similar, but different list of `freq` values are supported (all encoded between [-0.5 and 0.5]):> * Q - [month]> * M - [month]> * W - [Day of month, week of year]> * D - [Day of week, day of month, day of year]> * B - [Day of week, day of month, day of year]> * H - [Hour of day, day of week, day of month, day of year]> * T - [Minute of hour*, hour of day, day of week, day of month, day of year]> * S - [Second of minute, minute of hour, hour of day, day of week, day of month, day of year]*minute returns a number from 0-3 corresponding to the 15 minute period it falls into."""if timeenc==0:dates['month'] = dates.date.apply(lambda row:row.month,1)dates['day'] = dates.date.apply(lambda row:row.day,1)dates['weekday'] = dates.date.apply(lambda row:row.weekday(),1)dates['hour'] = dates.date.apply(lambda row:row.hour,1)dates['minute'] = dates.date.apply(lambda row:row.minute,1)dates['minute'] = dates.minute.map(lambda x:x//15)freq_map = {'y':[],'m':['month'],'w':['month'],'d':['month','day','weekday'],'b':['month','day','weekday'],'h':['month','day','weekday','hour'],'t':['month','day','weekday','hour','minute'],}return dates[freq_map[freq.lower()]].values'''此模式下,函数直接从日期中提取特定的时间特征,如月份、日期、星期几、小时和分钟。freq参数指定要提取的时间特征的精度。例如,如果freq为'd',则提取月、日和星期几。对于分钟,它被转换为一个从0到3的数字,表示15分钟的时间段。'''if timeenc==1:dates = pd.to_datetime(dates.date.values)return np.vstack([feat(dates) for feat in time_features_from_frequency_str(freq)]).transpose(1,0)'''此模式下,函数使用time_features_from_frequency_str函数来获取一组特征提取器,并应用它们来转换时间数据。这些特征提取器提取的特征被编码在[-0.5, 0.5]的范围内,以提供规范化的时间特征。
freq参数在这种情况下也指定了提取的时间特征的类型和精度。'''

相关文章:

informer辅助笔记:utils/timefeatures.py

定义了一套与时间特征相关的类和函数,旨在从时间序列数据中提取有用的时间特征,以支持各种时间序列分析和预测任务 from typing import Listimport numpy as np import pandas as pd from pandas.tseries import offsets from pandas.tseries.frequenc…...

[Verilog语法]:===和!==运算符使用注意事项

[Verilog语法]:和!运算符使用注意事项 1, 和 !运算符使用注意事项2,3, 1, 和 !运算符使用注意事项 参考文献: 1,[SystemVerilog语法拾遗] 和!运算符使用注意事项 2, 3,...

mybatis 高并发查询性能问题

场景: 使用Mybatis (3.5.10)SelectProvider注解执行动态sql 在高并发查询时 QPS 很低 问题复现 mybatis 配置 (getOfflineConfigSqlTemplate 该方法返回的是动态sql ) 压测结果 观察线程阻塞情况 此时的QPS 在 …...

我在Vscode学OpenCV 图像处理一(阈值处理、形态学操作【连通性,腐蚀和膨胀,开闭运算,礼帽和黑帽,内核】)

文章目录 一、阈值处理1.1 OpenCV 提供了函数 cv2.threshold()和函数 cv2.adaptiveThreshold(),用于实现阈值处理1.1.1. cv2.threshold():(1)在函数cv2.threshold()中,参数threshold_type用于指定阈值处理的方式。它有以下几种可选的阈值类型…...

Yolov8实现瓶盖正反面检测

一、模型介绍 模型基于 yolov8n数据集采用SKU-110k,这数据集太大了十几个 G,所以只训练了 10 轮左右就拿来微调了 基于原木数据微调:训练 200 轮的效果 10 轮SKU-110k 20 轮原木 200 轮瓶盖正反面 微调模型下载地址https://wwxd.lanzouu.co…...

GAN:WGAN前作

WGAN前作:有原则的方法来训练GANs 论文:https://arxiv.org/abs/1701.04862 发表:ICLR 2017 本文是wgan三部曲的第一部。文中并没有引入新的算法,而是标是朝着完全理解生成对抗网络的训练动态过程迈进理论性的一步。 文中基本是…...

数据库应用:MongoDB 文档与索引管理

目录 一、理论 1.MongoDB文档管理 2.MongoDB索引管理 二、实验 1.MongoDB文档管理 2.MongoDB索引管理(索引添加与删除) 3.MongoDB索引管理(全文索引) 4.MongoDB索引管理(多列索引) 5.MongoDB索引管…...

Python批处理PDF文件,PDF附件轻松批量提取

PDF附件是指在PDF文档中嵌入的其他文件,如图像、表格、音频、视频或其他文档。这些附件可以与PDF文档一起存储、传输和共享,为文档提供了更丰富的内容和更多的功能。通过添加附件,我们可以将相关文件和信息捆绑在一起,使其更易于管…...

Python可迭代对象排序:深入排序算法与定制排序

更多Python学习内容:ipengtao.com 排序在计算机科学中是一项基础而关键的操作,而Python提供了强大的排序工具来满足不同场景下的排序需求。本文将深入探讨Python中对可迭代对象进行排序的方法,涵盖基础排序算法、sorted函数的应用、以及定制排…...

基于matlab的图像去噪算法设计与实现

摘 要 随着我们生活水平的提高,科技产品飞速更新换代,在信息传输中,图像传输所占的比重越来越大。但自然噪声会在图像传输时干扰其传输过程,甚至会使图片不能表达其原来的意义。去噪处理就是为了去除图像中的噪声,从而…...

NFTScan 正式上线 Starknet NFTScan 浏览器和 NFT API 数据服务

2023 年 11 月 30 号,NFTScan 团队正式对外发布了 Starknet NFTScan 浏览器,将为 Starknet 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商,Starknet 是继 Bitcoin、Ethereum、…...

2023年亚太杯APMCM数学建模大赛A题水果采摘机器人的图像识别

2023年亚太杯APMCM数学建模大赛 A题 水果采摘机器人的图像识别 原题再现 中国是世界上最大的苹果生产国,年产量约3500万吨。同时,中国也是世界上最大的苹果出口国,世界上每两个苹果中就有一个是中国出口的,世界上超过六分之一的…...

mysql which is not in SELECT list; this is incompatible with DISTINCT解决方案

mysql报错Expression #1 of ORDER BY clause is not in SELECT list, references column ‘xxx’ which is not in SELECT list; this is incompatible with DISTINCT解决方案: 这是在 mysql5.7 版本,DISTINCT 与 order by 在一起用时则会报3065错误。因…...

linux /proc 文件系统

/proc系统是一个伪文件系统,它只存在内存当中,而不占用外存空间,以文件系统的方式为内核与进程提供通信的接口。 /proc目录下有很多以数字命名的目录,每个数字代表进程号PID它们是进程目录。系统中当前运行的每一个进程在/proc下都…...

java开发之个微群聊自动添加好友

请求URL: http://域名/addRoomMemberFriend 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId是String登录实例标识chatRoom…...

Git .gitignore 忽略文件不生效解决方法

.gitignore 匹配规则 *.sample    # 忽略所有 .sample 结尾的文件 !lib.sample    # 但 lib.sample 除外 /TODO    # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/    # 忽略 build/ 目录下的所有文件 doc/*.txt    # 会…...

【Java】16. HashMap

16. HashMap public static String find3(String key) {Map<String, String> map Map.of("bright", "小明","white", "小白","black", "小黑");return map.get(key); }Map.of 用来创建不可变的 Map&#…...

KMP基础架构

前言 Kotlin可以用来开发全栈, 我们所熟悉的各个端几乎都支持(除了鸿蒙) 而我们要开发好KMP项目需要一个好的基础架构,这样不仅代码更清晰,而且能共享更多的代码 正文 我们可以先将KMP分为前端和服务端 它们两端也能共享一些代码,比如接口声明,bean类,基础工具类等 前端和…...

递归实现选择排序.

思路: 1.定位数组中的最大元素或最小元素 2.将其与第一个元素交换位置 3.接着将剩余未排序的元素中的最大值或最小值与第二个元素交换位置 4.以此类推,直到排序完成 示例: [ 8, 5, 1, 9, 3 ] //原始数组 [ 1, 5, 8, 9, 3 ] //3与8交换 [ 1, 3, 8, 9, 5 ] //3与5交换 [ 1,…...

Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)

目录 Node.js 文件系统模块&#xff08;二&#xff09; Node.js 文件系统模块&#xff08;三&#xff09; Node.js 文件系统模块&#xff08;四&#xff09; Node.js 路径模块 Node.js 连接 MySQL Node.js nodemon Node.js 操作 MySQL Node.js 应用 Node.js 文件系统模块…...

开源Agent框架能跑通Demo,但离企业生产还差五个能力

2026年AI行业的现象很有意思。开源社区里Agent框架层出不穷&#xff0c;每隔几周就有一个新项目冲上GitHub热榜&#xff0c;演示视频做得赏心悦目——AI Agent流畅地调用工具、搜索网页、生成报告&#xff0c;评论区一片惊叹。但如果你去问那些真正在生产环境中大规模部署Agent…...

Multisim仿真避坑指南:为什么你的74LS148电路LED灯不亮?从命名规则到电源接法的常见错误排查

Multisim仿真避坑指南&#xff1a;74LS148电路LED不亮的深度排查手册 当你在Multisim中搭建完一个看似完美的74LS148优先编码器电路&#xff0c;按下仿真按钮后却发现LED灯顽固地保持黑暗——这种挫败感每位电子工程师都深有体会。本文将从五个关键维度系统梳理那些容易被忽视却…...

用高效证书管理加固企业数字边界

在当今企业 IT 基础架构的运行中&#xff0c;数字证书已经成为不可或缺的重要组成部分。这在很大程度上源于企业逐渐将 HTTPS 作为默认的数据传输方式&#xff0c;以实现更加安全的通信环境。从安全与隐私角度来看&#xff0c;这无疑是一项积极的改变&#xff0c;因为数据在传输…...

核心代码编程-多模态版本的最优调度-200分

在大语言模型推理服务中&#xff0c;有多个不同大小的模型版本可供选择。每个模型版本有不同的准确率和推理延迟。给定查询次数N和总时间预算T&#xff0c;为每个查询选择一个模型版本&#xff0c;使得在不超过时间预算的前提下&#xff0c;总准确率最大。输入 &#xfe63;查询…...

为什么你的Windows快捷键突然失效?Hotkey Detective一键定位占用程序终极指南

为什么你的Windows快捷键突然失效&#xff1f;Hotkey Detective一键定位占用程序终极指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-d…...

【Typescript】11-类抽象类与面向对象建模

类、抽象类与面向对象建模 TypeScript 不是一门纯粹的面向对象语言&#xff0c;但它对类系统的支持足够完整&#xff0c;足以覆盖很多工程场景。问题在于&#xff0c;很多人学到 class 之后&#xff0c;会误以为这就是组织 TypeScript 代码的默认方式。现实恰恰相反&#xff1…...

SABIC塑料:2026年精选十大高品质产品权威榜单揭晓,重塑行业新选择

在制造业转型升级的关键节点&#xff0c;工程塑料作为工业生产的"粮食"&#xff0c;其品质稳定性与供应链效率直接关乎企业核心竞争力。然而行业长期存在的信息壁垒与价值陷阱&#xff0c;让许多采购决策陷入"高价换低效"的困境——据中国塑料加工工业协会…...

【函数栈帧的创建和销毁:一文看懂 C/C++ 函数调用的底层秘密】

本文适合&#xff1a;被“局部变量为什么是随机值”、“函数怎么传参”、“返回值怎么带回来”这些问题困扰过的初学者。 文末会解释&#xff1a;为什么返回局部变量的引用有时能打印出正确值&#xff0c;但依然是错的&#xff1f;Hello,大家好呀&#xff0c;这里是小J,函数栈帧…...

【案例共创】CodeArts+SKILL 双引擎:AI 驱动 WEB 服务器极速部署

本案例由开发者&#xff1a;JeffDing提供&#xff0c;华为开发者空间案例中心优化并收录。 最新案例动态&#xff0c;请查阅【案例共创】CodeArtsSKILL 双引擎&#xff1a;AI 驱动 WEB 服务器极速部署小伙伴们快来进行实操吧&#xff01; 一、概述 1.1 案例介绍 华为云码道…...

Polar Sparsity技术:提升LLM推理效率的动态稀疏优化

1. 项目概述&#xff1a;Polar Sparsity技术背景与核心价值 在大型语言模型&#xff08;LLM&#xff09;推理任务中&#xff0c;计算效率始终是制约实际部署的关键瓶颈。传统稀疏化方法&#xff08;如权重剪枝或神经元激活稀疏化&#xff09;虽然在小批量场景下有效&#xff0c…...