From bb227919a3580c800cb6aa6c9d7bbeb739dced3b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 1 Jun 2021 14:06:53 +0200 Subject: [PATCH 1/3] small impro --- rowers/interactiveplots.py | 2 +- rowers/mytypes.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 6f3503bf..e53e1cdb 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -6607,7 +6607,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): df = dataprep.getsmallrowdata_db(columns,ids=ids) try: - df['deltat'] = df['time'].diff().clip(lower=0) + df['deltat'] = df['time'].diff().clip(lower=0).clip(upper=20*1e3) except KeyError: # pragma: no cover pass diff --git a/rowers/mytypes.py b/rowers/mytypes.py index dbe4f243..8ba51758 100644 --- a/rowers/mytypes.py +++ b/rowers/mytypes.py @@ -341,6 +341,7 @@ color_map = { 'c-boat': 'lightsteelblue', #'#ffbb78', 'churchboat': 'midnightblue', #'#17becf', 'Ride': 'hotpink', #'#3182bd', + 'Bike': 'deeppink', 'bike': 'deeppink', #'#e6550d', 'Run': 'green', #'#ff9896', 'NordicSki': 'lightgray', #'#74c476', From 8a42be2d7119a8023418566f2d0e7e2198c71cdb Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 3 Jun 2021 08:50:55 +0200 Subject: [PATCH 2/3] small impr --- rowers/forms.py | 6 +++ rowers/interactiveplots.py | 66 ++++++++++++----------------- rowers/templates/trainingzones.html | 2 +- rowers/views/analysisviews.py | 10 ++++- 4 files changed, 41 insertions(+), 43 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index 2661e1a3..f0ce2d5b 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -64,7 +64,13 @@ class TrainingZonesForm(forms.Form): ('hr','Heart Rate Zones') ) + datechoices = ( + ('month', 'By Month'), + ('week', 'By Week'), + ) + zones = forms.ChoiceField(initial='hr',label='Training Zones',choices=zoneschoices) + dates = forms.ChoiceField(initial='month',label='Date Aggregation', choices=datechoices) startdate = forms.DateField( initial=timezone.now()-datetime.timedelta(days=365), widget=AdminDateWidget(), #format='%Y-%m-%d'), diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index e53e1cdb..9ce897ff 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -6583,7 +6583,7 @@ def interactive_otw_advanced_pace_chart(id=0,promember=0): return [script,div] -def get_zones_report(rower,startdate,enddate,trainingzones='hr'): +def get_zones_report(rower,startdate,enddate,trainingzones='hr',date_agg='week'): duration = enddate-startdate totaldays = duration.total_seconds()/(24*3600) @@ -6623,7 +6623,11 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): dd = w.date.strftime('%m/%d') dd2 = w.date.strftime('%Y/%m/%d') dd3 = w.date.strftime('%Y/%m') - dd4 = arrow.get(w.date).isocalendar()[1] + dd4 = '{year}/{week:02d}'.format( + week=arrow.get(w.date).isocalendar()[1], + year= w.date.strftime('%y') + ) + #print(w.date,arrow.get(w.date),arrow.get(w.date).isocalendar()) qryw = 'workoutid == {workoutid}'.format(workoutid=w.id) @@ -6632,10 +6636,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): if trainingzones == 'power': qry = 'power < {ut2}'.format(ut2=rower.pw_ut2) timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3) - if totaldays<=30: - dates.append(dd) - dates_sorting.append(dd2) - elif totaldays<=121: # pragma: no cover + if date_agg == 'week': dates.append(dd4) dates_sorting.append(dd4) else: # pragma: no cover @@ -6653,10 +6654,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): if trainingzones == 'power': qry = '{ut2} <= power < {ut2}'.format(ut1=rower.pw_ut1,ut2=rower.pw_ut2) timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3) - if totaldays<=30: - dates.append(dd) - dates_sorting.append(dd2) - elif totaldays<=121: # pragma: no cover + if date_agg == 'week': dates.append(dd4) dates_sorting.append(dd4) else: # pragma: no cover @@ -6674,10 +6672,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): if trainingzones == 'power': qry = '{ut1} <= power < {at}'.format(ut1=rower.pw_ut1,at=rower.pw_at) timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3) - if totaldays<=30: - dates.append(dd) - dates_sorting.append(dd2) - elif totaldays<=121: # pragma: no cover + if date_agg == 'week': dates.append(dd4) dates_sorting.append(dd4) else: # pragma: no cover @@ -6695,10 +6690,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): if trainingzones == 'power': qry = '{at} <= power < {tr}'.format(at=rower.pw_at,tr=rower.pw_tr) timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3) - if totaldays<=30: - dates.append(dd) - dates_sorting.append(dd2) - elif totaldays<=121: # pragma: no cover + if date_agg == 'week': dates.append(dd4) dates_sorting.append(dd4) else: # pragma: no cover @@ -6716,10 +6708,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): if trainingzones == 'power': qry = '{tr} <= power < {an}'.format(tr=rower.pw_tr,an=rower.pw_an) timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3) - if totaldays<=30: - dates.append(dd) - dates_sorting.append(dd2) - elif totaldays<=121: # pragma: no cover + if date_agg == 'week': dates.append(dd4) dates_sorting.append(dd4) else: # pragma: no cover @@ -6737,10 +6726,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): if trainingzones == 'power': qry = 'power >= {an}'.format(an=rower.pw_an) timeinzone = df.query(qry).query(qryw)['deltat'].sum()/(60*1e3) - if totaldays<=30: - dates.append(dd) - dates_sorting.append(dd2) - elif totaldays<=121: # pragma: no cover + if date_agg == 'week': dates.append(dd4) dates_sorting.append(dd4) else: # pragma: no cover @@ -6766,11 +6752,11 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): while d<=enddate: dd = d.strftime('%d') - if totaldays <= 30: - dates.append(d.strftime('%m/%d')) - dates_sorting.append(d.strftime('%Y/%m/%d')) - elif totaldays<=121: # pragma: no cover - dd4 = arrow.get(d).isocalendar()[1] + if date_agg == 'week': + dd4 = '{year}/{week:02d}'.format( + week=arrow.get(d).isocalendar()[1], + year= d.strftime('%y') + ) dates.append(dd4) dates_sorting.append(dd4) else: @@ -6801,7 +6787,7 @@ def get_zones_report(rower,startdate,enddate,trainingzones='hr'): return data -def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'): +def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr',date_agg='week'): duration = enddate-startdate totaldays = duration.total_seconds()/(24*3600) @@ -6813,7 +6799,7 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'): color_map = { - '<{ut2}'.format(ut2=hrzones[1]):'gray', + '<{ut2}'.format(ut2=hrzones[1]):'green', hrzones[1]:'lime', hrzones[2]:'yellow', hrzones[3]:'blue', @@ -6822,7 +6808,7 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'): } if trainingzones == 'power': color_map = { - '<{ut2}'.format(ut2=powerzones[1]):'gray', + '<{ut2}'.format(ut2=powerzones[1]):'green', powerzones[1]:'lime', powerzones[2]:'yellow', powerzones[3]:'blue', @@ -6851,10 +6837,10 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'): df = pd.DataFrame(data) - if totaldays > 30: - df.drop('minutes',inplace=True,axis='columns') - else: - df.drop('hours',inplace=True,axis='columns') + + df.drop('minutes',inplace=True,axis='columns') + + #df.drop('hours',inplace=True,axis='columns') source = ColumnDataSource(df) @@ -6883,9 +6869,9 @@ def interactive_zoneschart(rower,data,startdate,enddate,trainingzones='hr'): r = str(rower), ) - if totaldays >= 30: + if date_agg == 'week': p.xaxis.axis_label = 'Week' - if totaldays >= 121: + else: p.xaxis.axis_label = 'Month' p.plot_width=550 diff --git a/rowers/templates/trainingzones.html b/rowers/templates/trainingzones.html index 1bbe2149..a1ee8163 100644 --- a/rowers/templates/trainingzones.html +++ b/rowers/templates/trainingzones.html @@ -53,7 +53,7 @@