diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 1f8a073f..6f2b42e0 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -328,7 +328,7 @@ def interactive_workouttype_piechart(workouts): def interactive_boxchart(datadf, fieldname, extratitle='', spmmin=0, spmmax=0, workmin=0, workmax=0): - if datadf.empty: # pragma: no cover + if datadf.is_empty(): # pragma: no cover return '', 'It looks like there are no data matching your filter' columns = datadf.columns @@ -339,20 +339,17 @@ def interactive_boxchart(datadf, fieldname, extratitle='', if 'date' not in columns: # pragma: no cover return '', 'Not enough data' - try: - datadf.date = datadf.date.apply(lambda x:x.strftime("%Y-%m-%d")) - except AttributeError: - datadf.date = "2000-01-01" + datadf = datadf.with_columns((pl.col("date").apply(lambda x:x.strftime("%Y-%m-%d"))).alias("date")) + datadf = datadf.with_columns((pl.col(fieldname)).alias("value")) - datadf['value'] = datadf[fieldname] - data_dict = datadf.to_dict("records") + data_dict = datadf.to_dicts() boxplot_data = { "metric": metricsdicts[fieldname]["verbose_name"], "data": data_dict } - script, div = get_chart("/boxplot", boxplot_data) + script, div = get_chart("/boxplot", boxplot_data, debug=False) return script, div diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 96809cac..0873ae7a 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index 391d92ad..414430c0 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -927,28 +927,18 @@ def boxplotdata(workouts, options): ids = [w.id for w in workouts] # prepare data frame - datadf, extracols = dataprep.read_cols_df_sql(ids, fieldlist) + datadf = getsmallrowdata_pl(fieldlist, ids) - datadf = dataprep.clean_df_stats(datadf, workstrokesonly=workstrokesonly) + datadf = dataprep.clean_df_stats_pl(datadf, workstrokesonly=workstrokesonly) - datadf = dataprep.filter_df(datadf, 'spm', spmmin, - largerthan=True) - datadf = dataprep.filter_df(datadf, 'spm', spmmax, - largerthan=False) - datadf = dataprep.filter_df(datadf, 'driveenergy', workmin, - largerthan=True) - datadf = dataprep.filter_df(datadf, 'driveneergy', workmax, - largerthan=False) + datadf = datadf.filter( + pl.col("spm")>spmmin, + pl.col("spm")workmin, + pl.col("driveenergy")