flex chart pandas to polars
This commit is contained in:
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user