Убрать праздничные и выходные дни за очень долгое время, как моделировать временные ряды в Python? - PullRequest
0 голосов
/ 05 октября 2011

Есть ли в Python какая-то функция для этого. В GoogleDocs есть операция по будням, поэтому, возможно, что-то подобное есть в 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 ]

1 голос
/ 26 апреля 2012

Попробуйте использовать панд .Вы можете создать DateOffset для рабочих дней и включить свои данные в DataFrame (см. http://pandas.pydata.org/pandas-docs/stable/timeseries.html) для его анализа.

1 голос
/ 05 октября 2011

Я думаю, вы должны как-то определить дни, когда вы хотите ВКЛЮЧИТЬ, и создать (возможно, циклически) подпрограммы, использующие операции срезов в вашем большом списке.

Для прерывистых слайсов вы можете взглянуть на этовопрос:

прерывистый срез в списке питонов

Или, возможно, вы могли бы сделать дни, которые вы не хотите, получить нулевое значение (ноль или ноль).

0 голосов
/ 10 ноября 2015

Если вам нужны торговые дни, то вы можете использовать пакет pandas datareader для загрузки исторических цен s & p 500 для США и использовать индекс дат в качестве маски для ваших данных.

Ответил на мобильный, я добавлю ссылки и код позже.

0 голосов
/ 22 февраля 2013

Почему вы хотите убрать праздничные и выходные дни? Это потому, что они являются выбросами или нулями? Если они равны нулю, они будут обработаны моделью. Вы хотели бы оставить данные во временном ряду и использовать фиктивные переменные для моделирования сезонных эффектов (т.е. месячных манекенов), манекенов дня недели и манекенов праздников. Я ясно, что я ошеломлен. У меня есть сезонные люди, которые не могут разобраться с анализом временных рядов, даже разбивают будни на один временной ряд, а выходные - на другой, который полностью игнорирует влияние опережающих и запаздывающих событий в праздничные дни.

0 голосов
/ 05 октября 2011

Я думаю, что это зависит от масштаба вашей проблемы, для личного календаря «день» достаточно хорош для индексации.

Жизнь человека составляет целых 200 лет, около 73000 дней, просто рассчитайте изапишите их все, возможно, используйте диктовку, например

day = {}
# day[0] = [event_a, event_b, ...]
# or you may want to rewrite the __getitem__ method like this: day['09-05-2012']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...