NetworkX创建图

【A3】创建图-连接表和邻接表创建图

连接表csv文件如下
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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值