otw chart pandas to polars
This commit is contained in:
@@ -81,8 +81,8 @@ def cpfit(powerdf, fraclimit=0.0001, nmax=1000):
|
|||||||
|
|
||||||
p1 = p0
|
p1 = p0
|
||||||
|
|
||||||
thesecs = powerdf['Delta']
|
thesecs = powerdf['Delta'].to_numpy()
|
||||||
theavpower = powerdf['CP']
|
theavpower = powerdf['CP'].to_numpy()
|
||||||
|
|
||||||
if len(thesecs) >= 4:
|
if len(thesecs) >= 4:
|
||||||
try:
|
try:
|
||||||
@@ -102,7 +102,7 @@ def cpfit(powerdf, fraclimit=0.0001, nmax=1000):
|
|||||||
fitpower = fitfunc(p1, fitt)
|
fitpower = fitfunc(p1, fitt)
|
||||||
|
|
||||||
fitpoints = fitfunc(p1, thesecs)
|
fitpoints = fitfunc(p1, thesecs)
|
||||||
fitpoints0 = fitpoints.copy()
|
fitpoints0 = fitpoints
|
||||||
dd = fitpoints-theavpower
|
dd = fitpoints-theavpower
|
||||||
|
|
||||||
ddmin = dd.min()
|
ddmin = dd.min()
|
||||||
|
|||||||
@@ -996,7 +996,8 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None,
|
|||||||
title='', type='water',
|
title='', type='water',
|
||||||
wcpower=[], wcdurations=[], cpoverlay=False):
|
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
|
# plot tools
|
||||||
if (promember == 1): # pragma: no cover
|
if (promember == 1): # pragma: no cover
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
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'
|
x_axis_type = 'log'
|
||||||
|
|
||||||
deltas = powerdf2['Delta'].apply(lambda x: timedeltaconv(x))
|
deltas = powerdf2['Delta'].apply(lambda x: timedeltaconv(x))
|
||||||
powerdf2['ftime'] = deltas.apply(lambda x: strfdelta(x))
|
powerdf2 = powerdf2.with_columns(
|
||||||
powerdf2['Deltaminutes'] = powerdf2['Delta']/60.
|
ftime = deltas.apply(lambda x: strfdelta(x)),
|
||||||
|
Deltaminutes = pl.col("Delta")/60.
|
||||||
source = ColumnDataSource(
|
|
||||||
data=powerdf2
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# there is no Paul's law for OTW
|
# there is no Paul's law for OTW
|
||||||
@@ -1071,7 +1070,7 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None,
|
|||||||
fitpoweraverage = 0*fitpower
|
fitpoweraverage = 0*fitpower
|
||||||
|
|
||||||
|
|
||||||
fit_data = pd.DataFrame(dict(
|
fit_data = pl.DataFrame(dict(
|
||||||
CP=fitpower,
|
CP=fitpower,
|
||||||
CPmax=ratio*fitpower,
|
CPmax=ratio*fitpower,
|
||||||
duration=fitt/60.,
|
duration=fitt/60.,
|
||||||
@@ -1085,13 +1084,12 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None,
|
|||||||
# url = urls,
|
# url = urls,
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
if not title:
|
if not title:
|
||||||
title = "Critical Power for "+rowername
|
title = "Critical Power for "+rowername
|
||||||
|
|
||||||
chart_dict = {
|
chart_dict = {
|
||||||
'data': powerdf2.to_dict("records"),
|
'data': powerdf2.to_dicts(),
|
||||||
'fitdata': fit_data.to_dict("records"),
|
'fitdata': fit_data.to_dicts(),
|
||||||
'title': title,
|
'title': title,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -639,7 +639,7 @@ def cpdata(workouts, options):
|
|||||||
delta, cpvalue, avgpower, workoutnames, urls = dataprep.fetchcp_new(
|
delta, cpvalue, avgpower, workoutnames, urls = dataprep.fetchcp_new(
|
||||||
r, workouts)
|
r, workouts)
|
||||||
|
|
||||||
powerdf = pd.DataFrame({
|
powerdf = pl.DataFrame({
|
||||||
'Delta': delta,
|
'Delta': delta,
|
||||||
'CP': cpvalue,
|
'CP': cpvalue,
|
||||||
'workout': workoutnames,
|
'workout': workoutnames,
|
||||||
@@ -648,16 +648,17 @@ def cpdata(workouts, options):
|
|||||||
|
|
||||||
savedata = options.get('savedata',False)
|
savedata = options.get('savedata',False)
|
||||||
if savedata: # pragma: no cover
|
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>')
|
return('', '<p>No valid data found</p>')
|
||||||
|
|
||||||
|
|
||||||
powerdf = powerdf[powerdf['CP'] > 0]
|
powerdf = powerdf.lazy().filter(pl.col("CP")>0)
|
||||||
powerdf.dropna(axis=0, inplace=True)
|
powerdf = powerdf.sort(["Delta", "CP"], descending=[False, True])
|
||||||
powerdf.sort_values(['Delta', 'CP'], ascending=[1, 0], inplace=True)
|
powerdf = powerdf.unique(subset="Delta", keep="first")
|
||||||
powerdf.drop_duplicates(subset='Delta', keep='first', inplace=True)
|
powerdf = powerdf.fill_nan(None).drop_nulls()
|
||||||
|
powerdf = powerdf.collect()
|
||||||
|
|
||||||
rowername = r.user.first_name+" "+r.user.last_name
|
rowername = r.user.first_name+" "+r.user.last_name
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user