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)