中老年叨叨
检索⌘ K

Vibe Coding

研究Ontology的Graphy图谱,顺手搓了个A股的图谱玩

介绍由LLM维护的A股行业知识图谱与Obsidian Wiki,将股票、行业、概念和价值链关系组织为关联页面。说明CSV字段、首次构建和增量更新、图谱数据提取与单HTML输出流程,以及搜索、缩放和节点交互功能。

文章目录

01. A股行业图谱 LLM Wiki

基于 llm-wiki.md 模式构建的 A 股行业知识图谱。
5537 支 A 股,371 个行业标签(三级层级),719 个概念板块,全部以 Obsidian wiki 形式呈现,由 LLM 维护更新,使用单HTML文件输出。

图片

02. 项目结构

01_Sources/                  # 原始数据(只读,LLM 不修改)
├── A股全量股票字段导出.csv    # 当前最新全量数据
├── value_chains.json         # 一级行业上下游关系定义
└── 行业数据/archive/         # 历史版本归档(自动生成)

02_Wiki/                     # LLM 生成的 wiki(LLM 完全维护)
├── index.md                 # 总索引 + Dataview 概览
├── log.md                   # 变更日志(追加式)
├── INDUSTRIES/              # 行业板块页(371 个)
├── CONCEPTS/                # 概念板块页(719 个)
└── STOCKS/                  # 个股详情页(5537 支)

03_Scripts/                  # 工具脚本
└── build_industry_wiki.py   # Wiki 生成/更新脚本

03. CSV 数据格式

数据文件路径:01_Sources/A股全量股票字段导出.csv

字段说明示例
股票代码含交易所后缀600519.SH
股票名称—贵州茅台
所属行业三级行业,、 分隔食品饮料、白酒、白酒Ⅲ
概念板块多个概念 、 分隔一线酒企、同花顺漂亮100
总市值(亿元)—15152.24
PE_TTM—18.32
PB—5.59
营业收入(亿元)—539.09
归母净利润(亿元)—272.43

数据来源:同花顺行情中心导出。

04. 使用方式

4.1 首次构建

python3 03_Scripts/build_industry_wiki.py

全量生成所有 wiki 页面。

4.2 增量更新(日常使用)

拿到最新的同花顺 CSV 后,覆盖 01_Sources/A股全量股票字段导出.csv,然后:

python3 03_Scripts/build_industry_wiki.py --update

对比上一版本,只更新有变化的页面:

  • 新增股票 → 生成个股页,更新所属行业/概念页
  • 删除股票 → 删除个股页,更新所属行业/概念页
  • 数据变更 → 更新个股页
  • 行业/概念归属变更 → 更新个股页 + 受影响行业/概念页
  • 无变化 → 秒回跳过

旧 CSV 自动归档到 01_Sources/行业数据/archive/。

4.3 差异预览(不写文件)

python3 03_Scripts/build_industry_wiki.py --diff

只显示新增/删除/修改的股票清单,不写入任何文件。

05. 更新后的操作

  1. 运行更新脚本
  2. 切回 Obsidian
  3. 图谱视图点击刷新按钮
  4. 已打开的页面会自动更新内容

06. Obsidian 配置

在 Obsidian 中打开本项目根目录即可。推荐插件:

  • Dataview — index.md 中的动态表格需要此插件
  • Graph View — 内置,展示行业/概念/股票之间的关联关系

07. Wiki 页面结构

7.1 行业板块页(INDUSTRIES/)

层级式命名:食品饮料·白酒·白酒Ⅲ.md

每个行业页包含:

  • 上级/子行业导航([[wikilink]])
  • 成分股列表
  • 关联概念板块

7.2 概念板块页(CONCEPTS/)

扁平命名:人工智能.md

每个概念页包含:

  • 成分股列表

7.3 个股详情页(STOCKS/)

以股票名称命名:贵州茅台.md

