【发布时间】:2020-12-10 17:23:12
【问题描述】:
我有具有邻接方阵的网络数据,但没有包含任何键(没有包含人员的标识符)。
如何使用 networkx 包将我的邻接矩阵(csv 文件)存储为图形对象?
【问题讨论】:
我有具有邻接方阵的网络数据,但没有包含任何键(没有包含人员的标识符)。
如何使用 networkx 包将我的邻接矩阵(csv 文件)存储为图形对象?
【问题讨论】:
要将您的矩阵存储为 csv 格式,我认为您应该先将其转换为 pandas DataFrame。为此,您可以参考此https://networkx.org/documentation/stable//reference/generated/networkx.convert_matrix.to_pandas_adjacency.html#networkx.convert_matrix.to_pandas_adjacency
.请注意,如果您想在 DataFrame 格式下为每个节点命名,您可能需要使用 index 或 columns 属性来自定义索引。
将graph转换成pandasDataFrame后,可以使用to_csv导出。
【讨论】:
有几种方法可以将您的邻接矩阵从 csv 格式转换为图形对象,但在我看来,最直接的方法是使用 pandas 加载邻接矩阵,然后直接从 pandas 数据框对象创建一个图形:
# Example 3x3 adjacency matrix in csv file:
# 0 1 0
# 1 0 1
# 0 1 0
import networkx as nx
import pandas as pd
adjmat_df = pd.read_csv('adjmat.csv',header=None)
# This gives us the following dataframe:
# 0 1 2
# 0 0 1 0
# 1 1 0 1
# 2 0 1 0
# Create networkx graph object
G = nx.from_pandas_adjacency(adjmat_df)
print(nx.info(G))
# Name:
# Type: Graph
# Number of nodes: 3
# Number of edges: 2
# Average degree: 1.3333
nx.draw_shell(G, with_labels=True, alpha=0.7, font_size=15, node_size=500, node_color='r')
如果您有想要使用的节点标签,您只需将 pandas 数据框的列和索引设置为节点标签列表:
node_labels = ['A','B','C']
adjmat_df.columns = node_labels
adjmat_df.index = node_labels
G = nx.from_pandas_adjacency(adjmat_df)
nx.draw_shell(G, with_labels=True, alpha=0.7, font_size=15, node_size=500, node_color='r')
【讨论】: