Я пытаюсь преобразовать файл csv в формат JSON для визуализации D3. js. Данные в CSV не агрегированы.
Данные файла CSV выглядят следующим образом:
Country,1/22/20,1/23/20,1/24/20,1/25/20,1/26/20,1/27/20,1/28/20
China,1,1,2,3,4,7,11
China,0,3,5,15,22,35,46
China,2,6,15,27,46,75,95
Colombia,0,0,0,0,0,0,1
Congo,0,0,0,0,0,0,2
Использование D3 для синтаксического анализа CSV
const files = ['confirmed-global.csv', 'deaths-global.csv', 'recovered-global.csv'];
Promise.all([
d3.csv(files[0]),
d3.csv(files[1]),
d3.csv(files[2])
]).then(([file1, file2, file3]) => {
structureData(file1, file2, file3);
});
Использование вложенности D3 для получить значение ключа в зависимости от страны
function structureData(file1, file2, file3) { // Just using a single file for now
var output = d3.nest()
.key(function (d) {
return d.Country
}).entries(file1);
console.log(output)
}
Результат вложенности
[0 … 2]
0:
key: "China"
values: Array(12)
0: {Country: "China", 1/22/20: "1", 1/23/20: "1", 1/24/20: "2", 1/25/20: "3", …}
1: {Country: "China", 1/22/20: "0", 1/23/20: "0", 1/24/20: "0", 1/25/20: "1", …}
2: {Country: "China", 1/22/20: "0", 1/23/20: "3", 1/24/20: "5", 1/25/20: "15", …}
...........
Я пытаюсь получить ключ, а в значениях есть агрегат сумма для каждой даты.
Мой подход к достижению этого следующий:
output.forEach(x => {
x.values.slice(1).forEach(value => {
for (var key in value) {
if (value.hasOwnProperty(key)) {
console.log(key + " -> " + value[key]);
}
}
})
В конечном итоге сформировать новый JSON объект из этого.
Есть ли лучше подойти к этому ??? Буду признателен за любую помощь. Спасибо