官方社群在线客服官方频道防骗查询货币工具

Python社交网络——NetworkX入门

2025年01月16日 05:54:47
news.like.tgnews.like.tgnews.like.tgnews.like.tg

LIKE.TG | 发现全球营销软件&服务汇聚顶尖互联网营销和AI营销产品,提供一站式出海营销解决方案。唯一官网:www.like.tg

特性

NetworkX是一个Python包,用于创建、操作和研究复杂网络的结构和功能。

  • 用于图、有向图和多重图的数据结构
  • 许多标准图数据算法
  • 网络结构和分析措施
  • 用于生成经典图、随机图和合成网络的生成器
  • 节点可以是“任何东西”(例如,文本、图像、XML记录)
  • 边可以容纳任意数据(例如,权重,时间序列)

无向图

Python

代码语言:javascript
复制
import networkx as nx import matplotlib.pyplot as plt # 无向图网络 G1 = nx.Graph() G1.add_edge('A', 'B') G1.add_edge('A', 'C') G1.add_edge('A', 'D') G1.add_edge('A', 'E') G1.add_edge('B', 'C') G1.add_edge('B', 'D') G1.add_edge('B', 'E') G1.add_edge('F', 'C') nx.spring_layout(G1) nx.draw_networkx(G1) plt.show() print('全部节点为:', G1.nodes()) print('全部边为:', G1.edges()) print('全部边数量:', G1.number_of_edges())

有向图

Python

代码语言:javascript
复制
# 有向图网络 G2 = nx.DiGraph() G2.add_edge('A', 'B') G2.add_edge('A', 'D') G2.add_edge('C', 'A') G2.add_edge('D', 'E') nx.spring_layout(G2) nx.draw_networkx(G2) plt.show()

加权图

Python

代码语言:javascript
复制
# 加权图网络 G3 = nx.Graph() G3.add_edge('A', 'B', weight=25) G3.add_edge('A', 'C', weight=8) G3.add_edge('A', 'D', weight=11) G3.add_edge('A', 'E', weight=1) G3.add_edge('B', 'C', weight=4) G3.add_edge('B', 'D', weight=7) G3.add_edge('B', 'E', weight=1) G3.add_edge('E', 'C', weight=1) nx.spring_layout(G3) nx.draw_networkx(G3) plt.show()

某一点到其他点的BFS图

代码语言:javascript
复制
T = nx.bfs_tree(G3, 'A') nx.draw_networkx(T) plt.show()

自带的Cycle图

Python

代码语言:javascript
复制
G4 = nx.cycle_graph(50) pos = nx.spring_layout(G4, iterations=200) nx.draw(G4, pos, node_color=range(50), node_size=500, font_weight='bold', with_labels=True) plt.show()

其他属性

Python

代码语言:javascript
复制
print('G1中A的度数:', nx.degree(G1, 'A')) print('G1中A的局部聚类系数:', nx.clustering(G1, 'A')) print('G1中两个点的最短路径:', nx.shortest_path(G1, 'A', 'F')) print('G3中两个点的最短路径长度:', nx.shortest_path_length(G3, 'D', 'E')) print('G1的节点离心度:', nx.eccentricity(G1))

实例

Python

代码语言:javascript
复制
# 导入带权图 G = nx.Graph() G.add_edges_from([('a', 'b', {'weight': 0.6}), ('a', 'c', {'weight': 0.2}), ('a', 'd', {'weight': 0.1}), ('c', 'e', {'weight': 0.7})]) # 对不同权重进行处理,取得相应权重的点集列表,比如weight>0.5的点集列表为[('a', 'b'), ('c', 'e')] elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] > 0.5] esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] <= 0.5] node1 = ['a', 'b'] node2 = ['c', 'd', 'e'] edge = {(u, v): d['weight'] for (u, v, d) in G.edges(data=True) if d['weight'] > 0.5} # 加权处理 # 必须设定一个统一的布局,保证下面分步绘制的图的统一性,而且分步绘制时pos是一个必须参数 pos = nx.spring_layout(G) # 分步绘制完整的图 # (1)绘制点,必须参数(G,pos),还可以指定点集(列表或optional)(默认全点集),形状,大小,透明度,等 nx.draw_networkx_nodes(G, pos=pos, nodelist=node1) # > 0.5 nx.draw_networkx_nodes(G, pos=pos, nodelist=node2, node_shape='*', node_color='r', node_size=700) # (2)绘制边,必须参数(G,pos, 还可以指定边集(边的元组集合(列表))(默认全边集),形状,大小,透明度,等 nx.draw_networkx_edges(G, pos=pos, edgelist=elarge) nx.draw_networkx_edges(G, pos=pos, edgelist=esmall, edge_color='b', style='dashed', width=3) # (3)绘制部分节点的标签,必须参数(G,pos),还可以指定点集(字典()或optional)(默认全点集),形状,大小,透明度,等 nx.draw_networkx_labels(G, pos=pos, labels={'a': 'a', 'b':'b', 'c': 'c', 'd': 'd', 'e': 'e'}, font_size=18, font_color='b', font_family='sans-serif') # (4)绘制边的标签,必须参数(G,pos),还可以指定边集(字典:键是边的元组,值是边的某个属性值)(默认全边集),形状,大小,透明度,等 # 根据字典,通过键给边添加值的标签,{('a', 'b'): 0.6, ('c', 'e'): 0.7} nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=edge, font_size=7, font_color='black', font_family='sans-serif') # 显示 plt.axis('off') plt.show()

实例来自:https://www.cnblogs.com/yu-liang/p/9117643.html

所有代码

Python

