Great point, @drmaciver, and nice work digging up the answer from Akratics Anonymous, @chelsea
UPDATE 2018: The following table gives the aggday functions. They take the list x
of raw datapoints on a given day and return the aggregated datapoint that is plotted and counts toward the Beeminder goal. In the actual Python code this is a hash of lambda functions. And np
is NumPy.
UPDATE 2019: I added cap1
and made it pseudocode instead of strictly Python.
last : x[-1] # only the most recent datapoint entered that day counts
first : x[0] # only the first datapoint entered that day counts
min : min(x) # count the min of the day (default for weightloss)
max : max(x) # just count the max datapoint
truemean : mean(x) # use the mean of all datapoints
uniqmean : mean(deldups(x)) # mean of the unique values (shrug)
mean : # alias for uniqmean
median : median(x) # has this ever been used for any goal ever?
mode : mode(x) # technically: median of the commonest values
trimmean : trim_mean(x, .1) # another way to discount outliers
sum : sum(x) # what Do More and Do Less goals use
jolly : 1 if x else 0 # deprecated; now an alias for 'binary'
binary : 1 if x else 0 # 1 iff there exist any datapoints
nonzero : 1 if any([i!=0 for i in x]) else 0 # 1 iff any non-0 datapts
triangle : sum(x)*(sum(x)+1)/2 # blog.beeminder.com/triangle
square : sum(x)^2 # requested by DRMacIver
clocky : clocky(x) # sum of differences of pairs, HT @chipmanaged
count : len(x) # ignore values, just count number of datapoints
skatesum : min(rfin, sum(x)) # only count the daily min
cap1 : min(1, sum(x)) # the sum but capped at 1, HT @zedmango
def clocky(x):
if len(x) % 2 != 0: x = x[:-1] # ignore last entry if unpaired
return sum([end-start for [start,end] in partition(x,2,2)])
[Search keyword: “aggday docs”]