2016-05-30 6 views
0

正味のプロモータースコアは0〜10の値を持つことができます。三つのグループに分けられる:9又は10 =
中傷=回答が与え7または8のスコアを与える回答を
インダクタスコアRubyでNPSを計算する

プロモーター=回答が与えスコアが算出される0

スコア6プロモーターと忌避剤の割合の差として算出した。

スコアが[10, 9, 10, 6, 2, 5, 10]であるとします。

これは、スコア+14(57% - 43%)になります。

は、私はこの計算を行うことができますどのように

total_count = array.size 
promoters = array.count(9..10) 
passives = array.count(7..8) 
detractors = array.count(0..6) 

promoters_perc = promoters.to_f/total_count * 100 
detractors_perc = detractors.to_f/total_count * 100 

score = promoters_perc - detractors_perc 

をするだろうことが可能であるならば、私は、配列の範囲の発生を数えることがしたいですか?

答えて

1

これを行うにはいくつかの方法がありますが、簡単にするためにはこれが有効です。

array = [10, 9, 10, 6, 2, 5, 10] 
total_count = array.size 
promoters = array.count {|x| x > 8} 
passives = array.count {|x| x > 6 && x <9} 
detractors = array.count {|x| x < 7} 

promoters_perc = promoters.to_f/total_count * 100 
detractors_perc = detractors.to_f/total_count * 100 

score = promoters_perc - detractors_perc 
3

あなたはハッシュですべての指標を数えることができます。

arr = [10, 9, 10, 6, 2, 5, 10] 
count = arr.each_with_object(Hash.new(0)) do |e, memo| 
    case e 
    when 0..6 then memo[:detractors] += 1 
    when 7..8 then memo[:passives] += 1 
    when 9..10 then memo[:promoters] += 1 
    end 
end 

score = (count[:promoters] - count[:detractors]).to_f/arr.size * 100 
=> 14.285714285714285 

短いソリューション:

metrics = { promoters: 9..10, passives: 7..8, detractors: 0..6 } 
count = metrics.each {|k, v| metrics[k] = arr.count {|e| v === e}} 

score = (count[:promoters] - count[:detractors]).to_f/arr.size * 100 
=> 14.285714285714285 
0

ここでは、コードは自明である、これを行うためのもう一つの方法です。

data = [10, 9, 10, 6, 2, 5, 10] 

score_range = [promoters = (9..10), passives = (7..8), detractors = (0..6)] 
#=> [9..10, 7..8, 0..6] 
grouped = data.group_by {|i| score_range.select {|sr| sr.cover?(i)} }.to_h 
#=> {[9..10]=>[10, 9, 10, 10], [0..6]=>[6, 2, 5]} 
percentage = grouped.map {|(k),v| [k, (v.size * 100.0/ data.size).round]}.to_h 
#=> {9..10=>57, 0..6=>43} 
nps = percentage[promoters] - percentage[detractors] 
#=> 14 
関連する問題