mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-16 08:57:52 +00:00
Docs: Update benchmark results
This commit is contained in:
@@ -1,20 +1,18 @@
|
||||
let cache;
|
||||
async function processCSV(csv,cfg){
|
||||
const {csvParse,rollups}=await (cache??=import('https://cdn.jsdelivr.net/npm/d3@7/+esm'));
|
||||
const {filterColumn,filterValue,groupBy,aggregateColumn,operation}=cfg;
|
||||
if(!['sum','avg','count'].includes(operation))throw new Error('Unsupported operation');
|
||||
if(!csv||!filterColumn||!groupBy)throw new Error('Missing essentials');
|
||||
if(operation!=='count'&&!aggregateColumn)throw new Error('Missing aggregateColumn');
|
||||
const rows=csvParse(csv).filter(r=>r[filterColumn]==filterValue);
|
||||
if(!rows.length)return[];
|
||||
const fn=operation==='count'?v=>v.length:v=>{
|
||||
let s=0,n=0;
|
||||
for(const row of v){
|
||||
const val=+row[aggregateColumn];
|
||||
if(!Number.isNaN(val)){s+=val;n++;}
|
||||
}
|
||||
return operation==='sum'?s:n?s/n:0;
|
||||
};
|
||||
return rollups(rows,fn,r=>r[groupBy]).map(([k,v])=>({[groupBy]:k,[operation]:v}));
|
||||
}
|
||||
const load=()=>cache||(cache=Promise.all([
|
||||
import('https://cdn.jsdelivr.net/npm/papaparse@5.4.1/papaparse.min.mjs'),
|
||||
import('https://cdn.jsdelivr.net/npm/d3-array@3/+esm')
|
||||
]));
|
||||
const processCSV=async(csv,cfg)=>{
|
||||
const[{default:Papa},{rollup}]=await load();
|
||||
const{filterColumn:f,filterValue:v,groupBy:g,aggregateColumn:a,operation:o}=cfg;
|
||||
const rows=Papa.parse(csv,{header:1,dynamicTyping:1,skipEmptyLines:1}).data.filter(r=>r[f]===v);
|
||||
if(!rows.length)return[];
|
||||
const map=rollup(rows,s=>{
|
||||
if(o==='count')return s.length;
|
||||
const t=s.reduce((p,c)=>p+(Number(c[a])||0),0);
|
||||
return o==='avg'?t/s.length:t;
|
||||
},r=>r[g]);
|
||||
return Array.from(map,([k,val])=>({[g]:k,result:val}));
|
||||
};
|
||||
export default processCSV;
|
||||
Reference in New Issue
Block a user