从 JSON 到图表:last30days-skill 30 天舆情数据可视化完整指南
【免费下载链接】last30days-skillAI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary项目地址: https://gitcode.com/GitHub_Trending/la/last30days-skill
你刚用 last30days-skill 跑完一次研究,拿回一份塞满数字的 results.json:标题、平台、互动量。直接盯着数字看,很难判断哪条内容火、哪个平台讨论最活跃。这篇文章带你走完 last30days-skill 数据可视化的完整路径:装好环境、用一条命令取数、再用十几行 Python 画出第一张图,读完就能得到一张可以直接放进汇报的图。
先看效果:结果先行
这是把统计指标组织成图表后的样子:一个进度环表示完成度,几张卡片并排放置卡路里与时长。同样的排版思路套到你的 results.json 上,30 天的数据就不再是一堆平铺的数字,哪条讨论热、哪个平台声音大,都能快速分辨出来。
从装好到跑出结果的最短路径
环境准备:克隆仓库并装好画图库
git clone https://gitcode.com/GitHub_Trending/la/last30days-skill cd last30days-skill pip install matplotlib看到本地多出一个 last30days-skill 目录,且python --version不低于 3.12,说明环境就绪。
一条命令拿到 30 天数据
取数入口是 skills/last30days/scripts/last30days.py,在终端执行下面这条命令,引号里的占位内容换成你真正要查的话题即可:
python skills/last30days/scripts/last30days.py "你的话题" --emit=json --output results.json跑完后当前目录会出现results.json,这就是后面画图要用的全部原料。
结果文件长什么样
顶层是results数组,每条结果带title(标题)、source(来源平台,如 reddit、x)、published_at(发布时间)、engagement(互动计数对象:点赞、评论、转发)。数据落库前会过两道工序:skills/last30days/scripts/lib/dedupe.py 过滤掉互相重复的条目,skills/last30days/scripts/lib/normalize.py 把各平台的原始数据对齐成统一字段。完整字段表可查 docs/reference/json-export.md。
用最少的代码画出第一张图
下面这段代码取前 10 条结果,把它们的互动量画成横向柱状图,保存为chart.py:
import json import matplotlib.pyplot as plt data = json.load(open("results.json", encoding="utf-8")) top = data["results"][:10] labels = [t["title"][:22] for t in top][::-1] values = [t.get("engagement", {}).get("score", 0) or t.get("engagement", {}).get("likes", 0) for t in top][::-1] plt.barh(labels, values) plt.title("30 天社媒话题热度 TOP 10") plt.xlabel("互动量") plt.tight_layout() plt.show()运行python chart.py会弹出一张图:条形越往右伸,说明社区对这条讨论给的关注越多。
三种进阶调法
每种只改动上面代码的几行,先说明改哪个参数,再说视觉上的变化。
换成折线图看 30 天走势
把plt.barh换成plt.plot,横轴放按published_at排好序的日期,纵轴放当日互动量合计。视觉上,柱条变成一条曲线,话题哪天开始起热、哪天回落,直接就能看出来。
按平台对比讨论热度
按source的取值把results拆成 reddit、x 两组,分别累加互动量,再画成两组柱状图(或给plt.bar加bottom偏移做成堆叠)。视觉上,同一话题在两个平台的差距被并排摆在一起。
用颜色标出最热的几条
给plt.barh传入color颜色列表:互动量超过你设的阈值就用醒目颜色,其余用浅色。视觉上整张图只有少数几条扎眼,值得放大细读的就是它们。
柱状、折线之外,统计指标还可以像下图这样组织成多栏卡片式:一栏放一个指标,版式随意拼,适合放进周报或对比页。
常见坑位
运行命令就报错:第一行提示last30days v3 requires Python 3.12+。原因是入口脚本会硬校验解释器版本,3.12 以下直接拒绝执行。用python --version确认当前版本,装到 3.12 再重跑即可。
首次运行进入引导,迟迟没有 results.json:部分平台(如 X)需要先解锁凭据或浏览器 Cookie 才能抓取,所以首次运行会先进 setup 引导。按提示逐项配置数据源,或跳过不需要的来源;未配置的来源只会在source_status里标为skipped-unconfigured,不阻塞其余数据落盘。
画图代码里报 KeyError:JSON 契约对取值未知的字段是直接省略而不是输出 null,个别条目可能没有published_at或engagement。统一改用.get()读取并给定默认值,就能避开缺字段的问题。
图表只是 results.json 的一种呈现形式,同一份数据还可以贴进周报、对比页,或者再交给 AI 生成摘要。选一个你正关心的话题,先把那条取数命令跑起来吧 📊
延伸阅读:
- 多平台检索与排序机制说明:docs/how-search-works.md
- Reddit 抓取逻辑的测试用例:tests/test_reddit_sc.py
- Hacker News 数据源的测试用例:tests/test_hackernews.py
【免费下载链接】last30days-skillAI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary项目地址: https://gitcode.com/GitHub_Trending/la/last30days-skill
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考