Source code for honeybee_ph_utils.histogram

# -*- coding: utf-8 -*-
# -*- Python Version: 2.7 -*-

"""Utility function for creating a simple Histrogram from a data set."""

try:
    pass
except:
    pass  # IronPython

from collections import defaultdict


[docs] def generate_histogram(_data, _num_bins): # type: (Collection[float], int) -> dict[int, dict[str, float]] """Creates a Histogram of input data, in n-bins. Arguments: ---------- * _data (Collection[float]): Collection of numeric values to use as the data source. * _num_bins (int): Number of bins to split the input data set into. Returns: -------- * dict[int, dict[str, float]]: ie: { 0: {'average_value'=12.0, 'frequency'=0.25}, 1: {'average_value'=6.0, 'frequency'=0.34}, 2: ... }, """ # -- Bin the data binned_data = defaultdict(list) maximum = max(_data) minimum = min(_data) val_range = maximum - minimum if val_range == 0: binned_data[0] = _data else: for d in _data: normalized_value = (maximum - d) / val_range bin = round(normalized_value * (_num_bins - 1)) binned_data[bin].append(d) # -- Format the data for output output = {} for k, v in binned_data.items(): output[k] = { "average_value": (sum(v) / len(v)) if len(v) > 0 else 0, "frequency": len(v) / len(_data), } return output