Files
ObsidianHome/小鱼/.cdp/dead-stats.mjs
T
2026-11-05 15:16:24 +08:00

20 lines
1.1 KiB
JavaScript

import fs from 'node:fs';
const J = JSON.parse(fs.readFileSync('.cdp/out/items-7d-30d.json', 'utf8'));
const N = s => Number(s) || 0;
const L = [];
for (const dt of ['recent7d', 'recent30d']) {
const it = J.data[dt].items;
const dead = it.filter(x => N(x.ord) === 0);
const deadPv = dead.reduce((a, b) => a + N(b.pv), 0);
const live = it.filter(x => N(x.ord) > 0);
// 零成交类目
const cats = {};
for (const x of dead) cats[x.c4 || '?'] = (cats[x.c4 || '?'] || 0) + 1;
const allCats = new Set(it.map(x => x.c4));
const deadOnlyCats = [...allCats].filter(c => !it.some(x => x.c4 === c && N(x.ord) > 0));
L.push(`${dt}: 商品 ${it.length} | 零成交 ${dead.length} (${(dead.length / it.length * 100).toFixed(1)}%) | 吃掉曝光 ${deadPv} | 有成交 ${live.length}`);
L.push(` 涉及类目 ${new Set(dead.map(x => x.c4)).size} 个;其中"整类目 0 成交"的类目 ${deadOnlyCats.length} 个,这些类目共 ${deadOnlyCats.reduce((a, c) => a + cats[c], 0)} 个商品`);
L.push('');
}
fs.writeFileSync('.cdp/out/dead-stats.txt', L.join('\n'), 'utf8');