mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-17 17:27:53 +00:00
18 lines
740 B
JavaScript
18 lines
740 B
JavaScript
const processCSV = async (csvString, { filterColumn, filterValue, groupBy, aggregateColumn, operation }) => {
|
|
const [{ csvParse }, { rollup, sum, mean }] = await Promise.all([
|
|
import('https://cdn.jsdelivr.net/npm/d3-dsv@3/+esm'),
|
|
import('https://cdn.jsdelivr.net/npm/d3-array@3/+esm')
|
|
]);
|
|
|
|
const getValue = d => +d[aggregateColumn] || 0;
|
|
const data = csvParse(csvString).filter(d => d[filterColumn] == filterValue);
|
|
|
|
const aggregated = rollup(
|
|
data,
|
|
g => operation === 'count' ? g.length : (operation === 'sum' ? sum : mean)(g, getValue),
|
|
d => d[groupBy]
|
|
);
|
|
|
|
return Array.from(aggregated, ([key, result]) => ({ [groupBy]: key, result }));
|
|
};
|
|
export default processCSV; |