sort of gets CP data
This commit is contained in:
@@ -1016,6 +1016,68 @@ def fetchcperg(rower,theworkouts):
|
|||||||
|
|
||||||
return cpdf
|
return cpdf
|
||||||
|
|
||||||
|
def fetchcp_new(rower,workouts):
|
||||||
|
|
||||||
|
data = []
|
||||||
|
for workout in workouts:
|
||||||
|
cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=workout.id)
|
||||||
|
try:
|
||||||
|
df = pd.read_parquet(cpfile)
|
||||||
|
data.append(df)
|
||||||
|
except OSError:
|
||||||
|
# CP data file doesn't exist yet. has to be created
|
||||||
|
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')
|
||||||
|
data.append(df)
|
||||||
|
|
||||||
|
|
||||||
|
if len(data)>1:
|
||||||
|
df = pd.concat(data,axis=0)
|
||||||
|
|
||||||
|
df = df.groupby(['delta']).max()
|
||||||
|
|
||||||
|
|
||||||
|
df = df.sort_values(['delta']).reset_index()
|
||||||
|
dindex = df['id'].shift(1)-df['id']
|
||||||
|
dpowerplus = df['cp'].shift(1)-df['cp']
|
||||||
|
dpowermin = df['cp'].shift(-1)-df['cp']
|
||||||
|
badrows = []
|
||||||
|
badid = 0
|
||||||
|
for index,row in df.iterrows():
|
||||||
|
if dindex[index] != 0 and dpowermin[index] > 0:
|
||||||
|
badrows.append(index)
|
||||||
|
badid = row['id']
|
||||||
|
elif row['id'] == badid:
|
||||||
|
badrows.append(index)
|
||||||
|
else:
|
||||||
|
badid = 0
|
||||||
|
|
||||||
|
|
||||||
|
df = df.drop(index = badrows)
|
||||||
|
|
||||||
|
|
||||||
|
return df['delta'],df['cp'],0
|
||||||
|
|
||||||
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)
|
||||||
@@ -1449,7 +1511,12 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
|||||||
dfgrouped = df.groupby(['workoutid'])
|
dfgrouped = df.groupby(['workoutid'])
|
||||||
delta, cpvalues, avgpower = datautils.getcp(dfgrouped, logarr)
|
delta, cpvalues, avgpower = datautils.getcp(dfgrouped, logarr)
|
||||||
filename = 'media/cpdata_{id}.parquet.gz'.format(id=w.id)
|
filename = 'media/cpdata_{id}.parquet.gz'.format(id=w.id)
|
||||||
df.to_parquet(filename,engine='fastparquet',compression='GZIP')
|
cpdf = pd.DataFrame({
|
||||||
|
'delta':delta,
|
||||||
|
'cp':cpvalues,
|
||||||
|
'id':w.id,
|
||||||
|
})
|
||||||
|
cpdf.to_parquet(filename,engine='fastparquet',compression='GZIP')
|
||||||
|
|
||||||
if workouttype in otwtypes:
|
if workouttype in otwtypes:
|
||||||
res, btvalues, res2 = utils.isbreakthrough(
|
res, btvalues, res2 = utils.isbreakthrough(
|
||||||
|
|||||||
@@ -2985,6 +2985,13 @@ def auto_delete_file_on_delete(sender, instance, **kwargs):
|
|||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# remove parquet file
|
||||||
|
try:
|
||||||
|
dirname = 'media/cpdata_{id}.parquet.gz'.format(id=instance.id)
|
||||||
|
shutil.rmtree(dirname)
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
@receiver(models.signals.post_delete,sender=Workout)
|
@receiver(models.signals.post_delete,sender=Workout)
|
||||||
def update_duplicates_on_delete(sender, instance, **kwargs):
|
def update_duplicates_on_delete(sender, instance, **kwargs):
|
||||||
if instance.id:
|
if instance.id:
|
||||||
|
|||||||
@@ -104,7 +104,11 @@
|
|||||||
yaxis1.hide();
|
yaxis1.hide();
|
||||||
yaxis2.hide();
|
yaxis2.hide();
|
||||||
plottype.hide();
|
plottype.hide();
|
||||||
reststrokes.show();
|
reststrokes.hide();
|
||||||
|
workmin.hide();
|
||||||
|
workmax.hide();
|
||||||
|
spmmin.hide();
|
||||||
|
spmmax.hide();
|
||||||
|
|
||||||
if (functionfield.val() == 'boxplot') {
|
if (functionfield.val() == 'boxplot') {
|
||||||
plotfield.show();
|
plotfield.show();
|
||||||
|
|||||||
@@ -501,7 +501,58 @@ def histodata(workouts, options):
|
|||||||
return(script,div)
|
return(script,div)
|
||||||
|
|
||||||
def cpdata(workouts, options):
|
def cpdata(workouts, options):
|
||||||
return ('','Not Yet Implemented')
|
userid = options['userid']
|
||||||
|
|
||||||
|
|
||||||
|
u = User.objects.get(id=userid)
|
||||||
|
r = u.rower
|
||||||
|
|
||||||
|
|
||||||
|
ids = [w.id for w in workouts]
|
||||||
|
delta, cpvalue, avgpower = dataprep.fetchcp_new(r,workouts)
|
||||||
|
powerdf = pd.DataFrame({
|
||||||
|
'Delta':delta,
|
||||||
|
'CP':cpvalue,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
if powerdf.empty:
|
||||||
|
return('','<p>No valid data found</p>')
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
rowername = r.user.first_name+" "+r.user.last_name
|
||||||
|
|
||||||
|
if len(powerdf) !=0 :
|
||||||
|
res = interactive_otwcpchart(powerdf,promember=True,rowername=rowername)
|
||||||
|
script = res[0]
|
||||||
|
div = res[1]
|
||||||
|
p1 = res[2]
|
||||||
|
ratio = res[3]
|
||||||
|
r.p0 = p1[0]
|
||||||
|
r.p1 = p1[1]
|
||||||
|
r.p2 = p1[2]
|
||||||
|
r.p3 = p1[3]
|
||||||
|
r.cpratio = ratio
|
||||||
|
r.save()
|
||||||
|
paulslope = 1
|
||||||
|
paulintercept = 1
|
||||||
|
message = res[4]
|
||||||
|
else:
|
||||||
|
script = ''
|
||||||
|
div = '<p>No ranking pieces found.</p>'
|
||||||
|
paulslope = 1
|
||||||
|
paulintercept = 1
|
||||||
|
p1 = [1,1,1,1]
|
||||||
|
message = ""
|
||||||
|
|
||||||
|
scripta = script.split('\n')[2:-1]
|
||||||
|
script = ''.join(scripta)
|
||||||
|
|
||||||
|
return (script,div)
|
||||||
|
|
||||||
def statsdata(workouts, options):
|
def statsdata(workouts, options):
|
||||||
includereststrokes = options['includereststrokes']
|
includereststrokes = options['includereststrokes']
|
||||||
|
|||||||
Reference in New Issue
Block a user