Private
Public Access
1
0

dot size multiflex

This commit is contained in:
Sander Roosendaal
2017-07-08 16:05:13 +02:00
parent e1f9dbaeb0
commit e7e97dfef3
2 changed files with 102 additions and 190 deletions

View File

@@ -73,14 +73,15 @@ def errorbar(fig, x, y, source=ColumnDataSource(),
xerr=False, yerr=False, color='red',
point_kwargs={}, error_kwargs={}):
fig.circle(x, y, source=source, name='data',color=color, **point_kwargs)
fig.circle(x, y, source=source, name='data',color=color,
**point_kwargs)
xvalues = source.data[x]
yvalues = source.data[y]
xerrvalues = source.data['xerror']
yerrvalues = source.data['yerror']
try:
a = xvalues[0]+1
@@ -1182,6 +1183,8 @@ def interactive_multiflex(datadf,xparam,yparam,groupby,extratitle='',
if groupby == 'workoutid':
groupname = 'Workout'
elif groupby == 'date':
groupname = 'Date'
else:
groupname = axlabels[groupby]
@@ -1264,7 +1267,7 @@ def interactive_multiflex(datadf,xparam,yparam,groupby,extratitle='',
point_kwargs={
'line_color':None,
'legend':yparamname,
'size':10,
'size':"groupsize",
})
if xparam == 'workoutid':
@@ -1301,7 +1304,7 @@ def interactive_multiflex(datadf,xparam,yparam,groupby,extratitle='',
else:
hover.tooltips = OrderedDict([
(groupby,'@groupval'),
])
])
hover.mode = 'mouse'

View File

