├── README.md └── networkx_example_code ├── 1.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── 15.png ├── 16.png ├── 17.png ├── 18.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── 9.png ├── BA.adjlist ├── adjacency_matrix.csv ├── edges.gexf ├── edges.gml ├── edges.xlsx ├── edges1.gexf ├── networkx_example02.ipynb ├── networkx_example03.ipynb ├── networkx_example04.ipynb ├── networkx_example05.ipynb ├── networkx_example06.ipynb ├── networkx_example07.ipynb ├── networkx_example08.ipynb ├── networkx_example09.ipynb ├── networkx_example10.ipynb ├── networkx_example11.ipynb ├── networkx_example12.ipynb ├── networkx_example13.ipynb ├── networkx_example14.ipynb ├── networkx_example15.ipynb ├── networkx_example16.ipynb ├── networkx_example17.ipynb ├── networkx_example18.ipynb ├── networkx_example19.ipynb ├── networkx_example20.ipynb ├── networkx_example21.ipynb ├── networkx_example22.ipynb ├── networkx_example23.ipynb ├── networkx_example24.ipynb ├── networkx_example25.ipynb ├── read_graphml_to_network.py └── test.gexf /README.md: -------------------------------------------------------------------------------- 1 | # NetworkX编程实践基础25课:NetworkX官方手册使用解读 2 | 3 | ```python 4 | # !/usr/bin/python3 5 | # -*- coding: utf-8 -*- 6 | # Author : 单哥的科研日常(公众号、B站) 7 | # 示例程序所用库的版本:networkx==2.6.3, matplotlib==3.5.2, pandas==1.4.3 8 | # 点击蓝色标题可跳转视频讲解界面 9 | ``` 10 | 11 | NetworkX编程实践基础课程是入门复杂网络很关键的一门课程,是专门针对编程基础薄弱的同学而推出的一门编程实践课程。在具备NetworkX编程基础之后,可以继续学习[复杂网络建模](https://www.bilibili.com/video/BV1WR4y1G7kH/?vd_source=519dd7a4b1f4260ebe31140657f52698)(点击可跳转课程界面)课程以加深对复杂网络的理解。 12 | 13 | NetworkX编程实践基础课程源代码见: 14 | 15 | [https://github.com/dange-academic/networkx_example_code](https://) 16 | 17 | ## 目录 18 | 19 | 01 [熟悉networkx官方教程](https://www.bilibili.com/video/BV1Wa411N7NH/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 20 | 21 | 02 [生成一个简单图](https://www.bilibili.com/video/BV1wB4y1r7zr/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 22 | 23 | 03 [获取网络的邻接矩阵](https://www.bilibili.com/video/BV1gW4y1a7e1/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 24 | 25 | 04 [根据邻接矩阵生成网络](https://www.bilibili.com/video/BV1bT411L7ZA/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 26 | 27 | 05 [网络节点的度、平均度以及度分布](https://www.bilibili.com/video/BV1LW4y1Y7E5/?vd_source=519dd7a4b1f4260ebe31140657f52698) 28 | 29 | 06 [网络的最短距离和平均距离](https://www.bilibili.com/video/BV1na411P7yi/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 30 | 31 | 07 [网络的局部集聚系数、平均集聚系数以及全局集聚系数](https://www.bilibili.com/video/BV1qD4y1z772/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 32 | 33 | 08 [网络节点之间的独立路径数量](https://www.bilibili.com/video/BV1aB4y1x7fs/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 34 | 35 | 09 [计算网络的相关性系数和平均近邻度](https://www.bilibili.com/video/BV1Kt4y1E7Q1/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 36 | 37 | 10 [计算网络节点的中心性](https://www.bilibili.com/video/BV1NB4y1G7UN/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 38 | 39 | 11 [获取网络的最大连通子图](https://www.bilibili.com/video/BV1ng411S7pP/?vd_source=519dd7a4b1f4260ebe31140657f52698) 40 | 41 | 12 [网络的k核](https://www.bilibili.com/video/BV1XD4y1B7ib/?vd_source=519dd7a4b1f4260ebe31140657f52698) 42 | 43 | 13 [连通网络的效率](https://www.bilibili.com/video/BV1b14y1s7mn/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 44 | 45 | 14 [针对图、节点以及连边的一些基本功能](https://www.bilibili.com/video/BV1NG4y1r7Au/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 46 | 47 | 15 [常见的图(网络)生成器-规则、ER随机、WS小世界以及BA无标度网络的生成](https://www.bilibili.com/video/BV1og411U7Ps/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 48 | 49 | 16 [图的各种矩阵](https://www.bilibili.com/video/BV1dg411m71J/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 50 | 51 | 17 [计算图的邻接矩阵的谱和拉普拉斯矩阵的谱(特征值)](https://www.bilibili.com/video/BV1dV4y1T7AK/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 52 | 53 | 18 [网络与其他数据之间的转换](https://www.bilibili.com/video/BV1cg411U7af/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 54 | 55 | 19 [通过pandas读取外部网络数据生成网络](https://www.bilibili.com/video/BV1yD4y1q7Ba/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 56 | 57 | 20 [对网络节点重新编号](https://www.bilibili.com/video/BV1md4y1X756/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 58 | 59 | 21 [网络的读与写功能介绍](https://www.bilibili.com/video/BV1pT411u7Vq/?vd_source=519dd7a4b1f4260ebe31140657f52698) 60 | 61 | 22 [网络可视化(初级)](https://www.bilibili.com/video/BV1se411M7hB/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 62 | 63 | 23 [网络可视化(进阶)](https://www.bilibili.com/video/BV1NP4y1o77H/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 64 | 65 | 24 [网络可视化(高阶)](https://www.bilibili.com/video/BV1mP411H7Vi/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) 66 | 67 | 25 [facebook社交网络分析案例](https://www.bilibili.com/video/BV1qd4y1B7j2/?spm_id_from=333.788&vd_source=519dd7a4b1f4260ebe31140657f52698) -------------------------------------------------------------------------------- /networkx_example_code/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/1.png -------------------------------------------------------------------------------- /networkx_example_code/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/10.png -------------------------------------------------------------------------------- /networkx_example_code/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/11.png -------------------------------------------------------------------------------- /networkx_example_code/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/12.png -------------------------------------------------------------------------------- /networkx_example_code/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/13.png -------------------------------------------------------------------------------- /networkx_example_code/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/14.png -------------------------------------------------------------------------------- /networkx_example_code/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/15.png -------------------------------------------------------------------------------- /networkx_example_code/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/16.png -------------------------------------------------------------------------------- /networkx_example_code/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/17.png -------------------------------------------------------------------------------- /networkx_example_code/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/18.png -------------------------------------------------------------------------------- /networkx_example_code/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/2.png -------------------------------------------------------------------------------- /networkx_example_code/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/3.png -------------------------------------------------------------------------------- /networkx_example_code/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/4.png -------------------------------------------------------------------------------- /networkx_example_code/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/5.png -------------------------------------------------------------------------------- /networkx_example_code/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/6.png -------------------------------------------------------------------------------- /networkx_example_code/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/7.png -------------------------------------------------------------------------------- /networkx_example_code/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/8.png -------------------------------------------------------------------------------- /networkx_example_code/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/9.png -------------------------------------------------------------------------------- /networkx_example_code/BA.adjlist: -------------------------------------------------------------------------------- 1 | #d:\python39\lib\site-packages\ipykernel_launcher.py --ip=127.0.0.1 --stdin=9019 --control=9017 --hb=9016 --Session.signature_scheme="hmac-sha256" --Session.key=b"89420fa6-c926-4efd-8408-3910c06236af" --shell=9018 --transport="tcp" --iopub=9020 --f=c:\Users\dange\AppData\Roaming\jupyter\runtime\kernel-v2-680OC4CdUL9uGE4.json 2 | # GMT Sat Sep 17 05:25:39 2022 3 | # 4 | 0 1 2 3 6 7 5 | 1 3 4 5 8 6 | 2 4 8 9 7 | 3 7 9 8 | 4 5 9 | 5 6 10 | 6 11 | 7 12 | 8 13 | 9 14 | -------------------------------------------------------------------------------- /networkx_example_code/adjacency_matrix.csv: -------------------------------------------------------------------------------- 1 | 0,1,1,0 2 | 1,0,1,1 3 | 1,1,0,0 4 | 0,1,0,0 5 | -------------------------------------------------------------------------------- /networkx_example_code/edges.gexf: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | Gephi 0.9.3 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /networkx_example_code/edges.gml: -------------------------------------------------------------------------------- 1 | graph 2 | [ 3 | Creator "Gephi" 4 | directed 0 5 | node 6 | [ 7 | id 5 8 | label "5" 9 | graphics 10 | [ 11 | x -425.0245 12 | y 420.3442 13 | z 0.0 14 | w 10.0 15 | h 10.0 16 | d 10.0 17 | fill "#999999" 18 | ] 19 | ] 20 | node 21 | [ 22 | id 1 23 | label "1" 24 | graphics 25 | [ 26 | x -447.0272 27 | y 378.63217 28 | z 0.0 29 | w 10.0 30 | h 10.0 31 | d 10.0 32 | fill "#999999" 33 | ] 34 | ] 35 | node 36 | [ 37 | id 2 38 | label "2" 39 | graphics 40 | [ 41 | x -360.18063 42 | y 409.26413 43 | z 0.0 44 | w 10.0 45 | h 10.0 46 | d 10.0 47 | fill "#999999" 48 | ] 49 | ] 50 | node 51 | [ 52 | id 3 53 | label "3" 54 | graphics 55 | [ 56 | x -374.39188 57 | y 350.84235 58 | z 0.0 59 | w 10.0 60 | h 10.0 61 | d 10.0 62 | fill "#999999" 63 | ] 64 | ] 65 | node 66 | [ 67 | id 4 68 | label "4" 69 | graphics 70 | [ 71 | x -426.18402 72 | y 331.57892 73 | z 0.0 74 | w 10.0 75 | h 10.0 76 | d 10.0 77 | fill "#999999" 78 | ] 79 | ] 80 | edge 81 | [ 82 | id 1 83 | source 5 84 | target 2 85 | value 1.0 86 | fill "#808080" 87 | ] 88 | edge 89 | [ 90 | id 2 91 | source 5 92 | target 4 93 | value 1.0 94 | fill "#808080" 95 | ] 96 | edge 97 | [ 98 | id 3 99 | source 1 100 | target 3 101 | value 1.0 102 | fill "#808080" 103 | ] 104 | edge 105 | [ 106 | id 4 107 | source 5 108 | target 1 109 | value 1.0 110 | fill "#808080" 111 | ] 112 | ] 113 | -------------------------------------------------------------------------------- /networkx_example_code/edges.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dange-academic/networkx_example_code/435ee002358669678b3d79c4773653553453ce7f/networkx_example_code/edges.xlsx -------------------------------------------------------------------------------- /networkx_example_code/edges1.gexf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Gephi 0.9.3 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /networkx_example_code/networkx_example10.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true, 7 | "pycharm": { 8 | "name": "#%% md\n" 9 | } 10 | }, 11 | "source": [ 12 | "### 《NetworkX编程实践基础》\n", 13 | "##### 10课:计算网络节点的中心性\n", 14 | "##### 度中心性、特征向量中心性、接近度中心性、\n", 15 | "##### 介数中心性和PageRank中心性" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": { 22 | "collapsed": false, 23 | "pycharm": { 24 | "name": "#%%\n" 25 | } 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "# !/usr/bin/python3\n", 30 | "# -*- coding: utf-8 -*-\n", 31 | "# Author : 单哥的科研日常\n", 32 | "# 示例程序所用库的版本:networkx==2.6.3" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 1, 38 | "metadata": { 39 | "collapsed": false, 40 | "pycharm": { 41 | "name": "#%%\n" 42 | } 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "import networkx as nx" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "#### 创建一个简单无向图来展开演示" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 2, 59 | "metadata": { 60 | "collapsed": false, 61 | "pycharm": { 62 | "name": "#%%\n" 63 | } 64 | }, 65 | "outputs": [ 66 | { 67 | "data": { 68 | "image/png": "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", 69 | "text/plain": [ 70 | "
" 71 | ] 72 | }, 73 | "metadata": {}, 74 | "output_type": "display_data" 75 | } 76 | ], 77 | "source": [ 78 | "G = nx.Graph()\n", 79 | "G.add_nodes_from([1,2,3,4,5,6,7])\n", 80 | "G.add_edges_from([(1,2),(2,3),(2,4),(2,5),(4,5),(4,6),(4,7),(5,7)])\n", 81 | "nx.draw(G, node_size=500, with_labels=True)" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 8, 87 | "metadata": { 88 | "collapsed": false, 89 | "pycharm": { 90 | "name": "#%%\n" 91 | } 92 | }, 93 | "outputs": [ 94 | { 95 | "name": "stdout", 96 | "output_type": "stream", 97 | "text": [ 98 | "{1: 0.16666666666666666, 2: 0.6666666666666666, 3: 0.16666666666666666, 4: 0.6666666666666666, 5: 0.5, 6: 0.16666666666666666, 7: 0.3333333333333333}\n", 99 | "节点1的度中心性值为0.1667\n", 100 | "节点2的度中心性值为0.6667\n", 101 | "节点3的度中心性值为0.1667\n", 102 | "节点4的度中心性值为0.6667\n", 103 | "节点5的度中心性值为0.5000\n", 104 | "节点6的度中心性值为0.1667\n", 105 | "节点7的度中心性值为0.3333\n" 106 | ] 107 | } 108 | ], 109 | "source": [ 110 | "# 度中心性\n", 111 | "print(nx.degree_centrality(G))\n", 112 | "# 遍历输出结果\n", 113 | "DC = nx.degree_centrality(G)\n", 114 | "for i in DC.keys():\n", 115 | " print(\"节点{}的度中心性值为{:.4f}\".format(i, DC[i]))" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": 4, 121 | "metadata": {}, 122 | "outputs": [ 123 | { 124 | "name": "stdout", 125 | "output_type": "stream", 126 | "text": [ 127 | "{1: 0.17163197298906557, 2: 0.48607121913025153, 3: 0.17163197298906557, 4: 0.5416128697886126, 5: 0.49170712426901436, 6: 0.19124263164112745, 7: 0.3648637563453076}\n" 128 | ] 129 | } 130 | ], 131 | "source": [ 132 | "# 特征向量中心性\n", 133 | "print(nx.eigenvector_centrality(G))" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": 5, 139 | "metadata": {}, 140 | "outputs": [ 141 | { 142 | "name": "stdout", 143 | "output_type": "stream", 144 | "text": [ 145 | "{1: 0.46153846153846156, 2: 0.75, 3: 0.46153846153846156, 4: 0.75, 5: 0.6666666666666666, 6: 0.46153846153846156, 7: 0.5}\n" 146 | ] 147 | } 148 | ], 149 | "source": [ 150 | "# 接近度中心性\n", 151 | "print(nx.closeness_centrality(G))" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": 6, 157 | "metadata": { 158 | "collapsed": false, 159 | "pycharm": { 160 | "name": "#%%\n" 161 | } 162 | }, 163 | "outputs": [ 164 | { 165 | "name": "stdout", 166 | "output_type": "stream", 167 | "text": [ 168 | "{1: 0.0, 2: 0.6, 3: 0.0, 4: 0.43333333333333335, 5: 0.1, 6: 0.0, 7: 0.0}\n", 169 | "{(1, 2): 0.2857142857142857, (2, 3): 0.2857142857142857, (2, 4): 0.3571428571428571, (2, 5): 0.21428571428571427, (4, 5): 0.09523809523809523, (4, 6): 0.2857142857142857, (4, 7): 0.16666666666666666, (5, 7): 0.11904761904761904}\n" 170 | ] 171 | } 172 | ], 173 | "source": [ 174 | "# 节点介数中心性\n", 175 | "print(nx.betweenness_centrality(G))\n", 176 | "# 边介数中心性\n", 177 | "print(nx.edge_betweenness_centrality(G))" 178 | ] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": 7, 183 | "metadata": { 184 | "collapsed": false, 185 | "pycharm": { 186 | "name": "#%%\n" 187 | } 188 | }, 189 | "outputs": [ 190 | { 191 | "name": "stdout", 192 | "output_type": "stream", 193 | "text": [ 194 | "{1: 0.07394083453512931, 2: 0.24711838758037688, 3: 0.07394083453512931, 4: 0.23621729817083723, 5: 0.17573965983237305, 6: 0.07162495997566895, 7: 0.12141802537048527}\n" 195 | ] 196 | } 197 | ], 198 | "source": [ 199 | "# PageRank中心性\n", 200 | "print(nx.pagerank(G))" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": null, 206 | "metadata": {}, 207 | "outputs": [], 208 | "source": [] 209 | } 210 | ], 211 | "metadata": { 212 | "kernelspec": { 213 | "display_name": "Python 3.9.6 64-bit", 214 | "language": "python", 215 | "name": "python3" 216 | }, 217 | "language_info": { 218 | "codemirror_mode": { 219 | "name": "ipython", 220 | "version": 3 221 | }, 222 | "file_extension": ".py", 223 | "mimetype": "text/x-python", 224 | "name": "python", 225 | "nbconvert_exporter": "python", 226 | "pygments_lexer": "ipython3", 227 | "version": "3.9.6" 228 | }, 229 | "vscode": { 230 | "interpreter": { 231 | "hash": "12cf4d0b9b7b18c55261077a6853aabe6f033db06abf1184072cd2e823f414c8" 232 | } 233 | } 234 | }, 235 | "nbformat": 4, 236 | "nbformat_minor": 0 237 | } 238 | -------------------------------------------------------------------------------- /networkx_example_code/networkx_example13.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true, 7 | "pycharm": { 8 | "name": "#%% md\n" 9 | } 10 | }, 11 | "source": [ 12 | "### 《NetworkX编程实践基础》\n", 13 | "##### 13课:连通网络的效率" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": { 20 | "collapsed": false, 21 | "pycharm": { 22 | "name": "#%%\n" 23 | } 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "# !/usr/bin/python3\n", 28 | "# -*- coding: utf-8 -*-\n", 29 | "# Author : 单哥的科研日常\n", 30 | "# 示例程序所用库的版本:networkx==2.6.3" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 2, 36 | "metadata": { 37 | "collapsed": false, 38 | "pycharm": { 39 | "name": "#%%\n" 40 | } 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "import networkx as nx" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "#### 创建一个简单连通无向图来展开演示" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 3, 57 | "metadata": { 58 | "collapsed": false, 59 | "pycharm": { 60 | "name": "#%%\n" 61 | } 62 | }, 63 | "outputs": [ 64 | { 65 | "data": { 66 | "image/png": "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", 67 | "text/plain": [ 68 | "
" 69 | ] 70 | }, 71 | "metadata": {}, 72 | "output_type": "display_data" 73 | } 74 | ], 75 | "source": [ 76 | "G = nx.Graph()\n", 77 | "G.add_nodes_from([1,2,3,4,5,6,7])\n", 78 | "G.add_edges_from([(1,2),(2,3),(2,4),(2,5),(4,5),(4,6),(4,7),(5,7)])\n", 79 | "nx.draw(G, node_size=500, with_labels=True)" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 4, 85 | "metadata": { 86 | "collapsed": false, 87 | "pycharm": { 88 | "name": "#%%\n" 89 | } 90 | }, 91 | "outputs": [ 92 | { 93 | "name": "stdout", 94 | "output_type": "stream", 95 | "text": [ 96 | "0.3333333333333333\n" 97 | ] 98 | } 99 | ], 100 | "source": [ 101 | "# 计算指定节点对之间的效率:节点之间最短路径距离的倒数\n", 102 | "print(nx.efficiency(G, 3, 7))" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 5, 108 | "metadata": {}, 109 | "outputs": [ 110 | { 111 | "name": "stdout", 112 | "output_type": "stream", 113 | "text": [ 114 | "0.3452380952380953\n" 115 | ] 116 | } 117 | ], 118 | "source": [ 119 | "# 平均局部效率:网络节点的局部效率是该节点的邻居引起的子图的平均全局效率。\n", 120 | "# 平均局部效率是每个节点的局部效率的平均值。\n", 121 | "print(nx.local_efficiency(G))" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 6, 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "name": "stdout", 131 | "output_type": "stream", 132 | "text": [ 133 | "0.6587301587301587\n" 134 | ] 135 | } 136 | ], 137 | "source": [ 138 | "# 全局效率:所有节点对之间效率的平均值\n", 139 | "print(nx.global_efficiency(G))" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": null, 145 | "metadata": {}, 146 | "outputs": [], 147 | "source": [] 148 | } 149 | ], 150 | "metadata": { 151 | "kernelspec": { 152 | "display_name": "Python 3.9.6 64-bit", 153 | "language": "python", 154 | "name": "python3" 155 | }, 156 | "language_info": { 157 | "codemirror_mode": { 158 | "name": "ipython", 159 | "version": 3 160 | }, 161 | "file_extension": ".py", 162 | "mimetype": "text/x-python", 163 | "name": "python", 164 | "nbconvert_exporter": "python", 165 | "pygments_lexer": "ipython3", 166 | "version": "3.9.6" 167 | }, 168 | "vscode": { 169 | "interpreter": { 170 | "hash": "12cf4d0b9b7b18c55261077a6853aabe6f033db06abf1184072cd2e823f414c8" 171 | } 172 | } 173 | }, 174 | "nbformat": 4, 175 | "nbformat_minor": 0 176 | } 177 | -------------------------------------------------------------------------------- /networkx_example_code/networkx_example14.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true, 7 | "pycharm": { 8 | "name": "#%% md\n" 9 | } 10 | }, 11 | "source": [ 12 | "### 《NetworkX编程实践基础》\n", 13 | "##### 14课:针对图、节点以及连边的一些基本功能" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": { 20 | "collapsed": false, 21 | "pycharm": { 22 | "name": "#%%\n" 23 | } 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "# !/usr/bin/python3\n", 28 | "# -*- coding: utf-8 -*-\n", 29 | "# Author : 单哥的科研日常\n", 30 | "# 示例程序所用库的版本:networkx==2.6.3" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 2, 36 | "metadata": { 37 | "collapsed": false, 38 | "pycharm": { 39 | "name": "#%%\n" 40 | } 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "import networkx as nx" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "#### 创建一个简单连通无向图来展开演示" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 3, 57 | "metadata": { 58 | "collapsed": false, 59 | "pycharm": { 60 | "name": "#%%\n" 61 | } 62 | }, 63 | "outputs": [ 64 | { 65 | "data": { 66 | "image/png": "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", 67 | "text/plain": [ 68 | "
" 69 | ] 70 | }, 71 | "metadata": {}, 72 | "output_type": "display_data" 73 | } 74 | ], 75 | "source": [ 76 | "G = nx.Graph()\n", 77 | "G.add_nodes_from([1,2,3,4,5,6,7])\n", 78 | "G.add_edges_from([(1,2),(2,3),(2,4),(2,5),(4,5),(4,6),(4,7),(5,7)])\n", 79 | "nx.draw(G, node_size=500, with_labels=True)" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 7, 85 | "metadata": { 86 | "collapsed": false, 87 | "pycharm": { 88 | "name": "#%%\n" 89 | } 90 | }, 91 | "outputs": [ 92 | { 93 | "name": "stdout", 94 | "output_type": "stream", 95 | "text": [ 96 | "{1: 1, 2: 4, 3: 1, 4: 4, 5: 3, 6: 1, 7: 2}\n", 97 | "Graph with 7 nodes and 8 edges\n", 98 | "Node 4 has the following properties:\n", 99 | "Degree: 4\n", 100 | "Neighbors: 2 5 6 7\n", 101 | "0.38095238095238093\n" 102 | ] 103 | } 104 | ], 105 | "source": [ 106 | "# 获取图节点的度\n", 107 | "print(dict(nx.degree(G)))\n", 108 | "# 获取图的基本信息\n", 109 | "print(nx.info(G))\n", 110 | "# 获取指定节点的信息\n", 111 | "print(nx.info(G, 4))\n", 112 | "# 计算图连边密度\n", 113 | "print(nx.density(G))\n" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 14, 119 | "metadata": {}, 120 | "outputs": [ 121 | { 122 | "name": "stdout", 123 | "output_type": "stream", 124 | "text": [ 125 | "[1, 2, 3, 4, 5, 6, 7]\n", 126 | "7\n", 127 | "[1, 3, 4, 5]\n", 128 | "[6, 7]\n", 129 | "[5]\n" 130 | ] 131 | } 132 | ], 133 | "source": [ 134 | "# 返回图节点标签\n", 135 | "print(nx.nodes(G))\n", 136 | "# 返回节点数量\n", 137 | "print(nx.number_of_nodes(G))\n", 138 | "# 获取指定节点的邻居\n", 139 | "print(list(nx.neighbors(G, 2)))\n", 140 | "# 获取指定节点的非邻居\n", 141 | "print(list(nx.non_neighbors(G, 2)))\n", 142 | "# 获取图中两个节点的公共邻居\n", 143 | "print(list(nx.common_neighbors(G, 2, 4)))" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 15, 149 | "metadata": {}, 150 | "outputs": [ 151 | { 152 | "name": "stdout", 153 | "output_type": "stream", 154 | "text": [ 155 | "[(1, 2), (2, 3), (2, 4), (2, 5), (4, 5), (4, 6), (4, 7), (5, 7)]\n" 156 | ] 157 | } 158 | ], 159 | "source": [ 160 | "# 返回所有连边\n", 161 | "print(nx.edges(G))\n", 162 | "# 返回连边数量\n", 163 | "print(nx.number_of_edges(G))" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": null, 169 | "metadata": {}, 170 | "outputs": [], 171 | "source": [] 172 | } 173 | ], 174 | "metadata": { 175 | "kernelspec": { 176 | "display_name": "Python 3.9.6 64-bit", 177 | "language": "python", 178 | "name": "python3" 179 | }, 180 | "language_info": { 181 | "codemirror_mode": { 182 | "name": "ipython", 183 | "version": 3 184 | }, 185 | "file_extension": ".py", 186 | "mimetype": "text/x-python", 187 | "name": "python", 188 | "nbconvert_exporter": "python", 189 | "pygments_lexer": "ipython3", 190 | "version": "3.9.6" 191 | }, 192 | "vscode": { 193 | "interpreter": { 194 | "hash": "12cf4d0b9b7b18c55261077a6853aabe6f033db06abf1184072cd2e823f414c8" 195 | } 196 | } 197 | }, 198 | "nbformat": 4, 199 | "nbformat_minor": 0 200 | } 201 | -------------------------------------------------------------------------------- /networkx_example_code/networkx_example16.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true, 7 | "pycharm": { 8 | "name": "#%% md\n" 9 | } 10 | }, 11 | "source": [ 12 | "### 《NetworkX编程实践基础》\n", 13 | "##### 16课:图的各种矩阵" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": { 20 | "collapsed": false, 21 | "pycharm": { 22 | "name": "#%%\n" 23 | } 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "# !/usr/bin/python3\n", 28 | "# -*- coding: utf-8 -*-\n", 29 | "# Author : 单哥的科研日常\n", 30 | "# 示例程序所用库的版本:networkx==2.6.3" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 1, 36 | "metadata": { 37 | "collapsed": false, 38 | "pycharm": { 39 | "name": "#%%\n" 40 | } 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "import networkx as nx" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 6, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "data": { 54 | "image/png": "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QAAPPfQQ77//vosr87xp06bhdDr54x//aHYpplCPT0SqvMTERP7617+SkpJC7dq1K9zOzp07+f3vf8/BgwfxL+V4I6vavXs3Xbt2ZdOmTTQrw76lVZF6fCJSpe3YsYOnn36apUuXVir0AKKioqhfvz7/+c9/XFSdZzkcDuLi4nj55Zd9NvRAwSciVdhPP/1E//79+cc//uGy6fpDhw5l7ty5LmnL015//XVq1arF448/bnYpptJQp4hUSYWFhfTt25fw8HCmT5/usnYzMzNp1qwZBw8e5Morr3RZu+72zTff0Lt3b7Zs2UJjL19/WFnq8YlIlTRp0iSysrJ48803Xdpu3bp16dWrl1dt75WXl0dcXByTJ0/2+dADBZ+IVEGff/457777LosWLSIoKMjl7cfFxXnV7M6XX36Za6+9lri4OLNLsQQNdYpIlbJ//35uvfVWFi9ezG233eaWZ+Tn59OoUSPWrVvHdddd55ZnuMrXX3/NPffcw/bt22nQoIHZ5ViCenwiUmVkZ2czYMAAXnjhBbeFHkBgYCA2m40PPvjAbc9whZycHOLi4njrrbcUehdRj09EqgSn08nQoUNxOBx89NFH+Pn5ufV533zzDffddx8HDhygWjVr9iGeffZZ0tPTvep9pCf4zq6kIlKlzZgxg23btrFhwwa3hx5A69atqV27NsnJyfTs2dPtzyuvtWvXYrfb+fbbb80uxXKs+TFFRKQcNmzYwPjx41m6dCk1atTw2HOtuqbvzJkzxMfH8+6773L11VebXY7laKhTRLzasWPH6NChAzNmzOCee+7x6LNPnDhB8+bNOXToEFdccYVHn12SkSNHcubMGa+aeepJ6vGJiNfKz89n0KBBxMfHezz0AOrVq0f37t1ZvHixx59dnKSkJD799FOmTZtmdimWpeATEa81duxYQkNDGTdunGk1WGlN388//8zw4cOZOXMmV111ldnlWJaGOkXEK82fP58XXniBlJQU6ph4InpeXh5hYWFs3ryZiIgI0+oAGDZsGEFBQbz77rum1mF16vGJiNfZuXMno0aNYsmSJaaGHkBQUBCDBw82fU3fv//9b5KTk5k8ebKpdXgD9fhExKv8/PPPdOjQgb/97W8MGTLE7HIA2LJlCw8++CB79+41ZU1fZmYmN910E3a7ne7du3v8+d5GPT4R8RqFhYU8/PDD3HHH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", 55 | "text/plain": [ 56 | "
" 57 | ] 58 | }, 59 | "metadata": {}, 60 | "output_type": "display_data" 61 | } 62 | ], 63 | "source": [ 64 | "# 生成包含n个节点,连边概率为p的ER随机图\n", 65 | "n, p = 8, 0.5\n", 66 | "G = nx.erdos_renyi_graph(n, p)\n", 67 | "nx.draw(G, node_size=500, node_color='red', with_labels=True)" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 7, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "name": "stdout", 77 | "output_type": "stream", 78 | "text": [ 79 | " (0, 6)\t1\n", 80 | " (0, 7)\t1\n", 81 | " (1, 3)\t1\n", 82 | " (1, 4)\t1\n", 83 | " (1, 6)\t1\n", 84 | " (1, 7)\t1\n", 85 | " (2, 5)\t1\n", 86 | " (3, 1)\t1\n", 87 | " (3, 4)\t1\n", 88 | " (4, 1)\t1\n", 89 | " (4, 3)\t1\n", 90 | " (4, 5)\t1\n", 91 | " (4, 6)\t1\n", 92 | " (5, 2)\t1\n", 93 | " (5, 4)\t1\n", 94 | " (6, 0)\t1\n", 95 | " (6, 1)\t1\n", 96 | " (6, 4)\t1\n", 97 | " (6, 7)\t1\n", 98 | " (7, 0)\t1\n", 99 | " (7, 1)\t1\n", 100 | " (7, 6)\t1\n", 101 | "[[0 0 0 0 0 0 1 1]\n", 102 | " [0 0 0 1 1 0 1 1]\n", 103 | " [0 0 0 0 0 1 0 0]\n", 104 | " [0 1 0 0 1 0 0 0]\n", 105 | " [0 1 0 1 0 1 1 0]\n", 106 | " [0 0 1 0 1 0 0 0]\n", 107 | " [1 1 0 0 1 0 0 1]\n", 108 | " [1 1 0 0 0 0 1 0]]\n" 109 | ] 110 | } 111 | ], 112 | "source": [ 113 | "# 邻接矩阵\n", 114 | "As = nx.adjacency_matrix(G) \n", 115 | "print(As)\n", 116 | "# 注意:对于networkx2.6以后的版本(如2.7,2.8)无法正常打印As,\n", 117 | "# 会出现:FutureWarning: adjacency_matrix will return a\n", 118 | "# scipy.sparse array instead of a matrix in Networkx 3.0.\n", 119 | "# 但并不影响获取邻接矩阵。\n", 120 | "\n", 121 | "# 转化成二维矩阵\n", 122 | "print(As.todense())" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 9, 128 | "metadata": {}, 129 | "outputs": [ 130 | { 131 | "data": { 132 | "text/plain": [ 133 | "matrix([[1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", 134 | " [0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0.],\n", 135 | " [0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n", 136 | " [0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0.],\n", 137 | " [0., 0., 0., 1., 0., 0., 0., 1., 1., 1., 0.],\n", 138 | " [0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0.],\n", 139 | " [1., 0., 0., 0., 1., 0., 0., 0., 0., 1., 1.],\n", 140 | " [0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 1.]])" 141 | ] 142 | }, 143 | "execution_count": 9, 144 | "metadata": {}, 145 | "output_type": "execute_result" 146 | } 147 | ], 148 | "source": [ 149 | "# 返回G的关联矩阵:N*M,N为节点数,M为连边数\n", 150 | "IM = nx.incidence_matrix(G)\n", 151 | "IM.todense()" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": 12, 157 | "metadata": {}, 158 | "outputs": [ 159 | { 160 | "name": "stdout", 161 | "output_type": "stream", 162 | "text": [ 163 | "[[ 2 0 0 0 0 0 -1 -1]\n", 164 | " [ 0 4 0 -1 -1 0 -1 -1]\n", 165 | " [ 0 0 1 0 0 -1 0 0]\n", 166 | " [ 0 -1 0 2 -1 0 0 0]\n", 167 | " [ 0 -1 0 -1 4 -1 -1 0]\n", 168 | " [ 0 0 -1 0 -1 2 0 0]\n", 169 | " [-1 -1 0 0 -1 0 4 -1]\n", 170 | " [-1 -1 0 0 0 0 -1 3]]\n" 171 | ] 172 | } 173 | ], 174 | "source": [ 175 | "# 返回G的拉普拉斯矩阵\n", 176 | "Ls = nx.laplacian_matrix(G)\n", 177 | "# print(Ls)\n", 178 | "L = Ls.todense() # L = D - A,D为节点度组成的对角矩阵,A为邻接矩阵\n", 179 | "print(L)" 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "metadata": {}, 185 | "source": [ 186 | "#### 标准化的拉普拉斯矩阵如下:\n", 187 | "$N=D^{-1 / 2} L D^{-1 / 2}$" 188 | ] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "execution_count": 14, 193 | "metadata": {}, 194 | "outputs": [ 195 | { 196 | "name": "stdout", 197 | "output_type": "stream", 198 | "text": [ 199 | "[[ 1. 0. 0. 0. 0. 0.\n", 200 | " -0.35355339 -0.40824829]\n", 201 | " [ 0. 1. 0. -0.35355339 -0.25 0.\n", 202 | " -0.25 -0.28867513]\n", 203 | " [ 0. 0. 1. 0. 0. -0.70710678\n", 204 | " 0. 0. ]\n", 205 | " [ 0. -0.35355339 0. 1. -0.35355339 0.\n", 206 | " 0. 0. ]\n", 207 | " [ 0. -0.25 0. -0.35355339 1. -0.35355339\n", 208 | " -0.25 0. ]\n", 209 | " [ 0. 0. -0.70710678 0. -0.35355339 1.\n", 210 | " 0. 0. ]\n", 211 | " [-0.35355339 -0.25 0. 0. -0.25 0.\n", 212 | " 1. -0.28867513]\n", 213 | " [-0.40824829 -0.28867513 0. 0. 0. 0.\n", 214 | " -0.28867513 1. ]]\n" 215 | ] 216 | } 217 | ], 218 | "source": [ 219 | "# 返回G的标准化拉普拉斯矩阵\n", 220 | "NLs = nx.normalized_laplacian_matrix(G)\n", 221 | "NL = NLs.todense()\n", 222 | "print(NL)" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": null, 228 | "metadata": {}, 229 | "outputs": [], 230 | "source": [] 231 | } 232 | ], 233 | "metadata": { 234 | "kernelspec": { 235 | "display_name": "Python 3.9.6 64-bit", 236 | "language": "python", 237 | "name": "python3" 238 | }, 239 | "language_info": { 240 | "codemirror_mode": { 241 | "name": "ipython", 242 | "version": 3 243 | }, 244 | "file_extension": ".py", 245 | "mimetype": "text/x-python", 246 | "name": "python", 247 | "nbconvert_exporter": "python", 248 | "pygments_lexer": "ipython3", 249 | "version": "3.9.6" 250 | }, 251 | "vscode": { 252 | "interpreter": { 253 | "hash": "12cf4d0b9b7b18c55261077a6853aabe6f033db06abf1184072cd2e823f414c8" 254 | } 255 | } 256 | }, 257 | "nbformat": 4, 258 | "nbformat_minor": 0 259 | } 260 | -------------------------------------------------------------------------------- /networkx_example_code/networkx_example17.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true, 7 | "pycharm": { 8 | "name": "#%% md\n" 9 | } 10 | }, 11 | "source": [ 12 | "### 《NetworkX编程实践基础》\n", 13 | "##### 17课:计算图的邻接矩阵的谱和拉普拉斯矩阵的谱(特征值)" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": { 20 | "collapsed": false, 21 | "pycharm": { 22 | "name": "#%%\n" 23 | } 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "# !/usr/bin/python3\n", 28 | "# -*- coding: utf-8 -*-\n", 29 | "# Author : 单哥的科研日常\n", 30 | "# 示例程序所用库的版本:networkx==2.6.3, numpy==1.23.1" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 6, 36 | "metadata": { 37 | "collapsed": false, 38 | "pycharm": { 39 | "name": "#%%\n" 40 | } 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "import networkx as nx\n", 45 | "import numpy as np" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 7, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "data": { 55 | "image/png": "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", 56 | "text/plain": [ 57 | "
" 58 | ] 59 | }, 60 | "metadata": {}, 61 | "output_type": "display_data" 62 | } 63 | ], 64 | "source": [ 65 | "# 生成包含n个节点,连边概率为p的ER随机图\n", 66 | "n, p = 8, 0.5\n", 67 | "G = nx.erdos_renyi_graph(n, p)\n", 68 | "nx.draw(G, node_size=500, node_color='red', with_labels=True)" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 8, 74 | "metadata": {}, 75 | "outputs": [ 76 | { 77 | "name": "stdout", 78 | "output_type": "stream", 79 | "text": [ 80 | "[ 4.25628605 1.29570135 -2.45959493 -2.07701748 0.52525633 0.11403002\n", 81 | " -1.13042233 -0.52423901]\n" 82 | ] 83 | } 84 | ], 85 | "source": [ 86 | "# 计算邻接矩阵的特征值\n", 87 | "print(np.real(nx.adjacency_spectrum(G)))\n" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 9, 93 | "metadata": {}, 94 | "outputs": [ 95 | { 96 | "name": "stdout", 97 | "output_type": "stream", 98 | "text": [ 99 | "[-2.11853105e-16 1.69884512e+00 2.95342694e+00 3.62790206e+00\n", 100 | " 4.33099764e+00 5.68149429e+00 6.50216927e+00 7.20516469e+00]\n" 101 | ] 102 | } 103 | ], 104 | "source": [ 105 | "# 计算拉普拉斯矩阵的特征值:第一个特征值通常为0\n", 106 | "print(np.real(nx.laplacian_spectrum(G)))" 107 | ] 108 | } 109 | ], 110 | "metadata": { 111 | "kernelspec": { 112 | "display_name": "Python 3.9.6 64-bit", 113 | "language": "python", 114 | "name": "python3" 115 | }, 116 | "language_info": { 117 | "codemirror_mode": { 118 | "name": "ipython", 119 | "version": 3 120 | }, 121 | "file_extension": ".py", 122 | "mimetype": "text/x-python", 123 | "name": "python", 124 | "nbconvert_exporter": "python", 125 | "pygments_lexer": "ipython3", 126 | "version": "3.9.6" 127 | }, 128 | "vscode": { 129 | "interpreter": { 130 | "hash": "12cf4d0b9b7b18c55261077a6853aabe6f033db06abf1184072cd2e823f414c8" 131 | } 132 | } 133 | }, 134 | "nbformat": 4, 135 | "nbformat_minor": 0 136 | } 137 | -------------------------------------------------------------------------------- /networkx_example_code/networkx_example18.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true, 7 | "pycharm": { 8 | "name": "#%% md\n" 9 | } 10 | }, 11 | "source": [ 12 | "### 《NetworkX编程实践基础》\n", 13 | "##### 18课:网络与其他数据之间的转换" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": { 20 | "collapsed": false, 21 | "pycharm": { 22 | "name": "#%%\n" 23 | } 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "# !/usr/bin/python3\n", 28 | "# -*- coding: utf-8 -*-\n", 29 | "# Author : 单哥的科研日常\n", 30 | "# 示例程序所用库的版本:networkx==2.6.3" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 2, 36 | "metadata": { 37 | "collapsed": false, 38 | "pycharm": { 39 | "name": "#%%\n" 40 | } 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "import networkx as nx" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 9, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "data": { 54 | "image/png": "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", 55 | "text/plain": [ 56 | "
" 57 | ] 58 | }, 59 | "metadata": {}, 60 | "output_type": "display_data" 61 | } 62 | ], 63 | "source": [ 64 | "# 将字典数据转化为网络\n", 65 | "d = {0: {1: {\"weight\": 1}, 2: {\"weight\": 2}}, 1: {2: {\"weight\": 3.5}}}\n", 66 | "G = nx.Graph(d)\n", 67 | "# 或者\n", 68 | "# G = nx.from_dict_of_dicts(d)\n", 69 | "edge_width = nx.get_edge_attributes(G, \"weight\")\n", 70 | "# print(width)\n", 71 | "nx.draw(G, node_size=500, node_color='red', with_labels=True, width=list(edge_width.values()))" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 8, 77 | "metadata": {}, 78 | "outputs": [ 79 | { 80 | "name": "stdout", 81 | "output_type": "stream", 82 | "text": [ 83 | "{0: {1: {'weight': 1}, 2: {'weight': 2}}, 1: {0: {'weight': 1}, 2: {'weight': 3.5}}, 2: {0: {'weight': 2}, 1: {'weight': 3.5}}}\n" 84 | ] 85 | } 86 | ], 87 | "source": [ 88 | "# 反过来把网络转换成字典数据\n", 89 | "print(nx.to_dict_of_dicts(G))" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 11, 95 | "metadata": {}, 96 | "outputs": [ 97 | { 98 | "name": "stdout", 99 | "output_type": "stream", 100 | "text": [ 101 | "[(0, 1, {'weight': 1}), (0, 2, {'weight': 2}), (1, 2, {'weight': 3.5})]\n" 102 | ] 103 | } 104 | ], 105 | "source": [ 106 | "# 其他转换格式使用类似\n", 107 | "edgelist = nx.to_edgelist(G)\n", 108 | "print(edgelist)" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 13, 114 | "metadata": {}, 115 | "outputs": [], 116 | "source": [ 117 | "G = nx.from_edgelist(edgelist)" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 14, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "text/plain": [ 128 | "matrix([[0. , 1. , 2. ],\n", 129 | " [1. , 0. , 3.5],\n", 130 | " [2. , 3.5, 0. ]])" 131 | ] 132 | }, 133 | "execution_count": 14, 134 | "metadata": {}, 135 | "output_type": "execute_result" 136 | } 137 | ], 138 | "source": [ 139 | "# 获取邻接矩阵:matrix格式\n", 140 | "A = nx.to_numpy_matrix(G)\n", 141 | "A" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 15, 147 | "metadata": {}, 148 | "outputs": [ 149 | { 150 | "data": { 151 | "text/plain": [ 152 | "array([[0. , 1. , 2. ],\n", 153 | " [1. , 0. , 3.5],\n", 154 | " [2. , 3.5, 0. ]])" 155 | ] 156 | }, 157 | "execution_count": 15, 158 | "metadata": {}, 159 | "output_type": "execute_result" 160 | } 161 | ], 162 | "source": [ 163 | "# 获取邻接矩阵:array格式\n", 164 | "A = nx.to_numpy_array(G)\n", 165 | "A" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": null, 171 | "metadata": {}, 172 | "outputs": [], 173 | "source": [] 174 | } 175 | ], 176 | "metadata": { 177 | "kernelspec": { 178 | "display_name": "Python 3.9.6 64-bit", 179 | "language": "python", 180 | "name": "python3" 181 | }, 182 | "language_info": { 183 | "codemirror_mode": { 184 | "name": "ipython", 185 | "version": 3 186 | }, 187 | "file_extension": ".py", 188 | "mimetype": "text/x-python", 189 | "name": "python", 190 | "nbconvert_exporter": "python", 191 | "pygments_lexer": "ipython3", 192 | "version": "3.9.6" 193 | }, 194 | "vscode": { 195 | "interpreter": { 196 | "hash": "12cf4d0b9b7b18c55261077a6853aabe6f033db06abf1184072cd2e823f414c8" 197 | } 198 | } 199 | }, 200 | "nbformat": 4, 201 | "nbformat_minor": 0 202 | } 203 | -------------------------------------------------------------------------------- /networkx_example_code/networkx_example20.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true, 7 | "pycharm": { 8 | "name": "#%% md\n" 9 | } 10 | }, 11 | "source": [ 12 | "### 《NetworkX编程实践基础》\n", 13 | "##### 20课:对网络节点重新编号" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": { 20 | "collapsed": false, 21 | "pycharm": { 22 | "name": "#%%\n" 23 | } 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "# !/usr/bin/python3\n", 28 | "# -*- coding: utf-8 -*-\n", 29 | "# Author : 单哥的科研日常\n", 30 | "# 示例程序所用库的版本:networkx==2.6.3" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 1, 36 | "metadata": { 37 | "collapsed": false, 38 | "pycharm": { 39 | "name": "#%%\n" 40 | } 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "import networkx as nx" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 2, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "data": { 54 | "text/plain": [ 55 | "[0, 1, 2]" 56 | ] 57 | }, 58 | "execution_count": 2, 59 | "metadata": {}, 60 | "output_type": "execute_result" 61 | } 62 | ], 63 | "source": [ 64 | "G = nx.path_graph(3)\n", 65 | "sorted(G)" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 3, 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "data": { 75 | "text/plain": [ 76 | "['a', 'b', 'c']" 77 | ] 78 | }, 79 | "execution_count": 3, 80 | "metadata": {}, 81 | "output_type": "execute_result" 82 | } 83 | ], 84 | "source": [ 85 | "mapping = {0: \"a\", 1: \"b\", 2: \"c\"}\n", 86 | "H = nx.relabel_nodes(G, mapping)\n", 87 | "sorted(H)" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 4, 93 | "metadata": {}, 94 | "outputs": [ 95 | { 96 | "data": { 97 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAed0lEQVR4nO3dfXDV1b3v8XfIg8lGKASkREKIIVpBqr0dbsUHWq1YPAWitaJWSzHQdjz2QYF6Oy1VS7WH06FVRy1ce+ThVqvU5xZp7S22auAWb9WqF9QqMEk0gkgCSoGQ7CT3jx8gEbJ3Akl+e+/f+zXDhMa9F1+nmM9e67fWd2W1tbW1IUlSRPQJuwBJknqTwSdJihSDT5IUKQafJClSDD5JUqQYfJKkSDH4JEmRYvBJkiLF4JMkRYrBJ0mKFINPkhQpBp8kKVIMPklSpBh8kqRIMfgkSZFi8EmSIsXgkyRFisEnSYoUg0+SFCk5YRcgKYXF41BdDY2NkJ8PpaWQ448NpTf/Bktqr74eliyBpUth40bIzYXsbGhpgaYmKC+HykqYORMKC8OuVuqyrLa2trawi5CUApqaYN48uPVWyMqCPXs6fm1BAbS1wezZcNNNkJfXe3VKR8ngkwS1tTBhAtTVwe7dnX9fLAbDhsGqVVBS0nP1Sd3I4JOirrYWxo6FhoZgObOrsrODJc/nnzf8lBYMPinKmppgzBjYtOnIQm+/7GwoK4P164NnglIK8ziDFGXz5gXLm0cTehC8v64uGE9Kcc74pKiqr4fi4uCoQgcagJnA/wYGA/OBKxKNmZ8fBKC7PZXCnPFJUbVkSbB7M4FvAXnAu8BvgH8H1id6Q1YWLF7cXRVKPcIZnxRVo0fDa691+I93AQOBdcBJ+743DRgG/GeycdcnjEcpVM74pCiKx4PD6Qm8QdDh4qSDvncaSWZ8ABs2BONLKcrgk6Koujrp7st/Af0/8r2PATuTjZ2bG4wvpSiDT4qixsbgCEICxwIffOR7HwD9ko2dnZ1ww4wUNoNPiqL8/KRHGE4C4sCbB33vZeCUZGO3tATjSynKzS1SFMXj0LdvcIA9gcuBLOAe4CXgi8D/IUn45eXBrl3e4qCU5YxPiqKcHBg5MunLFgJ7gCHAV4BFdGLGV15u6CmlGXxSVFVWBrcsJFAIPE5wtKGWJIfXIRivsrI7qpN6jEudUlQ1NAQ3K3TnRhQ7tygNOOOToqqwMLhPLxbrnvFiMZgzx9BTynPGJ0WZtzMogpzxSVGWlxdcIltYmPRcX4f238e3apWhp7Rg8ElRV1ISXCJbVtb1Zc9YLHifl9AqjRh8koLQWrcOrrsO8vNpS7Lbk1gs2Mgya1awvGnoKY34jE9Sew0NbPmP/+CDO+7gpKysYPkyOzt4BtjcHJzTq6yEGTPcyKK05ClTSe0VFvLYyJH83yuvZOl//VfQcLqxMZjhlZZ6OF1pz7/Bkg5RVVXFhAkTgpArLw+7HKlb+YxPUjttbW08++yzfPaznw27FKlHGHyS2qmurqa1tZWRnejlKaUjg09SO88++yzjx48nKysr7FKkHmHwSWrHZU5lOoNPUjtVVVWMHz8+7DKkHmPwSTpgy5YtbNu2jTFjxoRditRjDD5JB1RVVXH22WfTp48/GpS5/Nst6YD9G1ukTGbwSTrAjS2KAnt1SgJg+/btlJSU0NDQQK7XCymDOeOTBMCaNWs4/fTTDT1lPINPEhBsbHGZU1Fg8EkC3Nii6PAZnyR27drFkCFDeO+994h19RZ2Kc0445PEc889x2mnnWboKRIMPkkeY1CkGHyS7M+pSPEZnxRxTU1NDBo0iLfeeosBAwaEXY7U45zxSRH3wgsvUF5ebugpMgw+KeJc5lTUGHxSxLmxRVHjMz4pwlpaWhg8eDCvv/46H//4x8MuR+oVzvikCFu3bh1Dhgwx9BQpBp8UYfbnVBQZfFKE2Z9TUeQzPimi2traKCoqYu3atZSWloZdjtRrnPFJEbVhwwZyc3MZMWJE2KVIvcrgkyJq/zGGrKyssEuRepXBJ0WUG1sUVQafFFFubFFUGXxSBL399tvs3LmTUaNGhV2K1OsMPimCqqqqOPvss32+p0gy+KQIsj+noszgkyLIjS2KMg+wSxGzbds2Ro4cSX19PTk5OWGXI/U6Z3xSxKxevZozzjjD0FNkGXxSxHjxrKLO4JMixo0tijqf8UkRsnPnToqKiti2bRv5+flhlyOFwhmfFCF/+9vf+PSnP23oKdIMPilCXOaUDD4pUtzYIvmMT4qMvXv3MmjQIDZv3ky/fv3CLkcKjTM+KSL+/ve/M2rUKENPkWfwSRHhNURSwOCTIsKNLVLAZ3xSBMTjcQYNGsTGjRsZPHhw2OVIoXLGJ0XAyy+/THFxsaEnYfBJkeA1RNKHDD4pAtzYIn3IZ3xShmtra2PIkCG8+OKLDB8+POxypNA545My3Ouvv86xxx5r6En7GHxShvMYg9SewSdlOPtzSu0ZfFIGa2tr45lnnnHGJx3E4JMyWE1NDc3NzZx44olhlyKlDINPymD7lzmzsrLCLkVKGQaflMHc2CIdyuCTMpgbW6RDeYBdylDvvvsun/jEJ6ivryc7OzvscqSU4YxPylBVVVWcffbZhp70EQaflKFc5pQOz+CTMpQbW6TD8xmflIHef/99hg0bRkNDA3l5eWGXI6UUZ3xSBlqzZg2f+cxnDD3pMAw+KQN58azUMYNPykBePCt1zGd8UobZs2cPgwcPZuvWrfTt2zfscqSU44xPyjDPPfccn/zkJw09qQMGn5RhPMYgJWbwSRnGjS1SYj7jkzJIc3MzhYWF1NbWMnDgwLDLkVKSMz4pg7z44ouUlZUZelICBp+UQezPKSVn8EkZxI0tUnI+45MyRGtrK4MHD2b9+vUUFRWFXY6UsnLCLkDSEYrHoboaGhshP5/1O3cyaNAgQ09KwhmflE7q62HJEli6FDZuhNxcyM6GlhZaGht599hjOX7uXJg5EwoLw65WSkkGn5QOmppg3jy49VbIyoI9ezp+bUEBtLXB7Nlw003gDQ1SOwaflOpqa2HCBKirg927O/++WAyGDYNVq6CkpOfqk9KMwSelstpaGDsWGhqgpaXr78/ODpY8n3/e8JP2MfikVNXUBGPGwKZNRxZ6+2VnQ1kZrF8fPBOUIs5zfFKqmjcvWN48mtCD4P11dcF4kpzxSSmpvh6Ki4OjCh3YC1wDrAIagJHAfODfOnpDfn4QgO72VMQ545NS0ZIlwe7NBOLAcOAZ4H3gFuBSoLqjN2RlweLF3VejlKac8UmpaPRoeO21Lr/tVOAm4MuJxl2//igKk9KfwSelmngc+vYNNrd0wbvACOAl4OSOXpSXB7t2QY5NmxRdLnVKqaa6usu7L5uBK4HpJAg9CMatrj7SyqSMYPBJqaaxMTiC0EmtwDQgD7gr2YuzsxNumJGiwPUOHeojzY8pLXVprId88MEHvPXWW9TW1h74unf9en7yr39R0In3twEzCZY5/wAknSe2tAT/n0oR5k8zBRI0P6apCcrLobLS5sdd0NTURF1dHbW1te2C7eCvzc3NlJSUMHz48ANfyydN4pgnnoDW1qR/xr8DrxEcaehMUNLcHHyQkSLMzS1RZ/PjI9La2srWrVsPG2b7v27bto2ioqJ2ofbRr4WFhWQd7thCJ3Z11gClwDG0/wR7N8HzvsNyV6dk8EWazY87dLglyIN/X1dXR79+/ToMtJKSEoYOHUrOkS4RL1gQfLhI9EGkqwoK4Cc/ge99r/vGlNKQwRdVEW5+3NTUxNtvv51wtna4JciSkpIDvy8uLiYWi/VckQ0NwYeL7tyIYucWCTD4oimDmx8nW4Ksra2lvr6eoqKihLO1gQMHHn4JsjfNnQu339612XhHYjGYNQtuueXox5LSnMEXRWn8A/WDDz7ocJb20SXIjoKtqKiI7C4cFwhNN31AiQPbBw5k0ObN9DnmmO6rT0pTBl/UdKL58TnAWj7cMDEM+GeiMbtpCa0zS5DxeDzhZpHhw4dTUNCp/Y3poRuWpFsHDuSysjKai4q47777OPbYY7u/TimNeJwhajrR/BiCg9Bf7+yY+5sfX399hy/56BLk4YKtvr6e448/vl2QnXrqqUyaNOnA/06JJcjeVFISPEc9ik1IfVat4jdDh3L11Vczfvx4VqxYQXFxcc/VLKU4Z3xR04lt8ucAX6ULwQe0nHwyrz30UMIlyP79+x+ySeSjuyDTYgkyDF05dhKLBWcA58wJdobue/7a1tbGggULuOOOO3j88ccZO3ZsLxUvpRaDL0o62fz4HGA9QVeQTwA/3fe9RPYCY08+meM7CLXi4uLMWoIMS0NDMLtetgw2bGjfaKC5+cNGAzNmdLj0/Pjjj/ONb3yDRYsWcckll/Ru/VIKSK/gs5XW0dmwAT71qaA7fwLPAaMJej8uB75N0PF/ZIL3tPXtS9ZLLwU/eNU7juK/h3/84x9UVFRw9dVX88Mf/jBay8eKvNQPPltpHZW2tjbee+89qqur2V5VxTlz53LM3r1dGuMCYBLwnUQv6t8f1qwJdiEqLbzzzjtUVFQwatQo7rnnHo5xx6ciInWDz1ZandLS0sI777xDTU0NNTU1VFdXH/h9TU0NtbW1xGIxRowYwemDBnHb009zTHNzl/6Mf9v367uJXtS3LzjjSzu7d+9m+vTpbN68mccee4zjjjsu7JKkHpeawWcrrQP27t3LW2+91S7MDg64d955h0GDBlFaWsqIESMO++vA9vVOPOPbQbDU+TmCLb+/Bb4J/AM4KVGhXnCatlpbW7nxxhu5//77WbFiBaecckrYJUk9KvWCL2KttHbt2nXYmdr+X9u2beP4449nxIgRhw234cOHd22JKsmuzveALwKvA9kEl5reDJzfmXFtfpzW7r33XubMmcOvf/1rLrjggrDLkXpMagVfhrXSamtrY/v27R0uQ9bU1LB7925KSkrahdnBAXf88cd37xZ/mx8rgdWrVzN16lTmzp3Lt7/97bDLkXpEagVfmrXSam1t5d133+1wGbKmpoY+ffp0uAxZWlrKcccd17s76mx+rCQ2bdrElClTOPfcc7n99tuP/IYJKUWlTvB1opVWNXAN8DeCO8guAW4nQfuZo/yBHI/Hqaur63AZsra2lv79+3e4DDlixAgGDBhwRH92j0qzDxjqfe+//z6XXXYZbW1tPPjgg3zsYx8LuySp26RO8HViCe6LwBDgfxJswjgf+AYJdhsWFAQ7QztopdXY2EhtbW2HS5FbtmxhyJAhHS5DlpSU9OzVND0lw5aU1TPi8TizZs3iqaee4oknnqCsrCzskqRukTrB14lWWqOAXxAEIMD1wAcEN053pHHkSFbdfvthw2379u0MHz68w2XI4uJicjP1B3rENhHpyP3yl7/k5ptv5qGHHmL8+PFhlyMdtdQIvk620robWEMw49sOTCTYcfilBO9pAi6eOJHhJ5xwSLgVFRXRp0+fbvqXSEMeG1En/elPf2LatGn8/Oc/52tf+1rY5UhHJTWCr5OttF4jaJ78MtACTAeWAgm3hniwOrFuaH6saHj11VeZMmUKl112Gbfccku0PzQqraXG39zGxmDpLIFWgtZZFwO7gG0Es77vJxs7O7t7dzBmmrw8+OlPg1nfvHnBknNeXvCBoX//4GteXvD9efOC191yi6EXQaNHj2bt2rVUVVUxdepUdiX5oCqlqrSZ8W0DjiPY1LJ/f9njwI+AdYnGdsbXdTYDVwJ79+7lm9/8JuvWreP3v/89w4YNC7skqUtSY8ZXWhpcqZLAYOAEYBEQJwjA/wWcmmzs5uZgfHVeTk7wQWHMmOCroaeDHHPMMSxbtoxLLrmEcePG8eKLL4ZdktQlqRF8OTkwMtGlN4FHgScJZn7lQC5wW7I3+YNb6nZZWVn84Ac/4Pbbb2fixIk89thjYZckdVpqBB8EVwsluaj0U8DTBM/2tgEPAh9P9IaCgmBcST3iy1/+Mk8++STf+c53+NnPfkYqPDmRkkmNZ3xgKy0pjb399ttUVFRw6qmncvfdd3u3n1Ja6sz4CguD+/S6qxNKLBZsuzf0pB5XXFxMVVUV77//Pueffz7btm0LuySpQ6kz4wNbaUlprrW1lblz5/LQQw+xYsUKRo0aFXZJ0iFSZ8YHwXmxVauCWdqRXsWzv5XWqlWGntTL+vTpw/z58/nRj37E5z73Of785z+HXZJ0iNQKPghaYD3/fDBj6+qyZywWvM/+kVKorrrqKh5++GGmTZvGokWLwi5Haif1gg+C0Fq3Dq67LtigkmS3J7FY8LpZs4LlTUNPCt1nP/tZ1qxZwx133MG1115LPB4PuyQJSLVnfIfT0ACLF8OyZUGHl9zcYDmzpSU4nF5eHhxZmDHDjSxSCtqxYweXXnopOTk5LF++nP79+4ddkiIu9YPvYLbSktJSc3Mz3/3ud6mqqmLFihWccMIJYZekCEuv4JOUttra2rjzzjuZP38+jzzyCGeeeWbYJSmiDD5JveqPf/wj06dP57bbbuPKK68MuxxFkMEnqdetW7eOKVOmMG3aNH784x97t596lcEnKRRbt27loosuori4mGXLlhHrrq5NUhJ+zJIUiiFDhvCXv/yF3NxczjnnHDZv3hx2SYoIg09SaPLz87nvvvuoqKjg9NNP56WXXgq7JEWAS52SUsKDDz7It771LRYvXkxFRUXY5SiDeQhOUkq49NJLKS0t5Utf+hJvvPEGc+bMISsrK+yylIGc8UlKKbW1tVRUVDB27FgWLlxIXl5e2CUpw/iMT1JKKSkpYfXq1bz33ntMnDiRhoaGsEtShjH4JKWcY489lkcffZSxY8cybtw43njjjbBLUgYx+CSlpOzsbBYsWMD3v/99xo8fz1NPPRV2ScoQBp+klDZz5kyWL1/OFVdcwa9+9auwy1EGcHOLpLTw5ptvMnnyZCZNmsSCBQvIzs4OuySlKYNPUtrYvn07l1xyCbFYjPvvv59+/fqFXZLSkEudktLGwIEDefLJJykqKuKss86ipqYm7JKUhgw+SWklNzeXu+++m8rKSs444wzWrl0bdklKMy51SkpbK1asYMaMGdx5551cfvnlYZejNGHwSUprr7zyChUVFVRWVnLjjTfa5kxJGXyS0t6WLVu46KKLKCsrY/HixRQUFIRdklKYz/gkpb2hQ4fy17/+ldbWVs4991y2bNkSdklKYQafpIxQUFDAAw88wAUXXMC4ceN45ZVXwi5JKcqlTkkZ54EHHuDaa69l6dKlTJo0KexylGIMPkkZae3atVx88cVcf/31XHfddW560QEGn6SMVVNTw+TJkznzzDO56667yM3NDbskpQCDT1JG27lzJ1/5ylfYs2cPDz/8MAMHDuzcG+NxqK6GxkbIz4fSUsjJ6clS1Uvc3CIpo/Xr14/f/e53nHbaaYwbN44333yz4xfX18OCBTB6NPTtC5/6FJx1VvA1Fgu+v2ABeDluWnPGJyky7r77bm688UZ++9vfcs4553z4D5qaYN48uPVWyMqCPXs6HqSgANraYPZsuOkmyMvr8brVvQw+SZGyatUqrrjiCubPn8/MmTOhthYmTIC6Oti9u/MDxWIwbBisWgUlJT1XsLqdwScpcv75z38yefJkKs87jx88+ihZDQ3Q0tL1gbKzobAQnn/e8EsjBp+kSKrfvJndI0dyfGMj2UfzYzA7G8rKYP16cNdoWnBzi6RIGnTXXRRnZR1d6EEwU6yrC54RKi0445MUPfX1UFwcHFXowFeBp4BdwFDgfwBfTzRmfn4QgIWF3VmpeoAzPknRs2RJsHszgR8A1cAHwO+BHwEvJHpDVhYsXtxNBaonGXySomfp0sRHFoBTgGP2/T5r36+Nid6wZw8sW9Yd1amHGXySoiUeh40JI+yAa4AYcDJQBHwx2Rs2bAjGV0oz+CRFS3V1p3dfLgR2AlXAxXw4A+xQbm4wvlKawScpWhobgyMInZQNnA28DSxK+uLshBtmlBoMPknRkp9/RIfV4yR5xgfBuPn5R1KVepHBJylaSkuhuTnhS7YCy4F/AS3An4AHgPOSjd3cHIyvlGbwSYqWnBwYOTLhS7IIljWLgYHA94DbgYpkY5eXe3VRGjD4JEVPZWVwy0IHjgOeAXYQnOP7f8A3ko1ZUBCMq5Rn5xZJ0dPQENys0J0bUezckjac8UmKnsLC4D69WKx7xovFYM4cQy9NOOOTFE1NTTBmDGzadGRXEu0TB3YPHUr/2lpvZ0gTzvgkRVNeXnCJbGFhl871tZOdDQMHMrFPH34yfz7OI9KDwScpukpKgktky8q6vuwZi0FZGTkvvcRjL7zAypUr+epXv0qjB9hTnsEnKdpKSmDdOrjuumCDSoLdnkAQePn5MGtWcPlsSQlDhw7l6aefJh6Pc95557F169ZeKV1Hxmd8krRfQ0NwtdCyZUHD6dzcYDmzpSU4nF5eHhxZmDHjsBtZWltbuemmm/jNb37DihUrOOWUU3r/30FJGXySdDjxeNBwurExmOGVlnb6cPp9993H7Nmzuffee5k4cWKPlqmuM/gkqQesXr2aqVOncsMNN3DNNdeEXY4OYvBJUg/ZtGkTkydPZsKECdx6663k2M4sJRh8ktSDduzYwaWXXkpOTg7Lly+nf//+YZcUee7qlKQeNGDAAFauXMmIESM466yzqKmpCbukyDP4JKmH5ebmsnDhQr7+9a9zxhlnsHbt2rBLijSXOiWpF61cuZLKykruuOMOLr/88rDLiSSDT5J62SuvvMKUKVOYOXMmN9xwA1lZWWGXFCkGnySFYMuWLVx44YWceOKJ3HPPPeTn54ddUmT4jE+SQrC/zVlzc7NtznqZwSdJISkoKOCBBx7g85//POPGjWP9+vVhlxQJLnVKUgq49957mTNnjm3OeoEzPklKAdOmTePRRx/lqquuYuHChWGXk9Gc8UlSCtm0aROTJk3i/PPPt81ZDzH4JCnF2OasZ7nUKUkpxjZnPcvgk6QUZJuznuNSpySluJUrV3LVVVdx55132uasGxh8kpQGbHPWfQw+SUoTtjnrHj7jk6Q0sb/NWVNTk23OjoLBJ0lppKCggOXLlx9oc/bqq6+GXVLacalTktKUbc6OjDM+SUpT+9ucTZ8+3TZnXeCMT5LS3MaNG5k8eTJf+MIX+MUvfmGbsyQMPknKADt27GDq1Knk5uba5iwJlzolKQMMGDCAP/zhD5SUlNjmLAmDT5IyRG5uLosWLWLmzJm2OUvApU5JykBPPPEElZWVtjk7DINPkjKUbc4Oz+CTpAy2efNmLrzwQk466STbnO3jMz5JymBFRUU888wztjk7iMEnSRnONmftudQpSRFimzNnfJIUKdOmTeORRx6JdJszZ3ySFEFRbnNm8ElSREW1zZlLnZIUUVFtc2bwSVKEHVWbs3gcNmyAdeuCr/F4zxXajVzqlCQBH7Y5u+uuu7jssssO/6L6eliyBJYuhY0bITcXsrOhpQWamqC8HCorYeZMKCzs3X+BTjL4JEkHvPzyy1RUVBza5qypCebNg1tvhaws2LOn40EKCqCtDWbPhptugry83im+kww+SVI7h7Q527oVJkyAujrYvbvzA8ViMGwYrFoFJSU9V3AXGXySpEPs2bOH6dOnE9+0iYerq+mzY0ewnNlV2dnBkufzz6dM+Bl8kqTDam1spGHYMAY0NHBUp/yys6GsDNavD54JhsxdnZKkw+pz880Mbmw8utCDYKZYVxc8I0wBzvgkSYeqr4fiYmhsTPiy5cA8oBYYCiwDxnf04vz8IABD3u3pjE+SdKglS4Ldmwn8Gfg+sBTYCTwLlCV6Q1YWLF7cXRUeMWd8kqRDjR4Nr72W8CVnAjP3/erSuOvXH0VhR88ZnySpvXg8OJyeQAvwPPAeUA4UA98GEpzuC6RAhxeDT5LUXnV10t2X7wLNwMNAFfAS8A/glmRj5+YG44fI4JMktdfYGBxBSKBg39fvAEXAYGA28IdkY2dnJ90w09MMPklSe/n5SQ+rDyRY3jx4+0virTD7tLQE44fI4JMktVdaCs3NSV9WCdwJbAW2A7cBk5O9qbk5GD9EBp8kqb2cHBg5MunLbgD+O3ASMAr4b8DcZG8qLw/GD5HBJ0k6VGVlcMtCArnAQmAHsAW4A0i4iFlQEIwbMs/xSZIO1dAQ3KzQnRtR7NwiSUpZhYXBfXqxWPeMF4vBnDmhhx4445MkdaSpCcaMgU2bjuxKov28nUGSlBby8oJLZAsLk57r69D++/hWrUqJ0AODT5KUSElJcIlsWVnXlz1jseB9KXQJLRh8kqRkSkpg3Tq47rpgg0qS3Z7EYsHrZs0KljdTKPTAZ3ySpK5oaAiuFlq2LGg4nZsbLGe2tASH08vLgyMLM2akxEaWwzH4JElHJh4PGk43NgYzvNLS0A+nd4bBJ0mKFJ/xSZIixeCTJEWKwSdJihSDT5IUKQafJClSDD5JUqQYfJKkSDH4JEmRYvBJkiLF4JMkRYrBJ0mKFINPkhQpBp8kKVIMPklSpBh8kqRIMfgkSZFi8EmSIsXgkyRFyv8Hptr01CNYD1IAAAAASUVORK5CYII=", 98 | "text/plain": [ 99 | "
" 100 | ] 101 | }, 102 | "metadata": {}, 103 | "output_type": "display_data" 104 | } 105 | ], 106 | "source": [ 107 | "# 应用场景:假如你从网络获取了一个真实网络数据集,但其节点编号不连续,\n", 108 | "# 此时,你可以将节点重新按照一定的顺序来编号\n", 109 | "G = nx.Graph()\n", 110 | "G.add_nodes_from([0,2,3,5,6,8]) # 节点不连续\n", 111 | "G.add_edges_from([(0,2),(2,3),(2,5),(3,6),(5,8)])\n", 112 | "nx.draw(G, node_size=500, node_color='red', with_labels=True)" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": 5, 118 | "metadata": {}, 119 | "outputs": [ 120 | { 121 | "data": { 122 | "image/png": "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", 123 | "text/plain": [ 124 | "
" 125 | ] 126 | }, 127 | "metadata": {}, 128 | "output_type": "display_data" 129 | } 130 | ], 131 | "source": [ 132 | "# 重新编号为0~(len(G.nodes())-1)\n", 133 | "mapping = dict(zip(G, range(len(G.nodes()))))\n", 134 | "G = nx.relabel_nodes(G, mapping)\n", 135 | "nx.draw(G, node_size=500, node_color='red', with_labels=True)" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": null, 141 | "metadata": {}, 142 | "outputs": [], 143 | "source": [] 144 | } 145 | ], 146 | "metadata": { 147 | "kernelspec": { 148 | "display_name": "Python 3.9.6 64-bit", 149 | "language": "python", 150 | "name": "python3" 151 | }, 152 | "language_info": { 153 | "codemirror_mode": { 154 | "name": "ipython", 155 | "version": 3 156 | }, 157 | "file_extension": ".py", 158 | "mimetype": "text/x-python", 159 | "name": "python", 160 | "nbconvert_exporter": "python", 161 | "pygments_lexer": "ipython3", 162 | "version": "3.9.6" 163 | }, 164 | "vscode": { 165 | "interpreter": { 166 | "hash": "12cf4d0b9b7b18c55261077a6853aabe6f033db06abf1184072cd2e823f414c8" 167 | } 168 | } 169 | }, 170 | "nbformat": 4, 171 | "nbformat_minor": 0 172 | } 173 | -------------------------------------------------------------------------------- /networkx_example_code/networkx_example23.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true, 7 | "pycharm": { 8 | "name": "#%% md\n" 9 | } 10 | }, 11 | "source": [ 12 | "### 《NetworkX编程实践基础》\n", 13 | "##### 23课:网络可视化(进阶)" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": { 20 | "collapsed": false, 21 | "pycharm": { 22 | "name": "#%%\n" 23 | } 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "# !/usr/bin/python3\n", 28 | "# -*- coding: utf-8 -*-\n", 29 | "# Author : 单哥的科研日常\n", 30 | "# 示例程序所用库的版本:networkx==2.6.3" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 1, 36 | "metadata": { 37 | "collapsed": false, 38 | "pycharm": { 39 | "name": "#%%\n" 40 | } 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "import networkx as nx" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 2, 50 | "metadata": {}, 51 | "outputs": [], 52 | "source": [ 53 | "# 无向加权图:自定义节点坐标(布局),适用于绘制小规模网络\n", 54 | "# 创建一个无向加权图\n", 55 | "G = nx.Graph()\n", 56 | "nodes = [0,1,2,3,4,5,6,7]\n", 57 | "edge_list = [(0,1,2),(0,2,8),(0,3,1),(1,2,6),\n", 58 | " (1, 4, 1), (2, 3, 7), (2, 4, 5), (2, 5, 1),\n", 59 | " (2,6,2),(3,6,9),(4,5,3),(4,7,8),\n", 60 | " (5,6,4),(5,7,6),(6,7,3)]\n", 61 | "G.add_nodes_from(nodes)\n", 62 | "G.add_weighted_edges_from(edge_list)" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 3, 68 | "metadata": {}, 69 | "outputs": [ 70 | { 71 | "data": { 72 | "text/plain": [ 73 | "{(0, 1): Text(-1.5, 0.5, '2'),\n", 74 | " (0, 2): Text(-1.5, 0.0, '8'),\n", 75 | " (0, 3): Text(-1.5, -0.5, '1'),\n", 76 | " (1, 2): Text(-1.0, 0.5, '6'),\n", 77 | " (1, 4): Text(0.0, 1.0, '1'),\n", 78 | " (2, 3): Text(-1.0, -0.5, '7'),\n", 79 | " (2, 4): Text(0.0, 0.5, '5'),\n", 80 | " (2, 5): Text(0.0, 0.0, '1'),\n", 81 | " (2, 6): Text(0.0, -0.5, '2'),\n", 82 | " (3, 6): Text(0.0, -1.0, '9'),\n", 83 | " (4, 5): Text(1.0, 0.5, '3'),\n", 84 | " (4, 7): Text(1.5, 0.5, '8'),\n", 85 | " (5, 6): Text(1.0, -0.5, '4'),\n", 86 | " (5, 7): Text(1.5, 0.0, '6'),\n", 87 | " (6, 7): Text(1.5, -0.5, '3')}" 88 | ] 89 | }, 90 | "execution_count": 3, 91 | "metadata": {}, 92 | "output_type": "execute_result" 93 | }, 94 | { 95 | "data": { 96 | "image/png": "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", 97 | "text/plain": [ 98 | "
" 99 | ] 100 | }, 101 | "metadata": {}, 102 | "output_type": "display_data" 103 | } 104 | ], 105 | "source": [ 106 | "# 自定义各个节点的坐标\n", 107 | "pos = {0: (-2,0), 1:(-1,1), 2:(-1,0), 3:(-1,-1),\n", 108 | " 4: (1,1), 5:(1,0), 6:(1,-1), 7:(2,0)}\n", 109 | "nx.draw(G, pos, node_size=500, node_color=\"red\", with_labels=True)\n", 110 | "\n", 111 | "# 将连边标签设定为其权重值\n", 112 | "e_labels = {(0, 1):\"2\",(0, 2):\"8\",(0, 3):\"1\",(1, 2):\"6\",\n", 113 | " (1, 4): \"1\", (2, 3): \"7\", (2, 4): \"5\", (2, 5): \"1\",\n", 114 | " (2, 6):\"2\",(3,6):\"9\",(4, 5):\"3\",(4,7):\"8\",\n", 115 | " (5, 6):\"4\",(5,7):\"6\",(6, 7):\"3\"}\n", 116 | "nx.draw_networkx_edge_labels(G, pos, edge_labels=e_labels)" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": 4, 122 | "metadata": {}, 123 | "outputs": [ 124 | { 125 | "data": { 126 | "image/png": "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", 127 | "text/plain": [ 128 | "
" 129 | ] 130 | }, 131 | "metadata": {}, 132 | "output_type": "display_data" 133 | } 134 | ], 135 | "source": [ 136 | "# 设置连边粗细与权重成正比\n", 137 | "edgewidth = [G.get_edge_data(*e)['weight'] for e in G.edges()]\n", 138 | "options = {\n", 139 | " 'pos': pos,\n", 140 | " 'node_size': 500,\n", 141 | " 'node_color': \"red\",\n", 142 | " 'edge_color': \"gray\",\n", 143 | " 'width': edgewidth,\n", 144 | " 'with_labels': True,\n", 145 | "}\n", 146 | "nx.draw(G, **options) " 147 | ] 148 | }, 149 | { 150 | "cell_type": "code", 151 | "execution_count": null, 152 | "metadata": {}, 153 | "outputs": [], 154 | "source": [] 155 | } 156 | ], 157 | "metadata": { 158 | "kernelspec": { 159 | "display_name": "Python 3.9.6 64-bit", 160 | "language": "python", 161 | "name": "python3" 162 | }, 163 | "language_info": { 164 | "codemirror_mode": { 165 | "name": "ipython", 166 | "version": 3 167 | }, 168 | "file_extension": ".py", 169 | "mimetype": "text/x-python", 170 | "name": "python", 171 | "nbconvert_exporter": "python", 172 | "pygments_lexer": "ipython3", 173 | "version": "3.9.6" 174 | }, 175 | "vscode": { 176 | "interpreter": { 177 | "hash": "12cf4d0b9b7b18c55261077a6853aabe6f033db06abf1184072cd2e823f414c8" 178 | } 179 | } 180 | }, 181 | "nbformat": 4, 182 | "nbformat_minor": 0 183 | } 184 | -------------------------------------------------------------------------------- /networkx_example_code/read_graphml_to_network.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | import networkx as nx 5 | 6 | # 参考:https://www.jb51.net/article/171825.htm 7 | def color(value): 8 | digit = list(map(str, range(10))) + list("ABCDEF") 9 | if isinstance(value, tuple): 10 | string = '#' 11 | for i in value: 12 | a1 = i // 16 13 | a2 = i % 16 14 | string += digit[a1] + digit[a2] 15 | return string 16 | elif isinstance(value, str): 17 | a1 = digit.index(value[1]) * 16 + digit.index(value[2]) 18 | a2 = digit.index(value[3]) * 16 + digit.index(value[4]) 19 | a3 = digit.index(value[5]) * 16 + digit.index(value[6]) 20 | return (a1, a2, a3) 21 | 22 | 23 | # 定义获取节点坐标的函数 24 | def get_node_coordinates(G): 25 | pos = {} 26 | x = nx.get_node_attributes(G, 'x') 27 | y = nx.get_node_attributes(G, 'y') 28 | for i in G.nodes(): 29 | ix = x[i] 30 | iy = y[i] 31 | pos[i] = (ix, iy) # 节点i的坐标 32 | 33 | return pos 34 | 35 | def get_node_color(G): 36 | nodes_color = {} 37 | r = nx.get_node_attributes(G, 'r') 38 | g = nx.get_node_attributes(G, 'g') 39 | b = nx.get_node_attributes(G, 'b') 40 | for i in G.nodes(): 41 | rgb_value = (r[i], g[i], b[i]) 42 | nodes_color[i] = color(rgb_value) # 节点i的颜色 43 | return nodes_color 44 | 45 | 46 | G = nx.read_graphml("example.graphml") 47 | print(G.edges()) 48 | # for e in G.edges(): 49 | edge_weight = nx.get_edge_attributes(G, 'weight') 50 | nom_edge_weight = np.array(list(edge_weight.values()))/5 51 | 52 | pos_nodes = get_node_coordinates(G) 53 | nodes_color = get_node_color(G) 54 | 55 | node_degree = dict(G.degree()) 56 | nodesize = np.array(list(node_degree.values()))*10 57 | # print(nodesize) 58 | # print(pos) 59 | # print(nodes_color) 60 | 61 | options = { 62 | 'pos': pos_nodes, 63 | 'node_size': nodesize, 64 | 'node_color': nodes_color.values(), 65 | 'edge_color': "gray", 66 | 'with_labels': False, 67 | 'node_shape': "s", 68 | 'alpha': 0.8, 69 | 'width': nom_edge_weight, 70 | } 71 | 72 | 73 | nx.draw(G, **options) 74 | plt.show() -------------------------------------------------------------------------------- /networkx_example_code/test.gexf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkX 2.6.3 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | --------------------------------------------------------------------------------