Segment Transforms
Perform manipulations on an entire segment of data. Segment transforms modify the data in place, so if you use a segment transform be aware that your data will be modified.
Copyright 2017-2024 SensiML Corporation
This file is part of SensiML™ Piccolo AI™.
SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.
-
Offset Factor
Adds an offset to each column in the input data. This can be used in conjunction with a scale factor to split multiple channels into distinct bands of data.
- Parameters
input_data (DataFrame) – The input data to transform.
input_columns (list) – A list of column names to transform.
offset_factor (float, optional) – The number by which input_columns are offset by. Defaults to 0.0.
- Returns
The updated input data with the transformation applied.
- Return type
DataFrame
-
Pre-emphasis Filter
Performs a pre-emphasis filter on the input columns and modifies the sensor streams in place. This is a first-order Fir filter that performs a weighted average of each sample with the previous sample.
- Parameters
input_column (str) – sensor stream to apply pre_emphasis filter against
alpha (float) – pre-emphasis factor (weight given to the previous sample)
prior (int) – the value of the previous sample, default is 0
- Returns
input data after having been passed through a pre-emphasis filter
Examples
>>> client.pipeline.reset() >>> df = client.datasets.load_activity_raw_toy() >>> print df out: Subject Class Rep accelx accely accelz 0 s01 Crawling 1 377 569 4019 1 s01 Crawling 1 357 594 4051 2 s01 Crawling 1 333 638 4049 3 s01 Crawling 1 340 678 4053 4 s01 Crawling 1 372 708 4051 5 s01 Crawling 1 410 733 4028 6 s01 Crawling 1 450 733 3988 7 s01 Crawling 1 492 696 3947 8 s01 Crawling 1 518 677 3943 9 s01 Crawling 1 528 695 3988 10 s01 Crawling 1 -1 2558 4609 11 s01 Running 1 -44 -3971 843 12 s01 Running 1 -47 -3982 836 13 s01 Running 1 -43 -3973 832 14 s01 Running 1 -40 -3973 834 15 s01 Running 1 -48 -3978 844 16 s01 Running 1 -52 -3993 842 17 s01 Running 1 -64 -3984 821 18 s01 Running 1 -64 -3966 813 19 s01 Running 1 -66 -3971 826 20 s01 Running 1 -62 -3988 827 21 s01 Running 1 -57 -3984 843 >>> client.pipeline.set_input_data('test_data', df, force=True)
>>> client.pipeline.add_transform("Pre-emphasis Filter", params={"input_column": 'accelx', "alpha": 0.97, "prior": 2})
>>> results, stats = client.pipeline.execute() >>> print results out: Class Rep Subject accelx accely accelz 0 Crawling 1 s01 187 569 4019 1 Crawling 1 s01 -5 594 4051 2 Crawling 1 s01 -7 638 4049 3 Crawling 1 s01 8 678 4053 4 Crawling 1 s01 21 708 4051 5 Crawling 1 s01 24 733 4028 6 Crawling 1 s01 26 733 3988 7 Crawling 1 s01 27 696 3947 8 Crawling 1 s01 20 677 3943 9 Crawling 1 s01 12 695 3988 10 Crawling 1 s01 -257 2558 4609 11 Running 1 s01 -23 -3971 843 12 Running 1 s01 -3 -3982 836 13 Running 1 s01 1 -3973 832 14 Running 1 s01 0 -3973 834 15 Running 1 s01 -5 -3978 844 16 Running 1 s01 -3 -3993 842 17 Running 1 s01 -7 -3984 821 18 Running 1 s01 -1 -3966 813 19 Running 1 s01 -2 -3971 826 20 Running 1 s01 1 -3988 827 21 Running 1 s01 1 -3984 843
-
Scale Factor
Performs a pre-emphasis filter on the input columns and modifies the sensor streams in place. This is a first-order FIR filter that performs a weighted average of each sample with the previous sample.
- Parameters
input_data (DataFrame) – Input data containing the sensor streams to be filtered.
input_column (str) – Name of the sensor stream to apply the pre-emphasis filter to.
group_columns (list) – List of column names to group by.
alpha (float, optional) – Pre-emphasis factor (weight given to the previous sample). Defaults to 0.97.
prior (int, optional) – The value of the previous sample. Defaults to 0.
- Returns
Input data after having been passed through a pre-emphasis filter.
- Return type
DataFrame
Examples
>>> client.pipeline.reset() >>> df = client.datasets.load_activity_raw_toy() >>> print df out: Subject Class Rep accelx accely accelz 0 s01 Crawling 1 377 569 4019 1 s01 Crawling 1 357 594 4051 2 s01 Crawling 1 333 638 4049 3 s01 Crawling 1 340 678 4053 4 s01 Crawling 1 372 708 4051 5 s01 Crawling 1 410 733 4028 6 s01 Crawling 1 450 733 3988 7 s01 Crawling 1 492 696 3947 8 s01 Crawling 1 518 677 3943 9 s01 Crawling 1 528 695 3988 10 s01 Crawling 1 -1 2558 4609 11 s01 Running 1 -44 -3971 843 12 s01 Running 1 -47 -3982 836 13 s01 Running 1 -43 -3973 832 14 s01 Running 1 -40 -3973 834 15 s01 Running 1 -48 -3978 844 16 s01 Running 1 -52 -3993 842 17 s01 Running 1 -64 -3984 821 18 s01 Running 1 -64 -3966 813 19 s01 Running 1 -66 -3971 826 20 s01 Running 1 -62 -3988 827 21 s01 Running 1 -57 -3984 843 >>> client.pipeline.set_input_data('test_data', df, force=True) >>> client.pipeline.add_transform('Scale Factor', params={'scale_factor':4096., 'input_columns':['accely']}) >>> results, stats = client.pipeline.execute()
-
Strip
Remove each signal’s mean or min from its values, while leaving specified passthrough columns unmodified. This function transforms a DataFrame in such a way that the entire signal is shifted towards ‘mean’, ‘median’, ‘min’, or ‘zero’.
- Parameters
input_data – The input DataFrame.
group_columns – The list of columns to group by.
input_columns – The list of column names to use.
type – Possible values are ‘mean’ or ‘min’, ‘median’ and ‘zero’. zero - zeros out the segment by subtracting the starting value of data from the rest of the segment
- Returns
A DataFrame containing the transformed signal.
Example
>>> client.pipeline.reset() >>> df = client.datasets.load_activity_raw_toy() >>> df out: Subject Class Rep accelx accely accelz 0 s01 Crawling 1 377 569 4019 1 s01 Crawling 1 357 594 4051 2 s01 Crawling 1 333 638 4049 3 s01 Crawling 1 340 678 4053 4 s01 Crawling 1 372 708 4051 5 s01 Crawling 1 410 733 4028 6 s01 Crawling 1 450 733 3988 7 s01 Crawling 1 492 696 3947 8 s01 Crawling 1 518 677 3943 9 s01 Crawling 1 528 695 3988 10 s01 Crawling 1 -1 2558 4609 11 s01 Running 1 -44 -3971 843 12 s01 Running 1 -47 -3982 836 13 s01 Running 1 -43 -3973 832 14 s01 Running 1 -40 -3973 834 15 s01 Running 1 -48 -3978 844 16 s01 Running 1 -52 -3993 842 17 s01 Running 1 -64 -3984 821 18 s01 Running 1 -64 -3966 813 19 s01 Running 1 -66 -3971 826 20 s01 Running 1 -62 -3988 827 21 s01 Running 1 -57 -3984 843
>>> client.pipeline.set_input_data('test_data', df, force=True, data_columns=['accelx', 'accely', 'accelz'], group_columns=['Subject', 'Class', 'Rep'], label_column='Class')
>>> client.pipeline.add_transform("Strip", params={"input_columns": ['accelx'], "type": 'min' })
>>> results, stats = client.pipeline.execute() >>> print results out: Class Rep Subject accelx accely accelz 0 Crawling 1 s01 378.0 569 4019 1 Crawling 1 s01 358.0 594 4051 2 Crawling 1 s01 334.0 638 4049 3 Crawling 1 s01 341.0 678 4053 4 Crawling 1 s01 373.0 708 4051 5 Crawling 1 s01 411.0 733 4028 6 Crawling 1 s01 451.0 733 3988 7 Crawling 1 s01 493.0 696 3947 8 Crawling 1 s01 519.0 677 3943 9 Crawling 1 s01 529.0 695 3988 10 Crawling 1 s01 0.0 2558 4609 11 Running 1 s01 22.0 -3971 843 12 Running 1 s01 19.0 -3982 836 13 Running 1 s01 23.0 -3973 832 14 Running 1 s01 26.0 -3973 834 15 Running 1 s01 18.0 -3978 844 16 Running 1 s01 14.0 -3993 842 17 Running 1 s01 2.0 -3984 821 18 Running 1 s01 2.0 -3966 813 19 Running 1 s01 0.0 -3971 826 20 Running 1 s01 4.0 -3988 827 21 Running 1 s01 9.0 -3984 843
-
Vertical AutoScale Segment
Scale the amplitude of the input columns to MAX_INT_16 or as close as possible without overflowing. Scaling is only applied to the input columns; other sensor columns will be ignored.
- Parameters
input_data (DataFrame) – Input data to be vertically scaled.
input_columns (list) – List of column names to be vertically scaled.
group_columns (list) – List of column names on which grouping is to be done. Each group will be scaled one at a time.
- Returns
The vertically scaled DataFrame for each segment for input_columns.
- Return type
DataFrame