代码语言:javascript
复制
import networkx as nx import matplotlib.pyplot as plt # 无向图网络 G1 = nx.Graph() G1.add_edge('A', 'B') G1.add_edge('A', 'C') G1.add_edge('A', 'D') G1.add_edge('A', 'E') G1.add_edge('B', 'C') G1.add_edge('B', 'D') G1.add_edge('B', 'E') G1.add_edge('F', 'C') nx.spring_layout(G1) nx.draw_networkx(G1) plt.show() print('全部节点为:', G1.nodes()) print('全部边为:', G1.edges()) print('全部边数量:', G1.number_of_edges()) # 有向图网络 G2 = nx.DiGraph() G2.add_edge('A', 'B') G2.add_edge('A', 'D') G2.add_edge('C', 'A') G2.add_edge('D', 'E') nx.spring_layout(G2) nx.draw_networkx(G2) plt.show() # 加权图网络 G3 = nx.Graph() G3.add_edge('A', 'B', weight=25) G3.add_edge('A', 'C', weight=8) G3.add_edge('A', 'D', weight=11) G3.add_edge('A', 'E', weight=1) G3.add_edge('B', 'C', weight=4) G3.add_edge('B', 'D', weight=7) G3.add_edge('B', 'E', weight=1) G3.add_edge('E', 'C', weight=1) nx.spring_layout(G3) nx.draw_networkx(G3) plt.show() # 某一点到其他点的BFST = nx.bfs_tree(G3, 'A') nx.draw_networkx(T) plt.show() # 自带的Cycle图 G4 = nx.cycle_graph(50) pos = nx.spring_layout(G4, iterations=200) nx.draw(G4, pos, node_color=range(50), node_size=500, font_weight='bold', with_labels=True) plt.show() print('G1中A的度数:', nx.degree(G1, 'A')) print('G1中A的局部聚类系数:', nx.clustering(G1, 'A')) print('G1中两个点的最短路径:', nx.shortest_path(G1, 'A', 'F')) print('G3中两个点的最短路径长度:', nx.shortest_path_length(G3, 'D', 'E')) print('G1的节点离心度:', nx.eccentricity(G1)) # 导入带权图 G = nx.Graph() G.add_edges_from([('a', 'b', {'weight': 0.6}), ('a', 'c', {'weight': 0.2}), ('a', 'd', {'weight': 0.1}), ('c', 'e', {'weight': 0.7})]) # 对不同权重进行处理,取得相应权重的点集列表,比如weight>0.5的点集列表为[('a', 'b'), ('c', 'e')] elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] > 0.5] esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] <= 0.5] node1 = ['a', 'b'] node2 = ['c', 'd', 'e'] edge = {(u, v): d['weight'] for (u, v, d) in G.edges(data=True) if d['weight'] > 0.5} # 加权处理 # 必须设定一个统一的布局,保证下面分步绘制的图的统一性,而且分步绘制时pos是一个必须参数 pos = nx.spring_layout(G) # 分步绘制完整的图 # (1)绘制点,必须参数(G,pos),还可以指定点集(列表或optional)(默认全点集),形状,大小,透明度,等 nx.draw_networkx_nodes(G, pos=pos, nodelist=node1) # > 0.5 nx.draw_networkx_nodes(G, pos=pos, nodelist=node2, node_shape='*', node_color='r', node_size=700) # (2)绘制边,必须参数(G,pos, 还可以指定边集(边的元组集合(列表))(默认全边集),形状,大小,透明度,等 nx.draw_networkx_edges(G, pos=pos, edgelist=elarge) nx.draw_networkx_edges(G, pos=pos, edgelist=esmall, edge_color='b', style='dashed', width=3) # (3)绘制部分节点的标签,必须参数(G,pos),还可以指定点集(字典()或optional)(默认全点集),形状,大小,透明度,等 nx.draw_networkx_labels(G, pos=pos, labels={'a': 'a', 'b':'b', 'c': 'c', 'd': 'd', 'e': 'e'}, font_size=18, font_color='b', font_family='sans-serif') # (4)绘制边的标签,必须参数(G,pos),还可以指定边集(字典:键是边的元组,值是边的某个属性值)(默认全边集),形状,大小,透明度,等 # 根据字典,通过键给边添加值的标签,{('a', 'b'): 0.6, ('c', 'e'): 0.7} nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=edge, font_size=7, font_color='black', font_family='sans-serif') # 显示 plt.axis('off') plt.show()

LIKE.TG汇集全球营销软件&服务,助力出海企业营销增长。提供最新的“私域营销获客”“跨境电商”“全球客服”“金融支持”“web3”等一手资讯新闻。

点击【联系客服】 🎁 免费领 1G 住宅代理IP/proxy, 即刻体验 WhatsApp、LINE、Telegram、Twitter、ZALO、Instagram、signal等获客系统,社媒账号购买 & 粉丝引流自助服务或关注【LIKE.TG出海指南频道】【LIKE.TG生态链-全球资源互联社区】连接全球出海营销资源。

本文由LIKE.TG编辑部转载自互联网并编辑,如有侵权影响,请联系官方客服,将为您妥善处理。

This article is republished from public internet and edited by the LIKE.TG editorial department. If there is any infringement, please contact our official customer service for proper handling.


Server deployment全球论坛人工智能论坛全球峰会发展论坛战略论坛开放论坛程序员论坛互联网峰会科技峰会
加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg平台,即可获利、结识全球供应商、拥抱全球营销软件生态圈加入like.tg生态资源圈,即可获利、结识全球供应商、拥抱全球软件生态圈
加入like.tg生态圈,即可获利、结识全球供应商、拥抱全球软件生态圈加入like.tg平台,即可获利、结识全球供应商、拥抱全球营销软件生态圈加入like.tg生态资源圈,即可获利、结识全球供应商、拥抱全球软件生态圈