From b6202369c733cc54e640b57e822cc2544328582f Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 3 Jun 2023 21:20:02 +0200 Subject: [PATCH] working on 3.9 --- boatmovers/apps.py | 3 +++ django_extensions/apps.py | 8 ++++++++ rowers/apps.py | 3 +++ rowers/dataroutines.py | 17 +++++++++++++---- rowers/interactiveplots.py | 27 ++++++++++++++------------- rowers/templates/flexchart3otw.html | 4 ++-- rowers/views/analysisviews.py | 27 +++++++++++++++++++++------ rowers/views/workoutviews.py | 2 ++ 8 files changed, 66 insertions(+), 25 deletions(-) create mode 100644 django_extensions/apps.py diff --git a/boatmovers/apps.py b/boatmovers/apps.py index eb3806d9..9e5fbbb2 100644 --- a/boatmovers/apps.py +++ b/boatmovers/apps.py @@ -1,6 +1,9 @@ from django.apps import AppConfig +import os +from django.conf import settings class BoatmoversConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'boatmovers' + path = os.path.join(settings.BASE_DIR, 'boatmovers') diff --git a/django_extensions/apps.py b/django_extensions/apps.py new file mode 100644 index 00000000..88077107 --- /dev/null +++ b/django_extensions/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig +import os +from django.conf import settings + + +class DjangoExtensionsConfig(AppConfig): + name = 'django_extensions' + path = os.path.join(settings.BASE_DIR, 'django_extensions') diff --git a/rowers/apps.py b/rowers/apps.py index 82adbc07..94f7b677 100644 --- a/rowers/apps.py +++ b/rowers/apps.py @@ -1,8 +1,11 @@ from django.apps import AppConfig +import os +from django.conf import settings # Store metadata for the app class RowersConfig(AppConfig): name = 'rowers' + path = os.path.join(settings.BASE_DIR, 'rowers') diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index 94398d17..1d439969 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -1369,6 +1369,7 @@ def read_cols_df_sql(ids, columns, convertnewtons=True): extracols = [] + columns = list(columns) + ['distance', 'spm', 'workoutid'] columns = [x for x in columns if x != 'None'] columns = list(set(columns)) @@ -1381,27 +1382,35 @@ def read_cols_df_sql(ids, columns, convertnewtons=True): elif len(ids) == 1: # pragma: no cover try: filename = 'media/strokedata_{id}.parquet.gz'.format(id=ids[0]) - df = pd.read_parquet(filename, columns=columns) + pq_file = pq.ParquetDataset(filename) + columns_in_file = [c for c in columns if c in pq_file.schema.names] + df = pd.read_parquet(filename, columns=columns_in_file) except OSError: rowdata, row = getrowdata(id=ids[0]) if rowdata and len(rowdata.df): _ = dataprep(rowdata.df, id=ids[0], bands=True, otwpower=True, barchart=True) - df = pd.read_parquet(filename, columns=columns) + pq_file = pq.ParquetDataset(filename) + columns_in_file = [c for c in columns if c in pq_file.schema.names] + df = pd.read_parquet(filename, columns=columns_in_file) else: data = [] filenames = [ 'media/strokedata_{id}.parquet.gz'.format(id=id) for id in ids] for id, f in zip(ids, filenames): try: - df = pd.read_parquet(f, columns=columns) + pq_file = pq.ParquetDataset(f) + columns_in_file = [c for c in columns if c in pq_file.schema.names] + df = pd.read_parquet(f, columns=columns_in_file) data.append(df) except (OSError, IndexError, ArrowInvalid): rowdata, row = getrowdata(id=id) if rowdata and len(rowdata.df): # pragma: no cover _ = dataprep(rowdata.df, id=id, bands=True, otwpower=True, barchart=True) - df = pd.read_parquet(f, columns=columns) + pq_file = pq.ParquetDataset(f) + columns_in_file = [c for c in columns if c in pq_file.schema.names] + df = pd.read_parquet(f, columns=columns_in_file) data.append(df) try: diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 067c47d9..2603e2d4 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -4853,18 +4853,17 @@ def interactive_multiflex(datadf, xparam, yparam, groupby, extratitle='', TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap' if groupby != 'date': - hover = HoverTool(names=['data'], - tooltips=[ - (groupby, '@groupval{1.1}'), - (xparamname, '@x{1.1}'), - (yparamname, '@y') + hover = HoverTool(tooltips=[ + (groupby, '@groupval{1.1}'), + (xparamname, '@x{1.1}'), + (yparamname, '@y') ]) else: # pragma: no cover - hover = HoverTool(names=['data'], - tooltips=[ - (groupby, '@groupval'), - (xparamname, '@x{1.1}'), - (yparamname, '@y'), + hover = HoverTool( + tooltips=[ + (groupby, '@groupval'), + (xparamname, '@x{1.1}'), + (yparamname, '@y'), ]) hover.mode = 'mouse' @@ -6851,7 +6850,7 @@ def interactive_otw_advanced_pace_chart(id=0, promember=0): ) plot.title.text = row.name - plot.title.text_font_size = value("1.2em") + #plot.title.text_font_size = value("1.2em") plot.xaxis.axis_label = "Time" plot.yaxis.axis_label = "Pace (/500m)" plot.xaxis[0].formatter = DatetimeTickFormatter( @@ -7236,8 +7235,10 @@ def interactive_zoneschart(rower, data, startdate, enddate, trainingzones='hr', p.extra_y_ranges["yax2"] = Range1d(start=0, end=y2rangemax) p.line('date', 'hours', source=source2, y_range_name="yax2", color="black", width=5) - p.circle('date', 'hours', source=source2, y_range_name="yax2", color="black", size=10, - legend_label='Hours') + p.circle('date', 'hours', source=source2, y_range_name="yax2", color="black", size=10) + +# p.circle('date', 'hours', source=source2, y_range_name="yax2", color="black", size=10, +# legend_label='Hours') p.add_layout(LinearAxis(y_range_name="yax2", axis_label='Hours'), 'right') diff --git a/rowers/templates/flexchart3otw.html b/rowers/templates/flexchart3otw.html index 5c965572..19f7cbeb 100644 --- a/rowers/templates/flexchart3otw.html +++ b/rowers/templates/flexchart3otw.html @@ -11,8 +11,8 @@ {{ js_res | safe }} {{ css_res| safe }} - - + + diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index 46366473..e98a5f3f 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -414,11 +414,26 @@ def trendflexdata(workouts, options, userid=0): groups = datadf.groupby(pd.cut(datadf['days ago'], bins, labels=False)) - xvalues = groups.mean()[xparam] - yvalues = groups.mean()[yparam] - xerror = groups.std()[xparam] - yerror = groups.std()[yparam] - groupsize = groups.count()[xparam] + xvalues = [] + yvalues = [] + xerror = [] + yerror = [] + groupsize = [] + groupval = [] + for key, item in groups: + xvalues.append(groups.get_group(key)[xparam].mean()) + yvalues.append(groups.get_group(key)[yparam].mean()) + xerror.append(groups.get_group(key)[xparam].std()) + yerror.append(groups.get_group(key)[yparam].std()) + groupsize.append(len(groups.get_group(key)[xparam])) + groupval.append(groups.get_group(key)[groupby].mean()) + + + xvalues = pd.Series(xvalues) + yvalues = pd.Series(yvalues) + xerror = pd.Series(xerror) + yerror = pd.Series(yerror) + groupsize = pd.Series(groupsize) mask = groupsize <= min([0.01*groupsize.sum(), 0.2*groupsize.mean()]) xvalues.loc[mask] = np.nan @@ -458,7 +473,7 @@ def trendflexdata(workouts, options, userid=0): if groupby != 'date': try: - df['groupval'] = groups.mean()[groupby] + df['groupval'] = pd.Series(groupval) df.loc[mask, 'groupval'] = np.nan groupcols = df['groupval'] diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 42641229..2f59a0ab 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -3859,6 +3859,8 @@ def workout_stats_view(request, id=0, message="", successmessage=""): except KeyError: # pragma: no cover pass + datadf = datadf.select_dtypes([np.number]) + # Create a dict with correlation values cor = datadf.corr(method='spearman') cor.fillna(value=0, inplace=True)