You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于无向DataFrame构建的NetworkX图应用Leiden算法及vcount报错解决

问题说明

你基于pandas边列表构建无向NetworkX图的代码逻辑完全正确,运行Leiden算法报错的核心原因是:你调用的leidenalg库原生仅支持igraph库的图结构作为输入,vcount()是igraph图对象统计顶点数量的内置方法,NetworkX图对象没有该属性,因此抛出AttributeError。

正确实现方案

方案1:将NetworkX图转换为igraph格式(原生leidenalg调用,性能最优)

  1. 先安装所需依赖,执行命令:
    pip install pandas networkx leidenalg python-igraph
    
  2. 转换图结构并运行算法:
    注意:转换过程中需要完整保留你需要用到的边属性,否则后续加权计算模块度时会出现属性不存在的报错
    import pandas as pd
    import networkx as nx
    import leidenalg as la
    import igraph as ig
    
    # 原有建图代码无需修改
    G = nx.from_pandas_edgelist(df_new, 'Source', 'Target', ['WeightCount', 'weight_cosine'], nx.Graph())
    
    # 提取图的节点、边、边属性用于构建igraph对象
    nodes = list(G.nodes())
    edges = list(G.edges())
    attr_weightcount = [G[u][v]['WeightCount'] for u, v in edges]
    attr_weightcosine = [G[u][v]['weight_cosine'] for u, v in edges]
    
    # 初始化igraph图并挂载数据
    G_ig = ig.Graph()
    G_ig.add_vertices(nodes)
    G_ig.add_edges(edges)
    G_ig.es['WeightCount'] = attr_weightcount
    G_ig.es['weight_cosine'] = attr_weightcosine
    
    # 运行Leiden社区检测,若需使用权重计算模块度,指定weights参数为对应边属性名即可
    partition = la.find_partition(
        G_ig,
        la.ModularityVertexPartition,
        weights='weight_cosine', # 不需要加权计算可删除该行
        seed=42 # 固定随机种子保证结果可复现
    )
    
    # 提取节点-社区ID映射结果
    node_community_map = dict(zip(nodes, partition.membership))
    

方案2:使用封装库直接传入NetworkX图(代码更简洁)

如果不想手动做图格式转换,可以用封装了Leiden算法的第三方库直接对接NetworkX对象,先执行命令安装依赖:

pip install pandas networkx cdlib

代码示例:

from cdlib import algorithms

# 原有建图代码无需修改
G = nx.from_pandas_edgelist(df_new, 'Source', 'Target', ['WeightCount', 'weight_cosine'], nx.Graph())

# 直接传入NetworkX图运行Leiden算法
communities = algorithms.leiden(G, weights='weight_cosine')

# 提取节点-社区ID映射结果
node_community_map = {}
for comm_id, comm_nodes in enumerate(communities.communities):
    for node in comm_nodes:
        node_community_map[node] = comm_id
使用提示
  • Leiden算法相对Louvain算法新增了社区细化步骤,既可以保证检测出的社区内部连通性,也大幅减少了冗余迭代计算,大规模图上的运行速度优势明显。
  • 若需要复现实验结果,务必固定随机种子,避免算法随机初始化节点遍历顺序带来的结果波动。
  • 若你的节点ID为字符串类型(比如用户名、IP地址),上述两种方案都可以直接支持,不需要额外做整数ID映射。

内容的提问来源于stack exchange,提问作者Manasa Kota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:24:25