Private
Public Access
1
0

calculates age group 2k

This commit is contained in:
Sander Roosendaal
2017-12-12 21:59:28 +01:00
parent 228ea8f980
commit 86a72545e0
5 changed files with 44 additions and 3 deletions

View File

@@ -1,5 +1,7 @@
from utils import lbstoN from utils import lbstoN
import numpy as np import numpy as np
from models import C2WorldClassAgePerformance
import pandas as pd
rowingmetrics = ( rowingmetrics = (
('time',{ ('time',{
@@ -316,3 +318,22 @@ def calc_trimp(df,sex,hrmax,hrmin):
trimp = trimpdata.sum() trimp = trimpdata.sum()
return trimp return trimp
def getagegroup2k(age,sex='male',weightcategory='hwt'):
df = pd.DataFrame(
list(
C2WorldClassAgePerformance.objects.filter(
sex=sex,
weightcategory=weightcategory
).values()
)
)
ages = df['agemin']
powers = df['power']
poly_coefficients = np.polyfit(ages,powers,6)
power = np.polyval(poly_coefficients,age)
return power

View File

@@ -183,7 +183,7 @@ def make_records(readfile):
save_agegroup(female_df,'hwt','female') save_agegroup(female_df,'hwt','female')
save_agegroup(male_df,'hwt','male') save_agegroup(male_df,'hwt','male')
save_agegroup(female_lw_df,'lwt','female') save_agegroup(female_lw_df,'lwt','female')
save_agegroup(female_lw_df,'lwt','male') save_agegroup(male_lw_df,'lwt','male')
class C2WorldClassAgePerformance(models.Model): class C2WorldClassAgePerformance(models.Model):
@@ -218,7 +218,7 @@ class C2WorldClassAgePerformance(models.Model):
unique_together = ('agemin','agemax','sex','weightcategory','distance') unique_together = ('agemin','agemax','sex','weightcategory','distance')
def __unicode__(self): def __unicode__(self):
return self.name+':'+str(self.agemin)+'-'+str(self.agemax)+' ('+str(self.season)+')' return self.sex+' '+self.weightcategory+' '+self.name+':'+str(self.agemin)+'-'+str(self.agemax)+' ('+str(self.season)+')'
# For future Team functionality # For future Team functionality
class Team(models.Model): class Team(models.Model):

View File

@@ -259,6 +259,9 @@
{% endif %} {% endif %}
</div> </div>
{% if worldclasspower %}
World class 2k for your age, weight is {{ worldclasspower }} Watt
{% endif %}
</div> </div>
{% endblock %} {% endblock %}

View File

@@ -263,3 +263,8 @@ def myqueue(queue,function,*args,**kwargs):
return job return job
from datetime import date
def calculate_age(born):
today = date.today()
return today.year - born.year - ((today.month, today.day) < (born.month, born.day))

View File

@@ -710,7 +710,8 @@ def splitstdata(lijst):
from utils import ( from utils import (
geo_distance,serialize_list,deserialize_list,uniqify, geo_distance,serialize_list,deserialize_list,uniqify,
str2bool,range_to_color_hex,absolute,myqueue,get_call str2bool,range_to_color_hex,absolute,myqueue,get_call,
calculate_age
) )
import datautils import datautils
@@ -3220,6 +3221,16 @@ def rankings_view(request,theuser=0,
promember=0 promember=0
if not request.user.is_anonymous(): if not request.user.is_anonymous():
r = getrower(request.user) r = getrower(request.user)
if r.birthdate:
age = calculate_age(r.birthdate)
worldclasspower = int(metrics.getagegroup2k(
age,
sex=r.sex,
weightcategory=r.weightcategory
))
else:
worldclasspower = None
result = request.user.is_authenticated() and ispromember(request.user) result = request.user.is_authenticated() and ispromember(request.user)
if result: if result:
promember=1 promember=1
@@ -3488,6 +3499,7 @@ def rankings_view(request,theuser=0,
'form':form, 'form':form,
'dateform':dateform, 'dateform':dateform,
'deltaform':deltaform, 'deltaform':deltaform,
'worldclasspower':worldclasspower,
'id': theuser, 'id': theuser,
'theuser':uu, 'theuser':uu,
'startdate':startdate, 'startdate':startdate,