diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 23375f3c..b24de134 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -6,6 +6,7 @@ import rowingdata.tcxtools as tcxtools from rowers.utils import totaltime_sec_to_string from rowers.datautils import p0 from scipy import optimize +from scipy.signal import find_peaks from rowers.utils import calculate_age import datetime import gzip @@ -1207,8 +1208,15 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', except KeyError: pass - # smoothen power - row.df[' Power (watts)'].replace(to_replace=0,method='ffill', inplace=True) + + # remove negative power peaks + x = row.df[' Power (watts)'].values + x = x * - 1 + neg_peaks, _ = find_peaks(x, height=0) # hieght is the threshold value + + row.df[' Power (watts)'][neg_peaks] = row.df[' Power (watts)'][neg_peaks-1] + + #row.df[' Power (watts)'].replace(to_replace=0,method='ffill', inplace=True) if dosmooth: # auto smoothing diff --git a/rowers/tests/test_units.py b/rowers/tests/test_units.py index 198deef6..b540eeb3 100644 --- a/rowers/tests/test_units.py +++ b/rowers/tests/test_units.py @@ -160,7 +160,7 @@ class ForceUnits(TestCase): df = dataprep.read_data(['averageforce'],ids=[13]) df = dataprep.remove_nulls_pl(df) average_N = int(df['averageforce'].mean()) - self.assertEqual(average_N,119) + self.assertEqual(average_N,120) @override_settings(TESTING=True) class TestForceUnit(TestCase): diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index d906cfbf..346692ec 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index a2c254f9..782c63bd 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -433,14 +433,16 @@ def trendflexdata(workouts, options, userid=0): yerror = [] groupsize = [] groupval = [] - for key, item in groups: - xvalues.append(groups.get_group(key)[xparam].mean()) - yvalues.append(groups.get_group(key)[yparam].mean()) - xerror.append(groups.get_group(key)[xparam].std()) - yerror.append(groups.get_group(key)[yparam].std()) - groupsize.append(len(groups.get_group(key)[xparam])) - groupval.append(groups.get_group(key)[groupby].mean()) - + try: + for key, item in groups: + xvalues.append(groups.get_group(key)[xparam].mean()) + yvalues.append(groups.get_group(key)[yparam].mean()) + xerror.append(groups.get_group(key)[xparam].std()) + yerror.append(groups.get_group(key)[yparam].std()) + groupsize.append(len(groups.get_group(key)[xparam])) + groupval.append(groups.get_group(key)[groupby].mean()) + except TypeError: + return('','Error: Unable to compute data') xvalues = pd.Series(xvalues) yvalues = pd.Series(yvalues)