如何在很长的时间序列中去除假期和周末,并在Python中建模时间序列?

0 投票
5 回答
3555 浏览
提问于 2025-04-17 03:40

在Python里有没有什么函数可以处理这个问题?Google文档里有一个“星期几”的操作,所以也许Python里也有类似的功能。我觉得肯定有人解决过这个问题,因为在金融和研究等稀疏数据中经常会遇到类似的问题。我主要是想整理一大堆不同大小的向量,这些向量是按天索引的时间序列。我不太确定该怎么处理这些天——是把第一天标记为1,最后一天标记为N,还是用Unix时间戳,或者应该怎么做?我也不确定时间序列是否应该保存成矩阵,这样我可以更容易地建模来计算相关矩阵之类的,有没有现成的工具可以做到这些?

让我们试着解决这个问题,不要被“实际”操作搞得太复杂:

import itertools
seq = range(100000)
criteria  = cycle([True]*10 + [False]*801)
list(compress(seq, criteria))

现在我得把它们转换成天,然后把$\mathbb R$转换成$( \mathbb R, \mathbb R)$的元组。所以$V : \mathbb R \mapsto \mathbb R^{2}$还缺少,我在调查中。

[更新]

让我们来玩玩!下面的代码解决了一个子问题——创建一些测试数据来测试这些东西——现在我们需要创建任意的天数和估值,以便尝试在任意时间序列上进行测试。如果我们能创建一个函数$V$,那我们就非常接近解决这个问题了……不过它必须考虑假期和周末,所以可能不太简单(不太确定)。

import itertools as i
import time
import math
import numpy



def createRandomData():
    samples=[]

    for x in range(5):
        seq = range(5)
        criteria  = i.cycle([True]*x+ [False]*3)

        samples += [list(i.compress( seq, criteria ))] 

    return samples

def createNNtriangularMatrix(data):
    N = len(data)
    return [aa+[0]*(N-len(aa)) for aa in data]


A= createNNtriangularMatrix(createRandomData())
print numpy.array(A)
print numpy.corrcoef(A)

5 个回答

0

我觉得这要看你具体的问题是什么。如果是个人日历的话,用“天”来做索引就足够了。

一个人的一生可以长达200年,这大约是73000天。你可以简单地计算并记录下这些天,可能可以用一个字典来存储,比如:

day = {}
# day[0] = [event_a, event_b, ...]
# or you may want to rewrite the __getitem__ method like this: day['09-05-2012']
1

试试使用pandas这个工具。你可以创建一个DateOffset,用来处理工作日,并把你的数据放进一个DataFrame里(具体可以参考:http://pandas.pydata.org/pandas-docs/stable/timeseries.html),这样就能对数据进行分析了。

1

我觉得你应该想办法确定你想要包含的那些天,然后创建一个(可能是循环的)子程序,利用切片操作来处理你那个大列表。

如果你想要不连续的切片,可以看看这个问题:

Python 列表中的不连续切片

或者你也可以把那些你不想要的天设置为空值(零或者 None)。

撰写回答