def geo_mean(values): """ GIVEN AN ARRAY OF dicts, CALC THE GEO-MEAN ON EACH ATTRIBUTE """ agg = Struct() for d in values: for k, v in d.items(): if v != 0: agg[k] = nvl(agg[k], ZeroMoment.new_instance()) + Math.log(Math.abs(v)) return {k: Math.exp(v.stats.mean) for k, v in agg.items()}
def geo_mean(values): """ GIVEN AN ARRAY OF dicts, CALC THE GEO-MEAN ON EACH ATTRIBUTE """ agg = Dict() for d in values: for k, v in d.items(): if v != 0: agg[k] = coalesce( agg[k], ZeroMoment.new_instance()) + Math.log(Math.abs(v)) return {k: Math.exp(v.stats.mean) for k, v in agg.items()}
def stats(values): """ RETURN LOTS OF AGGREGATES """ if values == None: return None values = values.map(float, includeNone=False) z = ZeroMoment.new_instance(values) s = Struct() for k, v in z.dict.items(): s[k] = v for k, v in ZeroMoment2Stats(z).items(): s[k] = v s.max = MAX(values) s.min = MIN(values) s.median = pyLibrary.stats.median(values, simple=False) s.last = values.last() s.first = values[0] if Math.is_number(s.variance) and not Math.is_nan(s.variance): s.std = sqrt(s.variance) return s
def stats(values): """ RETURN LOTS OF AGGREGATES """ if values == None: return None values = values.map(float, includeNone=False) z = ZeroMoment.new_instance(values) s = Dict() for k, v in z.dict.items(): s[k] = v for k, v in ZeroMoment2Stats(z).items(): s[k] = v s.max = MAX(values) s.min = MIN(values) s.median = pyLibrary.maths.stats.median(values, simple=False) s.last = values.last() s.first = values[0] if Math.is_number(s.variance) and not Math.is_nan(s.variance): s.std = sqrt(s.variance) return s
def sub(self, value): if value == None: return self.total -= ZeroMoment.new_instance([value])