added efficiency metric
This commit is contained in:
@@ -211,6 +211,12 @@ def clean_df_stats(datadf,workstrokesonly=True,ignorehr=True,
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
mask = datadf['efficiency'] < 0.
|
||||||
|
datadf.loc[mask,'efficiency'] = np.nan
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
mask = datadf['pace']/1000. < 60.
|
mask = datadf['pace']/1000. < 60.
|
||||||
datadf.loc[mask,'pace'] = np.nan
|
datadf.loc[mask,'pace'] = np.nan
|
||||||
@@ -1423,6 +1429,14 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True,
|
|||||||
totalangle = savgol_filter(totalangle,windowsize,3)
|
totalangle = savgol_filter(totalangle,windowsize,3)
|
||||||
effectiveangle = savgol_filter(effectiveangle,windowsize,3)
|
effectiveangle = savgol_filter(effectiveangle,windowsize,3)
|
||||||
|
|
||||||
|
velo = 500./p
|
||||||
|
|
||||||
|
ergpw = 2.8*velo**3
|
||||||
|
efficiency = 100.*ergpw/power
|
||||||
|
|
||||||
|
efficiency = efficiency.replace([-np.inf,np.inf],np.nan)
|
||||||
|
efficiency.fillna(method='ffill')
|
||||||
|
|
||||||
data['wash'] = wash
|
data['wash'] = wash
|
||||||
data['catch'] = catch
|
data['catch'] = catch
|
||||||
data['slip'] = slip
|
data['slip'] = slip
|
||||||
@@ -1432,6 +1446,7 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True,
|
|||||||
data['drivelength'] = drivelength
|
data['drivelength'] = drivelength
|
||||||
data['totalangle'] = totalangle
|
data['totalangle'] = totalangle
|
||||||
data['effectiveangle'] = effectiveangle
|
data['effectiveangle'] = effectiveangle
|
||||||
|
data['efficiency'] = efficiency
|
||||||
|
|
||||||
if otwpower:
|
if otwpower:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ axes = (
|
|||||||
('totalangle', 'Drive Length (deg)',40,140,'pro'),
|
('totalangle', 'Drive Length (deg)',40,140,'pro'),
|
||||||
('effectiveangle', 'Effective Drive Length (deg)',40,140,'pro'),
|
('effectiveangle', 'Effective Drive Length (deg)',40,140,'pro'),
|
||||||
('rhythm', 'Stroke Rhythm (%)',20,55,'pro'),
|
('rhythm', 'Stroke Rhythm (%)',20,55,'pro'),
|
||||||
|
('efficiency', 'OTW efficiency (%)',0,110,'pro'),
|
||||||
('None', 'None',0,1,'basic'),
|
('None', 'None',0,1,'basic'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -536,6 +536,7 @@ class StrokeData(models.Model):
|
|||||||
rhythm = models.FloatField(default=1.0,null=True,verbose_name='Rhythm')
|
rhythm = models.FloatField(default=1.0,null=True,verbose_name='Rhythm')
|
||||||
totalangle = models.FloatField(default=0.0,null=True,verbose_name='Total Stroke Length (deg)')
|
totalangle = models.FloatField(default=0.0,null=True,verbose_name='Total Stroke Length (deg)')
|
||||||
effectiveangle = models.FloatField(default=0.0,null=True,verbose_name='Effective Stroke Length (deg)')
|
effectiveangle = models.FloatField(default=0.0,null=True,verbose_name='Effective Stroke Length (deg)')
|
||||||
|
efficiency = models.FloatField(default=-1,null=True,verbose_name='OTW Efficiency')
|
||||||
|
|
||||||
# A wrapper around the png files
|
# A wrapper around the png files
|
||||||
class GraphImage(models.Model):
|
class GraphImage(models.Model):
|
||||||
|
|||||||
@@ -5618,7 +5618,7 @@ def workout_flexchart3_view(request,*args,**kwargs):
|
|||||||
axchoicespro.pop('totalangle')
|
axchoicespro.pop('totalangle')
|
||||||
axchoicespro.pop('effectiveangle')
|
axchoicespro.pop('effectiveangle')
|
||||||
axchoicespro.pop('peakforceangle')
|
axchoicespro.pop('peakforceangle')
|
||||||
|
axchoicespro.pop('efficiency')
|
||||||
|
|
||||||
return render(request,
|
return render(request,
|
||||||
'flexchart3otw.html',
|
'flexchart3otw.html',
|
||||||
|
|||||||
Reference in New Issue
Block a user