环境配置与安装

!pip install numpy pandas matplotlib tqdm networkx -i https://pypi.tuna.tsinghua.edu.cn/simple

验证安装是否成功

import networkx as nx
print(nx.__version__)

导入工具包

import networkx as nx# 数据可视化
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

经典的图结构

全连接无向图

G = nx.complete_graph(7)
nx.draw(G)
# 全图连接数
G.size() # 21

全连接有向图

G = nx.complete_graph(7, nx.DiGraph())
nx.draw(G)
G.is_directed() #是否为有向图 true

环状图

G = nx.cycle_graph(5)
nx.draw(G)

其余经典网络图可参照文档

创建图

df = pd.read_csv('triples.csv')
G = nx.DiGraph()edges = [edge for edge in zip(df['head'], df['tail'])]
G.add_edges_from(edges)pos = nx.spring_layout(G, seed=123)plt.figure(figsize=(15,15))
nx.draw(G, pos=pos, with_labels=True)

创建节点

G = nx.Graph()
G.add_node('刘备')
G.add_node('Tommy')
G.nodes  # NodeView(('刘备', 'Tommy'))

添加节点

#添加多个节点
G.add_nodes_from(['诸葛亮', '曹操'])#添加带属性特征的节点
G.add_nodes_from([('关羽',{'武器': '青龙偃月刀','武力值':90,'智力值':80}),('张飞',{'武器': '丈八蛇矛','武力值':85,'智力值':75}),('吕布',{'武器':'方天画戟','武力值':100,'智力值':70})
])#将H的节点添加到G中
G.add_nodes_from(H)#将H本身作为一个节点添加到G中
G.add_node(H)

创建链接

#创建单个连接,设置属性特征
G.add_edge(0, 1, weight=0.5, like=3)创建多个连接
G.add_edges_from([(1, 2, {'weight': 0.3, 'like':5}),(2, 0, {'weight': 0.1, 'like':8})
])# 遍历所有连接,data=True 表示输出连接特征属性信息
for edge in G.edges(data=True):print(edge)

nx.draw可视化

基本可视化操作

nx.draw(G,pos,node_color='#A0CBE2',      # 节点颜色edgecolors='red',          # 节点外边缘的颜色edge_color="blue",         # edge的颜色# edge_cmap=plt.cm.coolwarm, # 配色方案node_size=800,with_labels=False,width=3,
)
nx.draw(G.to_directed(),pos,node_color="tab:orange",node_size=400,with_labels=False,edgecolors="tab:gray",arrowsize=10,width=2,
)
# 设置每个节点可视化时的坐标
pos = {1: (0, 0), 2: (-1, 0.3), 3: (2, 0.17), 4: (4, 0.255), 5: (5, 0.03)}# 设置其它可视化样式
options = {"font_size": 36,"node_size": 3000,"node_color": "white","edgecolors": "black", "linewidths": 5, # 节点线宽"width": 5, # edge线宽
}nx.draw_networkx(G, pos, **options)ax = plt.gca()
ax.margins(0.20) # 在图的边缘留白,防止节点被截断
plt.axis("off")
plt.show()

无向图可视化模板

fh = gzip.open("knuth_miles.txt.gz", "r")G = nx.Graph()
G.position = {}
G.population = {}cities = []
for line in fh.readlines(): # 遍历文件中的每一行line = line.decode()if line.startswith("*"):  # 其它行,跳过continuenumfind = re.compile(r"^\d+")if numfind.match(line):  # 记录城市间距离的行dist = line.split()for d in dist:G.add_edge(city, cities[i], weight=int(d))i = i + 1else:  # 记录城市经纬度、人口的行i = 1(city, coordpop) = line.split("[")cities.insert(0, city)(coord, pop) = coordpop.split("]")(y, x) = coord.split(",")G.add_node(city)# assign position - Convert string to lat/longx = -float(x) / 100y = float(y) / 100G.position[city] = (x, y)pop = float(pop) / 1000G.population[city] = popH = nx.Graph()
for v in G:H.add_node(v)
for (u, v, d) in G.edges(data=True):if d["weight"] < 800:H.add_edge(u, v)# 节点颜色-节点度
node_color = [float(H.degree(v)) for v in H]# 节点尺寸-节点人口
node_size = [G.population[v] for v in H]fig = plt.figure(figsize=(12, 10))
nx.draw(H,G.position,node_size=node_size,node_color=node_color,with_labels=False,
)
plt.show()

