Нахождение скользящей средней по точкам данных в Python
Я снова немного играю в Python, и я нашел аккуратную книгу с примерами. Одним из примеров является представление некоторых данных. У меня есть файл .txt с двумя столбцами, и у меня есть данные. Я нанес на карту данные очень хорошо, но в упражнении говорится: «Измените вашу программу дальше, чтобы вычислить и построить график скользящего среднего значения данных, определяемого как:
$Y_k=\frac{1}{2r}\sum_{m=-r}^r y_{k+m}$
гдеr=5
в этом случае (иy_k
это второй столбец в файле данных). Пусть программа отобразит как исходные данные, так и скользящее среднее на одном графике.
Пока у меня есть это:
from pylab import plot, ylim, xlim, show, xlabel, ylabel
from numpy import linspace, loadtxt
data = loadtxt("sunspots.txt", float)
r=5.0
x = data[:,0]
y = data[:,1]
plot(x,y)
xlim(0,1000)
xlabel("Months since Jan 1749.")
ylabel("No. of Sun spots")
show()
Так как мне рассчитать сумму? В Mathematica это просто, поскольку это символическое манипулирование (например, Sum [i, {i, 0,10}]), но как вычислить сумму в python, которая берет каждые десять точек в данных и усредняет их, и делает так до конца очков?
Я посмотрел на книгу, но не нашел ничего, что могло бы объяснить это:
код хелтонбайкера сделал свое дело ^^: D
from __future__ import division
from pylab import plot, ylim, xlim, show, xlabel, ylabel, grid
from numpy import linspace, loadtxt, ones, convolve
import numpy as numpy
data = loadtxt("sunspots.txt", float)
def movingaverage(interval, window_size):
window= numpy.ones(int(window_size))/float(window_size)
return numpy.convolve(interval, window, 'same')
x = data[:,0]
y = data[:,1]
plot(x,y,"k.")
y_av = movingaverage(y, 10)
plot(x, y_av,"r")
xlim(0,1000)
xlabel("Months since Jan 1749.")
ylabel("No. of Sun spots")
grid(True)
show()
И я получил это:
Большое спасибо ^^ :)