Source code for draugr.metrics.metric_summary

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = "Christian Heider Nielsen"

import statistics

__all__ = ["MetricSummary"]


[docs]class MetricSummary: """description"""
[docs] def __init__(self): self._values = [] self.length = 0 self.running_mean = 0 self.running_variance = 0
[docs] def append(self, val): """ :param val: :type val:""" self._values.append(val) self.length += 1
@property def values(self): """ :return: :rtype:""" return self._values
[docs] def moving_average(self, window_size=100): """ :param window_size: :type window_size: :return: :rtype:""" if self.length >= window_size: return statistics.mean(self._values[-window_size:]) elif self.length > 0: return statistics.mean(self._values) else: return 0
[docs] def running_average(self, data): """ Computes new running mean and variances. :param data: New piece of data. :return: New mean and variance values.""" mean, var, steps = self.running_mean, self.running_variance, self.length current_x = statistics.mean(data) new_mean = mean + (current_x - mean) / (steps + 1) new_variance = var + (current_x - new_mean) * (current_x - mean) self.running_mean, self.running_variance = new_mean, new_variance return new_mean, new_variance
def __len__(self): return len(self._values)
if __name__ == "__main__": MetricSummary()