| name | design-shi-data-report |
| title | 设计虱自媒体数据报告生成 SOP |
| slug | design-shi-data-report |
| description | 五平台数据分析报告的标准结构和生成流程,包含对下一步创作的指导建议。
触发词:「生成数据分析报告」「数据周报」「数据复盘」「运营报告」「取数据」「数据分析」。
当用户提到数据报告、数据复盘、运营分析时使用。
|
| tags | ["data","report","analytics","social-media"] |
| metadata | {"keywords":["数据分析","报告","五平台","运营","复盘"]} |
设计虱自媒体数据报告生成 SOP
参考资源
本技能配套以下参考文件(位于 references/ 目录):
| 文件 | 用途 |
|---|
references/data-collection-guide.md | 数据收集指南 |
references/report-template.html | HTML 报告模板 |
生成报告前建议参考 references/data-collection-guide.md 确认数据收集方式。
检查点
检查点:数据收集前
检查点:分析前
检查点:报告生成前
一、报告定位(双模式)
- 目标:回顾过去周期数据 → 总结平台规律 → 指导下一步创作
- 周期:建议每 2-4 周做一次(积累足够数据量)
- 输出:HTML 格式报告,保存在
/opt/data/workspace/设计虱-写作系统/数据分析/
两种工作模式
| 模式 | 触发场景 | 输出 |
|---|
| 轻量模式 | 用户说"取一下数据"、"数据反馈" | 更新数据追踪文件,输出简短分析 |
| 完整模式 | 用户说"生成数据分析报告" | 7 大模块 HTML 报告 |
统一入口:所有数据分析相关需求都调用 design-shi-data-report,skill 内部根据触发方式选择模式。
二、轻量模式(数据取回)
数据取回节奏
- 发布后 7 天:取第一次数据(推荐期结束,数据基本稳定)
- 发布后 14 天:取第二次数据(最终值,归档)
- 超过 14 天:不再追踪
用户配合方式
用户每周一收到提醒后,把上周发布文章的后台数据甩过来即可:
- 截图或直接报数("哪篇多少阅读多少赞")
- 不需要精确到个位,大概数字就行
- 5 个平台分开报
轻量模式处理流程
- 提取数据:从用户提供的截图或文字中提取核心指标(阅读/赞/评论/收藏/转发)
- 写入数据追踪文件:
/opt/data/workspace/设计虱-写作系统/数据分析/数据追踪.md
- 输出简短分析:
- 本周各文章表现对比
- 趋势变化(哪些话题/标题类型持续有效)
- 下周发布建议
数据追踪文件格式
### 文章标题(发布日期)
- 平台名:阅读 | 赞 | 转发 | 评论
- 状态:待取 7 天数据 / 待取 14 天数据 / 已归档
- 洞察:(可复用的发现)
- 标题公式:(如果有明确模式)
- 适用平台:(哪些平台效果好)
三、完整模式(数据分析报告)
模块 1:基础信息
数据周期:YYYY年MM月 — YYYY年MM月
生成日期:YYYY年MM月DD日
账号:醉雪梅花
模块 2:全平台总览(核心定调)
指标卡片
- 发布平台数
- 累计文章数
- 单篇最高阅读
- 单篇最高互动
平台对比表格
| 平台 | 文章数 | 最佳文章 | 最高阅读 | 核心互动 | 投入产出评分 |
一句话总结
直接给出核心结论,一句话说明"哪个话题在哪个平台最爆"
模块 3:分平台深度分析(5 个平台 × 5 层)
每个平台固定结构:
- 平台定位(如:微信公众号 — 主战场/互动主场/长尾搜索主场)
- 核心结论(highlight 卡片,一句话概括)
- 文章数据全景表(含阅读/赞/评论/收藏/转发/点击率等)
- 逐篇分析(为什么爆/为什么不爆)
- 爆款规律卡片(有效模式、低效模式、关键指标、基准线、禁忌)
各平台核心指标优先级:
- 微信公众号:转发率 > 赞 > 评论
- 小红书:点击率(封面)> 评论 > 收藏
- 什么值得买:收藏 > 评论 > 赞
- 知乎:评论 + 收藏(长尾)
- 微信问一问:回答质量 + 收藏
各平台爆款公式(完整模式参考)
微信公众号
- 爆款类型:痛点+排查+秒搞定(实操排查类)
- 核心指标:转发率(>5% 算爆款,代表裂变传播力)
- 标题公式:[具体痛点] + [排查过程] + [结果],20字内
- AI话题表现:最高(推荐算法对技术实操类权重高)
- 占坑建议:技术排查类内容适合发微信
小红书
- 爆款类型:轻量话题+简单视觉+引讨论
- 核心指标:评论数(代表讨论氛围)、封面点击率(>15% 才能获得大推送)
- 标题公式:emoji+感叹号+情绪词(救命/终于/太香了)
- AI话题表现:中等(情绪话题如"烧钱"比技术话题更容易引爆)
- 占坑建议:同一内容改切入角度,去掉技术术语,加情绪包装
什么值得买
- 爆款类型:免费/省钱+攻略/教程+具体工具名
- 核心指标:收藏数(代表实用价值,是最重要的指标)
- 标题公式:带"免费""攻略""教程""实测""附XX"等搜索词
- AI话题表现:攻略型高(MiMo免费token 2251阅读/30收藏),排查型低
- 占坑建议:标题必须带搜索关键词,内容偏实用教程方向
知乎
- 爆款类型:怎么/为什么/是什么+大众能听懂的话题
- 核心指标:评论+收藏(讨论+长期搜索价值),长尾流量可持续1-2年
- 标题公式:问题句式("怎么向老婆解释NAS"比"NAS有什么用"效果好10倍)
- AI话题表现:最低(专业AI博主竞争激烈,个人经验不够突出)
- 占坑建议:NAS/数码是基本盘继续发;AI话题找生活化切入角度
微信问一问
- 爆款类型:问答式深度分析,具体问题+解决方案+个人观点
- 核心指标:回答质量(点赞+收藏代表内容价值)
- 标题公式:问题句式("怎么..."、"为什么..."),有洞察有观点
- AI话题表现:中等(问答形式适合技术经验分享)
- 占坑建议:用问题式标题,内容偏经验分享和实操指南
模块 4:跨平台对比
- 同一内容跨平台表现差异表(同一篇文章在 5 个平台的数据对比)
- 各平台爆款公式对比表
模块 5:内容分发策略
- 按话题匹配平台(NAS/数码 → 知乎+什么值得买;AI → 微信公众号+小红书+问一问)
- 一篇文章的标准分发流程(5 站顺序)
模块 6:关键发现(认知刷新)
每个发现包含:
- 发现标题
- 具体数据支撑
- 启示(对下一步创作的指导)
模块 7:下一步行动建议
三、必须包含的改进点(对比原版报告)
1. 环比变化
每个平台增加"相比上期"的变化:
- 阅读量环比 ±X%
- 互动量环比 ±X%
- 新增文章数
2. 文章生命周期状态
表格中增加"状态"列:
- 待观察(发布 < 7 天)
- 稳定增长(7-30 天)
- 已下架/删除
3. 数据精度
- 不用模糊表达(如 51K+),直接写具体数字(如 51,177)
- 保留小数点后 1 位(如 11.1%)
4. 待验证假设
单独设立区块,列出需要更多数据验证的推测:
⚠️ 待验证假设:
- AI话题在知乎天花板约200-300阅读(当前样本4篇,需更多验证)
- 小红书封面点击率>15%是万级曝光门槛(需更多AB测试)
5. 爆款标题公式库
在模块 3 或模块 5 中增加:
四、对下一步创作的指导(高价值区块)
1. 选题效果预测
基于历史数据,推测下一个话题在哪个平台更可能爆:
- 话题类型(NAS/数码 vs AI/Agent)→ 首选平台
- 备选平台
2. 投入产出比排序
按"相同精力投入"排序各平台优先级:
| 平台 | 预期产出 | 投入建议 |
|---|
| 知乎 | NAS话题长尾流量 | 持续投入 |
| 微信问一问 | 问答式深度内容 | 重点投入 |
| 微信 | AI话题转发裂变 | 重点投入 |
| 小红书 | 轻量话题互动 | 封面优先 |
| 什么值得买 | 工具类收藏 | 挂商品测试 |
3. 下一个爆款方向
结合"关键发现"和趋势数据,给出具体建议:
五、输出格式(重点:只生成 HTML)
- 文件命名:
YYYY-MM-DD-五平台数据分析报告.html
- 保存路径:
/opt/data/workspace/设计虱-写作系统/数据分析/
- 样式参考:复用现有报告的 CSS 风格(蓝色主调、A4 尺寸)
- 不再生成 Markdown 版本(MD 版本供 Agent 读取的需求已废弃)
六、与其他技能的协作
与 post-publish-ops 的分工
| 场景 | 使用 skill | 说明 |
|---|
| 日常数据追踪(发布后 7 天 / 14 天取数据) | post-publish-ops | 轻量级,更新数据追踪文件 |
| 周期性深度分析(2-4 周一次) | design-shi-data-report | 全量分析,产出规律性洞察 |
调用逻辑:
- 用户说"取一下数据" → post-publish-ops
- 用户说"生成数据分析报告" → design-shi-data-report
与 design-shi-article 的引用关系
写作前读取报告:
- 在
design-shi-article 的"前置检查"环节,改为读取 design-shi-data-report 生成的 HTML 报告
- 读取方式:用浏览器工具打开 HTML,提取关键结论
与 design-shi-writing-system 的引用关系
- "数据驱动工作流"中的周报读取,改为引用 design-shi-data-report 的输出
- 删除原有的"周报生成规范"中关于 Markdown 版本的要求
相关技能引用
| 技能 | 用途 |
|---|
excel-data-extract | 处理损坏或不兼容的 Excel 文件 |
html-screenshot-image-gen | 将 HTML 报告转为图片发送 |
post-publish-ops | 日常数据追踪和轻量分析 |
design-shi-article | 写作前读取数据报告指导创作 |
七、操作流程
- 收集数据:向用户获取各平台后台数据
- 整理文章列表:按平台分类,标注状态
- 逐平台分析:按"模块 3"结构展开
- 提炼规律:产出"关键发现"
- 指导创作:产出"下一步建议"
- 生成 HTML:按模板渲染
- 发送报告:通过飞书发送卡片消息
八、注意事项
- 结论先行:每个模块第一句话就是结论
- 数据支撑:所有结论必须有具体数据
- 可执行性:行动建议必须具体可执行(不要写"多发内容",要写"本周发布 FileBrowser")
- 差异化分析:重点分析同一内容在跨平台的表现差异
- 只输出 HTML:不再生成 Markdown 版本
- 系列文章标题:如果文章是系列(已有同系列已发表文章),标题风格应与上篇保持一致,如"在NAS上跑XX"格式
优化摘要
- 30/35 → 34/35 (97%)
- [D3] 新增飞书发送失败错误处理,新增 Anti-Patterns 章节(5条禁止事项)
- [D4] 新增 CP-Report 完成检查点
- [D6] 新增相关技能引用表(excel-data-extract、html-screenshot-image-gen等)
- 新增版本: 1.0.1, 更新日期: 2026-05-27
错误处理
数据文件读取失败
Excel 文件损坏或格式不支持
→ 尝试用 zipfile + xml.etree 直接解析
→ 如果失败,提示用户导出为 CSV 格式
→ 提供错误信息给用户
某平台数据缺失
用户未提供某个平台的数据
→ 在报告中标注"数据待补充"
→ 继续生成其他平台的分析
→ 提醒用户后续补充
环比数据不可用
上期报告不存在或数据不完整
→ 跳过环比分析
→ 在报告中标注"首次生成,无环比数据"
→ 继续其他分析
报告生成失败
HTML 模板渲染错误
→ 检查模板文件是否完整
→ 使用简化版本生成
→ 提供错误信息给用户
飞书发送失败
卡片消息发送超时或报错
→ 保存 HTML 文件到本地
→ 告知用户文件路径
→ 建议手动打开查看
Anti-Patterns
❌ 不要做的事:
- 不要模糊表达(如"51K+")→ 必须写具体数字(51,177)
- 不要跳过数据验证 → 检查点必须逐项确认
- 不要生成 Markdown 版本 → 只输出 HTML
- 不要猜测缺失数据 → 标注"数据待补充"
- 不要遗漏环比分析 → 无数据时明确标注
完成检查点
CP-Report
九、数据文件读取技巧(实战经验)
常见数据文件格式与读取方案
| 文件类型 | 问题 | 解决方案 |
|---|
| .xlsx | openpyxl 报 "Fill() takes no arguments" | 用 zipfile + xml.etree 直接解析 xlsx XML |
| .xls (老格式) | xlrd 兼容性问题 | 直接 cat 读取,可能是带BOM的CSV文本 |
| 小红书 .xlsx | 列偏移,数据从第4列开始 | 数据列:曝光(3) 阅读(4) 点击率(5) 点赞(6) 收藏(7) 评论(8) 分享(9) |
| 知乎 .xls | 带UTF-8 BOM (357 273 277) | 直接用 cat 读取,是CSV格式 |
Python 读取问题 xlsx 示例
import zipfile
import xml.etree.ElementTree as ET
def read_xlsx_raw(path):
with zipfile.ZipFile(path, 'r') as z:
strings = []
try:
with z.open('xl/sharedStrings.xml') as f:
tree = ET.parse(f)
root = tree.getroot()
ns = {'main': 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'}
for si in root.findall('.//main:si', ns):
t = si.find('.//main:t', ns)
strings.append(t.text if t is not None else '')
except:
pass
rows = []
with z.open('xl/worksheets/sheet1.xml') as f:
tree = ET.parse(f)
root = tree.getroot()
ns = {'main': 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'}
for row in root.findall('.//main:row', ns):
cells = []
for cell in row.findall('main:c', ns):
val = cell.find('main:v', ns)
cell_type = cell.get('t')
if val is not None:
v = val.text
if cell_type == 's' and strings:
idx = int(v)
v = strings[idx] if idx < len(strings) else v
cells.append(v)
if cells:
rows.append(cells)
return rows