Source code for tsad.utils.featproc.toSpike

[docs]class R_to_I(): """ A class that allows you to make a binary multidimensional time series from a multidimensional time series of Real values. It is needed to adapt the input for spike neural networks. API uses skirit-learn templates [Ru]: Класс который позволяет из многомерного временного ряда реальных значений сделать бинарный многомерный врменной ряд. Нужен для адаптации входных для спайковых нейронных сетей. Для API используются шаблоны skirit-learn """
[docs] def koefI_to_koefSeqI(self,ts): """ A function that converts the number 5 to 5 consecutive impulses in frames Parameters ---------- ts : pd.Series The initial series with Real numbers Returns ------- new_ts : pd.Series The output series with binary labels Функция которая преобрарузет число 5 в 5 последовательных импульсов """ buffer = 0 new_array = [] for ind,val in ts.iteritems(): if val !=0: buffer += val new_val = 1 if buffer > 0 else 0 new_array.append(new_val) buffer = buffer - 1 if buffer > 0 else 0 new_ts = pd.Series(new_array,index=ts.index) return new_ts
def __init__(self,verbose=False): """ A class that allows you to make a binary multidimensional time series from a multidimensional time series of Real values. It is needed to adapt the input for spike neural networks. API uses skirit-learn templates. Useful if the signal is being written by aperture. [Ru]: Класс который позволяет из многомерного временного ряда реальных значений сделать бинарный многомерный врменной ряд. Нужен для адаптации входных для спайковых нейронных сетей. Для API используются шаблоны skirit-learn. Полезен если сигнал пишется по апертуре. Parameters ---------- verbose : boolean, default = False If True, additional infomation will be provided """ self.verbose = verbose def _check_input_(self,x): assert any(np.isnan(x)) assert len(x)!=0 x.columns = x.columns.astype(str)
[docs] def fit(self,x): """ Fit the model with x [Ru]: Выделение апертуры в соотвествии с х Parameters ---------- x : pd.DataFrame Training data. """ self._check_input_(x) df = x.dropna().diff().dropna().abs() vector_koef = [] self.block_columns = [] #колонки, которые не меняются вообще, то есть константы, их не будет после #трансформации, а после inverse_transform они будут константой той же for col in df: ts = df[col] ts = ts[ts!=0.] if len(ts)!=0: vector_koef.append(ts.value_counts().index[0]) else: self.block_columns.append(col) self.all_columns = x.columns self.norm_columns = self.all_columns[~self.all_columns.isin(self.block_columns)] self.vector_koef = pd.DataFrame(np.array(vector_koef).reshape(1,-1), columns = self.norm_columns) return self
[docs] def transform(self,x): """ Converting real values x to binary. [Ru]: Преобразование реальных значений в бианрные. Parameters ---------- x : pd.DataFrame Data which we want to transform from real values to binary values. """ self._check_input_(x) result= x.copy() self.vector_0 = result.iloc[0:1] self.index = result.index result = result[self.norm_columns] result = (result.diff() / self.vector_koef.values).dropna().round().astype(int) print('Fistt stage done') # разделяем на положительные и отрицательные признаки, посути увеличив количесто признаков в 2 раза result = pd.concat([result[result>=0].add_suffix('_pos'), result[result<=0].add_suffix('_neg')] , axis=1).fillna(0).astype(int).abs() print('Second stage done') if self.verbose: print('Максимальные величины импульсов (не единичные еще) для признаков') display_df(result.max()) print('Распределение величин импульсов по всей таблице') display_df(pd.Series(result.values.ravel()).value_counts()) print('Thied stage done') # Функция которая преобрарузет число 5 в 5 последовательных импульсов result = result.apply(self.koefI_to_koefSeqI) print('thourh stage done') return result # первый нан
[docs] def fit_trasform(self,x): """ Fitting and converting real values x to binary. [Ru]: Преобразование реальных значений в бианрные. Parameters ---------- x : pd.DataFrame Data which we want to transform from real values to binary values. """ return self.fit(x).transform(x)
[docs] def inverse_tranform(self,x): """ Fitting and converting real values x to binary. [Ru]: Преобразование реальных значений в бианрные. Parameters ---------- x : pd.DataFrame Data which we want to transform from binary values to real values. Notes ---------- Очень важно иметь общие индекс с transform(self,x) """ self._check_input_(x) result = x.copy() neg = result.filter(regex='_neg',axis=1) neg.columns = neg.columns.str.strip('_neg') result = result.filter(regex='_pos',axis=1).values - neg del neg print('five stage done') result = result * self.vector_koef.values.astype(int) result = pd.concat([self.vector_0,result]) assert (result.index == self.index).all() result = result.cumsum() for col in self.block_columns: result[col] = self.vector_0[col].values[0] result = result[self.all_columns] return result