From a2bf968f2ad7e02d896740f7d6a9e113d674c03f Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 5 Jun 2021 11:13:08 +0200 Subject: [PATCH] adding percentages --- rowers/forms.py | 6 ++++++ rowers/interactiveplots.py | 27 +++++++++++++++++++++++++-- rowers/templates/trainingzones.html | 2 +- rowers/views/analysisviews.py | 20 +++++++++++++------- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index 34087f26..da363b90 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -69,8 +69,14 @@ class TrainingZonesForm(forms.Form): ('week', 'By Week'), ) + yaxischoices = ( + ('time','Time'), + ('percentage','Percentage of Time') + ) + zones = forms.ChoiceField(initial='hr',label='Training Zones',choices=zoneschoices) dates = forms.ChoiceField(initial='week',label='Date Aggregation', choices=datechoices) + yaxis = forms.ChoiceField(initial='time',label='Y axis',choices=yaxischoices) startdate = forms.DateField( initial=timezone.now()-datetime.timedelta(days=42), widget=AdminDateWidget(), #format='%Y-%m-%d'), diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index de917286..0d5aa14a 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -6583,7 +6583,8 @@ def interactive_otw_advanced_pace_chart(id=0,promember=0): return [script,div] -def get_zones_report(rower,startdate,enddate,trainingzones='hr',date_agg='week'): +def get_zones_report(rower,startdate,enddate,trainingzones='hr',date_agg='week', + yaxis='time'): duration = enddate-startdate totaldays = duration.total_seconds()/(24*3600) @@ -6594,6 +6595,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr',date_agg='week') hours = [] zones = [] + workouts = Workout.objects.filter( user=rower, startdatetime__gte=startdate, @@ -6790,7 +6792,8 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr',date_agg='week') return data -def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr',date_agg='week'): +def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr',date_agg='week', + yaxis='time'): duration = enddate-startdate totaldays = duration.total_seconds()/(24*3600) @@ -6850,6 +6853,23 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr',date_ df.sort_values('date_sorting',inplace=True) df.drop('date_sorting',inplace=True,axis='columns') + df['totaltime'] = 0 + + if yaxis == 'percentage': + dates = list(set(df['date'].values)) + for date in dates: + qry = 'date == "{d}"'.format(d=date) + + totaltime = df.query(qry)['hours'].sum() + + mask = df['date'] == date + df.loc[mask,'totaltime'] = totaltime + + df['percentage'] = 100.*df['hours']/df['totaltime'] + df.drop('hours',inplace=True,axis='columns') + df.drop('totaltime',inplace=True,axis='columns') + print(df.head()) + hv.extension('bokeh') @@ -6882,6 +6902,9 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr',date_ else: # pragma: no cover p.xaxis.axis_label = 'Month' + if yaxis == 'percentage': + p.yaxis.axis_label = 'Percentage' + p.plot_width=550 p.plot_height=350 p.toolbar_location = 'above' diff --git a/rowers/templates/trainingzones.html b/rowers/templates/trainingzones.html index 1f214fd5..2fa5fb60 100644 --- a/rowers/templates/trainingzones.html +++ b/rowers/templates/trainingzones.html @@ -53,7 +53,7 @@