In [1]:
import numpy as np
import pandas as pd
In [2]:
import pyaf.TS.Signal_Transformation as transf
In [3]:
%matplotlib inline
In [4]:
series = pd.Series(range(1, 12))
In [5]:
def tr1(x):
if(x >= 0):
return np.log(1 + x);
return -np.log(1 - x);
In [6]:
df = pd.DataFrame()
N = 1000
df['t'] = range(N)
df['gauss'] = np.random.randn(N)
df['sig'] = np.exp(np.random.randn(N))
df['tr_sig'] = df['sig'].apply(tr1);
In [7]:
df.plot('t', ['sig'], figsize=(32,8))
df.plot('t', ['tr_sig'], figsize=(32,8))
Out[7]:
In [8]:
df.describe()
Out[8]:
In [9]:
transf.cSignalTransform_Differencing().apply(series)
Out[9]:
In [10]:
tr1 = transf.cSignalTransform_RelativeDifferencing();
tr1.fit(series)
s1 = tr1.apply(series)
s2 = tr1.invert(s1)
print(s1.head())
print(s2.head())
In [11]:
s2 - series
Out[11]:
In [12]:
def invert2(df):
r = df;
df_orig = 0.0 * df;
df_orig.iloc[0] = (tr1.mFirstValue - tr1.mMinValue) / tr1.mDelta
for i in range(1,df.shape[0]):
previous_value = df_orig.iloc[i - 1]
df_orig.iloc[i] = previous_value + r.iloc[i] * (previous_value + 1)
df_orig = df_orig * tr1.mDelta + tr1.mMinValue;
return df_orig;
In [13]:
s3 = invert2(s1)
In [14]:
s3
Out[14]:
In [15]:
def invert3(df):
r = df;
df_orig = 0.0 * df;
df_orig.iloc[0] = (tr1.mFirstValue - tr1.mMinValue) / tr1.mDelta
for i in range(1,df.shape[0]):
previous_value = df_orig.iloc[i - 1]
df_orig.iloc[i] = previous_value + r.iloc[i] * (previous_value + 1)
df_orig = df_orig * tr1.mDelta + tr1.mMinValue;
return df_orig;
In [16]:
invert3(s1)
Out[16]:
In [ ]: