otw chart pandas to polars
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user