【A3】创建图-连接表和邻接表创建图
连接表csv文件如下
创建图
G = nx.DiGraph() #有向
G = nx.Graph() #无向
print(G.is_directed())
# 给整张图添加特征属性
G.graph['Name'] = 'HelloWorld'
#从pandas df里直接创建(这里是多路图)
G = nx.from_pandas_edgelist(df, 'White', 'Black', edge_attr=True, create_using=nx.MultiDiGraph())
加边(连接):
- adding one edge at a time
G.add_edge(1, 2)
G.add_edge(0, 1, weight=0.5, like=3) #带有属性
e = (2, 3)
G.add_edge(*e) # unpack edge tuple*
- adding a list of edges
G.add_edges_from([(1, 2), (1, 3)])
G.add_edges_from([
(1, 2, {'weight': 0.3, 'like':5}),
(2, 0, {'weight': 0.1, 'like':8})
])
通过连接表Edge List(df)创建图
edges = [edge for edge in zip(df['head'], df['tail'])]
- adding any ebunch of edges.
An ebunch is any iterable container of edge-tuples. An edge-tuple can be a 2-tuple of nodes or a 3-tuple with 2 nodes followed by an edge attribute dictionary, e.g., (2, 3, {‘weight’: 3.1415}).
查看参数
#看边
G.edges('关羽') #显示以关羽为出发点(有向图)的所有边
#OutEdgeDataView([('关羽', '刘备'), ('关羽', '张飞')])
G.edges[(1, 0)] #显示某一条边的属性
#{'weight': 0.5, 'like': 3}
G.edges(data=True) #显示每条边的属性
#根据属性筛选边
for (u, v, d) in G.edges(data=True):
if d["weight"] < 800:
H.add_edge(u, v)
#多路图
G['Zukertort, Johannes H'][ 'Steinitz, Wilhelm']
G.get_edge_data('Zukertort, Johannes H', 'Steinitz, Wilhelm')
#全图参数
print(G)
#DiGraph with 123 nodes and 144 edges
#节点数
len(G)
G.number_of_nodes()
#查看所有节点
G.nodes
G.nodes(data=True) #显示每个节点的属性
#边数
G.size()
#所有边
G.edges
邻接表
由图转换
for line in nx.generate_adjlist(G):
print(line)
# 将邻接表导出为本地文件 grid.edgelist
nx.write_edgelist(G, path="grid.edgelist", delimiter=":")
读入并创建图
# 从本地文件 grid.edgelist 读取邻接表
H = nx.read_edgelist(path="grid.edgelist", delimiter=":")
【A4】创建节点
G.add_node('Tommy')
G.add_nodes_from(['诸葛亮', '曹操'])
#添加带属性的节点
G.add_nodes_from([
('关羽',{'武器': '青龙偃月刀','武力值':90,'智力值':80}),
('张飞',{'武器': '丈八蛇矛','武力值':85,'智力值':75}),
('吕布',{'武器':'方天画戟','武力值':100,'智力值':70})
])
# 创建0号节点,并添加特征属性
G.add_node(0, feature=5, label=0, zihao=2)
G.nodes[0] #{'feature': 5, 'label': 0, 'zihao': 2}
#加入另一个图中的所有节点
H = nx.path_graph(10) #串珠图
G.add_nodes_from(H)
#把另一个图作为一个节点加入
G.add_node(H)
节点可以为任意可哈希的对象,比如字符串、图像、XML对象,甚至另一个Graph、自定义的节点对象。
通过这种方式,你可以根据你的应用,自由灵活地构建:图为节点、文件为节点、函数为节点,等灵活的图形式。
【A5】关于连接
# 指定节点
node_id = 1
#某节点的度
G.degree[node_id]
# 指定节点的所有相邻节点
for neighbor in G.neighbors(node_id):
print("Node {} has neighbor {}".format(node_id, neighbor))