Python之--时间序列

本文介绍了Python中的时间序列数据处理,包括时间戳、日期和事件数据类型,以及字符串与datetime的转换。重点讲解了如何使用pandas进行时间序列基础操作,如索引、选取和子集构造,并探讨了带有重复索引的时间序列处理方法。
摘要由CSDN通过智能技术生成

1.时间序列

不管在哪个领域中(金融学、经济学、生态学、神经科学、物理学等),时间序列数据都是一种重要的结构化数据形式,在多个时间点观察或者测量到的任何事物都可以形成一段时间序列。很多时间序列是固定频率的,也就是说,数据点是根据某种规律定期出现的(比如每15分钟、每5分钟、每一个月等)。时间序列也可以是不定期的。时间序列数据的意义取决于具体的应用场景,主要有以下几种:

  • 时间戳(timestamp):特定的时刻
  • 固定时期(period):如2019年1月或者2019年全年
  • 时间间隔(interval):由起始和结束时间戳表示。时期也可以看做间隔的特例
  • 实验或过程时间,每个时间点都是相对于特定起始时间的一个度量。例如,从放入烤箱时起,每秒钟饼干的直径。
    下面主要从前3中时间序列来讲解,就目前而言,前三种中时间戳的应用更加常见

2.日期和事件数据类型及工具

Python标准库包含用于时间(time)和日期(date)数据的数据类型,而且还有日历方面的功能,我会主要用到datetime、time以及calendar模块。datetime.datetime(也可以简写为datatime)是用的最多的数据类型:

    from datetime import datetime
    now = datetime.now()
    print(now)
    print(now.year)
    print(now.month)
    print(now.day)
    
    """
    2019-03-25 13:07:37.236060
    2019
    3
    25
    """
  • datetime以毫秒形式存储日期和时间。datetime.timedelta表示两个datetime对象之间的时间差:
    delta = datetime(2015,1,7) - datetime(2013,3,4,8,20)
    print(delta)
    print(delta.days)
    print(delta.seconds)
    
    
    """
    673 days, 15:40:00
    673
    56400
    """
  • 可以给datetime对象加上或者减去一个或多个timedelta,这样会产生一个新对象:
    from datetime import timedelta
    start = datetime(2015,1,7)
    s = start + timedelta(12)
    print(s)
    
    a = start - 2*timedelta(3)
    print(a)
    
    """
    2015-01-19 00:00:00
    2015-01-01 00:00:00
    """
  • datetime模块中的数据类型参见下表,虽然重点讲解部分是pandas数据类型和高级时间序列处理,但是在实际工作中可定会在Python的其他地方遇到有关datetime的数据类型。
类型 说明
date 以公历形式存储日历日期(年月日)
time 将时间存储为时、分、秒、毫秒
datetime 存储日期和时间
timedelta 表示两个datetime值之间的差(日、秒、毫秒)

3.字符串和datetime的相互转换

利用str或strftime方法(传入一个格式化字符串),datetime对象和pandas的timestamp对象可以被格式化为字符串:

    stamp = datetime(2015,1,7)
    print(str(stamp))
    
    """
    2015-01-07 00:00:00
  
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
GRU-Attention是一种用于时间序列预测的深度学习模型。下面我来简单介绍一下GRU-Attention的实现过程。 首先,我们需要导入必要的库: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from keras.models import Sequential, Model from keras.layers import Dense, GRU, Input, RepeatVector, TimeDistributed, Lambda, Activation, Dot, Concatenate from keras.optimizers import Adam from keras.callbacks import EarlyStopping ``` 接着,我们需要准备数据集。这里以一个简单的sin函数为例: ```python x = np.arange(0, 100, 0.1) y = np.sin(x) ``` 由于GRU-Attention是一种序列模型,我们需要将数据集转化为时间序列数据。这里我们取时间窗口为10,即每个时间点预测后面10个时间点的数值: ```python window_size = 10 X = [] Y = [] for i in range(len(y) - window_size): X.append(y[i:i+window_size]) Y.append(y[i+window_size:i+window_size+1]) X = np.array(X) Y = np.array(Y) ``` 接着,我们需要定义GRU-Attention模型。这里我们使用两层GRU和一个Attention层: ```python def attention(inputs): # inputs.shape = (batch_size, time_steps, input_dim) input_dim = int(inputs.shape[2]) a = Permute((2, 1))(inputs) a = Dense(time_steps, activation='softmax')(a) a = Lambda(lambda x: K.mean(x, axis=1), name='dim_reduction')(a) a = RepeatVector(input_dim)(a) a_probs = Permute((2, 1), name='attention_vec')(a) output_attention_mul = Multiply(name='attention_mul')([inputs, a_probs]) return output_attention_mul model = Sequential() model.add(GRU(64, input_shape=(window_size, 1), return_sequences=True)) model.add(GRU(32, return_sequences=True)) model.add(Attention()) model.add(TimeDistributed(Dense(1))) model.add(Activation('linear')) model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.001)) ``` 接着,我们可以开始训练模型: ```python early_stopping = EarlyStopping(monitor='val_loss', patience=10) history = model.fit(X_train, Y_train, validation_split=0.2, epochs=100, batch_size=64, callbacks=[early_stopping]) ``` 最后,我们可以用模型进行预测: ```python y_pred = model.predict(X) plt.plot(y, label='true') plt.plot(y_pred[:, -1, 0], label='predicted') plt.legend() plt.show() ``` 以上就是GRU-Attention时间序列预测的实现过程。当然,具体的模型参数和数据集处理方式需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值