Недавно я создал визуализацию для своей команды, которая отображала 100 самых типичных путешествий клиентов на нашем сайте:
Я использовал Керри Роддена библиотека последовательных солнечных лучей с d3.Данные - это просто набор разделов, разделенных дефисами, и количество раз, когда эта последовательность наблюдалась.Вот некоторые из моих данных:
|----------------------------------------|--------------|
| Sections | Value |
|----------------------------------------|--------------|
| shopping-shopping-login-shopping-end | 34 |
|----------------------------------------|--------------|
| shopping-shopping-end | 25 |
|----------------------------------------|--------------|
| login-shopping-shopping-shopping-end | 12 |
|----------------------------------------|--------------|
Моя команда хотела бы, чтобы теперь информация была также в табличной форме, и вместо того, чтобы просто представить ее в таблице, я подумал об использовании чего-то подобного, которое делает Google Analytic.с некоторыми из его данных:
В моем примере вывод должен выглядеть следующим образом:
|----------------------------------------|--------------|
| Sections | Value |
|----------------------------------------|--------------|
| shopping x2 > login > shopping > end | 34 |
|----------------------------------------|--------------|
| shopping x 2 > end | 25 |
|----------------------------------------|--------------|
| login > shopping x 3 > end | 12 |
|----------------------------------------|--------------|
КакВы бы решили эту задачу?
Конечно, я могу манипулировать данными для преобразования цепочек в нужный вывод (в виде текстовой строки), но, возможно, существуют библиотеки, которые не только манипулируют данными, но ивизуализирует это более привлекательным способом (как в примере выше)
Edit 1: Я начинаю делать это в JavaScript.
Первый шаг - преобразовать каждую строку в таблице в массив:
Я нашел функцию , которая генерирует вложенный массив, который подсчитывает повторения каждого элемента висходный массив.
var str = "shopping-shopping-coupons-end";
var arr = str.split("-");
function compressArray(original) {
var compressed = [];
// make a copy of the input array
var copy = original.slice(0);
// first loop goes over every element
for (var i = 0; i < original.length; i++) {
var myCount = 0;
// loop over every element in the copy and see if it's the same
for (var w = 0; w < copy.length; w++) {
if (original[i] == copy[w]) {
// increase amount of times duplicate is found
myCount++;
// sets item to undefined
delete copy[w];
}
}
if (myCount > 0) {
var a = new Object();
a.value = original[i];
a.count = myCount;
compressed.push(a);
}
}
return compressed;
};
console.log(compressArray(arr));
Это хорошо для случаев, когда элементы в последовательной цепочке не появляются снова после того, как другой элемент прерывает последовательный ряд, как в моем var arr
.Однако для shopping-shopping-login-shopping-end
это не будет работать.Мне нужно будет адаптировать функцию, чтобы, возможно, сбросить счет в этих случаях.
Тем не менее, я буду рад, если вы укажете другие решения.