1. 程式人生 > >Moving Average

Moving Average

expect ast load home time bin ndarray run try

移動平均算法Demo

#!/usr/bin/python2.7
# Fetch data from BD and analyse.

import json
import urllib
import traceback
import numpy as np
# import pandas as pd
import matplotlib.pyplot as plt
#from scipy import stats

def fetch_raw_data(url):
    try:
        response = urllib.urlopen(url).read().decode(‘utf-8‘)
        return json.loads(response)
    except Exception, e:
        err = traceback.format_exc()
        print("fetch_raw_data err: {}".format(err))

# 移動平均算法
def moving_average(f_t):
    if type(f_t) is not np.ndarray:
        raise TypeError            (‘Expected one dimensional numpy array.‘)
    if f_t.shape[1] != 1:
        raise IndexError            (‘Expected one dimensional numpy array, %d dimensions given.‘ % (f_t.shape[1]))

    f_t = f_t.flatten()
    window = 5
    mode = ‘same‘
    g_t = np.ones(int(window))/float(window)
    # Deal with boundaries with atleast lag/2 day window
    # ma = np.convolve(f_t,g_t,mode)
    # ma = np.convolve(f_t,g_t,mode)[window-1:-window+1]
    ma = np.convolve(f_t,g_t)[window-1:-window+1]
    return ma

def raw_data():
    start_ts = 1533204000
    stop_ts = 1533222000
    url = ‘http://8.8.8.8/path/data?begin_time={}&end_time={}&type=asia‘
    url = url.format(start_ts,stop_ts)
    result = fetch_raw_data(url)
    # downloadspeed_lst = result[‘result‘][‘downloadspeed‘]
    downloadspeed_lst = result[‘result‘][‘totaluploadspeed‘]
    downloadspeed_lst = [ [ele,] for ele in downloadspeed_lst ]
    return downloadspeed_lst

def run(downloadspeed_lst):
    downloadspeed_ndarray = np.array(downloadspeed_lst)
    ma = moving_average(downloadspeed_ndarray)
    return ma


data = raw_data()
ma = run(data)
t = np.arange(4, len(data))
plt.plot(t, data[4:], lw=1.0)
plt.plot(t, ma, lw=1.0)
plt.show()

執行結果:

技術分享圖片

藍色是原始數據,棕色是經過移動平均算法弱化後的數據。

參考:https://www.cnblogs.com/21207-iHome/p/6231607.html

Moving Average