Private
Public Access
1
0
This commit is contained in:
Sander Roosendaal
2021-05-28 13:18:53 +02:00
parent de452fc781
commit 8966dfec92
3 changed files with 76 additions and 21 deletions

View File

@@ -6566,6 +6566,7 @@ def get_zones_report(rower,startdate,enddate):
dates = []
dates_sorting = []
minutes = []
hours = []
zones = []
workouts = Workout.objects.filter(
@@ -6608,7 +6609,8 @@ def get_zones_report(rower,startdate,enddate):
dates.append(dd3)
dates_sorting.append(dd3)
minutes.append(timeinzone)
zones.append('<UT2')
hours.append(timeinzone/60.)
zones.append('<{ut2}'.format(ut2=hrzones[1]))
#print(w,dd,timeinzone,'<UT2')
qry = '{ut2} <= hr < {ut1}'.format(ut1=rower.ut1,ut2=rower.ut2)
@@ -6620,7 +6622,8 @@ def get_zones_report(rower,startdate,enddate):
dates.append(dd3)
dates_sorting.append(dd3)
minutes.append(timeinzone)
zones.append('UT2')
hours.append(timeinzone/60.)
zones.append(hrzones[1])
#print(w,dd,timeinzone,'UT2')
qry = '{ut1} <= hr < {at}'.format(ut1=rower.ut1,at=rower.at)
@@ -6632,7 +6635,8 @@ def get_zones_report(rower,startdate,enddate):
dates.append(dd3)
dates_sorting.append(dd3)
minutes.append(timeinzone)
zones.append('UT1')
hours.append(timeinzone/60.)
zones.append(hrzones[2])
#print(w,dd,timeinzone,'UT1')
qry = '{at} <= hr < {tr}'.format(at=rower.at,tr=rower.tr)
@@ -6644,7 +6648,8 @@ def get_zones_report(rower,startdate,enddate):
dates.append(dd3)
dates_sorting.append(dd3)
minutes.append(timeinzone)
zones.append('AT')
hours.append(timeinzone/60.)
zones.append(hrzones[3])
#print(w,dd,timeinzone,'AT')
qry = '{tr} <= hr < {an}'.format(tr=rower.tr,an=rower.an)
@@ -6656,7 +6661,8 @@ def get_zones_report(rower,startdate,enddate):
dates.append(dd3)
dates_sorting.append(dd3)
minutes.append(timeinzone)
zones.append('TR')
hours.append(timeinzone/60.)
zones.append(hrzones[4])
#print(w,dd,timeinzone,'TR')
qry = 'hr >= {an}'.format(an=rower.an)
@@ -6668,7 +6674,8 @@ def get_zones_report(rower,startdate,enddate):
dates.append(dd3)
dates_sorting.append(dd3)
minutes.append(timeinzone)
zones.append('AN')
hours.append(timeinzone/60.)
zones.append(hrzones[5])
#print(w,dd,timeinzone,'AN')
try:
@@ -6691,7 +6698,8 @@ def get_zones_report(rower,startdate,enddate):
dates_sorting.append(d.strftime('%Y/%m'))
minutes.append(0)
zones.append('<UT2')
hours.append(0)
zones.append(hrzones[1])
d += datetime.timedelta(days=1)
@@ -6701,20 +6709,47 @@ def get_zones_report(rower,startdate,enddate):
'date_sorting':dates_sorting,
'minutes': minutes,
'zones':zones,
'hours':hours,
}
#print(pd.DataFrame(data).head())
return data
def interactive_zoneschart(data,startdate,enddate):
def interactive_zoneschart(rower,data,startdate,enddate):
duration = enddate-startdate
totaldays = duration.total_seconds()/(24*3600)
colors = ['gray','yellow','lime','blue','purple','red']
hrzones = rower.hrzones
color_map = {
'<{ut2}'.format(ut2=hrzones[1]):'gray',
hrzones[1]:'lime',
hrzones[2]:'yellow',
hrzones[3]:'blue',
hrzones[4]:'purple',
hrzones[5]:'red',
}
zones_order = [
'<{ut2}'.format(ut2=hrzones[1]),
hrzones[1],
hrzones[2],
hrzones[3],
hrzones[4],
hrzones[5]
]
df = pd.DataFrame(data)
if totaldays >= 30:
df.drop('minutes',inplace=True,axis='columns')
else:
df.drop('hours',inplace=True,axis='columns')
source = ColumnDataSource(df)
@@ -6723,19 +6758,14 @@ def interactive_zoneschart(data,startdate,enddate):
hv.extension('bokeh')
table = hv.Table(df,[
('date','Date'),
('minutes','minutes'),
('zones','zones')]
)
bars = hv.Bars(df, kdims = ['date','zones']).aggregate(function=np.sum)
bars = hv.Bars(df, kdims = ['date','zones']).aggregate(function=np.sum).redim.values(zones=zones_order)
#bars = table.to.bars(['date','zones'],['minutes'])
bars.opts(
opts.Bars(cmap=colors,show_legend=True,stacked=True,
opts.Bars(cmap=color_map,show_legend=True,stacked=True,
tools=['tap','hover'],width=550,xrotation=45,padding=(0,(0,.1)),
legend_position='bottom',show_frame=False)
legend_position='bottom',
show_frame=False)
)
p = hv.render(bars)

View File

@@ -15,16 +15,32 @@
<h1>Training Zones</h1>
{{ the_script | safe }}
<ul class="main-content">
<li class="grid_4">
<div id="theplot" class="flexplot">
<div id="id_chart">
{{ the_div|safe }}
</div>
</li>
<li class="grid_4">
<p>
<form method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input class="button" type="submit" value="Select Dates">
</form>
</p>
</li>
</ul>
{% endblock %}
{% block scripts %}

View File

@@ -1061,14 +1061,22 @@ def trainingzones_view(request,userid=0,mode='rower',
r = getrequestrower(request,userid=userid)
startdate,enddate = get_dates_timeperiod(request)
enddate = timezone.now()
startdate = enddate-datetime.timedelta(days=29)
startdate = enddate-datetime.timedelta(days=365)
form = DateRangeForm()
if request.method == 'POST':
form = DateRangeForm(request.POST)
if form.is_valid():
startdate = form.cleaned_data['startdate']
enddate = form.cleaned_data['enddate']
data = get_zones_report(r,startdate,enddate)
script, div = interactive_zoneschart(data,startdate,enddate)
script, div = interactive_zoneschart(r,data,startdate,enddate)
breadcrumbs = [
{
@@ -1088,6 +1096,7 @@ def trainingzones_view(request,userid=0,mode='rower',
'rower':r,
'the_script':script,
'the_div':div,
'form':form,
}
)