每个个股页包含:

  • 基本面数据(市值/PE/PB/营收/利润)
  • 行业归属路径
  • 所属概念板块

所有页面通过 Obsidian [[wikilink]] 互相关联,在图谱视图中形成完整的行业知识网络。

08. 价值链关系

31 个一级行业之间的上下游关系定义在 01_Sources/value_chains.json 中。每个行业页自动继承一级行业的上下游链路:

  • 上游行业 — 本行业从哪些行业获取原材料、设备或服务
  • 下游行业 — 本行业的产品/服务流向哪些行业

例如钢铁页会显示:

上游行业: 煤炭 · 环保
下游行业: 建筑装饰 · 机械设备 · 汽车 · 房地产 · 国防军工

子行业(二级/三级)自动继承一级行业的价值链关系。如需调整上下游定义,编辑 value_chains.json 后运行 --update 即可全量刷新行业页。

09. 交互式图谱可视化

本项目支持生成单 HTML 文件交互式图谱可视化,使用 D3-force 力导向布局 + Canvas 2D 渲染。

9.1 脚本说明

脚本作用
03_Scripts/extract_graph_data.py从 CSV 提取图谱节点和边数据,输出 02_Wiki/graph-data.json(压缩 JSON)
03_Scripts/build_graph_html.py将 graph-data.json 嵌入 graph_template.html 生成完整的 02_Wiki/graph.html
03_Scripts/graph_template.htmlHTML 模板,包含全部交互逻辑和样式

9.2 生成图谱

# 第一步:提取图谱数据
# 从 CSV 读取数据,输出 02_Wiki/graph-data.json
python3 03_Scripts/extract_graph_data.py

extract_graph_data.py :无命令行参数,固定读取:

  • 01_Sources/A股全量股票字段导出.csv —— 股票基本面数据
  • 01_Sources/value_chains.json —— 一级行业上下游关系
  • 输出到 02_Wiki/graph-data.json
# 第二步:构建完整 HTML 文件
# 默认(当前项目)
python3 03_Scripts/build_graph_html.py

# 自定义路径(支持复用此脚本到其他图谱项目)
python3 03_Scripts/build_graph_html.py \
  --data <path/to/graph-data.json> \
  --template <path/to/graph_template.html> \
  --output <path/to/output.html>

build_graph_html.py 命令行参数:

参数简写说明默认
--data-dgraph-data.json 数据文件路径02_Wiki/graph-data.json
--template-tHTML 模板文件路径03_Scripts/graph_template.html
--output-o输出 HTML 文件路径02_Wiki/graph.html

输出:02_Wiki/graph.html(~4MB,包含所有数据嵌入在单个文件中)。

9.3 HTML 交互功能

操作功能
鼠标滚轮缩放(0.1× ~ 8×)
鼠标拖拽平移画布
单击节点1. 高亮上下游连接(上游蓝色线 / 下游橙色线);2. 隐藏所有非直接上下游节点(聚焦模式);3. 右侧弹出详情面板
双击节点展开成分股列表(按市值降序,显示前 20 支)
点击画布空白区域取消选中,恢复显示全部节点
筛选按钮(顶部)全部 / 仅行业 / 仅概念 / 切换价值链高亮
搜索框(顶部)搜索行业 / 概念 / 股票,点击结果自动跳转到节点
图例(左下角)颜色说明:一级行业蓝 / 二级行业黑 / 三级行业灰 / 概念板块棕黄

9.4 技术特点

  • 单文件便携 :所有数据嵌入 HTML,无需服务器,直接双击打开
  • 性能优化 :视口裁剪 + 按需渲染 + LocalStorage 缓存布局坐标,首次加载后 < 500ms 打开
  • 概念自动聚类 :远缩放时自动聚类概念节点,避免视觉混乱
  • 响应式 :适配桌面/移动屏幕

10. 原文来源

原文发表于微信公众号“中老年叨叨”(2026年7月28日 17:37)。查看微信公众号原文。