我正在尝试为销售线索建立评分引擎。分数越高,线索越热。我的应用程序将接受CSV文件路径作为输入。每行的布局如下:
contact id - integer
event - string
score - decimal
示例:
1,web,34.33
1,email,3.4
1,email,4
2,webinar,55.4
2,social,15
CSV文件中的每一行都表明特定联系人参与了特定事件。每行还提供一个分数,该分数表示对该联系人与该特定事件的互动程度的评估。在上述情况下,显示的第一条记录表明联系人1生成了一个网络事件,并且此互动的得分为34.33。每个联系人会有很多事件,并且一个联系人可能与特定事件类型进行多次交互。
以下是可用的事件类型:
web
email
social
webinar
每种事件类型都有一个相关的权重,表明该事件对销售线索参与度的重要性:
web 1.0
email 1.2
social 1.5
webinar 2.0
为了给特定的联系人打分,我尝试使用以下算法:
联系事件得分将首先按事件类型加权:
web =得分* 1.0 电子邮件=得分* 1.2 社交=得分* 1.5 网络研讨会=得分* 2.0
然后将所有分数与联系人ID相加,以获得每个联系人的总分数。
然后将合计分数在0到100的范围内进行归一化。要对合计分数进行归一化,您将获取在所有分别为100和0的联系人中找到的最高和最低总分数,并对剩余的总和进行插值介于两者之间。将总和的分数四舍五入到最接近的整数。
最后,应根据归一化分数用四分位标记联系人:
Q3 <标准化分数<= 100->铂 Q2 <归一化得分<= Q3->金 Q1 <标准化分数<= Q2->银 0 <=归一化分数<= Q1->古铜色
注意:四分位数将需要计算,不要假设分布均匀。 应用程序的输出应使用以下格式写入控制台:contactid,四分位数标签,规范化分数
Example output:
1, silver, 44
2, platinum, 99
我已将CSV文件读入输入,并用逗号分隔符分隔了值。
public static void main(String[] args) {
//Delimiters used in the CSV file
String COMMA_DELIMITER = ",";
BufferedReader br = null;
//Reading the csv file
br = new BufferedReader(new FileReader("test_data.csv"));
//Create List for holding Score objects
List<Scores> interactions = new ArrayList<Scores>();
String line = "";
//Read to skip the header
br.readLine();
//Reading from the second line
while ((line = br.readLine()) != null) {
String[] retrieveScores = line.split(COMMA_DELIMITER);
}
}
}
我希望
的输出1, silver, 44
2, platinum, 99
但是我没有任何输出。
如果有人愿意带我走过这个问题,以获得期望的输出,我将不胜感激。