setcp function
This commit is contained in:
@@ -1026,30 +1026,7 @@ def fetchcp_new(rower,workouts):
|
|||||||
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
|
||||||
strokesdf = getsmallrowdata_db(['power','workoutid','time'],ids = [workout.id])
|
data.append(setcp(workout)[0])
|
||||||
if not strokesdf.empty:
|
|
||||||
totaltime = strokesdf['time'].max()
|
|
||||||
try:
|
|
||||||
powermean = strokesdf['power'].mean()
|
|
||||||
except KeyError:
|
|
||||||
powermean = 0
|
|
||||||
|
|
||||||
if powermean != 0:
|
|
||||||
thesecs = totaltime
|
|
||||||
maxt = 1.05 * thesecs
|
|
||||||
|
|
||||||
if maxt > 0:
|
|
||||||
logarr = datautils.getlogarr(maxt)
|
|
||||||
dfgrouped = strokesdf.groupby(['workoutid'])
|
|
||||||
delta, cpvalues, avgpower = datautils.getcp(dfgrouped, logarr)
|
|
||||||
filename = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id)
|
|
||||||
df = pd.DataFrame({
|
|
||||||
'delta':delta,
|
|
||||||
'cp':cpvalues,
|
|
||||||
'id':workout.id,
|
|
||||||
})
|
|
||||||
df.to_parquet(filename,engine='fastparquet',compression='GZIP')
|
|
||||||
data.append(df)
|
|
||||||
|
|
||||||
|
|
||||||
if len(data) == 0:
|
if len(data) == 0:
|
||||||
@@ -1064,6 +1041,35 @@ def fetchcp_new(rower,workouts):
|
|||||||
|
|
||||||
return df['delta'],df['cp'],0
|
return df['delta'],df['cp'],0
|
||||||
|
|
||||||
|
def setcp(workout):
|
||||||
|
strokesdf = getsmallrowdata_db(['power','workoutid','time'],ids = [workout.id])
|
||||||
|
if not strokesdf.empty:
|
||||||
|
totaltime = strokesdf['time'].max()
|
||||||
|
try:
|
||||||
|
powermean = strokesdf['power'].mean()
|
||||||
|
except KeyError:
|
||||||
|
powermean = 0
|
||||||
|
|
||||||
|
if powermean != 0:
|
||||||
|
thesecs = totaltime
|
||||||
|
maxt = 1.05 * thesecs
|
||||||
|
|
||||||
|
if maxt > 0:
|
||||||
|
logarr = datautils.getlogarr(maxt)
|
||||||
|
dfgrouped = strokesdf.groupby(['workoutid'])
|
||||||
|
delta, cpvalues, avgpower = datautils.getcp(dfgrouped, logarr)
|
||||||
|
filename = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id)
|
||||||
|
df = pd.DataFrame({
|
||||||
|
'delta':delta,
|
||||||
|
'cp':cpvalues,
|
||||||
|
'id':workout.id,
|
||||||
|
})
|
||||||
|
df.to_parquet(filename,engine='fastparquet',compression='GZIP')
|
||||||
|
return df,delta,cpvalues
|
||||||
|
|
||||||
|
return pd.DataFrame(),pd.Series(),pd.Series()
|
||||||
|
|
||||||
|
|
||||||
def fetchcp(rower,theworkouts,table='cpdata'):
|
def fetchcp(rower,theworkouts,table='cpdata'):
|
||||||
# get all power data from database (plus workoutid)
|
# get all power data from database (plus workoutid)
|
||||||
theids = [int(w.id) for w in theworkouts]
|
theids = [int(w.id) for w in theworkouts]
|
||||||
@@ -1482,91 +1488,72 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
|||||||
isbreakthrough = False
|
isbreakthrough = False
|
||||||
ishard = False
|
ishard = False
|
||||||
if workouttype in rowtypes:
|
if workouttype in rowtypes:
|
||||||
df = getsmallrowdata_db(['power', 'workoutid', 'time'], ids=[w.id])
|
cpdf,delta,cpvalues = setcp(w)
|
||||||
try:
|
if not cpdf.empty:
|
||||||
powermean = df['power'].mean()
|
if workouttype in otwtypes:
|
||||||
except KeyError:
|
res, btvalues, res2 = utils.isbreakthrough(
|
||||||
powermean = 0
|
delta, cpvalues, r.p0, r.p1, r.p2, r.p3, r.cpratio)
|
||||||
|
cprange = r.cprange
|
||||||
|
firstdate = datetime.date.today()-datetime.timedelta(days=cprange)
|
||||||
|
|
||||||
if powermean != 0:
|
workouts = Workout.objects.filter(
|
||||||
thesecs = totaltime
|
date__gte=firstdate,
|
||||||
maxt = 1.05 * thesecs
|
workouttype__in=otwtypes,
|
||||||
if maxt > 0:
|
)
|
||||||
logarr = datautils.getlogarr(maxt)
|
|
||||||
dfgrouped = df.groupby(['workoutid'])
|
dd,cpcp,avgpower = fetchcp_new(r,workouts)
|
||||||
delta, cpvalues, avgpower = datautils.getcp(dfgrouped, logarr)
|
|
||||||
filename = 'media/cpdata_{id}.parquet.gz'.format(id=w.id)
|
powerdf = pd.DataFrame({
|
||||||
cpdf = pd.DataFrame({
|
'Delta':dd,
|
||||||
'delta':delta,
|
'CP':cpcp,
|
||||||
'cp':cpvalues,
|
|
||||||
'id':w.id,
|
|
||||||
})
|
})
|
||||||
cpdf.to_parquet(filename,engine='fastparquet',compression='GZIP')
|
|
||||||
|
|
||||||
if workouttype in otwtypes:
|
|
||||||
res, btvalues, res2 = utils.isbreakthrough(
|
|
||||||
delta, cpvalues, r.p0, r.p1, r.p2, r.p3, r.cpratio)
|
|
||||||
cprange = r.cprange
|
|
||||||
firstdate = datetime.date.today()-datetime.timedelta(days=cprange)
|
|
||||||
|
|
||||||
workouts = Workout.objects.filter(
|
|
||||||
date__gte=firstdate,
|
|
||||||
workouttype__in=otwtypes,
|
|
||||||
)
|
|
||||||
|
|
||||||
dd,cpcp,avgpower = fetchcp_new(r,workouts)
|
|
||||||
|
|
||||||
powerdf = pd.DataFrame({
|
|
||||||
'Delta':dd,
|
|
||||||
'CP':cpcp,
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
powerdf = powerdf[powerdf['CP']>0]
|
powerdf = powerdf[powerdf['CP']>0]
|
||||||
powerdf.dropna(axis=0,inplace=True)
|
powerdf.dropna(axis=0,inplace=True)
|
||||||
powerdf.sort_values(['Delta','CP'],ascending=[1,0],inplace=True)
|
powerdf.sort_values(['Delta','CP'],ascending=[1,0],inplace=True)
|
||||||
powerdf.drop_duplicates(subset='Delta',keep='first',inplace=True)
|
powerdf.drop_duplicates(subset='Delta',keep='first',inplace=True)
|
||||||
|
|
||||||
res2 = datautils.cpfit(powerdf)
|
res2 = datautils.cpfit(powerdf)
|
||||||
if len(powerdf) != 0:
|
if len(powerdf) != 0:
|
||||||
p1 = res2[0]
|
p1 = res2[0]
|
||||||
r.p0 = p1[0]
|
r.p0 = p1[0]
|
||||||
r.p1 = p1[1]
|
r.p1 = p1[1]
|
||||||
r.p2 = p1[2]
|
r.p2 = p1[2]
|
||||||
r.p3 = p1[3]
|
r.p3 = p1[3]
|
||||||
r.cpratio = res2[3]
|
r.cpratio = res2[3]
|
||||||
r.save()
|
r.save()
|
||||||
|
|
||||||
elif workouttype in otetypes:
|
elif workouttype in otetypes:
|
||||||
res, btvalues, res2 = utils.isbreakthrough(
|
res, btvalues, res2 = utils.isbreakthrough(
|
||||||
delta, cpvalues, r.ep0, r.ep1, r.ep2, r.ep3, r.ecpratio)
|
delta, cpvalues, r.ep0, r.ep1, r.ep2, r.ep3, r.ecpratio)
|
||||||
cprange = r.cprange
|
cprange = r.cprange
|
||||||
firstdate = datetime.date.today()-datetime.timedelta(days=cprange)
|
firstdate = datetime.date.today()-datetime.timedelta(days=cprange)
|
||||||
workouts = Workout.objects.filter(
|
workouts = Workout.objects.filter(
|
||||||
date__gte=firstdate,
|
date__gte=firstdate,
|
||||||
workouttype__in=otetypes,
|
workouttype__in=otetypes,
|
||||||
)
|
)
|
||||||
dd,cpcp,avgpower = fetchcp_new(r,workouts)
|
dd,cpcp,avgpower = fetchcp_new(r,workouts)
|
||||||
powerdf = pd.DataFrame({
|
powerdf = pd.DataFrame({
|
||||||
'Delta':dd,
|
'Delta':dd,
|
||||||
'CP':cpcp,
|
'CP':cpcp,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
powerdf = powerdf[powerdf['CP']>0]
|
powerdf = powerdf[powerdf['CP']>0]
|
||||||
powerdf.dropna(axis=0,inplace=True)
|
powerdf.dropna(axis=0,inplace=True)
|
||||||
powerdf.sort_values(['Delta','CP'],ascending=[1,0],inplace=True)
|
powerdf.sort_values(['Delta','CP'],ascending=[1,0],inplace=True)
|
||||||
powerdf.drop_duplicates(subset='Delta',keep='first',inplace=True)
|
powerdf.drop_duplicates(subset='Delta',keep='first',inplace=True)
|
||||||
res2 = datautils.cpfit(powerdf)
|
res2 = datautils.cpfit(powerdf)
|
||||||
if len(powerdf) != 0:
|
if len(powerdf) != 0:
|
||||||
res = datautils.cpfit(powerdf)
|
res = datautils.cpfit(powerdf)
|
||||||
p1 = res2[0]
|
p1 = res2[0]
|
||||||
r.ep0 = p1[0]
|
r.ep0 = p1[0]
|
||||||
r.ep1 = p1[1]
|
r.ep1 = p1[1]
|
||||||
r.ep2 = p1[2]
|
r.ep2 = p1[2]
|
||||||
r.ep3 = p1[3]
|
r.ep3 = p1[3]
|
||||||
r.ecpratio = res2[3]
|
r.ecpratio = res2[3]
|
||||||
r.save()
|
r.save()
|
||||||
else:
|
else:
|
||||||
res = 0
|
res = 0
|
||||||
res2 = 0
|
res2 = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user