Class: ChurnVsComplexity::Timetravel::Serializer::StatsCalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/churn_vs_complexity/timetravel/serializer/stats_calculator.rb

Instance Method Summary collapse

Instance Method Details

#summaries(result) ⇒ Object

‘some_sha’, { ‘end_date’ => ‘2024-01-01’, ‘values’ => [[1, 2], [3, 4]

}]



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/churn_vs_complexity/timetravel/serializer/stats_calculator.rb', line 8

def summaries(result)
  observations = result.sort_by do |_sha, summary|
    summary['end_date']
  end.map { |entry| entry[1] }

  quality_calculator = QualityCalculator.new(**extrema(observations))
  observations.map do |o|
    end_date = o['end_date']
    scores = o['values'].map do |(churn, complexity)|
      alpha = quality_calculator.alpha_score(churn, complexity)
      beta = quality_calculator.beta_score(churn, complexity)
      [churn, complexity, alpha, beta]
    end
    {
      'end_date' => end_date,
      'mean_churn' => mean(scores.map { |s| s[0] }),
      'median_churn' => median(scores.map { |s| s[0] }),
      'mean_complexity' => mean(scores.map { |s| s[1] }),
      'median_complexity' => median(scores.map { |s| s[1] }),
      'mean_alpha_score' => mean(scores.map { |s| s[2] }),
      'median_alpha_score' => median(scores.map { |s| s[2] }),
      'mean_beta_score' => mean(scores.map { |s| s[3] }),
      'median_beta_score' => median(scores.map { |s| s[3] }),
    }
  end
end