У меня есть CSV, который содержит следующие данные
this_year | minus_one_year | minus_two_year | minus_three_year
-------------------------------------------------------------------------
1 | 2 | 2 | 3
-------------------------------------------------------------------------
4 | 5 | 5 | 5
-------------------------------------------------------------------------
2 | 2 | 2 | 2
-------------------------------------------------------------------------
4 | 5 | 4 | 4
-------------------------------------------------------------------------
1 | 2 | 3 | 3
-------------------------------------------------------------------------
Я прочитал этот CSV-файл, и теперь мне нужно организовать данные. Моя конечная цель - получить следующий вывод
{
"nodes": [
{
"name": "1",
"node": "this_year"
},
{
"name": "2",
"node": "this_year"
},
{
"name": "4",
"node": "this_year"
},
{
"name": "2",
"node": "minus_one_year"
},
{
"name": "5",
"node": "minus_one_year"
},
{
"name": "2",
"node": "minus_two_year"
},
{
"name": "3",
"node": "minus_two_year"
},
{
"name": "4",
"node": "minus_two_year"
},
{
"name": "5",
"node": "minus_two_year"
},
{
"name": "2",
"node": "minus_three_year"
},
{
"name": "3",
"node": "minus_three_year"
},
{
"name": "4",
"node": "minus_three_year"
},
{
"name": "5",
"node": "minus_three_year"
}
]
}
Итак, для каждого столбца я получаю уникальные значения. Таким образом, this_year имеет 3 узла, поскольку данные содержат 3 уникальных значения: 1, 2 и 4.
Я использую D3, но на данный момент это связано только с анализом. Для форматирования данных, я думаю, я на правильном пути, я использую карту.
Пока у меня есть что-то вроде этого
let graph = {"nodes" : [], "links" : []};
graph.nodes = output.map(function(d) { return [
{
'name': d.current_month,
'node': d.value
}
]; });
console.log(graph.nodes)
Где вывод - данные CSV. Очевидно, что это не работает, но становится немного запутанным из-за всего этого картирования, сокращения и т. Д. Итак, с данными, которые у меня есть, как я могу достичь
выше вывода?
Я включил JSFiddle , чтобы продемонстрировать, что я сделал до сих пор.
Большое спасибо
UPDATE
d3.csv('churn_status.csv')
.then(function(data) {
vm.graph.nodes = data.reduce(function(acc, line){
return acc.concat(Object.entries(line).map(function(column){
return {name: column[0], node: column[1]}
}))}, []);
vm.graph.nodes = vm.graph.nodes.sort(function(a,b) { return a.name > b.name ? -1 : 1});
})
.catch(function(error){
// handle error
});