fix
This commit is contained in:
@@ -1528,7 +1528,7 @@ def interactive_forcecurve(theworkouts,workstrokesonly=True,plottype='scatter'):
|
|||||||
return [script,div,js_resources,css_resources]
|
return [script,div,js_resources,css_resources]
|
||||||
|
|
||||||
def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
|
def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
|
||||||
enddate=None,nrdays=1):
|
enddate=None,nrdays=20):
|
||||||
|
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||||
|
|
||||||
@@ -1537,23 +1537,58 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
|
|||||||
hourpower = []
|
hourpower = []
|
||||||
|
|
||||||
workouts = workouts.order_by('date')
|
workouts = workouts.order_by('date')
|
||||||
|
data = []
|
||||||
|
|
||||||
for w in workouts:
|
for w in workouts:
|
||||||
delta,cpvalue,avgpower,workoutnames = dataprep.fetchcp_new(user.rower,[w])
|
cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=w.id)
|
||||||
powerdf = pd.DataFrame({
|
try:
|
||||||
'Delta':delta,
|
df = pd.read_parquet(cpfile)
|
||||||
'CP':cpvalue,
|
df['workout'] = w.id
|
||||||
'workout':workoutnames,
|
data.append(df)
|
||||||
})
|
except:
|
||||||
powerdf = powerdf[powerdf['CP']>0]
|
pass
|
||||||
powerdf.dropna(axis=0,inplace=True)
|
|
||||||
powerdf.sort_values(['Delta','CP'],ascending=[1,0],inplace=True)
|
if len(data) == 0:
|
||||||
powerdf.drop_duplicates(subset='Delta',keep='first',inplace=True)
|
return pd.Series(),pd.Series(),0,pd.Series()
|
||||||
p1,fitt,fitpower,ratio = datautils.cpfit(powerdf)
|
if len(data)>1:
|
||||||
fitfunc = lambda pars,x: abs(pars[0])/(1+(x/abs(pars[2]))) + abs(pars[1])/(1+(x/abs(pars[3])))
|
df = pd.concat(data,axis=0)
|
||||||
|
|
||||||
|
fitfunc = lambda pars,x: abs(pars[0])/(1+(x/abs(pars[2]))) + abs(pars[1])/(1+(x/abs(pars[3])))
|
||||||
|
errfunc = lambda pars,x,y: fitfunc(pars,x)-y
|
||||||
|
|
||||||
|
for w in workouts:
|
||||||
|
ids = [w.id for w in workouts.filter(date__gte=w.date-datetime.timedelta(days=nrdays),
|
||||||
|
date__lte=w.date)]
|
||||||
|
|
||||||
|
powerdf = df[df['workout'].isin(ids)]
|
||||||
|
|
||||||
|
powerdf = powerdf[powerdf['cp'] == powerdf.groupby(['delta'])['cp'].transform('max')]
|
||||||
|
powerdf = powerdf.sort_values(['delta']).reset_index()
|
||||||
|
|
||||||
|
|
||||||
|
powerdf = powerdf[powerdf['cp']>0]
|
||||||
|
powerdf.dropna(axis=0,inplace=True)
|
||||||
|
powerdf.sort_values(['delta','cp'],ascending=[1,0],inplace=True)
|
||||||
|
powerdf.drop_duplicates(subset='delta',keep='first',inplace=True)
|
||||||
|
|
||||||
|
|
||||||
|
# p1,fitt,fitpower,ratio = datautils.cpfit(powerdf)
|
||||||
|
if len(powerdf['delta'])>= 4:
|
||||||
|
thesecs = powerdf['delta'].values
|
||||||
|
theavpower = powerdf['cp'].values
|
||||||
|
|
||||||
|
if thesecs.min() < 240 and thesecs.max() > 240:
|
||||||
|
ww = griddata(thesecs,theavpower,np.arange(239,241,1),method='linear',rescale=True)
|
||||||
|
powerfourmin = ww[1]
|
||||||
|
else:
|
||||||
|
powerfourmin = np.nan
|
||||||
|
|
||||||
|
if thesecs.min() < 3600 and thesecs.max() > 3600:
|
||||||
|
ww = griddata(thesecs,theavpower,np.arange(3599,3601,1),method='linear',rescale=True)
|
||||||
|
powerhour = ww[1]
|
||||||
|
else:
|
||||||
|
powerhour = np.nan
|
||||||
|
|
||||||
powerfourmin = fitfunc(p1,240.)
|
|
||||||
powerhour = fitfunc(p1,3600)
|
|
||||||
dates.append(datetime.datetime.combine(w.date,datetime.datetime.min.time()))
|
dates.append(datetime.datetime.combine(w.date,datetime.datetime.min.time()))
|
||||||
fourminpower.append(powerfourmin)
|
fourminpower.append(powerfourmin)
|
||||||
hourpower.append(powerhour)
|
hourpower.append(powerhour)
|
||||||
@@ -1564,6 +1599,7 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
|
|||||||
'hourpower':hourpower,
|
'hourpower':hourpower,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
df.sort_values(['date'],inplace=True)
|
df.sort_values(['date'],inplace=True)
|
||||||
|
|
||||||
df['hourdup'] = df['hourpower'].shift(1)
|
df['hourdup'] = df['hourpower'].shift(1)
|
||||||
@@ -1576,6 +1612,7 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
source = ColumnDataSource(
|
source = ColumnDataSource(
|
||||||
data = dict(
|
data = dict(
|
||||||
fourminpower = df['fourminpower'],
|
fourminpower = df['fourminpower'],
|
||||||
@@ -1653,7 +1690,10 @@ def fitnessfit_chart(workouts,user,workoutmode='water',startdate=None,
|
|||||||
('Date','@fdate')
|
('Date','@fdate')
|
||||||
])
|
])
|
||||||
|
|
||||||
|
try:
|
||||||
script,div = components(plot)
|
script,div = components(plot)
|
||||||
|
except:
|
||||||
|
return '','Insufficient Data'
|
||||||
|
|
||||||
return [script,div]
|
return [script,div]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user