From 92ebe1f3195561c04cd64001d0cbf2277a40215a Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 4 Jan 2021 19:29:46 +0100 Subject: [PATCH 1/3] fixed error --- rowers/interactiveplots.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index d8b0dc06..d50e3462 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -171,7 +171,7 @@ def build_goldmedalstandards(workouts,kfitness): else: goldmedalstandards.append(0) goldmedaldurations.append(0) - workoutdt.append(arrow.get(w.startdatetime).datetime) + workoutdt.append(arrow.get(w.date).datetime) df = pd.DataFrame({ 'workout':ids, @@ -180,8 +180,6 @@ def build_goldmedalstandards(workouts,kfitness): 'goldmedalduration':goldmedaldurations, }) - - df.sort_values(['workoutdt'],inplace=True) #for id, row in df.iterrows(): @@ -200,7 +198,10 @@ def build_goldmedalstandards(workouts,kfitness): # fitnesses.append(np.nan) for w in workouts: - ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=90), + #ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=90), + # date__lte=w.date)] + + ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=10), date__lte=w.date)] powerdf = df[df['workout'].isin(ids)] @@ -1837,6 +1838,7 @@ def goldmedalscorechart(user,startdate=None,enddate=None): mask = df['testpower'].isnull() dates = df.mask(mask)['date'].dropna().values testpower = df.mask(mask)['testpower'].dropna().values + ids = df.mask(mask)['id'].dropna().values outids = df.mask(mask)['id'].dropna().unique() @@ -1854,8 +1856,11 @@ def goldmedalscorechart(user,startdate=None,enddate=None): previous = 0 for i in range(len(dates)): + id = ids[i] + w = Workout.objects.get(id=id) dd = str(dates[i]) - td.append(arrow.get(dd).datetime) + #td.append(arrow.get(dd).datetime) + td.append(arrow.get(w.date).datetime) markerscore.append(testpower[i]) markerduration.append(testduration[i]) score.append(np.nan) From c3f72b2ebdc85dc43460e52081bd0576f163769d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 4 Jan 2021 19:45:58 +0100 Subject: [PATCH 2/3] small speed gain --- rowers/dataprep.py | 7 +++++-- rowers/interactiveplots.py | 7 +++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 0d3303b0..5c575b51 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1111,6 +1111,8 @@ def calculate_goldmedalstandard(rower,workout,recurrance=True): if df.empty and recurrance: df, delta, cpvalues = setcp(workout,recurrance=False) + if df.empty: + return 0,0 age = calculate_age(rower.birthdate,today=workout.date) @@ -1209,9 +1211,11 @@ def setcp(workout,background=False,recurrance=True): filename = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id) strokesdf = getsmallrowdata_db(['power','workoutid','time'],ids = [workout.id]) + if strokesdf['power'].std()==0: + return pd.DataFrame(),pd.Series(),pd.Series() if background: job = myqueue(queuelow,handle_setcp,strokesdf,filename,workout.id) - return job.id + return pd.DataFrame({'delta':[],'cp':[]}),pd.Series(),pd.Series() if not strokesdf.empty: @@ -1492,7 +1496,6 @@ def checkduplicates(r,workoutdate,workoutstartdatetime,workoutenddatetime): t = ww.duration delta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second) enddatetime = ww.startdatetime+delta - print(enddatetime,workoutstartdatetime) if enddatetime > workoutstartdatetime: ws2.append(ww) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index d50e3462..45a217a5 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -198,12 +198,10 @@ def build_goldmedalstandards(workouts,kfitness): # fitnesses.append(np.nan) for w in workouts: - #ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=90), - # date__lte=w.date)] - - ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=10), + ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=90), date__lte=w.date)] + powerdf = df[df['workout'].isin(ids)] indexmax = powerdf['goldmedalstandard'].idxmax() theid = powerdf.loc[indexmax,'workout'] @@ -1880,6 +1878,7 @@ def goldmedalscorechart(user,startdate=None,enddate=None): markerduration.append(np.nan) duration.append(np.nan) + df = pd.DataFrame({ 'markerscore':markerscore, 'markerduration':markerduration, From aa21e2c95799fb02137e1e66812061fa4782de5b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 4 Jan 2021 19:55:13 +0100 Subject: [PATCH 3/3] fix bug --- rowers/dataprep.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 5c575b51..ceb22158 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1211,8 +1211,12 @@ def setcp(workout,background=False,recurrance=True): filename = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id) strokesdf = getsmallrowdata_db(['power','workoutid','time'],ids = [workout.id]) - if strokesdf['power'].std()==0: + try: + if strokesdf['power'].std()==0: + return pd.DataFrame(),pd.Series(),pd.Series() + except KeyError: return pd.DataFrame(),pd.Series(),pd.Series() + if background: job = myqueue(queuelow,handle_setcp,strokesdf,filename,workout.id) return pd.DataFrame({'delta':[],'cp':[]}),pd.Series(),pd.Series()