本文将针对时间序列方法的python实现进行系统的介绍。
文章目录
1 移动平均法系列
移动平均法是指在当前时间添加时间窗口,取窗口内平均值,或者加权平均值。
1.1 朴素预测法
朴素预测法是指直接使用前一时刻的时序值作为后一个时刻的预测值。
1.2 简单移动平均法
#读取数据
import pandas as pd
data = pd.read_excel("data.xlsx")
print("=================INFO=============")
print(data.info())
X = data[["f1","f2"]]
Y = data["target"]
X_train = X[0:17]
Y_train = Y[0:17]
print("=================DATA==============")
data.head()
#简单移动平均
import matplotlib.pyplot as plt
def ma(time_s_part):
n = len(time_s_part)
sum = 0
for i in time_s_part:
sum += i
result = sum / n
return result
def answer1(time_s, n):
"""
两个参数:
time_s:时间序列
n:移动的步长,即移动的期数
"""
result_ma = [] # 简单移动平均值的列表
for i in range(n - 1, len(time_s)):
time_s_part = (time_s[i - (n - 1):i + 1])
result_ma.append(ma(time_s_part))
print("Result of moving average:{}".format(result_ma))
x = result_ma[-1]
print("Prediction value:{}".format(x))
# 可视化
plt.scatter(list(range(len(result_ma))), result_ma)
plt.show()
if __name__ == '__main__':
n = 3
answer1(Y_train, n)
1.3 加权移动平均法
在简单移动平均的基础上对每一期的数据添加权重。
import matplotlib.pyplot as plt
# 加权移动平均法
def wma(list2, w):
n = len(list2)
sum = 0
for i in n:
sum += list2[i] * w[i]
return sum
def answer2(list1, n):
# 加权移动平均法
w = [0.2, 0.3, 0.5] # 各期的权重
listWMA = [] # 加权移动平均值的列表
for i in range(n - 1, len(list1)):
list2 = (list1[i - (n - 1):i + 1])
listWMA.append(ma(list2))
print("加权移动平均值的列表:{}".format(listWMA))
# 最后的移动平均值可做为下一个数的预测
x = listWMA[-1]