Private
Public Access
1
0

fitness-fit has now right algo

This commit is contained in:
Sander Roosendaal
2021-01-01 16:24:42 +01:00
parent 069ac5a182
commit 0e9944044d
2 changed files with 57 additions and 17 deletions

View File

@@ -25,6 +25,8 @@ import itertools
from bokeh.plotting import figure, ColumnDataSource, Figure,curdoc
from bokeh.models import CustomJS,Slider, TextInput,BoxAnnotation, Band
import arrow
from rowers.utils import myqueue, totaltime_sec_to_string
import django_rq
queue = django_rq.get_queue('default')
@@ -102,6 +104,16 @@ import rowers.datautils as datautils
from pandas.core.groupby.groupby import DataError
def newtestpower(x):
try:
if abs(x['testpower'] - x['testdup']) < 1:
return np.nan
except (AttributeError,TypeError):
return np.nan
return x['testpower']
def build_goldmedalstandards(workouts,kfitness):
dates = []
testpower = []
@@ -113,20 +125,48 @@ def build_goldmedalstandards(workouts,kfitness):
goldmedalstandards = []
goldmedaldurations = []
ids = []
workoutdt = []
for w in workouts:
goldmedalstandard,goldmedalseconds = dataprep.workout_goldmedalstandard(w)
ids.append(w.id)
goldmedalstandards.append(goldmedalstandard)
goldmedaldurations.append(goldmedalseconds)
if w.workouttype in mytypes.otwtypes:
goldmedalstandard = goldmedalstandard / (1.-w.user.otwslack/100.)
if goldmedalseconds > 60:
goldmedalstandards.append(goldmedalstandard)
goldmedaldurations.append(goldmedalseconds)
else:
goldmedalstandards.append(0)
goldmedaldurations.append(0)
workoutdt.append(arrow.get(w.startdatetime).datetime)
df = pd.DataFrame({
'workout':ids,
'workoutdt': workoutdt,
'goldmedalstandard':goldmedalstandards,
'goldmedalduration':goldmedaldurations,
})
df.sort_values(['workoutdt'],inplace=True)
#for id, row in df.iterrows():
# d = row['workoutdt']
# dd = d-datetime.timedelta(days=90)
# mask = df['workoutdt']>dd
# mask2 = df['workoutdt']<=d
# df2 = df.where(mask & mask2)
# powertest = df2['goldmedalstandard'].max()
# idx = df2['goldmedalstandard'].argmax()
# durationtest = df2['goldmedalduration'].values[idx]
# dates.append(d)
# testpower.append(powertest)
# testduration.append(durationtest)
# fatigues.append(np.nan)
# fitnesses.append(np.nan)
for w in workouts:
ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=kfitness),
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)]
@@ -134,9 +174,14 @@ def build_goldmedalstandards(workouts,kfitness):
powertest = powerdf['goldmedalstandard'].max()
durationtest = powerdf.loc[indexmax,'goldmedalduration']
dates.append(datetime.datetime.combine(w.date,datetime.datetime.min.time()))
testpower.append(powertest)
testduration.append(durationtest)
dates.append(arrow.get(w.date).datetime)
if powertest > 0:
testpower.append(powertest)
testduration.append(durationtest)
else:
testpower.append(np.nan)
testduration.append(np.nan)
fatigues.append(np.nan)
fitnesses.append(np.nan)
@@ -156,7 +201,7 @@ def get_testpower(workouts,fitnesstestsecs,kfitness):
try:
df = pd.read_parquet(cpfile)
df['workout'] = w.id
df['workoutdate'] = w.date.strftime('%d-%m-%Y')
df['workoutdate'] = arrow.get(w.date.strftime('%d-%m-%Y')).datetime
data.append(df)
except:
strokesdf = dataprep.getsmallrowdata_db(['power','workoutid','time'],ids=[w.id])
@@ -203,7 +248,7 @@ def get_testpower(workouts,fitnesstestsecs,kfitness):
dates.append(datetime.datetime.combine(w.date,datetime.datetime.min.time()))
dates.append(arrow.get(w.date).datetime)
testpower.append(powertest)
testduration.append(fitnesstestsecs)
fatigues.append(np.nan)
@@ -1710,7 +1755,7 @@ def getfatigues(
fatigues.append(fatigue)
fitnesses.append(fitness)
dates.append(datetime.datetime.combine(date,datetime.datetime.min.time()))
dates.append(arrow.get(date).datetime)
testpower.append(np.nan)
testduration.append(np.nan)
@@ -1978,8 +2023,7 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
df['testdup'] = df['testpower'].shift(1)
df['testpower'] = df.apply(lambda x: np.nan if abs(x['testpower'] - x['testdup']) < 1 \
else x['testpower'],axis=1)
df['testpower'] = df.apply(lambda x: newtestpower(x),axis=1)
try:
df['testpower'].iloc[-1] = df['testdup'].iloc[-1]

View File

@@ -1678,13 +1678,9 @@ def fitness_from_cp_view(request,userid=0,mode='rower',
workouts = Workout.objects.filter(user=therower,date__gte=startdate,
date__lte=enddate,
workouttype__in=mytypes.otwtypes,
workouttype__in=mytypes.rowtypes,
duplicate=False)
if mode == 'rower':
workouts = Workout.objects.filter(user=therower,date__gte=startdate,
date__lte=enddate,workouttype__in=mytypes.otetypes,
duplicate=False)
script,thediv = fitnessfit_chart(