Я пытаюсь создать систему подсчета очков для потенциальных клиентов.Чем выше оценка, тем горячее лидерство.Мое приложение будет принимать путь файла 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
Чтобы набрать конкретный контакт, я пытаюсь использовать следующий алгоритм:
Результаты по контактным событиям сначала будут взвешиваться по типу события:
веб = оценка * 1,0 электронная почта = оценка * 1,2 социальная = оценка * 1,5 вебинар = оценка * 2,0
Все баллы затем суммируются по идентификатору контакта, чтобы получить общий балл для каждого контакта.
Суммированные баллы должны быть затем нормализованы по шкале от 0 до 100. Для нормализации суммированных балловВы возьмете самые высокие и самые низкие суммарные оценки, найденные по всем контактам, составляющим эти 100 и 0 соответственно, и интерполируете оставшиеся промежуточные промежуточные оценки.Округлите суммированные оценки до ближайшего целого числа.
Наконец, контакты должны быть помечены квартилем на основе нормализованной оценки:
Q3 <нормализованная оценка <= 100->платина Q2 <нормализованная оценка <= Q3 -> золото Q1 <нормализованная оценка <= Q2 -> серебро 0 <= нормализованная оценка <= Q1 -> бронза
Примечание: квартили потребуетсябыть рассчитанным, не предполагайте равномерное распределение.Выходные данные вашего приложения должны быть записаны в консоль в следующем формате: контакт, метка квартиля, нормализованная оценка
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
, но я не получаю никакого вывода.
Буду признателен, если кто-нибудь захочет пройтись по этой проблемечтобы получить желаемый результат.