Private
Public Access
1
0

getting part

This commit is contained in:
2024-04-09 15:50:54 +02:00
parent 016ff6ca6c
commit 6d6acdbd1e
4 changed files with 37 additions and 38 deletions

View File

@@ -192,11 +192,11 @@ def tailwind(bearing, vwind, winddir):
def interactive_hr_piechart(df, rower, title, totalseconds=0): def interactive_hr_piechart(df, rower, title, totalseconds=0):
if df.empty: if df.is_empty():
return "", "Not enough data to make a chart" return "", "Not enough data to make a chart"
df.sort_values(by='hr', inplace=True) df = df.sort("hr")
df['timehr'] = df['deltat']*df['hr'] df = df.with_columns((pl.col("deltat")*pl.col("hr")).alias("deltat"))
sumtimehr = df['deltat'].sum() sumtimehr = df['deltat'].sum()
@@ -205,24 +205,23 @@ def interactive_hr_piechart(df, rower, title, totalseconds=0):
hrzones = rower.hrzones hrzones = rower.hrzones
qry = 'hr < {ut2}'.format(ut2=rower.ut2) qrydata = df.filter(pl.col("hr") < rower.ut2)
qrydata = df.query(qry)
frac_lut2 = totalseconds*qrydata['deltat'].sum()/sumtimehr frac_lut2 = totalseconds*qrydata['deltat'].sum()/sumtimehr
qry = '{ut2} <= hr < {ut1}'.format(ut1=rower.ut1, ut2=rower.ut2) qrydata = df.lazy().filter(pl.col("hr") >= rower.ut2).filter(pl.col("hr") < rower.ut1)
frac_ut2 = totalseconds*df.query(qry)['deltat'].sum()/sumtimehr frac_ut2 = totalseconds*qrydata.collect()['deltat'].sum()/sumtimehr
qry = '{ut1} <= hr < {at}'.format(ut1=rower.ut1, at=rower.at) qrydata = df.lazy().filter(pl.col("hr") >= rower.ut1).filter(pl.col("hr") < rower.at)
frac_ut1 = totalseconds*df.query(qry)['deltat'].sum()/sumtimehr frac_ut1 = totalseconds*qrydata.collect()['deltat'].sum()/sumtimehr
qry = '{at} <= hr < {tr}'.format(at=rower.at, tr=rower.tr) qrydata = df.lazy().filter(pl.col("hr") >= rower.at).filter(pl.col("hr") < rower.tr)
frac_at = totalseconds*df.query(qry)['deltat'].sum()/sumtimehr frac_at = totalseconds*qrydata.collect()['deltat'].sum()/sumtimehr
qry = '{tr} <= hr < {an}'.format(tr=rower.tr, an=rower.an) qrydata = df.lazy().filter(pl.col("hr") >= rower.tr).filter(pl.col("hr") < rower.an)
frac_tr = totalseconds*df.query(qry)['deltat'].sum()/sumtimehr frac_tr = totalseconds*qrydata.collect()['deltat'].sum()/sumtimehr
qry = 'hr >= {an}'.format(an=rower.an) qrydata = df.filter(pl.col("hr") >= rower.an)
frac_an = totalseconds*df.query(qry)['deltat'].sum()/sumtimehr frac_an = totalseconds*qrydata['deltat'].sum()/sumtimehr
datadict = { datadict = {
'<{ut2}'.format(ut2=hrzones[1]): frac_lut2, '<{ut2}'.format(ut2=hrzones[1]): frac_lut2,
@@ -1931,7 +1930,6 @@ def interactive_streamchart(id=0, promember=0):
return [script, div] return [script, div]
def forcecurve_multi_interactive_chart(selected): # pragma: no cover def forcecurve_multi_interactive_chart(selected): # pragma: no cover
df_plot = pd.DataFrame()
ids = [analysis.id for analysis in selected] ids = [analysis.id for analysis in selected]
workoutids = [analysis.workout.id for analysis in selected] workoutids = [analysis.workout.id for analysis in selected]
@@ -1940,18 +1938,17 @@ def forcecurve_multi_interactive_chart(selected): # pragma: no cover
columns = ['catch', 'slip', 'wash', 'finish', 'averageforce', columns = ['catch', 'slip', 'wash', 'finish', 'averageforce',
'peakforceangle', 'peakforce', 'spm', 'distance', 'peakforceangle', 'peakforce', 'spm', 'distance',
'workoutstate', 'workoutid', 'driveenergy', 'cumdist'] 'workoutstate', 'workoutid', 'driveenergy', 'cumdist']
columns = columns + [name for name, d in metrics.rowingmetrics]
rowdata = dataprep.getsmallrowdata_db(columns, ids=workoutids, rowdata = dataprep.getsmallrowdata_pl(columns, ids=workoutids,
workstrokesonly=False) workstrokesonly=False)
rowdata = rowdata.fill_nan(None).drop_nulls()
rowdata.dropna(axis=1, how='all', inplace=True) if rowdata.is_empty():
rowdata.dropna(axis=0, how='any', inplace=True)
if rowdata.empty:
return "", "No Valid Data Available", "", "" return "", "No Valid Data Available", "", ""
data_dict = rowdata.to_dict("records") data_dict = rowdata.to_dicts()
thresholdforces = [] thresholdforces = []
for analysis in selected: for analysis in selected:

Binary file not shown.

View File

@@ -2381,14 +2381,16 @@ def history_view_data(request, userid=0):
ids = [w.id for w in g_workouts] ids = [w.id for w in g_workouts]
columns = ['hr', 'power', 'time'] # columns = ['hr', 'power', 'time']
columns = [name for name, d in metrics.rowingmetrics]+['workoutstate', 'workoutid']
df = getsmallrowdata_db(columns, ids=ids)
df = getsmallrowdata_pl(columns, ids=ids)
try: try:
df['deltat'] = df['time'].diff().clip(lower=0) df = df.with_columns(pl.col('time').diff().clip(lower_bound=0).alias("deltat"))
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
pass pass
df = dataprep.clean_df_stats(df, workstrokesonly=True,
df = dataprep.clean_df_stats_pl(df, workstrokesonly=True,
ignoreadvanced=True, ignorehr=False) ignoreadvanced=True, ignorehr=False)
totalmeters, totalhours, totalminutes, totalseconds = get_totals( totalmeters, totalhours, totalminutes, totalseconds = get_totals(
@@ -2418,13 +2420,13 @@ def history_view_data(request, userid=0):
whours=whours, whours=whours,
wminutes=wminutes, wseconds=wseconds, wminutes=wminutes, wseconds=wseconds,
) )
ddf = getsmallrowdata_db(columns, ids=[w.id for w in a_workouts]) ddf = getsmallrowdata_pl(columns, ids=[w.id for w in a_workouts])
try: try:
ddf['deltat'] = ddf['time'].diff().clip(lower=0) ddf = ddf.with_columns(pl.col("time").diff().clip(lower_bound=0).alias("deltat"))
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
pass pass
ddf = dataprep.clean_df_stats(ddf, workstrokesonly=False, ddf = dataprep.clean_df_stats_pl(ddf, workstrokesonly=False,
ignoreadvanced=True) ignoreadvanced=True)
try: try:
@@ -2432,13 +2434,13 @@ def history_view_data(request, userid=0):
except (KeyError, ValueError, AttributeError): # pragma: no cover except (KeyError, ValueError, AttributeError): # pragma: no cover
ddict['hrmean'] = 0 ddict['hrmean'] = 0
try: try:
ddict['hrmax'] = ddf['hr'].max().astype(int) ddict['hrmax'] = int(ddf['hr'].max())
except (KeyError, ValueError, AttributeError): # pragma: no cover except (KeyError, ValueError, AttributeError): # pragma: no cover
ddict['hrmax'] = 0 ddict['hrmax'] = 0
ddict['powermean'] = int(wavg(ddf, 'power', 'deltat')) ddict['powermean'] = int(wavg(ddf, 'power', 'deltat'))
try: try:
ddict['powermax'] = ddf['power'].max().astype(int) ddict['powermax'] = int(ddf['power'].max())
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
ddict['powermax'] = 0 ddict['powermax'] = 0
ddict['nrworkouts'] = a_workouts.count() ddict['nrworkouts'] = a_workouts.count()
@@ -2453,13 +2455,13 @@ def history_view_data(request, userid=0):
totalsdict['distance'] = totalmeters totalsdict['distance'] = totalmeters
try: try:
totalsdict['powermean'] = int(wavg(df, 'power', 'deltat')) totalsdict['powermean'] = int(wavg(df, 'power', 'deltat'))
totalsdict['powermax'] = df['power'].max().astype(int) totalsdict['powermax'] = int(df['power'].max())
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
totalsdict['powermean'] = 0 totalsdict['powermean'] = 0
totalsdict['powermax'] = 0 totalsdict['powermax'] = 0
try: try:
totalsdict['hrmean'] = int(wavg(df, 'hr', 'deltat')) totalsdict['hrmean'] = int(wavg(df, 'hr', 'deltat'))
totalsdict['hrmax'] = df['hr'].max().astype(int) totalsdict['hrmax'] = int(df['hr'].max())
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
totalsdict['hrmean'] = 0 totalsdict['hrmean'] = 0
totalsdict['hrmax'] = 0 totalsdict['hrmax'] = 0
@@ -2479,14 +2481,14 @@ def history_view_data(request, userid=0):
a_workouts = g_workouts.filter(workouttype=typeselect) a_workouts = g_workouts.filter(workouttype=typeselect)
meters, hours, minutes, seconds = get_totals(a_workouts) meters, hours, minutes, seconds = get_totals(a_workouts)
totalseconds = 3600 * hours + 60 * minutes + seconds totalseconds = 3600 * hours + 60 * minutes + seconds
ddf = getsmallrowdata_db(columns, ids=[w.id for w in a_workouts]) ddf = getsmallrowdata_pl(columns, ids=[w.id for w in a_workouts])
try: try:
ddf['deltat'] = ddf['time'].diff().clip(lower=0) ddf = ddf.with_columns(pl.col("time").diff().clip(lower_bound=0).alias("deltat"))
except KeyError: except KeyError:
pass pass
ddf = dataprep.clean_df_stats(ddf, workstrokesonly=True, ddf = dataprep.clean_df_stats_pl(ddf, workstrokesonly=True,
ignoreadvanced=True) ignoreadvanced=True)
totalscript, totaldiv = interactive_hr_piechart( totalscript, totaldiv = interactive_hr_piechart(

View File

@@ -16,7 +16,7 @@ from rowers.utils import (
from rowers.celery import result as celery_result from rowers.celery import result as celery_result
from rowers.interactiveplots import * from rowers.interactiveplots import *
from scipy.interpolate import griddata from scipy.interpolate import griddata
from rowers.dataprep import getsmallrowdata_db from rowers.dataprep import getsmallrowdata_db, getsmallrowdata_pl
from rowers.dataprep import timedeltaconv from rowers.dataprep import timedeltaconv
from scipy.special import lambertw from scipy.special import lambertw
from io import BytesIO from io import BytesIO