Private
Public Access
1
0

adding manually calculated fitness and fatigue and form

This commit is contained in:
Sander Roosendaal
2020-11-24 17:43:36 +01:00
parent dfe395980c
commit 12078c4e52
3 changed files with 61 additions and 6 deletions

View File

@@ -1528,18 +1528,23 @@ def interactive_forcecurve(theworkouts,workstrokesonly=True,plottype='scatter'):
return [script,div,js_resources,css_resources]
def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
enddate=None,kfitness=42,kfatigue=7,fitnesstest=20):
enddate=None,kfitness=42,kfatigue=7,fitnesstest=20,
metricchoice='rscore',
k1=1,k2=1,p0=100):
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
dates = []
testpower = []
fatigues = []
fitnesses = []
workouts = workouts.order_by('date')
data = []
fitnesstestsecs = fitnesstest*60
# create CP data
for w in workouts:
cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=w.id)
try:
@@ -1559,6 +1564,7 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
errfunc = lambda pars,x,y: fitfunc(pars,x)-y
for w in workouts:
# Create CP data point for date range
ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=kfitness),
date__lte=w.date)]
@@ -1590,12 +1596,32 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
dates.append(datetime.datetime.combine(w.date,datetime.datetime.min.time()))
testpower.append(powertest)
# create Fitness and Fatigue number
fatigue = 0
fitness = 0
previousworkouts = workouts.filter(date__lte=w.date)
for ww in previousworkouts:
delta = (w.date-ww.date).days
weight = getattr(ww,metricchoice)
fatigue += weight*math.exp(-delta/kfatigue)
fitness += weight*math.exp(-delta/kfitness)
fatigues.append(fatigue)
fitnesses.append(fitness)
df = pd.DataFrame({
'date':dates,
'testpower':testpower,
'fatigue':fatigues,
'fitness':fitnesses,
})
df['fatigue'] = k2*df['fatigue']
df['fitness'] = p0+k1*df['fitness']
df['form'] = df['fitness']-df['fatigue']
df.sort_values(['date'],inplace=True)
@@ -1606,14 +1632,14 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
source = ColumnDataSource(
data = dict(
testpower = df['testpower'],
date = df['date'],
fdate = df['date'].map(lambda x: x.strftime('%d-%m-%Y'))
fdate = df['date'].map(lambda x: x.strftime('%d-%m-%Y')),
fitness = df['fitness'],
fatigue = df['fatigue'],
form = df['form'],
)
)
@@ -1654,6 +1680,13 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
plot.circle('date','testpower',source=source,fill_color='green',size=10,
legend_label='{fitnesstest} min power'.format(fitnesstest=fitnesstest))
plot.line('date','fitness',source=source,color='yellow',
legend_label='fitness')
plot.line('date','fatigue',source=source,color='red',
legend_label='fatigue')
plot.line('date','form',source=source,color='green',
legend_label='form')
plot.xaxis.axis_label = 'Date'
plot.yaxis.axis_label = 'Power (W)'