main.ipynb (66320B)
1 { 2 "cells": [ 3 { 4 "cell_type": "code", 5 "execution_count": 14, 6 "id": "608ff8af", 7 "metadata": {}, 8 "outputs": [], 9 "source": [ 10 "import matplotlib.pyplot as plt\n", 11 "import networkx as nx\n", 12 "import random" 13 ] 14 }, 15 { 16 "cell_type": "code", 17 "execution_count": 7, 18 "id": "058ac30e", 19 "metadata": {}, 20 "outputs": [], 21 "source": [ 22 "class Attack:\n", 23 " def __init__(self, G, steps=25):\n", 24 " self.G = G\n", 25 " self.steps = steps\n", 26 " self.N = G.number_of_nodes()\n", 27 " self.M = self.N // self.steps\n", 28 " self.num_nodes_removed = range(0, self.N, self.M)\n", 29 " \n", 30 " def random(self):\n", 31 " C = self.G.copy()\n", 32 " random_attack_core_proportions = []\n", 33 " for nodes_removed in self.num_nodes_removed:\n", 34 " # Measure the relative size of the network core\n", 35 " core = sorted(nx.connected_components(C), key = len, reverse=True)[0] # mistake in notebook 6\n", 36 " core_proportion = len(core) / self.N\n", 37 " random_attack_core_proportions.append(core_proportion)\n", 38 "\n", 39 " # If there are more than M nodes, select M nodes at random and remove them\n", 40 " if C.number_of_nodes() > self.M:\n", 41 " nodes_to_remove = random.sample(list(C.nodes), self.M)\n", 42 " C.remove_nodes_from(nodes_to_remove)\n", 43 " return self.num_nodes_removed, random_attack_core_proportions\n", 44 "\n", 45 " def betweenness(self):\n", 46 " C = self.G.copy()\n", 47 " random_attack_core_proportions = []\n", 48 " for nodes_removed in self.num_nodes_removed:\n", 49 " # Measure the relative size of the network core\n", 50 " core = sorted(nx.connected_components(C), key = len, reverse=True)[0] # mistake in notebook 6\n", 51 " core_proportion = len(core) / self.N\n", 52 " random_attack_core_proportions.append(core_proportion)\n", 53 "\n", 54 " # If there are more than M nodes, select M nodes at random and remove them\n", 55 " if C.number_of_nodes() > self.M:\n", 56 " betweenness = nx.centrality.betweenness_centrality(C)\n", 57 " nodes_sorted_by_betweenness= sorted(C.nodes, key=betweenness.get, reverse=True)\n", 58 " nodes_to_remove = nodes_sorted_by_betweenness[:self.M]\n", 59 " C.remove_nodes_from(nodes_to_remove)\n", 60 " return self.num_nodes_removed, random_attack_core_proportions \n", 61 "\n", 62 " def degree(self):\n", 63 " C = self.G.copy()\n", 64 " random_attack_core_proportions = []\n", 65 " for nodes_removed in self.num_nodes_removed:\n", 66 " # Measure the relative size of the network core\n", 67 " core = sorted(nx.connected_components(C), key = len, reverse=True)[0] # mistake in notebook 6\n", 68 " core_proportion = len(core) / self.N\n", 69 " random_attack_core_proportions.append(core_proportion)\n", 70 "\n", 71 " # If there are more than M nodes, select M nodes at random and remove them\n", 72 " if C.number_of_nodes() > self.M:\n", 73 " nodes_sorted_by_degree = sorted(C.nodes, key=C.degree, reverse=True)\n", 74 " nodes_to_remove = nodes_sorted_by_degree[:self.M]\n", 75 " C.remove_nodes_from(nodes_to_remove)\n", 76 " return self.num_nodes_removed, random_attack_core_proportions \n", 77 "\n", 78 " def closeness(self):\n", 79 " C = self.G.copy()\n", 80 " random_attack_core_proportions = []\n", 81 " for nodes_removed in self.num_nodes_removed:\n", 82 " # Measure the relative size of the network core\n", 83 " core = sorted(nx.connected_components(C), key = len, reverse=True)[0] # mistake in notebook 6\n", 84 " core_proportion = len(core) / self.N\n", 85 " random_attack_core_proportions.append(core_proportion)\n", 86 "\n", 87 " # If there are more than M nodes, select M nodes at random and remove them\n", 88 " if C.number_of_nodes() > self.M:\n", 89 " closeness = nx.centrality.closeness_centrality(C)\n", 90 " nodes_sorted_by_closeness = sorted(C.nodes, key=closeness.get, reverse=True)\n", 91 " nodes_to_remove = nodes_sorted_by_closeness[:self.M]\n", 92 " C.remove_nodes_from(nodes_to_remove)\n", 93 " return self.num_nodes_removed, random_attack_core_proportions " 94 ] 95 }, 96 { 97 "cell_type": "code", 98 "execution_count": 155, 99 "id": "a08557c5", 100 "metadata": {}, 101 "outputs": [ 102 { 103 "name": "stdout", 104 "output_type": "stream", 105 "text": [ 106 "Graph with 143 nodes and 623 edges\n" 107 ] 108 }, 109 { 110 "data": { 111 "text/plain": [ 112 "<matplotlib.legend.Legend at 0x7f437ab70370>" 113 ] 114 }, 115 "execution_count": 155, 116 "metadata": {}, 117 "output_type": "execute_result" 118 }, 119 { 120 "data": { 121 "image/png": "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\n", 122 "text/plain": [ 123 "<Figure size 432x288 with 1 Axes>" 124 ] 125 }, 126 "metadata": { 127 "needs_background": "light" 128 }, 129 "output_type": "display_data" 130 } 131 ], 132 "source": [ 133 "path = './../../../network_course/data/'\n", 134 "G = nx.read_edgelist(path + 'ia-enron-only/ia-enron-only.edges', nodetype=int)\n", 135 "print(nx.info(G))\n", 136 "\n", 137 "attack = Attack(G)\n", 138 "\n", 139 "x_d, y_d = attack.degree()\n", 140 "x_b, y_b = attack.betweenness()\n", 141 "x_c, y_c = attack.closeness()\n", 142 "\n", 143 "plt.title('Degree-Betweenness-Closeness Attack')\n", 144 "plt.xlabel('Number of nodes removed')\n", 145 "plt.ylabel('Proportion of nodes in core')\n", 146 "plt.plot(x_d, y_d, marker='o', label='Degree-Attack')\n", 147 "plt.plot(x_b, y_b, marker='^', label='Betweenness-Atack')\n", 148 "plt.plot(x_c, y_c, marker='.', label='Closeness-Atack')\n", 149 "plt.legend()" 150 ] 151 }, 152 { 153 "cell_type": "code", 154 "execution_count": 156, 155 "id": "76f1387a", 156 "metadata": {}, 157 "outputs": [ 158 { 159 "name": "stdout", 160 "output_type": "stream", 161 "text": [ 162 "Graph with 4941 nodes and 6594 edges\n" 163 ] 164 }, 165 { 166 "data": { 167 "text/plain": [ 168 "<matplotlib.legend.Legend at 0x7f4377b09460>" 169 ] 170 }, 171 "execution_count": 156, 172 "metadata": {}, 173 "output_type": "execute_result" 174 }, 175 { 176 "data": { 177 "image/png": "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\n", 178 "text/plain": [ 179 "<Figure size 432x288 with 1 Axes>" 180 ] 181 }, 182 "metadata": { 183 "needs_background": "light" 184 }, 185 "output_type": "display_data" 186 } 187 ], 188 "source": [ 189 "G_america = nx.read_edgelist(path + 'powergrid.edgelist.txt')\n", 190 "print(nx.info(G_america))\n", 191 "\n", 192 "attack_usa = Attack(G_america, steps=5)\n", 193 "\n", 194 "x_d, y_d = attack_usa.degree()\n", 195 "x_c, y_c = attack_usa.closeness()\n", 196 "\n", 197 "plt.title('Degree-Closeness Attack of America')\n", 198 "plt.xlabel('Number of nodes removed')\n", 199 "plt.ylabel('Proportion of nodes in core')\n", 200 "plt.plot(x_d, y_d, marker='o', label='Degree-Attack')\n", 201 "plt.plot(x_c, y_c, marker='.', label='Closeness-Atack')\n", 202 "plt.legend()" 203 ] 204 }, 205 { 206 "cell_type": "code", 207 "execution_count": null, 208 "id": "94cb242d", 209 "metadata": {}, 210 "outputs": [], 211 "source": [] 212 }, 213 { 214 "cell_type": "code", 215 "execution_count": null, 216 "id": "0fde2578", 217 "metadata": {}, 218 "outputs": [], 219 "source": [] 220 } 221 ], 222 "metadata": { 223 "kernelspec": { 224 "display_name": "Python 3 (ipykernel)", 225 "language": "python", 226 "name": "python3" 227 }, 228 "language_info": { 229 "codemirror_mode": { 230 "name": "ipython", 231 "version": 3 232 }, 233 "file_extension": ".py", 234 "mimetype": "text/x-python", 235 "name": "python", 236 "nbconvert_exporter": "python", 237 "pygments_lexer": "ipython3", 238 "version": "3.9.9" 239 } 240 }, 241 "nbformat": 4, 242 "nbformat_minor": 5 243 }