Скользящее среднее временного ряда с использованием скользящего окна над массивом - PullRequest
0 голосов
/ 13 октября 2019

Мне нужно написать функцию ниже, которая может вычислять скользящее среднее временного ряда, используя скользящее окно над массивом. Эта функция должна принимать массив строк даты (скажем, arr_date), массив чисел (скажем, arr_record) и скользящее окно (значение по умолчанию 50). Должно:

Возвращать список словарей для всех окон. Каждый словарь должен включать в себя дату, среднее значение, мин, макс, стандартное отклонение в каждом окне. Возможность обрабатывать отсутствующие данные во временных рядах, заменяя отсутствующие данные самыми последними доступными данными. (b) Загрузите ежедневные данные SPY (с 31 декабря 2017 года по 31 декабря 2018 года) из Yahoo! как ваши тестовые данные в файле .csv. Прочитайте пример чтения файла .csv и напишите тестовое программирование для вызова вашей функции.

У кого-нибудь есть мысли? Чрезвычайно плохо знаком с питоном и борется.

1 Ответ

0 голосов
/ 13 октября 2019

Так что что-то, следуя этой логике, должно быть хорошей отправной точкой. Надеюсь, что это полезное начало, и добро пожаловать в сообщество CS.

def sliding_window( dates, numbers, sliding_window_value):

        # list of dictionaries
        return_dicts =[{}]

        # if window size is greater than length of dates, there's only one window
        if sliding_window_value >= len(dates):
            return_dicts += [create_window(dates, numbers)]
            return return_dicts

        # gather all our windows into one list
        for i in range (0, len(dates) - sliding_window_value ):

            # get our window subsets
            dates_subset = dates[i:(sliding_window_value+1)]
            numbers_subset = numbers[i:(sliding_window_value+1)]

            # get our window stats dictionary
            window_stats = create_window(dates_subset,numbers_subset)

            # add these stats to our return list
            return_dicts += [window_stats]

        return return_dicts


def create_window(dates_subset, numbers_subset):
    window_min = 1000000        # some high minimum to start
    window_max = -1000000       # some low maximuim to start
    window_total = 0

    for i in range ( 0, len(dates_subset)):

        # calculate total
        window_total += numbers_subset[i]

        # calculate max
        if numbers_subset[i] > window_max:
            window_max = numbers_subset[i]

        # calculate min
        if numbers_subset[i] < window_min:
            window_min = numbers_subset[i]

        # other calculations....


    return_dict = {
        "min" : window_min,
        "max" : window_max,
        "average" : window_total / len(dates_subset),
        # other calculations....
    }

    return return_dict

Удачи, приятель, работа того стоит.

enter image description here

...