Source code for vtools.functions.period_op

from sklearn.linear_model import LinearRegression
import numpy as np

import pandas as pd
import statsmodels.api as sm
import statsmodels as sm
import matplotlib.pyplot as plt
import matplotlib

from scipy.signal import boxcar
from vtools.data.vtime import hours, minutes, days, months


[docs] def period_op(ts, period="D", agg="mean", max_absent_frac=0.0): period = pd.tseries.frequencies.to_offset(period) # resample getting a sum and non-null count ts1 = ts.resample(period).agg([agg, "count"]).copy() # determine required number data which is exact for period of "D" or smaller agged = ts1.loc[:, (slice(None), agg)].droplevel(level=1, axis=1) if max_absent_frac is None: return agged counts = ts1.loc[:, (slice(None), "count")].droplevel(level=1, axis=1) try: na_tol = (period / ts.index.freq) * (1.0 - max_absent_frac) invalid = counts < na_tol except: if period == months(1): # determine invalid months na_tol = ( max_absent_frac * ts.index.days_in_month * (days(1) / ts.index.freq) ) invalid = counts < na_tol else: raise ValueError( "Offset {} not supported. Only absolute offsets (<= 1day) or one month averages supported with max_absent_frac option".format( period ) ) agged.mask(invalid, inplace=True) return agged
[docs] def window_op(ts, window, period="D", agg="mean", max_absent_frac=0.0): period = pd.tseries.frequencies.to_offset(period) # resample getting a sum and non-null count ts1 = ts.resample(period).agg([agg, "count"]) # determine required number data which is exact for period of "D" or smaller if max_absent_frac is not None: try: na_tol = (ts1.index.freq / ts.index.freq) * (1.0 - max_absent_frac) invalid = ts1["count"] < na_tol except: if period == months(1): # determine invalid months invalid = ts1["count"] < max_absent_frac * ts.index.days_in_month else: raise ValueError( "Offset {} not supported. Only absolute offsets (<= 1day) or one month averages supported with max_absent_frac option".format( period ) ) else: invalid = ts1["count"] < 0 # None are invalid ts1 = ts1[agg] ts1[invalid] = np.nan return ts1
import numpy