周报数据图表自动生成
适用场景
周报/月报要配图,打开 Excel 调图表调半小时,导出还糊。本技能输入一组数据(如每日 DAU、每周 GMV、各渠道转化率),一键生成周报级质感的图表(SVG 矢量图)+ 一句可直接粘贴的结论句。SVG 放大不糊、可直接插入在线文档/浏览器另存,零依赖任何绘图库。
核心能力
- 三种图型:柱状图(对比)/ 折线图(趋势)/ 横向条形图(排名),
chart: auto时按数据形态自动推荐(时间序列→line,类目对比→bar,排名类目多→hbar)。 - 自动结论句:识别最大值、最小值、环比变化(首末对比),生成"本周 X 较上周 +12.5%,峰值出现在周三"式结论,可直接进周报。
- 汇报级配色:内置商务配色(主色 + 高亮最大值),自动标数值标签、目标线(可选)。
- 纯 SVG 输出:零依赖生成矢量图,任意浏览器/文档可用;本地装有 matplotlib 时也可按同一 JSON 自行转 PNG。
- 负值兼容(v1.0.2+):纵轴自动下探到最小值,目标线兼容负值,适用收支/增减类数据。
输入规范
向用户收集(任一缺失则主动引导补充,不臆测):
- 数据:标签 + 数值对(如 周一~周日 各日数值;可直接粘贴两列表格)
- 图表标题:这张图叫什么(如"本周 DAU 趋势")
- 图型:bar / line / hbar / auto(不指定则按数据形态推荐)
- 单位:数值单位(如 万元、人、%),用于轴与结论句
- 目标线(可选):有考核目标值则画参考线
引导话术:「把数据发我(两列即可:名称 + 数值),告诉我图表标题和单位。要看趋势用折线,比大小用柱状,做排名用条形——不确定就交给我推荐。」
处理流程
- 将用户数据整理为 JSON(结构见
references/input_template.md)。 - 调用
scripts/build_chart.py生成图表与结论:python scripts/build_chart.py --input chart.json --output chart.svg - 输出 SVG 文件路径 + 结论句 + 数据摘要表,提示用户可把 SVG 直接拖入文档或浏览器打开另存为图片。
脚本参数
| 参数 | 说明 |
|---|---|
| chart.json(位置参数)或 --input | JSON 输入;二者二选一,缺省读 stdin(编码自动 utf-8-sig/gbk 兜底) |
| --output | SVG 输出路径(默认 chart.svg) |
| --selftest | 运行内置自检(无需输入),退出码 0/4 |
输出格式
✅ 图表已生成:chart.svg(880×520 矢量图,放大不糊,图型:line)
【结论句(可直接粘贴进周报)】
整体上行:周日 4.52 万较周一 3.80 万增长 18.9%,峰值出现在周日(4.52 万)。
周三出现低点 3.65 万,建议在周报中补充当日归因。
【数据摘要】
| 指标 | 值 |
|---|---|
| 最大值 | 周日 4.52 万 |
| 最小值 | 周三 3.65 万 |
| 均值 | 4.05 万 |
| 首末变化 | +18.9% |
边缘用例(v1.0.3 已覆盖)
- 数值含非数字(如"约1500"、"1,230人")→ 自动剥离非数字字符后参与计算,并在结论后注明清理了哪些项
- 负值数据(如收支 -3 / +2 / -1)→ 纵轴自动下探,目标线与结论均兼容
- 全相等数据(如 [5,5])→ 纵轴 guard 避免除零,正常出图
- 标签与数值数量不等 → 抛出明确错误(退出码 2),指出差异位置
- 数据点不足 2 个 → 提示无法成图(退出码 2)
- 数据点超过 31 个 → 仍会生成,但附"建议聚合到周/月粒度"提示
chart取值非法 → 回退 auto 推荐逻辑
异常处理
- 数据不足 2 个点 → 提示无法成图,请补充数据(退出码 2)。
- 数值含非数字(如"约1500")→ 自动剥离非数字字符并在摘要注明;剥离后仍无法解析则报错(退出码 2)。
- 标签与数值数量不等 → 指出差异位置,请用户核对(退出码 2)。
- 文件读写失败 → 退出码 3 并给出具体原因。
自检
修改脚本后先跑一遍,确认无回归:
python scripts/build_chart.py --selftest
适用限制与免责声明
- 输出为 SVG 矢量图;如需 PNG,可在浏览器打开 SVG 截图,或本地装 matplotlib 自行转换。
- 结论句基于首末对比与极值的确定性计算,不构成业务归因;涉及考核数据请以业务口径复核。
- 单图单指标设计;多指标对比请分多次生成或说明后合并需求。
微信扫一扫