Роллинг медиана в питоне - PullRequest
4 голосов
/ 30 марта 2011

У меня есть некоторые данные по акциям, основанные на ежедневных значениях закрытия. Мне нужно иметь возможность вставить эти значения в список Python и получить медиану за последние 30 закрытий. Есть ли библиотека Python, которая делает это?

Ответы [ 3 ]

9 голосов
/ 30 марта 2011

В чистом Python, имея ваши данные в списке Python a, вы можете сделать

median = sum(sorted(a[-30:])[14:16]) / 2.0

(Предполагается, что a содержит не менее 30 элементов.)

Использованиепакет NumPy, вы можете использовать

median = numpy.median(a[-30:])
4 голосов
/ 30 марта 2011

Рассматривали ли вы панд ?Он основан на numpy и может автоматически связывать временные метки с вашими данными, а также сбрасывать любые неизвестные даты, если вы заполните их numpy.nan.Он также предлагает некоторые довольно мощные графики через matplotlib.

По сути, он был разработан для финансового анализа в python.

2 голосов
/ 30 марта 2011

Медиана - это не только среднее значение в отсортированном диапазоне?

Итак, если ваш список stock_data:

last_thirty = stock_data[-30:]
median = sorted(last_thirty)[15]

Теперь вам просто нужно найти и исправить отдельные ошибки, а также обработать случай, когда stock_data меньше 30 элементов ...

давайте попробуем это немного:

def rolling_median(data, window):
    if len(data) < window:
       subject = data[:]
    else:
       subject = data[-30:]
    return sorted(subject)[len(subject)/2]
...