Мне нужна помощь в сортировке 1370 строк данных CSV с помощью JS! Я использую библиотеку d3 для создания визуализации данных.
CSV находится здесь: https://github.com/nickrinaldi88/BreitBart_DataVis/blob/main/breitbartData.csv
Мой проект:
У меня есть файл csv с 3 столбцами: Date, Word и Count.
По сути, я хочу иметь 10 разных массивов объектов для каждого уникального слова (есть 10 уникальных слов), например:
var Obama = [{date: 'the date', count: 72}, {date: 'the date', count: 41}]
var Trump = [{date: 'the date', count: 568}, {date: 'the date', count: 92}]
Для каждого слова имеется 136 строк данных, что означает, что в идеале я хочу, чтобы каждый массив содержал 136 объектов, соответствующих существующим атрибутам даты и количества.
Должен ли я использовать функцию d3.nest?
Я обнаружил, что пытаюсь динамически создавать массивы в цикле, но мне трудно получить желаемый результат. Толчок в правильном направлении поможет.
Спасибо!
🤔 А знаете ли вы, что...
JavaScript позволяет создавать динамические и интерактивные веб-приложения.
Вот один из подходов с ванильным JavaScript.
Отказ от ответственности Это довольно дорогой подход, и приложив немного усилий, его можно оптимизировать для повышения производительности.
Сначала извлеките данные...
затем начните с обработки CSV:
function processCSV(csv){
return csv.split("\r\n").slice(1).filter(c=>c).map(d=>d.split(','));
}
затем найдите уникальные слова:
function findUniqueWords(data){
const words = new Set();
data.forEach(d=>{
words.add(d[1]);
});
return [Array.from(words), data];
}
затем создайте необходимые форматированные массивы объектов:
function createArrays(args) {
const [words,data] = [...args];
return words.map(w=>{
return data.filter(record=>record[1] === w).map(fd=>{
return {[w]:{date:fd[0], count: fd[2]}};
});
}).flat();
}
затем сделайте что-нибудь с выводом
Вот полный код. Этот код не будет работать здесь из-за ограничений CORS.
fetch('https://raw.githubusercontent.com/nickrinaldi88/BreitBart_DataVis/main/breitbartData.csv')
.then(res=>res.text())
.then(processCSV)
.then(findUniqueWords)
.then(createArrays)
.then(console.info);
function processCSV(csv){
return csv.split("\r\n").slice(1).filter(c=>c).map(d=>d.split(','));
}
function findUniqueWords(data){
const words = new Set();
data.forEach(d=>{
words.add(d[1]);
});
return [Array.from(words), data];
}
function createArrays(args) {
const [words,data] = [...args];
return words.map(w=>{
return data.filter(record=>record[1] === w).map(fd=>{
return {[w]:{date:fd[0], count: fd[2]}};
});
}).flat();
}
Наконец, вот ответ, чтобы продемонстрировать результат:
https://repl.it/@randycasburn/AlertPoorCodes