Вычисление скользящего среднего в Python с SciPy и NumPy

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы вычислить скользящее среднее в Python, удобно использовать функцию numpy.convolve из библиотеки numpy. Если вам необходимо сгладить временной ряд с использованием окна, состоящего из 3 значений, можно выполнить следующие операции:

Python
Скопировать код
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)  # Результат: сглаженный временной ряд.

Этот способ предоставляет сглаженные значения, исключая крайние случаи, в которых данных недостаточно для полного окна.

Кинга Идем в IT: пошаговый план для смены профессии

Разбор функции numpy.convolve

Функция numpy.convolve использует математическую операцию свертки для вычисления скользящего среднего, эффективно усредняя значения в пределах выбранного окна. Применение параметра mode='valid' позволяет сконцентрировать внимание на тех областях, где данные полностью заполняют окно.

Усовершенствованные альтернативы

Если вам требуются более сложные возможности для работы с большими массивами данных или переменными размерами окна, рассмотрите возможность использования scipy.ndimage.uniform_filter1d. Этот инструмент обеспечивает эффективное сглаживание данных.

Python
Скопировать код
from scipy.ndimage import uniform_filter1d

# Альтернативный метод сглаживания.
smoothed = uniform_filter1d(data, size=window)

Для анализа финансовых данных подойдет библиотека talib, предоставляющая множество функций для технического анализа.

Python
Скопировать код
import talib

# Работа со скользящим средним в финансовом анализе.
smoothed = talib.MA(np.array(data), window)

Необходимость аккуратности: точность вычислений и обработка крайних значений

При вычислении скользящего среднего важно уделить внимание деталям, таким как ошибки округления типа float. Использование типа данных np.longdouble помогает минимизировать возможные искажения.

Python
Скопировать код
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' позволяет также обработать эти случаи:

Python
Скопировать код
full_window = np.convolve(data, np.ones(window)/window, 'same')
smoothed = full_window[window – 1:]  # Исключаем начальный переход.

Сохранение оригинального размера массива

Если требуется сохранить размер исходного массива данных, необходимо внести изменения в метод с использованием np.insert:

Python
Скопировать код
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)]  # Возвращение к оригинальному размеру данных.

Визуализация

Визуальное представление данных и окна скользящего среднего поможет лучше понять принципы сглаживания и выявления закономерностей в данных.

Полезные материалы

  1. pandas.DataFrame.rolling — документация pandas 2.2.0 — методы Pandas для вычисления скользящего среднего.
  2. numpy.convolve — Руководство NumPy v1.26 — основы работы со сверткой в numpy.
  3. python – Скользящее среднее или скользящий средний – Stack Overflow — обсуждения в профессиональных сообществах.
  4. Понимание скользящих средних в Python — Medium — подробный анализ работы с скользящими средними.
  5. scipy.signal.lfilter — Руководство SciPy v1.12.0 — инструменты SciPy для обработки данных.
  6. numpy.cumsum — Руководство NumPy v1.26 — использование накопительного суммирования в numpy.