networkx无向图连接最大节点的最弱边

2024-09-30 14:38:26 发布

您现在位置:Python中文网/ 问答频道 /正文

正在寻找有关python networkx的帮助

我有一个大约20k个共享邮箱和60K个电子邮件ID的数据集。1个电子邮件id可以位于多个邮箱中。我运行了网络图,它基本上将所有连接的电子邮件ID(通过邮箱)链接起来,形成集群。在大多数情况下,我使用<;100个电子邮件ID。然而,我最终得到了一个20k+邮箱的大集群。我现在需要通过删除最少数量的边,将这个大簇分解成更小的片段。使用networkx识别这些边的好方法是什么

下面是我目前用来创建网络图的代码

    #read from excel with 2 columns 'Shared_MailBox_Name', 'email_id'
    xls = pd.ExcelFile(input_file_shared_mailbox)
    df = pd.read_excel(xls, sheet_name = sheet_name_shared_mailbox)

    #create network graph
    g = nx.Graph()
    g.add_edges_from(df.itertuples(index=False))
    connected_components = nx.connected_components(g)

    # Find the component id of the nodes
    node2id = {}
    for cid, component in enumerate(connected_components):
        for node in component:
            node2id[node] = cid

    df['Ring#'] = df['Shared_MailBox_Name'].map(node2id)  #Assign Cluster Number

举个例子; 如果数据如下所示,那么我想知道A、B和C(而不是太多的D、E和F),这样我就可以从数据集中删除A、B、C,并将大集群分成最大数量的部分

enter image description here


Tags: 数据networkxiddfread数量电子邮件components