大家好,我是Bob。今日盘后(2026 年 1 月 20 日),财政部新闻发布会定调:实施“更加积极的财政政策”,首要任务是扩大内需。
当大多数人还在手动翻阅研报、猜测哪个股票会涨时,作为一名“编程+投资”的双修玩家,我打开了编辑器。与其相信直觉,我更相信知识图谱(Knowledge Graph)。
我编写了一套自动化脚本,它能实时抓取全市场行业板块,利用 NLP 模糊匹配政策关键词,并自动构建一个动态产业链网络。谁是核心,谁在蹭热度,在图谱里一目了然。
先看效果:
我们的目标是解决三个痛点:
动态性: 政策名词天天变,我们要能自动匹配行业。
实时性: 必须调用最新接口,获取当前最强的成份股。
传导性: 可视化政策如何从“发令枪”传导到具体的“供应商”。
我们使用了 AkShare 获取实时行情,NetworkX 处理图论逻辑,以及 Pyvis 渲染交互式网页。
PS:安装这些包只需一行命令:
pip install akshare networkx pyvis这段代码已经集成了报错修正和自动映射功能。你只需要安装好环境(pip install akshare networkx pyvis pandas),运行即可得到一个交互式的 HTML 文件。
import akshare as ak
import pandas as pd
import networkx as nx
from pyvis.network import Network
import time
# --- 1. 自动化板块查询与匹配函数 ---
defget_industry_mapping():
"""
自动获取东财行业板块列表,并根据政策关键词进行动态模糊匹配
"""
print("正在扫描全市场行业板块数据...")
try:
df_all_industries = ak.stock_board_industry_name_em()
except Exception as e:
print(f"接口调用失败,请检查网络或akshare版本: {e}")
return {}
# 定义 2026 财政部发布会核心政策方向及其对应的“抓取关键词”
# 你可以根据最新的发布会内容随时修改这里的关键词
policy_keywords = {
"扩内需-以旧换新": ["家电", "汽车整车", "消费电子", "装修装饰"],
"促投资-设备更新": ["工程机械", "电网设备", "仪器仪表", "通用设备"],
"新质生产力": ["半导体", "计算机设备", "软件开发", "通信设备"]
}
final_map = {}
for policy, keys in policy_keywords.items():
matched_industries = []
for key in keys:
# 在全市场板块中寻找包含关键词的行业名称
matches = df_all_industries[df_all_industries['板块名称'].str.contains(key)]['板块名称'].tolist()
matched_industries.extend(matches)
final_map[policy] = list(set(matched_industries)) # 去重
return final_map
# --- 2. 构建图谱核心逻辑 ---
defbuild_policy_graph():
# 获取动态映射关系
policy_map = get_industry_mapping()
ifnot policy_map: return
# 初始化图谱,设置背景色和字体颜色
G = nx.Graph()
net = Network(height="800px", width="100%", bgcolor="#001529",
font_color="white", notebook=True, cdn_resources='remote')
print("开始构建产业链知识图谱...")
for policy, industries in policy_map.items():
# 添加政策中心节点(红色)
G.add_node(policy, label=policy, size=45, color='#FF4500', mass=5, font={'size': 24})
for industry in industries:
try:
# 实时抓取对应行业的成份股
df_stocks = ak.stock_board_industry_cons_em(symbol=industry)
# 添加行业板块节点(蓝色)
G.add_node(industry, label=industry, size=30, color='#1E90FF', mass=3)
G.add_edge(policy, industry, width=2, color='#555555')
# 仅展示行业前 12 只个股,确保视觉清晰度
top_stocks = df_stocks.head(12)
for _, row in top_stocks.iterrows():
stock_name = row['名称']
# 构造鼠标悬停时的实时行情弹窗
hover_info = (f"代码: {row['代码']}\n"
f"价格: {row['最新价']}\n"
f"涨跌幅: {row['涨跌幅']}%\n"
f"成交额: {row['成交额']}")
# 添加个股节点(绿色)
G.add_node(stock_name, label=stock_name, title=hover_info,
size=15, color='#90EE90', group=industry)
G.add_edge(industry, stock_name, width=1, color='#DDDDDD')
print(f"已同步板块数据: {industry}")
time.sleep(0.3) # 频率控制
except Exception as e:
print(f"跳过板块 {industry}: {e}")
# --- 3. 视觉算法高级配置:解决“乱动”问题 ---
net.from_nx(G)
net.set_options("""
var options = {
"physics": {
"forceAtlas2Based": {
"gravitationalConstant": -120,
"centralGravity": 0.01,
"springLength": 80,
"springConstant": 0.05,
"avoidOverlap": 1
},
"solver": "forceAtlas2Based",
"stabilization": {
"enabled": true,
"iterations": 150,
"updateInterval": 25
}
},
"nodes": {
"font": {"strokeWidth": 2, "strokeColor": "#000000"},
"shadow": true
},
"edges": {
"smooth": {"type": "dynamic"}
}
}
""")
# 保存并生成 HTML
output_name = "2026_finance_map.html"
net.show(output_name)
print(f"\n【完成】产业链图谱已生成,请在目录中打开: {output_name}")
if __name__ == "__main__":
build_policy_graph()当你运行脚本并打开html文件时,你会看到一个深邃的“金融星系”:
星系核心: 这是政策发令枪。你会发现“以旧换新”和“新质生产力”通过某些交叉行业(如消费电子)产生了强关联。
传导路径: 鼠标悬停在“工程机械”板块上,你可以立刻看到三一、徐工等龙头在当前盘面的实时表现。
隐藏逻辑: 这种可视化最强大的地方在于,它能帮你发现“跨界收益者”。比如,设备更新政策不仅利好制造企业,由于其对电力系统改造的依赖,电网设备板块也成为了星系中的重要分支。
为什么一定要费劲写这几百行代码,而不是直接去看研报?
在金融交易的战场上,代码实现逻辑之所以重要,是因为它解决了人类投资者无法克服的三大软肋:
(1)消除“幸存者偏差”与“选择性失明”
人的大脑倾向于关注自己想看到的利好,而脚本会冷酷地扫描全市场 5000 只股票。通过代码,你可以确保你的视野里不只有大蓝筹,还有那些躲在角落里真正受益于“设备更新”的小巨人。
(2)毫秒级的逻辑收敛
发布会的信息量巨大,手动处理需要数小时。而当你把“贴息”、“化债”、“扩内需”这些关键词写入 NLP 模型后,从政策发布到产业链定位,只需要一次 Shift + Enter。
(3)可重复的成功路径
靠运气赚的钱往往会靠实力亏回去。但如果你用代码固化了一套“政策传导追踪逻辑”,你就拥有了一个可以不断复用的系统。
工具本身不产生财富,但工具能让你在噪声中看清财富的流向。
2026 年的 A 股,不再是齐涨齐跌的时代,而是“结构化红利”的时代。多用一行代码,少听一句传言。希望这份产业链图谱脚本,能成为你今年构建量化交易体系的第一块砖。