mirror of
https://github.com/christianvidalwolf-prog/CrazeAnalytix.git
synced 2026-08-03 13:35:24 +02:00
feat: enable custom baseline periods for Experiments to solve seasonality
This commit is contained in:
+66
@@ -0,0 +1,66 @@
|
||||
import fs from 'fs';
|
||||
import https from 'https';
|
||||
|
||||
const url = "https://www.dropbox.com/scl/fi/b9zxn4z5i7sxwfakk5g5y/Amazon-Sell-Out-2023-2025.csv?rlkey=uoto6v0mm99py8nszy8ldtez8&dl=1";
|
||||
|
||||
https.get(url, (res) => {
|
||||
if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
||||
https.get(res.headers.location, (res2) => {
|
||||
processData(res2);
|
||||
});
|
||||
} else {
|
||||
processData(res);
|
||||
}
|
||||
}).on('error', (e) => {
|
||||
console.error(e);
|
||||
});
|
||||
|
||||
function processData(stream) {
|
||||
let data = '';
|
||||
stream.on('data', chunk => {
|
||||
data += chunk.toString('utf8');
|
||||
});
|
||||
stream.on('end', () => {
|
||||
analyze(data);
|
||||
});
|
||||
}
|
||||
|
||||
function analyze(data) {
|
||||
const lines = data.split('\n');
|
||||
console.log("Total Lines in CSV:", lines.length);
|
||||
|
||||
let maxYear = 0;
|
||||
let maxWeek = 0;
|
||||
let minYear = 2030;
|
||||
let minWeek = 52;
|
||||
let legendsRows = 0;
|
||||
let legendsMaxYear = 0;
|
||||
let legendsMaxWeek = 0;
|
||||
|
||||
for (let i = 1; i < lines.length; i++) {
|
||||
const row = lines[i].split(',');
|
||||
if (row.length < 5) continue;
|
||||
const year = parseInt(row[3]); // Based on app processor logic it's mostly col 3 or 1
|
||||
const week = parseInt(row[4]); // Based on app processor
|
||||
|
||||
// Use regex fallback if parsing fails
|
||||
const matchedYear = parseInt(row.find(r => r.startsWith('202')) || '0');
|
||||
const matchedWeek = parseInt(row.find(r => r.match(/^[0-9]{1,2}$/)) || '0');
|
||||
|
||||
const y = year || matchedYear || 0;
|
||||
const w = week || matchedWeek || 0;
|
||||
|
||||
if (y > maxYear) { maxYear = y; maxWeek = w; }
|
||||
else if (y === maxYear && w > maxWeek) { maxWeek = w; }
|
||||
|
||||
if (y < minYear && y > 2000) { minYear = y; minWeek = w; }
|
||||
|
||||
if (lines[i].toLowerCase().includes('legends')) {
|
||||
legendsRows++;
|
||||
if (y > legendsMaxYear) { legendsMaxYear = y; legendsMaxWeek = w; }
|
||||
else if (y === legendsMaxYear && w > legendsMaxWeek) { legendsMaxWeek = w; }
|
||||
}
|
||||
}
|
||||
console.log(`Global -> Min Date: Year ${minYear}, Week ${minWeek} | Max Date: Year ${maxYear}, Week ${maxWeek}`);
|
||||
console.log(`LEGENDS stats -> Total rows: ${legendsRows}, Max Date: Year ${legendsMaxYear}, Week ${legendsMaxWeek}`);
|
||||
}
|
||||
Reference in New Issue
Block a user