Повторная выборка ndarray элементом, не связанным со временем - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть временной ряд в ndarray. Временной ряд содержит количество продаж продукта вместе с ценой продукта. Данные временных рядов работают круглосуточно, однако в нерабочее время данные действительно стохастичны c, потому что покупателей и продавцов становится меньше. Я хочу сделать повторную выборку временного ряда, чтобы он сохранил свой текущий временной порядок, но строки с небольшим количеством продаж сворачиваются в одну строку, где в качестве строки с большим количеством продаж образуется несколько строк, так что ndarray то, что возвращается, имеет одинаковое количество продаж в каждой строке. Например, я устанавливаю число продаж равным 1000, если строка содержит 3000 продаж, она возвращает три строки по 1000 продаж, если строка имеет менее 1000 продаж, она добавляется в следующую строку, пока не будет достаточно продаж, чтобы создать строку из 1000 продажи. Есть много вариантов, доступных для повторной выборки по переменной, связанной со временем, но я не нахожу ни одной для переменной, не связанной со временем, такой как продажи. Это код, который у меня есть, но он не очень хорошо работает, поскольку в нем отсутствует возможность разбивать строки, которые превышают заданную частоту, поэтому результаты не равны:

def gen_modifiedsales(sales, frequency=100):
    times = sales[:,0]
    prices = sales[:,1]
    volumes = sales[:,2]
    ans = np.zeros(shape=(len(prices), 6))
    candle_counter = 0
    vol = 0
    lasti = 0
    for i in range(len(prices)):
        vol += volumes[i]
        if vol >= frequency:
            ans[candle_counter][0] = times[i]                          # time
            ans[candle_counter][1] = prices[lasti]                     # open
            ans[candle_counter][2] = np.max(prices[lasti:i+1])         # high
            ans[candle_counter][3] = np.min(prices[lasti:i+1])         # low
            ans[candle_counter][4] = prices[i]                         # close
            ans[candle_counter][5] = np.sum(volumes[lasti:i+1])        # volume
            candle_counter += 1
            lasti = i+1
            vol = 0
    return ans[:candle_counter]

В конечном итоге, что я я бы хотел повернуть серию времени, которая выглядит следующим образом:

Datetime          Price      Volume

2017-12-15 09:30  57.06      3

2017-12-15 09:31  57.04      1

2017-12-15 09:32  57.02      4

На что-то вроде этого

Datetime              Price  Volume
2017-12-15 09:05:14   100    57.103306666666796

2017-12-15 11:26:11   100    57.07302666666672

2017-12-15 23:32:03   100    57.14208000000028

Или поставить другой путь в городе, где я живу, у нас есть продавцы в центре, они продавать вещи 24 часа в сутки, если вам нужно купить 50 пар обуви в 10:30 утра, цена обуви будет очень справедливой, есть много конкурентов на продажу обуви, но если вы хотите купить 50 пар обуви обувь в 1:30 утра, вам придется заплатить много, чтобы купить обувь, так как там гораздо меньше людей, продающих обувь. Таким образом, в дневное время, когда продается много обуви, цены, как правило, менее стохастичны c, тогда как в ночное время они более стохастичны c и нестабильны. В стандартном временном ряду, основанном только на времени как частоте, ночные часы будут играть очень большую роль, даже если они представляют сравнительно небольшое количество продаж (в конце концов, не так много людей go в центре города, чтобы купить обувь ранним утром). При повторной выборке данных о количестве проданных туфель ночные часы, которые являются более стохастическими c, а летучие сокращаются, а дневные часы, которые являются менее стохастическими c, приобретают все большее значение.

...