Source code for croissance.estimation.ranking

from operator import attrgetter


[docs] def score(values, q): span = max(values) - min(values) if not span: return 100 return (q - min(values)) / span * 100
[docs] def rank_phases(phases, weights, thresholds): values = {} for attribute in weights: values[attribute] = [getattr(phase, attribute) for phase in phases] values[attribute].append(thresholds[attribute]) ranked_phases = [] for phase in phases: rank = sum( weight * score(values[attribute], getattr(phase, attribute)) for attribute, weight in weights.items() ) / sum(weights.values()) ranked_phases.append(phase._replace(rank=rank)) return sorted(ranked_phases, key=attrgetter("rank"), reverse=True)