stats
This commit is contained in:
parent
2123977895
commit
687679c6e4
46
saucebrush/stats.py
Normal file
46
saucebrush/stats.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
from saucebrush.filters import Filter
|
||||||
|
|
||||||
|
class StatsFilter(Filter):
|
||||||
|
|
||||||
|
def __init__(self, field, test=None):
|
||||||
|
self._field = field
|
||||||
|
self._test = test if test else lambda x: True
|
||||||
|
|
||||||
|
def process_record(self, record):
|
||||||
|
if self._test(record):
|
||||||
|
self.process_field(record[self._field])
|
||||||
|
return record
|
||||||
|
|
||||||
|
def process_field(self, record):
|
||||||
|
raise NotImplementedError('process_field not defined in ' +
|
||||||
|
self.__class__.__name__)
|
||||||
|
|
||||||
|
def value(self):
|
||||||
|
raise NotImplementedError('value not defined in ' +
|
||||||
|
self.__class__.__name__)
|
||||||
|
|
||||||
|
class Sum(StatsFilter):
|
||||||
|
|
||||||
|
def __init__(self, field, initial=0, **kwargs):
|
||||||
|
super(Sum, self).__init__(field, **kwargs)
|
||||||
|
self._value = initial
|
||||||
|
|
||||||
|
def process_field(self, item):
|
||||||
|
self._value += item or 0
|
||||||
|
|
||||||
|
def value(self):
|
||||||
|
return self._value
|
||||||
|
|
||||||
|
class Average(StatsFilter):
|
||||||
|
|
||||||
|
def __init__(self, field, initial=0, **kwargs):
|
||||||
|
super(Average, self).__init__(field, **kwargs)
|
||||||
|
self._value = initial
|
||||||
|
self._count = 0
|
||||||
|
|
||||||
|
def process_field(self, item):
|
||||||
|
self._value += item or 0
|
||||||
|
self._count += 1
|
||||||
|
|
||||||
|
def value(self):
|
||||||
|
return self._value / self._count
|
Loading…
Reference in New Issue
Block a user