133 lines
3.2 KiB
Python
133 lines
3.2 KiB
Python
|
|
import pandas as pd
|
|
import numpy as np
|
|
|
|
|
|
class Time_base(object):
|
|
"""
|
|
时间序列基础模块
|
|
"""
|
|
def __init__(self):
|
|
pass
|
|
|
|
@staticmethod
|
|
def normalize(x):
|
|
"""
|
|
将时间序列数据归一化
|
|
x : 时间序列数据
|
|
"""
|
|
x = np.array(x)
|
|
return np.log2(x / np.sqrt(np.sum(x**2)))
|
|
|
|
@staticmethod
|
|
def lag(x, lag):
|
|
"""
|
|
滞后
|
|
x : 时间序列数据
|
|
lag : 滞后时间
|
|
"""
|
|
return pd.Series(x).shift(lag)
|
|
|
|
@staticmethod
|
|
def moving_average(x, window_size):
|
|
"""
|
|
移动平均窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).mean()
|
|
|
|
@staticmethod
|
|
def moving_median(x, window_size):
|
|
"""
|
|
移动中值窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).median()
|
|
|
|
@staticmethod
|
|
def moving_std(x, window_size):
|
|
"""
|
|
移动标准差窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).std()
|
|
|
|
@staticmethod
|
|
def moving_max(x, window_size):
|
|
"""
|
|
移动最大值窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).max()
|
|
|
|
@staticmethod
|
|
def moving_min(x, window_size):
|
|
"""
|
|
移动最小值窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).min()
|
|
|
|
@staticmethod
|
|
def moving_sum(x, window_size):
|
|
"""
|
|
移动和窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).sum()
|
|
|
|
@staticmethod
|
|
def moving_quantile(x, window_size, quantile):
|
|
"""
|
|
移动分位数窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
quantile : 分位数
|
|
"""
|
|
return pd.Series(x).rolling(window_size).quantile(quantile)
|
|
|
|
@staticmethod
|
|
def moving_corr(x, y, window_size):
|
|
"""
|
|
移动相关窗口
|
|
x : 时间序列数据
|
|
y : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).corr(pd.Series(y))
|
|
|
|
@staticmethod
|
|
def moving_cov(x, y, window_size):
|
|
"""
|
|
移动协方差窗口
|
|
x : 时间序列数据
|
|
y : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).cov(pd.Series(y))
|
|
|
|
@staticmethod
|
|
def moving_skew(x, window_size):
|
|
"""
|
|
移动偏度窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).skew()
|
|
|
|
@staticmethod
|
|
def moving_kurt(x, window_size):
|
|
"""
|
|
移动峰度窗口
|
|
x : 时间序列数据
|
|
window_size : 窗口大小
|
|
"""
|
|
return pd.Series(x).rolling(window_size).kurt()
|
|
|
|
|