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