首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ruby中计算NPS

在Ruby中计算NPS
EN

Stack Overflow用户
提问于 2016-05-30 21:25:45
回答 3查看 275关注 0票数 0

净启动分数的值可以是0-10。它分为三组:

推广者=给出9或10分的受访者

被动者=给出7或8分的受访者

批评者=给出0到6分的受访者

得分计算为推动者和批评者的百分比之差。

假设我们有分数[10, 9, 10, 6, 2, 5, 10]

这将得到+14 (57% - 43%)的分数。

我希望我能计算一个数组中范围的出现次数,如果可能的话,我会这样做的

代码语言:javascript
运行
复制
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

如何进行此计算?

EN

回答 3

Stack Overflow用户

发布于 2016-05-30 21:40:57

你可以在哈希表中计算你的所有指标:

代码语言:javascript
运行
复制
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

较短的解决方案:

代码语言:javascript
运行
复制
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
票数 3
EN

Stack Overflow用户

发布于 2016-05-30 21:39:10

也有一些其他的方法可以做到这一点,但为了简单起见,这应该是可行的。

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2016-05-30 22:35:11

这是另一种方法,代码是不言自明的。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37526863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档