4个版本
0.2.1 | 2023年6月24日 |
---|---|
0.2.0 | 2023年6月23日 |
0.1.1 | 2023年6月23日 |
0.1.0 | 2023年6月23日 |
#338 in 数学
50KB
578 行
净推荐分数(NPS®)
《code>net_promoter_score crate 是一个Rust库,用于处理和计算从调查响应中得出的净推荐分数(NPS)。该库高度可定制,使得与不同受访者ID类型和评分范围工作变得容易。它包括添加单个和多个响应、批量响应和自动生成唯一受访者ID的方法。此外,该crate高效地处理边缘情况,并提供详细的错误信息,以确保您的应用程序稳健且准确。
功能
- 从调查响应中计算NPS
- 支持自定义受访者ID类型
- 详细的错误信息
- 高效性能
- 清晰易懂的示例
- 自动生成唯一的受访者ID(适用于
i32
标识符)
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
net_promoter_score = "0.2.1"
示例用法
创建调查并添加响应
要创建新的调查并添加单个响应,可以使用以下代码
use net_promoter_score::prelude::*;
use anyhow::Result;
fn main() -> Result<()> {
let mut survey = Survey::new();
survey.add_response(1, 9)?;
survey.add_response(2, 8)?;
survey.add_response(3, 6)?;
let nps = survey.score();
println!("The calculated NPS is: {}", nps);
Ok(())
}
一次添加多个响应可以使用 add_multiple_responses
实现,如下所示
use net_promoter_score::prelude::*;
use anyhow::Result;
fn main() -> Result<(), Vec<NetPromoterScoreError>> {
let mut survey = Survey::new();
survey.add_multiple_responses(vec![(1, 9), (2, 8), (3, 6)])?;
let nps = survey.score();
println!("The calculated NPS is: {}", nps);
Ok(())
}
添加带有自动生成的i32类型受访者ID的批量响应
use net_promoter_score::prelude::*;
use anyhow::Result;
fn main() -> Result<(), Vec<NetPromoterScoreError>> {
let rating_quantities: &[(NpsRating, ScoreCount)] = &[
(1, 2),
(4, 1),
(5, 2),
(7, 8),
(8, 10),
(10, 10),
];
let mut survey = Survey::new();
survey.add_bulk_responses_auto_id(&rating_quantities)?;
let nps = survey.score();
println!("The calculated NPS is: {}", nps);
Ok(())
}
以下示例使用 &str
作为调查的受访者ID类型
use net_promoter_score::prelude::*;
use anyhow::Result;
fn main() -> Result<()> {
// Create a new survey with &str respondent IDs
let mut survey: Survey<&str> = Survey::new();
// Adding responses with string slice respondent IDs
survey.add_response("customer_1", 9)?;
survey.add_response("customer_2", 8)?;
survey.add_response("customer_3", 6)?;
// Calculate the NPS
let nps = survey.score();
println!("The calculated NPS is: {}", nps);
Ok(())
}
想要对ID的生成有更多控制权?
以下示例使用受访者ID生成函数和自定义 String
受访者ID
use net_promoter_score::prelude::*;
use anyhow::Result;
fn main() -> Result<(), Vec<NetPromoterScoreError>> {
let rating_quantities: &[(NpsRating, ScoreCount)] = &[
(1, 2),
(4, 1),
(5, 2),
(7, 8),
(8, 10),
(10, 10),
];
let mut survey: Survey<String> = Survey::new();
let mut respondent_id_number = 1;
let respondent_id_fn = || {
let current_id = format!("customer_{}", respondent_id_number);
respondent_id_number += 1;
current_id
};
survey.add_bulk_responses(respondent_id_fn, rating_quantities)?;
let nps = survey.score();
println!("The calculated NPS is: {}", nps);
Ok(())
}
在本例中,我们首先定义包含每个评分的NPS评分和相应计数的rating_quantities
。我们使用String
作为受访者ID类型创建一个新的Survey
。接下来,我们创建一个受访者ID生成函数respondent_id_fn
,该函数生成格式为"customer_{number}"
的唯一自定义String
受访者ID。
最后,我们使用生成函数和评分数量调用add_bulk_responses
,将具有唯一受访者ID的响应添加到调查中。计算出的NPS将打印到控制台。
有关具体细节和更多高级用法,请参阅crate文档和源代码。
API概述
crate提供的主要类型是Survey
结构。Survey包括添加响应和计算NPS的方法
new()
:创建一个新的空调查。add_response(respondent_id: T, score: u8)
:添加单个调查响应,包括给定的受访者ID和分数。add_multiple_responses(responses: impl IntoIterator<Item = (T, u8)>)
:添加多个调查响应。add_bulk_responses(respondent_id_fn: F, quantities: &[(u8, usize)])
:使用受访者ID生成函数和元组切片(评分,数量)添加批量调查响应。add_bulk_responses_auto_id(quantities: &[(u8, usize)])
:使用自动生成的唯一受访者ID添加批量调查响应,ID类型为i32
,从1开始(针对ID类型为i32的特殊实现)。from_responses(responses: impl IntoIterator<Item = (T, u8)>)
:从一组响应创建一个新的调查。如果有任何响应的评分无效,将返回错误。score()
:计算并返回调查的净推荐值(NPS)。
反馈和建议
我非常感谢任何关于改进此crate的反馈和建议。如果您想直接为项目做出贡献,请随时创建问题或提交pull request。
许可协议
这个软件包是自由软件:您可以在MIT许可证的条款下重新分发和/或修改它。MIT 许可证。
Net Promoter®、NPS®、NPS Prism®以及与NPS相关的表情符号是Bain & Company, Inc.、NICE Systems, Inc.和Fred Reichheld的注册商标。Net Promoter Score和Net Promoter System是Bain & Company, Inc.、NICE Systems, Inc.和Fred Reichheld的服务商标。
喜欢这个软件包吗?
⭐ 星 https://github.com/rrrodzilla/net_promoter_score
🐦 跟随 https://twitter.com/rrrodzilla