当前位置:首页>python>《发布会后 2 小时:我用 Python 撸了一个“扩内需星系图”,自动化追踪 2026 产业链真相》

《发布会后 2 小时:我用 Python 撸了一个“扩内需星系图”,自动化追踪 2026 产业链真相》

  • 2026-10-21 13:26:41
《发布会后 2 小时:我用 Python 撸了一个“扩内需星系图”,自动化追踪 2026 产业链真相》

《发布会后 2 小时:我用 Python 撸了一个“扩内需星系图”,自动化追踪 2026 产业链真相》

大家好,我是Bob。今日盘后(2026 年 1 月 20 日),财政部新闻发布会定调:实施“更加积极的财政政策”,首要任务是扩大内需。

当大多数人还在手动翻阅研报、猜测哪个股票会涨时,作为一名“编程+投资”的双修玩家,我打开了编辑器。与其相信直觉,我更相信知识图谱(Knowledge Graph)。

我编写了一套自动化脚本,它能实时抓取全市场行业板块,利用 NLP 模糊匹配政策关键词,并自动构建一个动态产业链网络。谁是核心,谁在蹭热度,在图谱里一目了然。

先看效果:


一、 核心逻辑:从“政策口号”到“数据地图”

我们的目标是解决三个痛点:

动态性: 政策名词天天变,我们要能自动匹配行业。

实时性: 必须调用最新接口,获取当前最强的成份股。

传导性: 可视化政策如何从“发令枪”传导到具体的“供应商”。

我们使用了 AkShare 获取实时行情,NetworkX 处理图论逻辑,以及 Pyvis 渲染交互式网页。

PS:安装这些包只需一行命令:

pip install akshare networkx pyvis

二、 完整源码:一键生成你的“2026 寻宝图”

这段代码已经集成了报错修正和自动映射功能。你只需要安装好环境(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文件时,你会看到一个深邃的“金融星系”:

星系核心: 这是政策发令枪。你会发现“以旧换新”和“新质生产力”通过某些交叉行业(如消费电子)产生了强关联。

传导路径: 鼠标悬停在“工程机械”板块上,你可以立刻看到三一、徐工等龙头在当前盘面的实时表现。

隐藏逻辑: 这种可视化最强大的地方在于,它能帮你发现“跨界收益者”。比如,设备更新政策不仅利好制造企业,由于其对电力系统改造的依赖,电网设备板块也成为了星系中的重要分支。

结语:在 2026 年,代码才是投资者的“防弹衣”

为什么一定要费劲写这几百行代码,而不是直接去看研报?
在金融交易的战场上,代码实现逻辑之所以重要,是因为它解决了人类投资者无法克服的三大软肋:

(1)消除“幸存者偏差”与“选择性失明”
人的大脑倾向于关注自己想看到的利好,而脚本会冷酷地扫描全市场 5000 只股票。通过代码,你可以确保你的视野里不只有大蓝筹,还有那些躲在角落里真正受益于“设备更新”的小巨人。

(2)毫秒级的逻辑收敛
发布会的信息量巨大,手动处理需要数小时。而当你把“贴息”、“化债”、“扩内需”这些关键词写入 NLP 模型后,从政策发布到产业链定位,只需要一次 Shift + Enter。

(3)可重复的成功路径
靠运气赚的钱往往会靠实力亏回去。但如果你用代码固化了一套“政策传导追踪逻辑”,你就拥有了一个可以不断复用的系统。

工具本身不产生财富,但工具能让你在噪声中看清财富的流向。

2026 年的 A 股,不再是齐涨齐跌的时代,而是“结构化红利”的时代。多用一行代码,少听一句传言。希望这份产业链图谱脚本,能成为你今年构建量化交易体系的第一块砖。

最新文章

随机文章