nx.bipartite.biadjacency_matrix() - отслеживание узлов

Я использую Python 3.6 и Networkx 2.1. Я импортирую двудольный граф из взвешенного списка ребер, а затем вызываю матричную функцию двунаправленности и преобразовываю результат в кадр данных pandas для выполнения некоторых операций над ним, например, для вычисления некоторых коэффициентов корреляции (функции, выполняющие эти вычисления, принимают матрицы смежности в качестве входных данных, следовательно, мне нужно трансформировать свой крайний список)

import pandas as pd
from networkx import bipartite
A=bipartite.biadjacency_matrix(G, nodes1, nodes2).todense()
A=pd.DataFrame(A)

дело в том, что когда я звоню bipartite.biadjacency_matrix() Я теряю имена узлов, полученный фрейм данных выглядит примерно так:

    0   1   2   3   4   5   6   7   8   9  ...  13  14  15  16  17  18  19  \
0    0   0   0   1   0   0   0   0   0   0 ...   0  11   0   2   0   2   1   
1    0   0   0   0   0   0   0   0   0   0 ...   1  23   2   0   0   3   5   
2    0   0   0   0   0   0   0   0   1   0 ...   3  24   3   5   0   3   5   
3    0   0   0   0   0   0   0   0   0   0 ...   0  18   0   2   0   0   1   
4    0   0   0   0   0   0   0   0   1   0 ...   1  17   4   8   0   4   2 
.
.
.

поэтому после вычисления коэффициентов корреляции я могу построить сеть на основе матриц подобия, которые я получаю, но я не знаю, кто есть кто, кто есть кто. Любое предложение о том, как восстановить имена?

1 ответ

Из документов bipartite.biadjacency_matrix:

row_order: список узлов. Строки матрицы упорядочены в соответствии со списком узлов.

column_order: list, необязательный. Столбцы матрицы упорядочены в соответствии со списком узлов. Если значение column_order равно None, то порядок столбцов является произвольным.

и из pd.DataFrame:

index: Индекс или индекс в виде массива, который будет использоваться для результирующего кадра. По умолчанию будет np.arange(n), если нет индексируемой информационной части входных данных и индекс не предоставлен

columns: индексные или массивные метки столбцов для использования в результирующем кадре. По умолчанию будет np.arange(n), если не указаны метки столбцов.

Вы выводите эту матрицу A строки упорядочены с использованием nodes1 и столбцы, использующие nodes2, Чтобы получить тот же порядок в вашем фрейме данных просто:

A = pd.DataFrame(A, index=nodes1, columns=nodes2)
Другие вопросы по тегам