Private
Public Access
1
0

flex chart pandas to polars

This commit is contained in:
2024-04-16 14:14:00 +02:00
parent 9568b6d132
commit 0936d4cecc

View File

@@ -1694,10 +1694,10 @@ def interactive_flexchart_stacked(id, r, xparam='time',
row = Workout.objects.get(id=id)
if ispromember(r.user):
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id], doclean=True,
rowdata = dataprep.getsmallrowdata_pl(columns, ids=[id], doclean=True,
workstrokesonly=False, for_chart=True)
else:
rowdata = dataprep.getsmallrowdata_db(columns_basic, ids=[id], doclean=True,
rowdata = dataprep.getsmallrowdata_pl(columns_basic, ids=[id], doclean=True,
workstrokesonly=False, for_chart=True)
if r.usersmooth > 1: # pragma: no cover
@@ -1706,65 +1706,69 @@ def interactive_flexchart_stacked(id, r, xparam='time',
if metricsdicts[column]['maysmooth']:
nrsteps = int(log2(r.usersmooth))
for i in range(nrsteps):
rowdata[column] = utils.ewmovingaverage(
rowdata[column], 5)
rowdata = rowdata.with_columns(
utils.ewmovingaverage(
rowdata[column], 5).alias(column)
)
except KeyError:
pass
if len(rowdata) < 2:
if ispromember(r.user):
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id],
rowdata = dataprep.getsmallrowdata_pl(columns, ids=[id],
doclean=False,
workstrokesonly=False,
for_chart=True)
else:
rowdata = dataprep.getsmallrowdata_db(columns_basic, ids=[id],
rowdata = dataprep.getsmallrowdata_pl(columns_basic, ids=[id],
doclean=False,
workstrokesonly=False,
for_chart=True)
if rowdata.empty:
if rowdata.is_empty():
return "", "No valid data"
try:
tseconds = rowdata.loc[:, 'time']
tseconds = rowdata['time']
except KeyError: # pragma: no cover
return '', 'No time data - cannot make flex plot'
try:
rowdata['x1'] = rowdata.loc[:, xparam]
rowdata = rowdata.with_columns(x1=pl.col(xparam))
except KeyError: # pragma: no cover
rowdata['x1'] = 0*rowdata.loc[:, 'time']
rowdata = rowdata.with_columns(x1=pl.lit(0))
try:
rowdata['y1'] = rowdata.loc[:, yparam1]
rowdata = rowdata.with_columns(y1=pl.col(yparam1))
except KeyError: # pragma: no cover
rowdata['y1'] = 0*rowdata.loc[:, 'time']
rowdata[yparam1] = rowdata['y1']
try: # pragma: no cover
rowdata['y2'] = rowdata.loc[:, yparam2]
except KeyError:
rowdata['y2'] = 0*rowdata.loc[:, 'time']
rowdata[yparam2] = rowdata['y2']
rowdata = rowdata.with_columns(y1=pl.col("time"))
rowdata = rowdata.with_columns((pl.col("y1")).alias(yparam1))
try:
rowdata['y3'] = rowdata.loc[:, yparam3]
rowdata = rowdata.with_columns(y2=pl.col(yparam2))
except KeyError: # pragma: no cover
rowdata['y3'] = 0*rowdata.loc[:, 'time']
rowdata[yparam3] = rowdata['y3']
rowdata = rowdata.with_columns(y2=pl.col("time"))
rowdata = rowdata.with_columns((pl.col("y2")).alias(yparam2))
try:
rowdata['y4'] = rowdata.loc[:, yparam4]
rowdata = rowdata.with_columns(y1=pl.col(yparam3))
except KeyError: # pragma: no cover
rowdata['y4'] = 0*rowdata.loc[:, 'time']
rowdata[yparam4] = rowdata['y4']
rowdata = rowdata.with_columns(y3=pl.col("time"))
rowdata = rowdata.with_columns((pl.col("y3")).alias(yparam3))
try:
rowdata = rowdata.with_columns(y4=pl.col(yparam1))
except KeyError: # pragma: no cover
rowdata = rowdata.with_columns(y4=pl.col("time"))
rowdata = rowdata.with_columns((pl.col("y4")).alias(yparam4))
# replace nans
rowdata.fillna(value=0, inplace=True)
rowdata = rowdata.fill_nan(0)
data_dict = rowdata.to_dict("records")
data_dict = rowdata.to_dicts()
metrics_list = [{'name': name, 'rowingmetrics':d } for name, d in metrics.rowingmetrics]
@@ -1794,7 +1798,6 @@ def interactive_flex_chart2(id, r, promember=0,
trendline=False,
mode='rower'):
columns = [name for name, d in metrics.rowingmetrics]
columns_basic = [name for name, d in metrics.rowingmetrics if d['group'] == 'basic']
columns = columns + ['spm', 'driveenergy', 'distance']
@@ -1802,10 +1805,10 @@ def interactive_flex_chart2(id, r, promember=0,
datadf = pd.DataFrame()
if promember:
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id], doclean=True,
rowdata = dataprep.getsmallrowdata_pl(columns, ids=[id], doclean=True,
workstrokesonly=workstrokesonly, for_chart=True)
else:
rowdata = dataprep.getsmallrowdata_db(columns_basic, ids=[id], doclean=True,
rowdata = dataprep.getsmallrowdata_pl(columns_basic, ids=[id], doclean=True,
workstrokesonly=workstrokesonly, for_chart=True)
if r.usersmooth > 1: # pragma: no cover
@@ -1814,19 +1817,21 @@ def interactive_flex_chart2(id, r, promember=0,
if metricsdicts[column]['maysmooth']:
nrsteps = int(log2(r.usersmooth))
for i in range(nrsteps):
rowdata[column] = utils.ewmovingaverage(
rowdata[column], 5)
rowdata = rowdata.with_columns(
(utils.ewmovingaverage(
rowdata[column], 5)).alias(column)
)
except KeyError:
pass
try:
if len(rowdata) < 2:
if promember:
rowdata = dataprep.getsmallrowdata_db(columns, ids=[id],
rowdata = dataprep.getsmallrowdata_pl(columns, ids=[id],
doclean=False,
workstrokesonly=False, for_chart=True)
else:
rowdata = dataprep.getsmallrowdata_db(columns_basic, ids=[id], doclean=False,
rowdata = dataprep.getsmallrowdata_pl(columns_basic, ids=[id], doclean=False,
workstrokesonly=False, for_chart=True)
workstrokesonly = False
except (KeyError, TypeError): # pragma: no cover
@@ -1845,67 +1850,56 @@ def interactive_flex_chart2(id, r, promember=0,
try:
_ = rowdata['driveenergy'].mean()
except (KeyError, TypeError):
rowdata['driveenergy'] = 500.
rowdata = rowdata.with_columns(driveenergy=pl.lit(500))
# test if we have power
try:
_ = rowdata['power'].mean()
except (KeyError, TypeError):
rowdata['power'] = 50.
rowdata = rowdata.with_columns(power=pl.lit(50))
# replace nans
rowdata.fillna(value=0, inplace=True)
rowdata = rowdata.fill_nan(0)
row = Workout.objects.get(id=id)
if rowdata.empty:
if rowdata.is_empty():
return "", "No valid data", workstrokesonly
workoutstatesrest = [3]
if workstrokesonly: # pragma: no cover
try:
rowdata = rowdata[~rowdata['workoutstate'].isin(workoutstatesrest)]
rowdata = rowdata.filter(~pl.col("workoutstate").is_in(workoutstatesrest))
except KeyError:
pass
try:
tseconds = rowdata.loc[:, 'time']
tseconds = rowdata['time']
except KeyError: # pragma: no cover
return '', 'No time data - cannot make flex plot', workstrokesonly
try:
rowdata['x1'] = rowdata.loc[:, xparam]
rowdata = rowdata.with_columns(x1 = pl.col(xparam))
except KeyError: # pragma: no cover
rowdata['x1'] = 0*rowdata.loc[:, 'time']
rowdata = rowdata.with_columns(x1 = pl.col("time"))
try:
rowdata['y1'] = rowdata.loc[:, yparam1]
rowdata = rowdata.with_columns(y1 = pl.col(yparam1))
except KeyError: # pragma: no cover
rowdata['y1'] = 0*rowdata.loc[:, 'time']
rowdata[yparam1] = rowdata['y1']
rowdata = rowdata.with_columns(y1 = pl.col("time"))
rowdata = rowdata.with_columns(yparam1 = pl.col("y1"))
if yparam2 != 'None':
try:
rowdata['y2'] = rowdata.loc[:, yparam2]
rowdata = rowdata.with_columns(y2 = pl.col(yparam2))
except KeyError: # pragma: no cover
rowdata['y2'] = 0*rowdata.loc[:, 'time']
rowdata[yparam2] = rowdata['y2']
else: # pragma: no cover
rowdata['y2'] = rowdata['y1']
rowdata = rowdata.with_columns(y2 = pl.col("time"))
rowdata = rowdata.with_columns(yparam2 = pl.col("y2"))
if xparam == 'time':
xaxmax = tseconds.max()
xaxmin = tseconds.min()
elif xparam == 'distance' or xparam == 'cumdist':
xaxmax = rowdata['x1'].max()
xaxmin = rowdata['x1'].min()
else: # pragma: no cover
try:
xaxmax = get_yaxmaxima(r, xparam, mode)
xaxmin = get_yaxminima(r, xparam, mode)
except KeyError:
xaxmax = rowdata['x1'].max()
xaxmin = rowdata['x1'].min()
rowdata = rowdata.with_columns(y2=pl.col("y1"))
# average values
if xparam != 'time':
@@ -1921,20 +1915,23 @@ def interactive_flex_chart2(id, r, promember=0,
try:
rowdata['xname'] = axlabels[xparam]
rowdata = rowdata.with_columns((pl.lit(axlabels[xparam])).alias("xname"))
except KeyError: # pragma: no cover
rowdata['xname'] = xparam
rowdata = rowdata.with_columns((pl.lit(xparam)).alias("xname"))
try:
rowdata['yname1'] = axlabels[yparam1]
rowdata = rowdata.with_columns((pl.lit(axlabels[yparam1])).alias("yname1"))
except KeyError: # pragma: no cover
rowdata['yname1'] = yparam1
rowdata = rowdata.with_columns((pl.lit(yparam1)).alias("yname1"))
if yparam2 != 'None':
try:
rowdata['yname2'] = axlabels[yparam2]
rowdata = rowdata.with_columns((pl.lit(axlabels[yparam2])).alias("yname2"))
except KeyError: # pragma: no cover
rowdata['yname2'] = yparam2
rowdata = rowdata.with_columns((pl.lit(yparam2)).alias("yname2"))
else: # pragma: no cover
rowdata['yname2'] = rowdata['yname1']
rowdata = rowdata.with_columns((pl.col("yname1")).alias("yname2"))
def func(x, a, b):
return a*x+b
@@ -1944,13 +1941,15 @@ def interactive_flex_chart2(id, r, promember=0,
try:
popt, pcov = optimize.curve_fit(func, x1, y1)
ytrend = func(x1, popt[0], popt[1])
rowdata['ytrend'] = ytrend
rowdata = rowdata.with_columns(ytrend=ytrend)
except TypeError: # pragma: no cover
rowdata['ytrend'] = y1
rowdata = rowdata.with_columns(ytrend=pl.col("y1"))
rowdata.replace([np.inf, -np.inf], np.nan, inplace=True)
rowdata.dropna(axis=1, how='all', inplace=True)
data_dict = rowdata.to_dict("records")
#rowdata = rowdata.replace([np.inf, -np.inf], np.nan)
rowdata = rowdata.fill_nan(None).drop_nulls()
data_dict = rowdata.to_dicts()
metrics_list = [{'name': name, 'rowingmetrics':d } for name, d in metrics.rowingmetrics]