有向图可视化模板

seed = 13648
G = nx.random_k_out_graph(10, 3, 0.5, seed=seed)
pos = nx.spring_layout(G, seed=seed)# 节点大小
node_sizes = [12 + 10 * i for i in range(len(G))]# 节点颜色
M = G.number_of_edges()
edge_colors = range(2, M + 2)# 节点透明度
edge_alphas = [(5 + i) / (M + 4) for i in range(M)]plt.figure(figsize=(10,8))# 绘制节点
nodes = nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color="indigo")# 绘制连接
edges = nx.draw_networkx_edges(G,pos,node_size=node_sizes,   # 节点尺寸arrowstyle="->",        # 箭头样式arrowsize=20,           # 箭头尺寸edge_color=edge_colors, # 连接颜色edge_cmap=cmap,         # 连接配色方案width=4                # 连接线宽
)# 设置每个连接的透明度
for i in range(M):edges[i].set_alpha(edge_alphas[i])# 调色图例
pc = mpl.collections.PatchCollection(edges, cmap=cmap)
pc.set_array(edge_colors)
plt.colorbar(pc)ax = plt.gca()
ax.set_axis_off()
plt.show()

使用NetWorkX进行数据挖掘

基础节点特征

PageRank

pagerank = nx.pagerank(G, alpha=0.8)

节点连接数Node Degree度分析

#最大连通域子图
Gcc = G.subgraph(sorted(nx.connected_components(G), key=len, reverse=True)[0])#节点的度
G.degree()

棒棒糖图数据分析

# 第一个参数指定头部节点数,第二个参数指定尾部节点数
G = nx.lollipop_graph(4, 7)# 半径
nx.radius(G)  #4# 直径
nx.diameter(G)  #7# 偏心度:每个节点到图中其它节点的最远距离
nx.eccentricity(G)  #{0: 8, 1: 8, 2: 8, 3: 7, 4: 6, 5: 5, 6: 4, 7: 5, 8: 6, 9: 7, 10: 8}# 中心节点,偏心度与半径相等的节点
nx.center(G)  #[6]# 外围节点,偏心度与直径相等的节点
nx.periphery(G)  #[0, 1, 2, 10]#每两个节点之间的最短距离
pathlengths = []
for v in G.nodes():spl = nx.single_source_shortest_path_length(G, v)for p in spl:print('{} --> {} 最短距离 {}'.format(v, p, spl[p]))pathlengths.append(spl[p])# 平均最短距离
sum(pathlengths) / len(pathlengths) #3.2231404958677685nx.density(G)

n为节点个数,m为连接个数

对于无向图:

对于有向图:

无连接图的density为0,全连接图的density为1,Multigraph(多重连接图)和带self loop图的density可能大于1。

计算全图给graphlet

G = nx.karate_club_graph()
plt.figure(figsize=(10,8))
pos = nx.spring_layout(G, seed=123)
nx.draw(G, pos, with_labels=True)target = nx.complete_graph(3)num = 0
for sub_nodes in itertools.combinations(G.nodes(), len(target.nodes())):  # 遍历全图中,符合graphlet节点个数的所有节点组合subg = G.subgraph(sub_nodes)                                          # 从全图中抽取出子图if nx.is_connected(subg) and nx.is_isomorphic(subg, target):          # 如果子图是完整连通域,并且符合graphlet特征,输出原图节点编号num += 1print(subg.edges())# num = 45

拉普拉斯矩阵特征值分解

L 为拉普拉斯矩阵(Laplacian Matrix)

D 为节点degree对角矩阵

A 为邻接矩阵(Adjacency Matrix)

n = 1000  # 节点个数
m = 5000  # 连接个数
G = nx.gnm_random_graph(n, m, seed=5040)A = nx.adjacency_matrix(G) # 1000x1000L = nx.laplacian_matrix(G)# 节点degree对角矩阵
D = L + A#特征值分解
e = np.linalg.eigvals(L_n.A)#归一化拉普拉斯矩阵
L_n = nx.normalized_laplacian_matrix(G)

归一化拉普拉斯矩阵(Normalized Laplacian Matrix)

实战演练

【坑】

