Вычисление скользящего среднего в Python с SciPy и NumPy
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы вычислить скользящее среднее в Python, удобно использовать функцию numpy.convolve
из библиотеки numpy. Если вам необходимо сгладить временной ряд с использованием окна, состоящего из 3 значений, можно выполнить следующие операции:
import numpy as np
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Данные для сглаживания.
window = 3 # Размер окна для скользящего среднего.
# Применяем скользящее среднее.
smoothed = np.convolve(data, np.ones(window)/window, 'valid')
print(smoothed) # Результат: сглаженный временной ряд.
Этот способ предоставляет сглаженные значения, исключая крайние случаи, в которых данных недостаточно для полного окна.
Разбор функции numpy.convolve
Функция numpy.convolve
использует математическую операцию свертки для вычисления скользящего среднего, эффективно усредняя значения в пределах выбранного окна. Применение параметра mode='valid'
позволяет сконцентрировать внимание на тех областях, где данные полностью заполняют окно.
Усовершенствованные альтернативы
Если вам требуются более сложные возможности для работы с большими массивами данных или переменными размерами окна, рассмотрите возможность использования scipy.ndimage.uniform_filter1d
. Этот инструмент обеспечивает эффективное сглаживание данных.
from scipy.ndimage import uniform_filter1d
# Альтернативный метод сглаживания.
smoothed = uniform_filter1d(data, size=window)
Для анализа финансовых данных подойдет библиотека talib
, предоставляющая множество функций для технического анализа.
import talib
# Работа со скользящим средним в финансовом анализе.
smoothed = talib.MA(np.array(data), window)
Необходимость аккуратности: точность вычислений и обработка крайних значений
При вычислении скользящего среднего важно уделить внимание деталям, таким как ошибки округления типа float. Использование типа данных np.longdouble
помогает минимизировать возможные искажения.
cumulative_sum = np.cumsum(np.longdouble(data))
smoothed = (cumulative_sum[window – 1:] – cumulative_sum[:-window]) / window
Обработку крайних случаев удобно осуществлять с помощью библиотеки Pandas и её функций, таких как pandas.Series.rolling.mean()
.
Производительность и работа с большим объемом данных
Векторизированные операции, которые предоставляют библиотеки numpy
и pandas
, облегчают обработку больших объемов данных, обеспечивая быструю и эффективную работу. Важно учесть вариацию размеров окна при вычислении скользящего среднего.
Для задач высокой производительности и дополнительных материалов для изучения
Для задач, требующих высокой производительности, подумайте о применении специализированных библиотек, таких как talib
, Cython или C-расширения.
Ниже приведены ссылки на полезные материалы: документацию и обсуждения в профессиональных сообществах.
Подготовка начального переходного процесса и сохранение размера массива
Начальный переходной процесс: потенциальная проблема
Начальный переходной процесс данных, когда окно для сглаживания ещё не полностью заполнено, требует отдельного внимания. Использование функции convolve
с параметром 'same'
позволяет также обработать эти случаи:
full_window = np.convolve(data, np.ones(window)/window, 'same')
smoothed = full_window[window – 1:] # Исключаем начальный переход.
Сохранение оригинального размера массива
Если требуется сохранить размер исходного массива данных, необходимо внести изменения в метод с использованием np.insert
:
padded_data = np.insert(data, 0, [0]*window)
cumulative_sum = np.cumsum(np.longdouble(padded_data))
smoothed = (cumulative_sum[window:] – cumulative_sum[:-window]) / window
smoothed = smoothed[:len(data)] # Возвращение к оригинальному размеру данных.
Визуализация
Визуальное представление данных и окна скользящего среднего поможет лучше понять принципы сглаживания и выявления закономерностей в данных.
Полезные материалы
- pandas.DataFrame.rolling — документация pandas 2.2.0 — методы Pandas для вычисления скользящего среднего.
- numpy.convolve — Руководство NumPy v1.26 — основы работы со сверткой в
numpy
. - python – Скользящее среднее или скользящий средний – Stack Overflow — обсуждения в профессиональных сообществах.
- Понимание скользящих средних в Python — Medium — подробный анализ работы с скользящими средними.
- scipy.signal.lfilter — Руководство SciPy v1.12.0 — инструменты SciPy для обработки данных.
- numpy.cumsum — Руководство NumPy v1.26 — использование накопительного суммирования в
numpy
.