неориентированный граф networkx - самые слабые ребра, соединяющие самые большие узлы - PullRequest
1 голос
/ 02 апреля 2020

Нужна помощь по python networkx

У меня есть набор данных из примерно 20 000 общих почтовых ящиков и 60 000 идентификаторов электронной почты. 1 идентификатор электронной почты может быть в нескольких почтовых ящиках. Я запустил сетевой график, который в основном связал все подключенные идентификаторы электронной почты (по почтовым ящикам) для формирования кластеров. по большей части я получил кластеры с <100 идентификаторами электронной почты. тем не менее, я получаю один большой кластер из 20 тысяч почтовых ящиков. Теперь мне нужно разбить этот большой кластер на более мелкие части, удалив наименьшее количество ребер. Что было бы хорошим способом определения того, какими должны быть эти ребра, используя networkx. </p>

Ниже приведен код, который я сейчас использую для создания сетевого графа

    #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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...