NetWorkX使用初试相关推荐

  1. 初试linux编译(ubuntu+vim)+玩转智能蛇

    一.初试linux编译(ubuntu+vim) 步骤: ①下载vmware15+ubuntu桌面版映像 ②安装ubuntu ③下载vim+gcc 在ubuntu终端输入: sudo apt-get i ...

  2. python networkx教程_如何在python中使用networkx绘制有向图?

    我只是为了完整而把它放进去 . 我从marius和mdml中学到了很多东西 . 这是边缘权重 . 抱歉箭头 . 看起来我不是唯一一个说它无法帮助的人 . 我无法使用ipython笔记本呈现这一点我不得 ...

  3. python networkx绘制图

    python networkx绘制图 1. 效果图 2. 安装 3. 源码 参考 这篇博客将介绍如何使用python,networkx绘制图. 1. 效果图 可调整点的大小,点是否有label,点的颜 ...

  4. 使用NetworkX绘制深度神经网络结构图(Python)

    本文将展示如何利用Python中的NetworkX模块来绘制深度神经网络(DNN)结构图. 已知我们创建的DNN结构图如下: 该DNN模型由输入层.隐藏层.输出层和softmax函数组成,每一层的神经 ...

  5. 北邮计算机科学技术是学硕吗,【计算机考研】2020北京邮电大学计算机科学与技术考研初试科目、参考书目、复试详情汇总...

    原标题:[计算机考研]2020北京邮电大学计算机科学与技术考研初试科目.参考书目.复试详情汇总 一.考试科目 计院的学硕是计算机科学与技术,专硕为计算机技术. 计算机科学与技术: ①101思想政治理论 ...

  6. 一文读懂Python复杂网络分析库networkx | CSDN博文精选

    作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...

  7. 浙江大学计算机研究生分数线初试单科学科,2016年浙江大学计算机考研复试分数线_浙江大学考研分数线...

    成绩查询的时间越来越近了,来看看历年的分数线来估算一下自己是准备复试还是准备调剂吧,小编为大家整理了2016年浙江大学计算机考研复试分数线赶紧来看看.小编还为大家精心准备了浙江大学2016年计算机考研 ...

  8. python networkx模块,python复杂网络处理模块networkx

    最近开始认真的学习发现一个 python 好玩的模块 以下内容为网上的文章整合 networkx在02年5月产生,是用python语言编写的软件包,便于用户对复杂网络进行创建.操作和学习.利用netw ...

  9. NetworkX玩一下 --update@2017.06.28

    写在前面的话 She is compelling,spectral, fascinating, an unforgettably unique performer 在写NetworkX的时候我想起来一 ...

最新文章

  1. 转】用Maven构建Mahout项目
  2. python编程规范
  3. mysql to char 用法_postgresql 中的to_char()常用操作
  4. 从零开始学视觉Transformer (11):目标检测DETR-2
  5. 【SCIR笔记】ACL20 让模型“事半功倍”,探究少样本序列标注方法
  6. Docker概念学习系列之详谈Docker 的核心组件与概念(5)
  7. 简析发送手机验证码原理
  8. 哨兵-2 Sentinel-2 数据下载(USGS)
  9. CRichEditDoc下保存文档出现\rtf1\ansi\ansicpg936\deff0的解决方法
  10. Hive3.1.2安装指南
  11. 基于Proteus学习单片机系列(九)——DA转换及其应用--TLC5615
  12. python处理word页码_使用Python向Word文档添加页码
  13. Java day 31 网络编程和简单练习
  14. linux 无线网卡ping不同,请教高手,本地网卡和无线网卡均不能ping通网关
  15. 单片机霹雳灯双灯c语言,HOLTEK单片机-8LED霹雳灯
  16. C语言——分支语句和循环语句
  17. 大数据时代的网络舆情(0710)
  18. 微信小程序***实现身份验证
  19. 如何让Arduino IDE支持你手里的STM32 nucleo开发板
  20. 云计算市场价值爆发,两马之战日趋激烈

热门文章

  1. JSP Servlet 实现模糊动态查询并分页(拼接Sql)
  2. var,let,const 声明中一般人不知道的几个点
  3. 联想t系列服务器,联想更新2019年款ThinkPad X与T系列笔记本电脑产品
  4. Java线程安全的集合
  5. python控制手机屏幕亮度的软件,通过adb操作安卓亮屏、设置背光亮度、解锁、打开app...
  6. 原生js 实现九宫格抽奖功能
  7. Java中finalize方法
  8. java 数字从小到大输出_Java如何实现将数字由小到大输出
  9. html5 footer header,html-5 --html5教程article、footer、header、nav、section使用
  10. 基于小波变换和机器学习的地震信号处理和识别