Transformer - 时间特征的处理

Transformer - 时间特征的处理

flyfish

ETTm1.csv有如下内容
在这里插入图片描述

假如有2016/7/1 0:45:00有这样的时间字符串,如何变成时间特征列表

from typing import List

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


class TimeFeature:
    def __init__(self):
        pass

    def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:
        pass

    def __repr__(self):
        return self.__class__.__name__ + "()"


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.5


class 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.5


class 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.5


class 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.5


class 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.5


class 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.5


class 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.5


class WeekOfYear(TimeFeature):
    """Week of year encoded as value between [-0.5, 0.5]"""

    def __call__(self, index: pd.DatetimeIndex) -> np.ndarray:
        return (index.isocalendar().week - 1) / 52.0 - 0.5


def time_features_from_frequency_str(freq_str: str) -> List[TimeFeature]:
    """
    Returns a list of time features that will be appropriate for the given frequency string.
    Parameters
    ----------
    freq_str
        Frequency string of the form [multiple][granularity] such as "12H", "5min", "1D" etc.
    """

    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,
        ],
    }

    offset = to_offset(freq_str)

    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   - yearly
            alias: A
        M   - monthly
        W   - weekly
        D   - daily
        B   - business days
        H   - hourly
        T   - minutely
            alias: min
        S   - secondly
    """
    raise RuntimeError(supported_freq_msg)
def printf_time_features():
    freq="h"
    dates=pd.to_datetime("2016/7/1 0:45:00")
    for feat in time_features_from_frequency_str(freq):
        print(feat,"\n")
        print(feat(dates))
        
   
printf_time_features()
#返回适用于给定频率字符串的时间特征列表
# 频率字符串举例
# Y   - yearly
#     alias: A
# M   - monthly
# W   - weekly
# D   - daily
# B   - business days
# H   - hourly
# T   - minutely
#     alias: min
# S   - secondly

输出
输出4特征,时间字符串将编码为[-0.5,0.5]之间的值

# HourOfDay()

# -0.5
# DayOfWeek()

# 0.16666666666666663
# DayOfMonth()

# -0.5
# DayOfYear()

# -0.0013698630136986245
batch_x_mark: tensor([[[-0.5000,  0.1667, -0.5000, -0.0014],
         [-0.5000,  0.1667, -0.5000, -0.0014],
         [-0.5000,  0.1667, -0.5000, -0.0014],
         [-0.5000,  0.1667, -0.5000, -0.0014],
         [-0.4565,  0.1667, -0.5000, -0.0014],
         [-0.4565,  0.1667, -0.5000, -0.0014],
         [-0.4565,  0.1667, -0.5000, -0.0014],
         [-0.4565,  0.1667, -0.5000, -0.0014],
         [-0.4130,  0.1667, -0.5000, -0.0014],
         [-0.4130,  0.1667, -0.5000, -0.0014],
         [-0.4130,  0.1667, -0.5000, -0.0014],
         [-0.4130,  0.1667, -0.5000, -0.0014],
         [-0.3696,  0.1667, -0.5000, -0.0014],
         [-0.3696,  0.1667, -0.5000, -0.0014],
         [-0.3696,  0.1667, -0.5000, -0.0014],
         [-0.3696,  0.1667, -0.5000, -0.0014],
         [-0.3261,  0.1667, -0.5000, -0.0014],
         [-0.3261,  0.1667, -0.5000, -0.0014],
         [-0.3261,  0.1667, -0.5000, -0.0014],
         [-0.3261,  0.1667, -0.5000, -0.0014],
         [-0.2826,  0.1667, -0.5000, -0.0014],
         [-0.2826,  0.1667, -0.5000, -0.0014],
         [-0.2826,  0.1667, -0.5000, -0.0014],
         [-0.2826,  0.1667, -0.5000, -0.0014]]])
batch_y_mark: tensor([[[-0.3696,  0.1667, -0.5000, -0.0014],
         [-0.3696,  0.1667, -0.5000, -0.0014],
         [-0.3696,  0.1667, -0.5000, -0.0014],
         [-0.3696,  0.1667, -0.5000, -0.0014],
         [-0.3261,  0.1667, -0.5000, -0.0014],
         [-0.3261,  0.1667, -0.5000, -0.0014],
         [-0.3261,  0.1667, -0.5000, -0.0014],
         [-0.3261,  0.1667, -0.5000, -0.0014],
         [-0.2826,  0.1667, -0.5000, -0.0014],
         [-0.2826,  0.1667, -0.5000, -0.0014],
         [-0.2826,  0.1667, -0.5000, -0.0014],
         [-0.2826,  0.1667, -0.5000, -0.0014],
         [-0.2391,  0.1667, -0.5000, -0.0014],
         [-0.2391,  0.1667, -0.5000, -0.0014],
         [-0.2391,  0.1667, -0.5000, -0.0014],
         [-0.2391,  0.1667, -0.5000, -0.0014],
         [-0.1957,  0.1667, -0.5000, -0.0014],
         [-0.1957,  0.1667, -0.5000, -0.0014],
         [-0.1957,  0.1667, -0.5000, -0.0014],
         [-0.1957,  0.1667, -0.5000, -0.0014],
         [-0.1522,  0.1667, -0.5000, -0.0014],
         [-0.1522,  0.1667, -0.5000, -0.0014],
         [-0.1522,  0.1667, -0.5000, -0.0014],
         [-0.1522,  0.1667, -0.5000, -0.0014],
         [-0.1087,  0.1667, -0.5000, -0.0014],
         [-0.1087,  0.1667, -0.5000, -0.0014],
         [-0.1087,  0.1667, -0.5000, -0.0014],
         [-0.1087,  0.1667, -0.5000, -0.0014],
         [-0.0652,  0.1667, -0.5000, -0.0014],
         [-0.0652,  0.1667, -0.5000, -0.0014],
         [-0.0652,  0.1667, -0.5000, -0.0014],
         [-0.0652,  0.1667, -0.5000, -0.0014],
         [-0.0217,  0.1667, -0.5000, -0.0014],
         [-0.0217,  0.1667, -0.5000, -0.0014],
         [-0.0217,  0.1667, -0.5000, -0.0014],
         [-0.0217,  0.1667, -0.5000, -0.0014]]])

查看配置
打印属性值

 print('\n'.join(['%s:%s' % item for item in self.__dict__.items()]) )
seq_len:24
label_len:12
pred_len:24
set_type:0
features:M
target:OT
scale:True
timeenc:1
freq:h
root_path:./dataset/ETT-small/
data_path:ETTm1.csv
scaler:StandardScaler()

batch_x, batch_y, batch_x_mark, batch_y_mark各自的形状

 for i, (batch_x, , , ): torch.Size([1, 24, 7])
 for i, (, batch_y, , ): torch.Size([1, 36, 7])
 for i, (, , batch_x_mark, ): torch.Size([1, 24, 4])
 for i, (, , , batch_y_mark): torch.Size([1, 36, 4])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/564729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BFS 专题 ——FloodFill算法:733.图像渲染

文章目录 前言FloodFill算法简介题目描述算法原理代码实现——BFSCJava 前言 大家好啊,今天就正式开始我们的BFS专题了,觉得有用的朋友给个三连呗。 FloodFill算法简介 中文:洪水灌溉 举个例子,正数为凸起的山峰,负…

android学习笔记(五)-MVP模式

1、MVP模式demo的实现,效果下: 2、创建一个Fruit类: package com.example.listview; //Fruit类就是Model,表示应用程序中的数据对象。 public class Fruit {private int imageId;private String name;private String price;publi…

查找算法之插值查找

目录 前言一、查找算法预备知识二、插值查找三、总结3.1 查找性能3.2 适用场景 前言 查找算法是一种用于在数据集合中查找特定元素的算法。在计算机科学中,查找算法通常被用于在数组、链表、树等数据结构中查找目标元素的位置或者判断目标元素是否存在。 查找算法的…

基础SQL DML-插入语句

插入语句前,我们先创建一个表。表的创建在DDL语句里面涉及,可以参考:小赖同学吖-CSDN博客 我们创建一个员工表进行数据的插入操作 插入(添加)语句的语法 给员工表添加一条记录 给员工表添加多条记录 也可以通过下面的方…

Linux文件chattr/lsattr/Linux权限(搭建权限测试环境实战)引申到内部原理及Linux删除系统文件原理-7539字详谈

企业高薪思维: 每一个阶段什么时候是最重要的?(快速定位) 1.学习最重要的事情 (学生阶段,找工作前阶段) 2.家庭,女朋友 (工作阶段/学生阶段,学习不受到影响) …

浅析binance新币OMNI的前世今生

大盘跌跌不休,近期唯一的指望就是binance即将上线的OMNI 。虽然目前查到的空投数量不及预期,但OMNI能首发币安,确实远超预期了。 OMNI代币总量1亿,初始流通仅10,391,492枚,其中币安Lanchpool可挖350万枚 对于OMNI这个…

OneNote插件推荐(OneMore)

使用OneNote编辑笔记时希望有一个插件能够实现markdown的功能,于是发现了OneMark,后面用着用着,OneMark竟然收费了,于是苦苦找寻好用的markdown插件,无果,此时发现我的目标主要是实现对代码的格式化&#x…

洛谷 -P1007 独木桥(模拟,思维)

独木桥 题目背景 战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒&#xf…

VMware 15 虚拟机网络遇到的问题

剧情提要 通过Cent os7 的镜像文件,创建了一个虚拟机A(后面简称A),事后发现,宿主机无法ping通A 在虚拟机中通过IP a 看到的IP信息也没有只管的ip信息如图 然后执行,宿主机才能访问A。 sudo dhclient ens…

前端css中的transform(转换)的使用

前端css中的transform的使用 一、前言二、流程图三、举例(一)、平移1.平移,源码12.源码1运行效果(1).视频效果(2).截图效果 3.平移3d效果,源码24.源码2运行效果(1)、视频效果(2)、截…

如何使用RRT模式进行交易,Anzo Capital一篇文章说清楚

railway tracks烛台模式(或铁路线 - RRT)是一种基于价格行为的简单交易策略,这种策略交易原理相当简单,易于使用。 RRT烛台形态也是图表上经常出现的形态,如果知道如何使用它,Anzo Capital认为它就是具有强烈交易信号的形态。 …

要提升B端管理系统颜值,登录页就是第一道门面,必须升级

登录页是B端管理系统门面,对于系统的品牌形象、辨识度、品质展示等有着不可替代的作用,是B端管理系统升级的必备页面,这里面有什么原因呢?10年经验的老司机→贝格前端工场为您分析一下。 一、登录页对于系统形象的重要性 B端管理…

SLS 查询新范式:使用 SPL 对日志进行交互式探索

作者:无哲 引言 在构建现代数据和业务系统的过程中,可观测性已经变得至关重要,日志服务(SLS)为 Log/Trace/Metric 数据提供了大规模、低成本、高性能的一站式平台服务,并提供数据采集、加工、投递、分析、…

合约X—314协议系统开发

随着区块链技术的不断发展,越来越多的协议被提出和应用,其中X314协议就是其中之一。该协议旨在通过去中心化、安全性和可扩展性等方面,为区块链应用提供更好的支持。本文将从多个角度对X314协议进行深度解析,探讨其优势和不足&…

牛客NC162 二叉树中和为某一值的路径(三)【中等 dfs C++、Java、Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/965fef32cae14a17a8e86c76ffe3131f 思路 既然要找所有路径上节点和等于目标值的路径个数,那我们肯定先找这样的路径起点啊, 但是我们不知道起点究竟在哪里, 而且任意节点都有…

【机器学习】《机器学习建模基础》笔记

文章目录 单元0 前言单元1 数学建模与机器学习学习目标(一)什么是模型(二)数学模型的分类(三)数学建模的一般步骤(四)机器学习的概念(五)机器学习的分类&…

CTF-reverse-simpleRE(base64变表逆向)

题目链接 NSSCTF | 在线CTF平台 题目详情 [HUBUCTF 2022 新生赛]simple_RE 解题报告 下载得到的文件使用ida64分析,如果报错就换ida32,得到分析结果,有main函数就先看main main函数分析 main函数的逻辑看下来十分简单,因此关键…

机器学习(三)之监督学习2

前言: 本专栏一直在更新机器学习的内容,欢迎点赞收藏哦! 笔者水平有限,文中掺杂着自己的理解和感悟,如果有错误之处还请指出,可以在评论区一起探讨! 1.支持向量机(Support Vector Ma…

混淆原理与实践指南

引言 🚀 在当今的软件开发领域,保护代码的安全性和保密性变得越来越重要。混淆(Obfuscation)技术作为一种保护代码的手段,在应对逆向工程和代码盗用方面发挥着关键作用。本文将深入探讨混淆的原理,以及如何…

【Flutter】One or more plugins require a higher Android SDK version.

问题描述 项目里多个组件需要更高版本的Android SDK One or more plugins require a higher Android SDK version.解决方案: 报错提示requires Android SDK version 34 按提示修改android项目app里build.gradle的compileSdkVersion 为34 android {compileSdkVe…