我用 Streamlit + DuckDB 搭了个公众号运营看板,1 天写完上线

29 阅读5分钟

我用 Streamlit + DuckDB 搭了个公众号运营看板,1 天写完上线

三个月前开始在微信公众号上写东西,发了十几篇文章后,遇到一个很实际的问题:怎么知道哪些内容真正有效?

微信后台有数据,但说实话那个界面体验一般,而且想对比不同文章的传播效果、看趋势变化,操作起来挺费劲的。

做为一个后端开发,我的第一反应是:搭个自己的看板。

为什么不用现成工具?因为想要的正好都没有

市面上不是没有公众号数据分析工具,但它们要么要付费,要么数据要经过第三方服务器,要么不能自定义图表。

我的需求其实很简单:

  • 每天自动拉数据
  • 能看阅读/分享/粉丝增长的趋势
  • 能对比文章之间的传播效果
  • 最好有个"一眼知道今天运营状态"的概览

找了几天没找到完全合心意的,决定自己写一个。

技术选型

技术栈选了三个东西:

Streamlit — 前端 + 服务端 之前没写过前端页面,Streamlit 用 Python 就能写出交互界面,后端都不用写。对于我这种后端来说,学习成本几乎为零。

DuckDB — 数据存储与分析 数据量不大(一篇文章几千到几十万阅读),不需要上 MySQL。DuckDB 是嵌入式列式数据库,分析查询比 SQLite 快很多,而且直接用 SQL 操作 CSV/JSON,太适合这种场景。

Plotly — 图表 Streamlit 原生支持 Plotly,交互式图表(缩放、悬停显示、下载)一行代码就能嵌进去。

看板长什么样子

先放张截图👇

image.png

也可以直接打开 wechat.duckdblab.org 看在线 Demo,不用登录

顶部是一排 KPI 卡片:

📊 总粉丝:8,2240.4%
📖 今日阅读:355,1461.9%
📤 今日分享:16,40316.4%
➕ 净增粉丝:3076.5%
📊 分享率:4.6       ▼ 
⭐ 互动量:3,632
📈 阅读vs近7日:▲ 9.0%

每个指标旁都有"较昨日"涨跌箭头,扫一眼就知道今天运营状态。

下面是一张 30 天阅读 & 分享趋势图,两条折线对比,可以看到哪些日子阅读量高、哪些日子分享率高。鼠标悬停能看到每日具体数值。

再往下是内容质量分析——按分享率给文章排序的柱状图。这个最实用,一眼看出哪篇文章传播力最强。实测发现我写的技术教程类分享率在 2.3% 左右,而讲 AI 自动化运营的那篇高达 6.2%,这直接影响了我后来写文章的选题方向。

开始搭

第一步:数据源

微信公众号后台可以导出文章数据。但我更想要的是自动化——每天早上自动拉取前一天的数据,写到 DuckDB 里。

数据主要包括:

  • 文章维度:标题、发布时间、阅读量、分享量、收藏量
  • 用户维度:新增关注、取消关注、累计关注
  • 整体维度:消息互动次数

第二步:看板设计

本来想做得复杂一点,后来想通了:看板是用来做决策的,不是用来展示信息密度的。

所以只分了这几个模块:

  1. 顶部 KPI — 7 个核心指标 + 涨跌
  2. 阅读 & 分享趋势 — 30 天折线图
  3. 粉丝增长趋势 — 柱状图 + 累计曲线
  4. 热门文章排行 — Top 8 文章
  5. 内容质量分析 — 按分享率排序
  6. 运营摘要 & 预警 — 文字总结 + 异常提醒

第三步:部署

上线后发现一个尴尬的事:因为我的公众号是个人订阅号,微信 API 不给接口。所以现在看板上用的是模拟数据——文章标题是真实的,但阅读量数据是模似生成的。代码里已经预留了真实 API 的接口,等以后认证通过就能无缝切换。

部署用的是 Streamlit + Cloudflare Tunnel,好处是不用暴露服务器端口,直接绑定域名就能访问。

踩的几个坑

1. 图表配色 Streamlit 默认图表配色偏亮色系,在深色主题下看不太清楚。花了一些时间调 Plotly 的 template=plotly_dark 和颜色序列。

2. 预警逻辑 刚开始设了几个预警规则(比如取消率 > 2% 标红、分享率 < 3% 提示),但预警阈值很敏感——取消率稍微波动一下就会触发,导致经常收到无意义的报警。后来改成了"偏离 7 日均值超过 20%"才触发,这才消停下来。

3. Streamlit 顶部栏遮挡 Streamlit 原生有顶部菜单栏,在深色背景下会挡住部分标题。最后用配置文件隐藏了顶部栏,加了些 padding 才搞定。

一些想法

这个看板前后用了大概一周,其中一半时间花在想清楚"到底要展示什么"上,真正写代码的时间其实很短。

一个很深的感受:数据不会自动告诉你答案,但一个好的看板会让你更容易发现问题。

比如有几天分享率从 5% 掉到了 2%,在后台面板里可能要翻好几页才注意到,但在看板上就是一眼的事。顺着这个线索去查,发现那几天发的内容偏工具教程而非实操干货,调整选题方向后分享率慢慢回来了。

目前这个看板跑在 wechat.duckdblab.org 上,有兴趣的可以直接打开看效果,不用登录。

如果你想搭一个类似的看板,建议从 3-5 个最核心的指标开始,不要一上来就想做成全功能的。先跑起来,再慢慢加功能。


技术栈:Streamlit · DuckDB · Plotly · Cloudflare Tunnel · Python 3.11