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

基于Python的社交网络Homophily(同质性)计算问题咨询

同质性计算实现修正与说明

机会同质性部分

  • 现有逻辑正确,仅需修正两处细节:
    1. chance_homophily函数的参数注释有误,当前传入的是「节点为键、颜色为值的字典」,而非特征为键、频次为值的字典
    2. 函数内部对特征值转tuple的操作冗余,可直接用Counter(dataset.values())统计频次
  • 核心算法是各特征占比的平方和,符合机会同质性(随机连边下同属性连边的期望概率)的标准定义,无需修改。

网络构建部分

  • 现有代码nx.from_pandas_edgelist(df, source='Node', target='Target')默认生成无向图,会自动合并重复边(如A→N和N→A会被识别为同一条边)、忽略Target为空的行,符合无向网络同质性计算的常规需求。
  • 若你需要处理有向网络,可添加参数create_using=nx.DiGraph(),此时会保留双向边分别统计。
  • 孤立节点(如示例中的B)没有关联边,不会自动加入图中,但不影响实际同质性计算(同质性仅统计边的属性匹配情况)。

实际同质性计算部分

  • 现有函数存在冗余逻辑:遍历G.edges()时无需额外判断G.has_edge(n1, n2),遍历的结果本身就是图中存在的边。
  • 若你的图节点ID和原始数据的Node字段完全一致,可删除多余的IDs参数,简化函数逻辑:
def homophily(G, node_color_map):
    num_same_ties = 0
    num_valid_ties = 0
    for n1, n2 in G.edges():
        # 跳过缺少颜色属性的节点对
        if n1 not in node_color_map or n2 not in node_color_map:
            continue
        num_valid_ties += 1
        if node_color_map[n1] == node_color_map[n2]:
            num_same_ties += 1
    return num_same_ties / num_valid_ties if num_valid_ties > 0 else 0
  • 调用前可先构造节点颜色映射:node_color_map = df.drop_duplicates('Node').set_index('Node')['Colors'].to_dict(),直接传入函数即可。

邻接矩阵相关疑问

无需手动实现邻接矩阵统计逻辑,NetworkX内部已经维护了图的完整邻接关系,遍历G.edges()的统计结果和邻接矩阵计算的结果完全一致,和参考案例的底层逻辑没有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:15:02