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()