Private
Public Access
1
0

otw chart pandas to polars

This commit is contained in:
2024-04-15 18:53:12 +02:00
parent c1b4c72d43
commit 4eb07335f8
3 changed files with 19 additions and 20 deletions

View File

@@ -81,8 +81,8 @@ def cpfit(powerdf, fraclimit=0.0001, nmax=1000):
p1 = p0
thesecs = powerdf['Delta']
theavpower = powerdf['CP']
thesecs = powerdf['Delta'].to_numpy()
theavpower = powerdf['CP'].to_numpy()
if len(thesecs) >= 4:
try:
@@ -102,7 +102,7 @@ def cpfit(powerdf, fraclimit=0.0001, nmax=1000):
fitpower = fitfunc(p1, fitt)
fitpoints = fitfunc(p1, thesecs)
fitpoints0 = fitpoints.copy()
fitpoints0 = fitpoints
dd = fitpoints-theavpower
ddmin = dd.min()

View File

@@ -996,7 +996,8 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None,
title='', type='water',
wcpower=[], wcdurations=[], cpoverlay=False):
powerdf2 = powerdf[~(powerdf == 0).any(axis=1)].copy()
powerdf2 = powerdf.filter(pl.col("Delta") > 0, pl.col("CP") > 0)
# plot tools
if (promember == 1): # pragma: no cover
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
@@ -1006,11 +1007,9 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None,
x_axis_type = 'log'
deltas = powerdf2['Delta'].apply(lambda x: timedeltaconv(x))
powerdf2['ftime'] = deltas.apply(lambda x: strfdelta(x))
powerdf2['Deltaminutes'] = powerdf2['Delta']/60.
source = ColumnDataSource(
data=powerdf2
powerdf2 = powerdf2.with_columns(
ftime = deltas.apply(lambda x: strfdelta(x)),
Deltaminutes = pl.col("Delta")/60.
)
# there is no Paul's law for OTW
@@ -1071,7 +1070,7 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None,
fitpoweraverage = 0*fitpower
fit_data = pd.DataFrame(dict(
fit_data = pl.DataFrame(dict(
CP=fitpower,
CPmax=ratio*fitpower,
duration=fitt/60.,
@@ -1085,13 +1084,12 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None,
# url = urls,
))
if not title:
title = "Critical Power for "+rowername
chart_dict = {
'data': powerdf2.to_dict("records"),
'fitdata': fit_data.to_dict("records"),
'data': powerdf2.to_dicts(),
'fitdata': fit_data.to_dicts(),
'title': title,
}

View File

@@ -639,7 +639,7 @@ def cpdata(workouts, options):
delta, cpvalue, avgpower, workoutnames, urls = dataprep.fetchcp_new(
r, workouts)
powerdf = pd.DataFrame({
powerdf = pl.DataFrame({
'Delta': delta,
'CP': cpvalue,
'workout': workoutnames,
@@ -648,16 +648,17 @@ def cpdata(workouts, options):
savedata = options.get('savedata',False)
if savedata: # pragma: no cover
return powerdf
return powerdf.to_pandas()
if powerdf.empty: # pragma: no cover
if powerdf.is_empty(): # pragma: no cover
return('', '<p>No valid data found</p>')
powerdf = powerdf[powerdf['CP'] > 0]
powerdf.dropna(axis=0, inplace=True)
powerdf.sort_values(['Delta', 'CP'], ascending=[1, 0], inplace=True)
powerdf.drop_duplicates(subset='Delta', keep='first', inplace=True)
powerdf = powerdf.lazy().filter(pl.col("CP")>0)
powerdf = powerdf.sort(["Delta", "CP"], descending=[False, True])
powerdf = powerdf.unique(subset="Delta", keep="first")
powerdf = powerdf.fill_nan(None).drop_nulls()
powerdf = powerdf.collect()
rowername = r.user.first_name+" "+r.user.last_name