Private
Public Access
1
0

fix performance chart to polars

This commit is contained in:
2024-04-14 20:44:24 +02:00
parent 30fdabd2cd
commit 2d2923362f

View File

@@ -19,6 +19,7 @@ import rowers.dataprep as dataprep
from rowers.dataprep import rdata
import rowers.utils as utils
import polars as pl
import pytz
from rowers.rower_rules import ispromember
from polars.exceptions import ColumnNotFoundError
@@ -479,7 +480,7 @@ def interactive_forcecurve(theworkouts):
def weightfromrecord(row,metricchoice):
vv = row[metricchoice]
vv = row[metricchoice][0]
if vv > 0:
return vv
if metricchoice == 'rscore': # pragma: no cover
@@ -505,18 +506,19 @@ def getfatigues(
lambda_c = 2/(kfitness+1)
nrdays = (enddate-startdate).days
for i in range(nrdays+1):
date = startdate+datetime.timedelta(days=i)
datekey = date.strftime('%Y-%m-%d')
weight = 0
try:
df2 = df.loc[date.date()]
df2 = df.filter(pl.col("date") == date.date())
if type(df2) == pd.Series: # pragma: no cover
if type(df2) == pl.Series: # pragma: no cover
weight += weightfromrecord(df2,metricchoice)
else:
for index, row in df2.iterrows():
for row in df2.iter_slices(n_rows=1):
weight += weightfromrecord(row,metricchoice)
except KeyError:
pass
@@ -693,8 +695,8 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue=
}
records.append(dd)
df = pd.DataFrame.from_records(records)
if df.empty: # pragma: no cover
df = pl.from_records(records)
if df.is_empty(): # pragma: no cover
return ['', 'No Data', 0, 0, 0, outids]
markerworkouts = Workout.objects.filter(
@@ -727,7 +729,7 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue=
kfatigue, kfitness
)
df = pd.DataFrame({
df = pl.DataFrame({
'date': dates,
'testpower': testpower,
'testduration': testduration,
@@ -742,19 +744,19 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue=
endform = endfitness-endfatigue
if modelchoice == 'banister': # pragma: no cover
df['fatigue'] = k2*df['fatigue']
df['fitness'] = p0+k1*df['fitness']
df = df.with_columns((pl.col("fatigue")*k2))
df = df.with_columns((p0+pl.col("fitness")*k1))
df['form'] = df['fitness']-df['fatigue']
df = df.with_columns((pl.col("fitness")-pl.col("fatigue")).alias("form"))
df = df.sort("date")
df = df.group_by('date').max()
startdate = startdate.replace(tzinfo=None)
startdate = pytz.utc.localize(startdate)
df.sort_values(['date'], inplace=True)
df = df.groupby(['date']).max()
df['date'] = df.index.values
mask = df['date'] > np.datetime64(startdate.astimezone(
tz=datetime.timezone.utc).replace(tzinfo=None))
df = df.loc[mask]
df = df.filter(pl.col("date") > startdate)
df2 = pd.DataFrame({
df2 = pl.DataFrame({
"testpower" :df['testpower'],
"testduration":df['testduration'].apply(
lambda x: totaltime_sec_to_string(x, shorten=True)),
@@ -762,14 +764,13 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue=
"fatigue":df['fatigue'],
"form":df['form'],
"impulse":df['impulse'],
"date": df['date'].map(lambda x: x.strftime('%Y-%m-%d')),
"date": df['date'].apply(lambda x: x.strftime('%Y-%m-%d')),
})
df2 = df2.fill_nan(0)
df2.fillna(value=0, inplace=True)
data_dict = df2.to_dict("records")
data_dict = df2.to_dicts()
chart_data = {
'data': data_dict,