Reputation: 19
I want to find the standard deviation for a specific window in a list. What I mean by this is for example:
num_list = [1, 2, 3, 4, 5]
window = 3
Thus, I would find the standard deviation for [1, 2, 3]
, [2, 3, 4]
and [3, 4, 5]
.
How I approached this was as the following:
def mean(data):
n = len(data)
mean = sum(data) / n
return mean
def standard_deviation(data):
average = mean(data)
deviations = [(x - average) ** 2 for x in data]
variance = sum(deviations) / window
standard_deviation=math.sqrt(variance)
return standard_deviation
first_mean = mean(num_list[:window])
first_standard_deviation = standard_deviation(num_list[:window])
average_list = [first_mean]
standard_deviation_list=[first_standard_deviation]
for i in range(1, len(num_list)-window+1):
first_mean -= num_list[i-1] / window
first_mean += num_list[i+window-1] / window
deviations=[(i-first_mean) **2 for i in num_list]
first_standard_devaiation=math.sqrt(sum(deviations)/window)
average_list.append(first_mean)
standard_deviation_list.append(first_standard_deviation)
When testing out other numbers in the list, it appears that the standard deviation seems to be the same value as the first sub-list for the rest of the sub-lists which is not right. I am not sure which part I did wrong.
Upvotes: 1
Views: 47
Reputation: 195438
You can simplify the code with help of statistics.pstdev
:
from statistics import pstdev
num_list=[1,2,3,4,5]
window=3
for i in zip(*[num_list[i:] for i in range(window)]):
print(pstdev(i))
Prints:
0.816496580927726
0.816496580927726
0.816496580927726
Upvotes: 2