@@ -3469,95 +3469,6 @@ def multiflex_view(request,userid=0,
ids = [int(w.id) for w in workouts]
request.session['ids'] = ids
fieldlist,fielddict = dataprep.getstatsfields()
fieldlist = [xparam,yparam,groupby,
'workoutid','spm','driveenergy',
'workoutstate']
# prepare data frame
datadf = dataprep.read_cols_df_sql(ids,fieldlist)
datadf = dataprep.clean_df_stats(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.dropna(axis=0,how='any',inplace=True)
datemapping = {
w.id:w.date for w in workouts
}
datadf['date'] = datadf['workoutid']
datadf['date'].replace(datemapping,inplace=True)
today = datetime.date.today()
datadf['days ago'] = map(lambda x : x.days, datadf.date - today)
if groupby != 'date':
bins = np.arange(datadf[groupby].min()-binsize,
datadf[groupby].max()+binsize,
binsize)
groups = datadf.groupby(pd.cut(datadf[groupby],bins,labels=False))
else:
bins = np.arange(datadf['days ago'].min()-binsize,
datadf['days ago'].max()+binsize,
binsize,
)
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]
df = pd.DataFrame({
xparam:xvalues,
yparam:yvalues,
'xerror':xerror,
'yerror':yerror,
})
if groupby != 'date':
try:
df['groupval'] = groups.mean()[groupby],
except ValueError:
df['groupval'] = groups.mean()[groupby].fillna(value=0)
else:
try:
df['groupval'] = [x.strftime("%Y-%m-%d") for x in groups.min()[groupby]]
except AttributeError:
df['groupval'] = groups.mean()['days ago'].fillna(value=0)
if userid == 0:
extratitle = ''
else:
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
script,div = interactive_multiflex(df,xparam,yparam,
groupby,
extratitle=extratitle,
ploterrorbars=ploterrorbars)
return render(request,'multiflex.html',
{'interactiveplot':script,
'the_div':div,
'chartform':chartform,
'userid':userid,
'teams':get_my_teams(request.user),
})
else:
return HttpResponse("Form is not valid")
elif request.method == 'POST' and 'ids' in request.session:
@@ -3602,105 +3513,103 @@ def multiflex_view(request,userid=0,
int(w.id): w.__unicode__() for w in workouts
}
fieldlist,fielddict = dataprep.getstatsfields()
fieldlist = [xparam,yparam,groupby,
'workoutid','spm','driveenergy',
'workoutstate']
# prepare data frame
datadf = dataprep.read_cols_df_sql(ids,fieldlist)
datadf = dataprep.clean_df_stats(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.dropna(axis=0,how='any',inplace=True)
datemapping = {
w.id:w.date for w in workouts
}
datadf['date'] = datadf['workoutid']
datadf['date'].replace(datemapping,inplace=True)
today = datetime.date.today()
datadf['days ago'] = map(lambda x : x.days, datadf.date - today)
if groupby != 'date':
bins = np.arange(datadf[groupby].min()-binsize,
datadf[groupby].max()+binsize,
binsize)
groups = datadf.groupby(pd.cut(datadf[groupby],bins,
labels=False))
else:
bins = np.arange(datadf['days ago'].min()-binsize,
datadf['days ago'].max()+binsize,
binsize,
)
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]
df = pd.DataFrame({
xparam:xvalues,
yparam:yvalues,
'xerror':xerror,
'yerror':yerror,
})
if groupby == 'pace':
df['groupval'] = groups.mean()[groupby].fillna(value=0)/1000.
elif groupby != 'date':
try:
df['groupval'] = groups.mean()[groupby],
except ValueError:
df['groupval'] = groups.mean()[groupby].fillna(value=0)
else:
try:
df['groupval'] = [x.strftime("%Y-%m-%d") for x in groups.min()[groupby]]
except AttributeError:
df['groupval'] = groups.mean()['days ago'].fillna(value=0)
if userid == 0:
extratitle = ''
else:
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
script,div = interactive_multiflex(df,xparam,yparam,
groupby,
extratitle=extratitle,
ploterrorbars=ploterrorbars)
return render(request,'multiflex.html',
{'interactiveplot':script,
'the_div':div,
'chartform':chartform,
'userid':userid,
'teams':get_my_teams(request.user),
})
else:
return HttpResponse("invalid form")
fieldlist,fielddict = dataprep.getstatsfields()
fieldlist = [xparam,yparam,groupby,
'workoutid','spm','driveenergy',
'workoutstate']
# prepare data frame
datadf = dataprep.read_cols_df_sql(ids,fieldlist)
datadf = dataprep.clean_df_stats(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.dropna(axis=0,how='any',inplace=True)
datemapping = {
w.id:w.date for w in workouts
}
datadf['date'] = datadf['workoutid']
datadf['date'].replace(datemapping,inplace=True)
today = datetime.date.today()
datadf['days ago'] = map(lambda x : x.days, datadf.date - today)
if groupby != 'date':
bins = np.arange(datadf[groupby].min()-binsize,
datadf[groupby].max()+binsize,
binsize)
groups = datadf.groupby(pd.cut(datadf[groupby],bins,labels=False))
else:
bins = np.arange(datadf['days ago'].min()-binsize,
datadf['days ago'].max()+binsize,
binsize,
)
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]
#groupsize = 15.*np.log10(1+99.*groupsize/float(max(groupsize)))
groupsize = 30.*np.sqrt(groupsize/float(max(groupsize)))
df = pd.DataFrame({
xparam:xvalues,
yparam:yvalues,
'xerror':xerror,
'yerror':yerror,
'groupsize':groupsize,
})
if groupby != 'date':
try:
df['groupval'] = groups.mean()[groupby],
except ValueError:
df['groupval'] = groups.mean()[groupby].fillna(value=0)
else:
try:
df['groupval'] = [x.strftime("%Y-%m-%d") for x in groups.min()[groupby]]
except AttributeError:
df['groupval'] = groups.mean()['days ago'].fillna(value=0)
if userid == 0:
extratitle = ''
else:
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
script,div = interactive_multiflex(df,xparam,yparam,
groupby,
extratitle=extratitle,
ploterrorbars=ploterrorbars)
return render(request,'multiflex.html',
{'interactiveplot':script,
'the_div':div,
'chartform':chartform,
'userid':userid,
'teams':get_my_teams(request.user),
})
else:
url = reverse(user_multiflex_select)
return HttpResponseRedirect(url)