Private
Public Access
1
0

Merge branch 'feature/cp2' into develop

This commit is contained in:
Sander Roosendaal
2020-10-18 13:01:53 +02:00
3 changed files with 28 additions and 10 deletions

View File

@@ -1023,14 +1023,17 @@ def fetchcp_new(rower,workouts):
cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id) cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id)
try: try:
df = pd.read_parquet(cpfile) df = pd.read_parquet(cpfile)
df['workout'] = str(workout)
data.append(df) data.append(df)
except OSError: except OSError:
# CP data file doesn't exist yet. has to be created # CP data file doesn't exist yet. has to be created
data.append(setcp(workout)[0]) df, delta, cpvalues = setcp(workout)
df['workout'] = str(workout)
data.append(df)
if len(data) == 0: if len(data) == 0:
return pd.Series(),pd.Series(),0 return pd.Series(),pd.Series(),0,pd.Series()
if len(data)>1: if len(data)>1:
df = pd.concat(data,axis=0) df = pd.concat(data,axis=0)
@@ -1039,7 +1042,7 @@ def fetchcp_new(rower,workouts):
df = df.sort_values(['delta']).reset_index() df = df.sort_values(['delta']).reset_index()
return df['delta'],df['cp'],0 return df['delta'],df['cp'],0,df['workout']
def setcp(workout): def setcp(workout):
strokesdf = getsmallrowdata_db(['power','workoutid','time'],ids = [workout.id]) strokesdf = getsmallrowdata_db(['power','workoutid','time'],ids = [workout.id])
@@ -1501,7 +1504,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
workouttype__in=otwtypes, workouttype__in=otwtypes,
) )
dd,cpcp,avgpower = fetchcp_new(r,workouts) dd,cpcp,avgpower,workoutnames = fetchcp_new(r,workouts)
powerdf = pd.DataFrame({ powerdf = pd.DataFrame({
'Delta':dd, 'Delta':dd,
@@ -1533,7 +1536,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
date__gte=firstdate, date__gte=firstdate,
workouttype__in=otetypes, workouttype__in=otetypes,
) )
dd,cpcp,avgpower = fetchcp_new(r,workouts) dd,cpcp,avgpower,workoutnames = fetchcp_new(r,workouts)
powerdf = pd.DataFrame({ powerdf = pd.DataFrame({
'Delta':dd, 'Delta':dd,
'CP':cpcp, 'CP':cpcp,

View File

@@ -2881,7 +2881,8 @@ def interactive_agegroupcpchart(age,normalized=False):
return script,div return script,div
def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data'): def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data',
title=''):
powerdf = powerdf[~(powerdf == 0).any(axis=1)] powerdf = powerdf[~(powerdf == 0).any(axis=1)]
# plot tools # plot tools
if (promember==1): if (promember==1):
@@ -2921,13 +2922,15 @@ def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data')
deltas = fitt.apply(lambda x: timedeltaconv(x)) deltas = fitt.apply(lambda x: timedeltaconv(x))
ftime = niceformat(deltas) ftime = niceformat(deltas)
workouts = powerdf['workout']
sourcecomplex = ColumnDataSource( sourcecomplex = ColumnDataSource(
data = dict( data = dict(
CP = fitpower, CP = fitpower,
CPmax = ratio*fitpower, CPmax = ratio*fitpower,
duration = fitt, duration = fitt,
ftime = ftime ftime = ftime,
workout = workouts,
) )
) )
@@ -2970,7 +2973,9 @@ def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data')
plot.y_range = Range1d(0,1.5*max(theavpower)) plot.y_range = Range1d(0,1.5*max(theavpower))
plot.x_range = Range1d(1,2*max(thesecs)) plot.x_range = Range1d(1,2*max(thesecs))
plot.legend.orientation = "vertical" plot.legend.orientation = "vertical"
plot.title.text = "Critical Power for "+rowername if not title:
title = "Critical Power for "+rowername
plot.title.text = title
hover = plot.select(dict(type=HoverTool)) hover = plot.select(dict(type=HoverTool))
@@ -2978,6 +2983,7 @@ def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data')
('Duration ','@ftime'), ('Duration ','@ftime'),
('Power (W)','@CP{int}'), ('Power (W)','@CP{int}'),
('Power (W) upper','@CPmax{int}'), ('Power (W) upper','@CPmax{int}'),
('Workout','@workout'),
]) ])
hover.mode = 'mouse' hover.mode = 'mouse'

View File

@@ -521,10 +521,11 @@ def cpdata(workouts, options):
ids = [w.id for w in workouts] ids = [w.id for w in workouts]
delta, cpvalue, avgpower = dataprep.fetchcp_new(r,workouts) delta, cpvalue, avgpower,workoutnames = dataprep.fetchcp_new(r,workouts)
powerdf = pd.DataFrame({ powerdf = pd.DataFrame({
'Delta':delta, 'Delta':delta,
'CP':cpvalue, 'CP':cpvalue,
'workout':workoutnames,
}) })
@@ -539,8 +540,15 @@ def cpdata(workouts, options):
rowername = r.user.first_name+" "+r.user.last_name rowername = r.user.first_name+" "+r.user.last_name
if len(powerdf) !=0 : if len(powerdf) !=0 :
datefirst = pd.Series(w.date for w in workouts).min()
datelast = pd.Series(w.date for w in workouts).max()
title = 'CP chart for {name}, from {d1} to {d2}'.format(
name = rowername,
d1 = datefirst,
d2 = datelast,
)
res = interactive_otwcpchart(powerdf,promember=True,rowername=rowername,r=r, res = interactive_otwcpchart(powerdf,promember=True,rowername=rowername,r=r,
cpfit=cpfit) cpfit=cpfit,title=title)
script = res[0] script = res[0]
div = res[1] div = res[1]
p1 = res[2] p1 = res[2]
@@ -2426,6 +2434,7 @@ def otwrankings_view(request,userid=0,
powerdf = pd.DataFrame({ powerdf = pd.DataFrame({
'Delta':delta, 'Delta':delta,
'CP':cpvalue, 'CP':cpvalue,
'workout':pd.Series(),
}) })
if powerdf.empty: if powerdf.empty: