{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": true }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import networkx as nx\n", "import seaborn as sns\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(102831, 4)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timesourcetargetmeters
01139017
1122159
21224618
31226545
41536732
\n", "
" ], "text/plain": [ " time source target meters\n", "0 1 1 390 17\n", "1 1 2 215 9\n", "2 1 2 246 18\n", "3 1 2 265 45\n", "4 1 5 367 32" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "DataS1= pd.read_csv('haslemere/Kissler_DataS1.csv', header=None)\n", "\n", "print(DataS1.shape)\n", "DataS1.columns=['time','source','target','meters']\n", "DataS1.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# meaning of the columns\n", "\n", "__DataS1.csv__ The “Haslemere dataset”, consisting of pairwise distances between users of the BBC Pandemic Haslemere app over time. Each row consists of an encounter (within 50m) between two users. \n", "\n", "* Column 1 gives the time step as an integer value (see DataS2.csv for conversion to real time). \n", "* Columns 2 and 3 give the user ID numbers. \n", "* Column 4 gives the distance between the users at that time step, rounded to the nearest metre. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# What kind of network\n", "\n", "1. Undirected.\n", " * \"met each other at time X with distance Y\n", "2. Weighted\n", " * with the distance\n", "3. Multigraph\n", " * two nodes can have multiple interactions \n", " * for each timestamp we create an edge.\n", " * Thus multiple edges between nodes are possible." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "G= nx.from_pandas_edgelist(DataS1,'source','target',\n", " edge_attr=['meters'],\n", " create_using=nx.MultiGraph(),\n", " edge_key='time') # New in 2.5 !pip install --upgrade networkx" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Inspect the network" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(469, 469, 469, 469)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# number of nodes\n", "\n", "G.number_of_nodes(), len(G), len(G.nodes), len(G.nodes())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## All edges from node 1\n", "\n", "* A dict with nodes as keys\n", " * and a dict of edges as values\n", " * each edge has a **timestamp** as key,\n", " * and a dict with the distance as value" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([390,\n", " 234,\n", " 389,\n", " 4,\n", " 127,\n", " 172,\n", " 184,\n", " 415,\n", " 459,\n", " 203,\n", " 76,\n", " 311,\n", " 425,\n", " 448,\n", " 249,\n", " 409,\n", " 2,\n", " 201,\n", " 325,\n", " 460,\n", " 138,\n", " 131,\n", " 209,\n", " 106,\n", " 107,\n", " 211,\n", " 447,\n", " 171,\n", " 49,\n", " 449,\n", " 189,\n", " 125,\n", " 174,\n", " 191,\n", " 259,\n", " 287,\n", " 82,\n", " 199,\n", " 464,\n", " 84,\n", " 392,\n", " 86,\n", " 44,\n", " 179,\n", " 235,\n", " 302,\n", " 66,\n", " 327,\n", " 384,\n", " 439,\n", " 445],\n", " 368)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(G.neighbors(1)),G.degree(1)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AdjacencyView({390: {1: {'meters': 17}, 2: {'meters': 17}, 3: {'meters': 17}, 4: {'meters': 17}, 5: {'meters': 17}, 6: {'meters': 2}, 7: {'meters': 2}, 8: {'meters': 2}, 9: {'meters': 2}, 10: {'meters': 7}, 11: {'meters': 8}, 12: {'meters': 4}, 13: {'meters': 7}, 14: {'meters': 6}, 15: {'meters': 8}, 16: {'meters': 8}, 17: {'meters': 14}, 18: {'meters': 11}, 19: {'meters': 11}, 134: {'meters': 4}, 135: {'meters': 0}, 136: {'meters': 0}, 137: {'meters': 0}, 138: {'meters': 0}, 139: {'meters': 0}, 140: {'meters': 0}, 141: {'meters': 0}, 142: {'meters': 0}, 143: {'meters': 0}, 144: {'meters': 0}, 145: {'meters': 0}, 146: {'meters': 0}, 147: {'meters': 0}, 148: {'meters': 0}, 149: {'meters': 0}, 150: {'meters': 3}, 151: {'meters': 0}, 152: {'meters': 0}, 153: {'meters': 0}, 154: {'meters': 0}, 155: {'meters': 7}, 156: {'meters': 7}, 174: {'meters': 11}, 175: {'meters': 0}, 176: {'meters': 0}, 177: {'meters': 0}, 178: {'meters': 0}, 179: {'meters': 0}, 180: {'meters': 4}, 181: {'meters': 0}, 182: {'meters': 0}, 183: {'meters': 0}, 184: {'meters': 0}, 185: {'meters': 0}, 186: {'meters': 0}, 187: {'meters': 12}, 188: {'meters': 0}, 189: {'meters': 0}, 190: {'meters': 0}, 191: {'meters': 0}, 192: {'meters': 4}, 193: {'meters': 4}, 194: {'meters': 4}, 195: {'meters': 15}, 196: {'meters': 15}, 197: {'meters': 4}, 198: {'meters': 15}, 199: {'meters': 4}, 200: {'meters': 4}, 201: {'meters': 0}, 202: {'meters': 0}, 203: {'meters': 0}, 204: {'meters': 0}, 205: {'meters': 0}, 206: {'meters': 0}, 207: {'meters': 0}, 208: {'meters': 0}, 209: {'meters': 0}, 210: {'meters': 0}, 211: {'meters': 8}, 212: {'meters': 0}, 213: {'meters': 0}, 214: {'meters': 0}, 215: {'meters': 0}, 216: {'meters': 0}, 217: {'meters': 0}, 218: {'meters': 0}, 219: {'meters': 0}, 220: {'meters': 11}, 221: {'meters': 13}, 222: {'meters': 13}, 223: {'meters': 13}, 225: {'meters': 37}, 226: {'meters': 12}, 228: {'meters': 35}, 229: {'meters': 14}, 230: {'meters': 27}, 232: {'meters': 33}, 233: {'meters': 21}, 239: {'meters': 31}, 241: {'meters': 8}, 242: {'meters': 8}, 244: {'meters': 32}, 248: {'meters': 14}, 249: {'meters': 46}, 250: {'meters': 24}, 254: {'meters': 43}, 259: {'meters': 44}, 263: {'meters': 17}, 264: {'meters': 29}, 266: {'meters': 34}, 267: {'meters': 50}, 270: {'meters': 28}, 271: {'meters': 30}, 272: {'meters': 11}, 273: {'meters': 16}, 274: {'meters': 16}, 276: {'meters': 27}, 282: {'meters': 4}, 283: {'meters': 0}, 284: {'meters': 0}, 285: {'meters': 4}, 286: {'meters': 4}, 287: {'meters': 4}, 288: {'meters': 0}, 385: {'meters': 4}, 386: {'meters': 4}, 387: {'meters': 15}, 388: {'meters': 4}, 389: {'meters': 4}, 390: {'meters': 4}, 391: {'meters': 4}, 392: {'meters': 4}, 393: {'meters': 4}, 394: {'meters': 4}, 395: {'meters': 4}, 396: {'meters': 0}, 397: {'meters': 0}, 398: {'meters': 0}, 399: {'meters': 0}, 400: {'meters': 0}, 401: {'meters': 4}, 402: {'meters': 4}, 403: {'meters': 4}, 404: {'meters': 0}, 405: {'meters': 10}, 410: {'meters': 42}, 437: {'meters': 38}, 438: {'meters': 38}, 439: {'meters': 0}, 441: {'meters': 0}, 457: {'meters': 6}, 458: {'meters': 14}, 459: {'meters': 15}, 460: {'meters': 14}, 461: {'meters': 14}, 462: {'meters': 14}, 463: {'meters': 14}, 464: {'meters': 0}, 465: {'meters': 4}, 468: {'meters': 12}, 469: {'meters': 21}, 470: {'meters': 4}, 471: {'meters': 4}, 472: {'meters': 0}, 473: {'meters': 4}, 474: {'meters': 0}, 475: {'meters': 0}, 476: {'meters': 4}, 477: {'meters': 0}, 478: {'meters': 0}, 479: {'meters': 0}, 480: {'meters': 0}, 481: {'meters': 0}, 482: {'meters': 0}, 483: {'meters': 0}, 484: {'meters': 0}, 485: {'meters': 0}, 486: {'meters': 0}, 487: {'meters': 0}, 488: {'meters': 0}, 489: {'meters': 0}, 490: {'meters': 0}, 491: {'meters': 0}, 492: {'meters': 0}, 493: {'meters': 0}, 494: {'meters': 0}, 495: {'meters': 0}, 496: {'meters': 0}, 497: {'meters': 0}, 498: {'meters': 0}, 499: {'meters': 3}, 511: {'meters': 4}, 512: {'meters': 0}, 513: {'meters': 0}, 514: {'meters': 0}, 515: {'meters': 0}, 516: {'meters': 0}, 517: {'meters': 0}, 518: {'meters': 0}, 519: {'meters': 0}, 520: {'meters': 0}, 521: {'meters': 0}, 522: {'meters': 0}, 523: {'meters': 0}, 524: {'meters': 0}, 525: {'meters': 4}}, 234: {20: {'meters': 39}}, 389: {20: {'meters': 47}}, 4: {22: {'meters': 22}}, 127: {22: {'meters': 45}}, 172: {23: {'meters': 5}, 24: {'meters': 30}}, 184: {23: {'meters': 28}, 24: {'meters': 43}}, 415: {23: {'meters': 40}}, 459: {23: {'meters': 23}}, 203: {24: {'meters': 43}}, 76: {25: {'meters': 26}}, 311: {25: {'meters': 38}}, 425: {25: {'meters': 26}}, 448: {25: {'meters': 26}}, 249: {29: {'meters': 49}}, 409: {36: {'meters': 16}, 37: {'meters': 8}, 38: {'meters': 13}, 39: {'meters': 13}, 40: {'meters': 13}, 41: {'meters': 8}, 42: {'meters': 9}, 43: {'meters': 15}, 44: {'meters': 13}, 45: {'meters': 8}, 46: {'meters': 8}, 47: {'meters': 16}, 48: {'meters': 15}, 49: {'meters': 9}, 50: {'meters': 13}, 51: {'meters': 9}, 52: {'meters': 15}, 53: {'meters': 10}, 54: {'meters': 13}, 55: {'meters': 13}, 57: {'meters': 15}, 58: {'meters': 16}, 59: {'meters': 15}, 60: {'meters': 15}, 61: {'meters': 13}, 62: {'meters': 13}, 63: {'meters': 13}, 64: {'meters': 15}, 65: {'meters': 15}, 66: {'meters': 13}, 67: {'meters': 15}, 68: {'meters': 12}, 69: {'meters': 14}, 70: {'meters': 14}, 71: {'meters': 9}, 72: {'meters': 16}, 73: {'meters': 16}, 74: {'meters': 16}, 75: {'meters': 16}, 76: {'meters': 13}, 77: {'meters': 8}, 78: {'meters': 8}, 79: {'meters': 9}, 80: {'meters': 13}, 81: {'meters': 13}, 82: {'meters': 9}, 83: {'meters': 26}, 85: {'meters': 9}, 86: {'meters': 15}, 87: {'meters': 8}, 88: {'meters': 11}, 89: {'meters': 19}, 97: {'meters': 13}, 98: {'meters': 10}, 99: {'meters': 13}, 100: {'meters': 14}, 101: {'meters': 10}, 102: {'meters': 7}, 103: {'meters': 7}, 104: {'meters': 9}, 105: {'meters': 9}, 106: {'meters': 16}, 107: {'meters': 12}, 108: {'meters': 15}, 109: {'meters': 15}, 110: {'meters': 7}, 111: {'meters': 9}, 112: {'meters': 9}, 113: {'meters': 11}, 114: {'meters': 7}, 115: {'meters': 19}, 116: {'meters': 14}, 117: {'meters': 16}, 118: {'meters': 9}, 119: {'meters': 9}, 120: {'meters': 9}, 121: {'meters': 18}, 122: {'meters': 9}, 123: {'meters': 9}, 124: {'meters': 9}}, 2: {126: {'meters': 45}, 131: {'meters': 25}}, 201: {132: {'meters': 24}}, 325: {133: {'meters': 42}}, 460: {133: {'meters': 43}}, 138: {166: {'meters': 50}}, 131: {167: {'meters': 35}}, 209: {167: {'meters': 13}}, 106: {168: {'meters': 21}, 455: {'meters': 48}}, 107: {168: {'meters': 35}}, 211: {168: {'meters': 42}, 455: {'meters': 27}}, 447: {170: {'meters': 36}, 171: {'meters': 32}, 172: {'meters': 38}}, 171: {173: {'meters': 33}}, 49: {237: {'meters': 22}, 240: {'meters': 38}, 260: {'meters': 48}, 418: {'meters': 5}}, 449: {237: {'meters': 22}, 240: {'meters': 38}, 483: {'meters': 10}}, 189: {418: {'meters': 2}, 421: {'meters': 16}, 427: {'meters': 0}, 428: {'meters': 15}}, 125: {449: {'meters': 32}}, 174: {450: {'meters': 40}, 451: {'meters': 41}, 452: {'meters': 38}}, 191: {450: {'meters': 35}}, 259: {450: {'meters': 22}, 452: {'meters': 12}, 453: {'meters': 34}, 454: {'meters': 36}}, 287: {450: {'meters': 37}, 452: {'meters': 14}, 453: {'meters': 36}, 454: {'meters': 21}, 455: {'meters': 46}}, 82: {451: {'meters': 27}, 454: {'meters': 24}}, 199: {451: {'meters': 10}, 452: {'meters': 13}, 453: {'meters': 25}, 454: {'meters': 7}}, 464: {451: {'meters': 24}, 452: {'meters': 44}, 453: {'meters': 14}}, 84: {453: {'meters': 34}, 454: {'meters': 27}}, 392: {453: {'meters': 34}, 454: {'meters': 33}}, 86: {454: {'meters': 47}}, 44: {456: {'meters': 44}}, 179: {456: {'meters': 30}}, 235: {456: {'meters': 48}}, 302: {456: {'meters': 41}}, 66: {467: {'meters': 33}}, 327: {467: {'meters': 40}}, 384: {467: {'meters': 30}}, 439: {467: {'meters': 43}}, 445: {526: {'meters': 20}}})" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## All edges between 1 and 2" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AtlasView({126: {'meters': 45}, 131: {'meters': 25}})" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G[1][2]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AtlasView({126: {'meters': 45}, 131: {'meters': 25}})" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# just checking\n", "G[2][1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### what does this mean?\n", "\n", "* there are two edges\n", "* at timepoints 126 and 131\n", "* with distances 45 and 25 meters, respectively" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## all edges between 1 and 390" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AtlasView({1: {'meters': 17}, 2: {'meters': 17}, 3: {'meters': 17}, 4: {'meters': 17}, 5: {'meters': 17}, 6: {'meters': 2}, 7: {'meters': 2}, 8: {'meters': 2}, 9: {'meters': 2}, 10: {'meters': 7}, 11: {'meters': 8}, 12: {'meters': 4}, 13: {'meters': 7}, 14: {'meters': 6}, 15: {'meters': 8}, 16: {'meters': 8}, 17: {'meters': 14}, 18: {'meters': 11}, 19: {'meters': 11}, 134: {'meters': 4}, 135: {'meters': 0}, 136: {'meters': 0}, 137: {'meters': 0}, 138: {'meters': 0}, 139: {'meters': 0}, 140: {'meters': 0}, 141: {'meters': 0}, 142: {'meters': 0}, 143: {'meters': 0}, 144: {'meters': 0}, 145: {'meters': 0}, 146: {'meters': 0}, 147: {'meters': 0}, 148: {'meters': 0}, 149: {'meters': 0}, 150: {'meters': 3}, 151: {'meters': 0}, 152: {'meters': 0}, 153: {'meters': 0}, 154: {'meters': 0}, 155: {'meters': 7}, 156: {'meters': 7}, 174: {'meters': 11}, 175: {'meters': 0}, 176: {'meters': 0}, 177: {'meters': 0}, 178: {'meters': 0}, 179: {'meters': 0}, 180: {'meters': 4}, 181: {'meters': 0}, 182: {'meters': 0}, 183: {'meters': 0}, 184: {'meters': 0}, 185: {'meters': 0}, 186: {'meters': 0}, 187: {'meters': 12}, 188: {'meters': 0}, 189: {'meters': 0}, 190: {'meters': 0}, 191: {'meters': 0}, 192: {'meters': 4}, 193: {'meters': 4}, 194: {'meters': 4}, 195: {'meters': 15}, 196: {'meters': 15}, 197: {'meters': 4}, 198: {'meters': 15}, 199: {'meters': 4}, 200: {'meters': 4}, 201: {'meters': 0}, 202: {'meters': 0}, 203: {'meters': 0}, 204: {'meters': 0}, 205: {'meters': 0}, 206: {'meters': 0}, 207: {'meters': 0}, 208: {'meters': 0}, 209: {'meters': 0}, 210: {'meters': 0}, 211: {'meters': 8}, 212: {'meters': 0}, 213: {'meters': 0}, 214: {'meters': 0}, 215: {'meters': 0}, 216: {'meters': 0}, 217: {'meters': 0}, 218: {'meters': 0}, 219: {'meters': 0}, 220: {'meters': 11}, 221: {'meters': 13}, 222: {'meters': 13}, 223: {'meters': 13}, 225: {'meters': 37}, 226: {'meters': 12}, 228: {'meters': 35}, 229: {'meters': 14}, 230: {'meters': 27}, 232: {'meters': 33}, 233: {'meters': 21}, 239: {'meters': 31}, 241: {'meters': 8}, 242: {'meters': 8}, 244: {'meters': 32}, 248: {'meters': 14}, 249: {'meters': 46}, 250: {'meters': 24}, 254: {'meters': 43}, 259: {'meters': 44}, 263: {'meters': 17}, 264: {'meters': 29}, 266: {'meters': 34}, 267: {'meters': 50}, 270: {'meters': 28}, 271: {'meters': 30}, 272: {'meters': 11}, 273: {'meters': 16}, 274: {'meters': 16}, 276: {'meters': 27}, 282: {'meters': 4}, 283: {'meters': 0}, 284: {'meters': 0}, 285: {'meters': 4}, 286: {'meters': 4}, 287: {'meters': 4}, 288: {'meters': 0}, 385: {'meters': 4}, 386: {'meters': 4}, 387: {'meters': 15}, 388: {'meters': 4}, 389: {'meters': 4}, 390: {'meters': 4}, 391: {'meters': 4}, 392: {'meters': 4}, 393: {'meters': 4}, 394: {'meters': 4}, 395: {'meters': 4}, 396: {'meters': 0}, 397: {'meters': 0}, 398: {'meters': 0}, 399: {'meters': 0}, 400: {'meters': 0}, 401: {'meters': 4}, 402: {'meters': 4}, 403: {'meters': 4}, 404: {'meters': 0}, 405: {'meters': 10}, 410: {'meters': 42}, 437: {'meters': 38}, 438: {'meters': 38}, 439: {'meters': 0}, 441: {'meters': 0}, 457: {'meters': 6}, 458: {'meters': 14}, 459: {'meters': 15}, 460: {'meters': 14}, 461: {'meters': 14}, 462: {'meters': 14}, 463: {'meters': 14}, 464: {'meters': 0}, 465: {'meters': 4}, 468: {'meters': 12}, 469: {'meters': 21}, 470: {'meters': 4}, 471: {'meters': 4}, 472: {'meters': 0}, 473: {'meters': 4}, 474: {'meters': 0}, 475: {'meters': 0}, 476: {'meters': 4}, 477: {'meters': 0}, 478: {'meters': 0}, 479: {'meters': 0}, 480: {'meters': 0}, 481: {'meters': 0}, 482: {'meters': 0}, 483: {'meters': 0}, 484: {'meters': 0}, 485: {'meters': 0}, 486: {'meters': 0}, 487: {'meters': 0}, 488: {'meters': 0}, 489: {'meters': 0}, 490: {'meters': 0}, 491: {'meters': 0}, 492: {'meters': 0}, 493: {'meters': 0}, 494: {'meters': 0}, 495: {'meters': 0}, 496: {'meters': 0}, 497: {'meters': 0}, 498: {'meters': 0}, 499: {'meters': 3}, 511: {'meters': 4}, 512: {'meters': 0}, 513: {'meters': 0}, 514: {'meters': 0}, 515: {'meters': 0}, 516: {'meters': 0}, 517: {'meters': 0}, 518: {'meters': 0}, 519: {'meters': 0}, 520: {'meters': 0}, 521: {'meters': 0}, 522: {'meters': 0}, 523: {'meters': 0}, 524: {'meters': 0}, 525: {'meters': 4}})" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G[1][390]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What is this?\n", "\n", "* When 1 and 390 were \"close\" (at range less than 50 meters)\n", "* let s plot this" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# dict comprehension\n", "\n", "effe= {time: d['meters'] for (time,d) in G[1][390].items()}\n", "\n", "\n", "pd.Series(effe).plot(\n", "kind='bar', figsize=(16,7),\n", "title='distance between nodes 1 and 390 over time in meters');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# degree again\n", "\n", "* recall that the degree of node 2 was 30\n", "* i.e., it met 30 other people" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "220" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G.degree[2] # counts the number of edges adjacent to 2" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "30" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(G[2]) # G[2] is a dict with the adjacent nodes as keys, thus that is " ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1 51\n", "390 7\n", "2 30\n", "215 67\n", "246 35\n", " ..\n", "71 15\n", "247 11\n", "264 8\n", "254 12\n", "451 14\n", "Length: 469, dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# simple dict comprehension\n", "\n", "degree_distribution=pd.Series({node:len(G[node]) for node in G})\n", "degree_distribution\n", "\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Same as before\n", "degree_distribution.sort_values(ascending =False).reset_index()[0].plot(\n", "title='degree distribution');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Components\n", "\n", "* Can we travel from every node, **via a path**, to every other node?\n", " * If yes, we call a graph **connected**\n", " * If no, the graph consists of a number of **components**" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.number_connected_components(G)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.is_connected(G)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prune the graph\n", "\n", "* Let s remove all edges whose distance is more than 2 meters\n", "* Let s also turn it into a **simple graph**, \n", " * no more multi-edges\n", " * so there is an edge if the ndes were at least once within 2 meters distance\n", "* How many components do we have?" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "276" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "non_dangerous_edges=[(s,t,m) for (s,t,m) in G.edges if m > 2]\n", "\n", "H= G.copy()\n", "H.remove_edges_from(non_dangerous_edges)\n", "H=nx.Graph(H)\n", "nx.number_connected_components(H)\n" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{1, 390},\n", " {2, 21, 181, 189, 215, 246, 265, 276, 330, 361, 375, 378, 429},\n", " {5, 11, 22, 39, 78, 367, 430},\n", " {8, 10},\n", " {9, 130, 218, 274}]" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# list the connected components\n", "list(nx.connected_components(H))[:5]" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Counter({1: 196,\n", " 2: 40,\n", " 3: 18,\n", " 4: 12,\n", " 5: 1,\n", " 6: 1,\n", " 7: 3,\n", " 8: 1,\n", " 9: 1,\n", " 13: 2,\n", " 16: 1})" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# how many do we have for each size?\n", "\n", "from collections import Counter\n", "\n", "Counter([len(component) for component in nx.connected_components(H)])" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20 13\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADnCAYAAAC9roUQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd1yVdf/H8dd1BnspU0UjNXEUztTKbc4cOVOhbGh1OzLN6i7vu1src2Rl5Uor736JKy3FVbhH3rg1B4hYKC5kiMxz4Jxz/f4gSAIR8HAE/DwfDx/Rda7xveThm4vv9f1+voqqqgghhLANzb1ugBBC3E8kdIUQwoYkdIUQwoYkdIUQwoYkdIUQwoZ0xX3o5eWlBgQE2KgpQghRNRw5ciRRVVXvoj4rNnQDAgI4fPhw+bRKCCGqKEVRLtzuM+leEEIIG5LQFUIIG5LQFUIIG5LQFUIIGyr2RVpll5huZM2RS0RdSyXVYMLNQUdDPzeGtPTH08X+XjdPCHEfqpKheyIuhfm7YtgdnQCA0WTJ/8xBd43PtkXTKdCbMR3r07S2x71qphDiPlTlQndZRCzTN0dhMJkpqoCa4c8ADj8Tz57oRKb0bkhI2wDbNlIIcd+qUqGbG7iRZOVY7rivqkJWjpnpmyMBJHiFEDZRZUL3RFwK0zdHkZllJCl8AYbY41gM6eg8/KjWcSSO9VqhmnNIDPsY49UYzKnX8R3+ETwQxPTNUQT5exDkL10NQojyVWVGL8zfFZPbpWAxo3P1wm/ETGpPXIVHh2dJWD8LU0o8APb+TfDq+wZa52r5xxpMZhbsirlXTRdC3EeqxJNuYrqR3dEJqCpo7BzwaB+c/5lT/dbo3H0xXovB2eMJ3B7tn/uB5q+fN6oKO88mkJRulFENQohyVSWedNccuXTbz8wZN8hJvoydd51iz6EAa47e/jxCCGENVSJ0o66lFhgWlkc1m0gMm4PLI13Re9Yu9hwGk4Woq2nl1UQhhACqSOimGkyFtqmqhcSNn4BWR/Vur5bwPDnWbpoQQhRQJULXzaFg17SqqiRt/gJzRgreA95F0Zas69rNQV8ezRNCiHxVInQb+rlhr/vrVpJ/mU9OUhw+g99Doy/4Ykw15aCasnO/tphQTdmoqoqDTkPDGq42bbcQ4v5TJUYvDG7pz2fbogEw3bxO+vGfQavn0pfP5u9TvedYXJp05vLiVzCnXgfg+qr3AKj16jeoXjUY3MLf9o0XQtxXqkToernY07GBN1sj49G5+/DAPzfedl//Md8W2qYo0DnQW4aLCSHKXZXoXgAY26k+DjptmY510GkZ06m+lVskhBCFVZnQbVrbgym9G+KoL90tOeo1TOndUKYACyFsokp0L+TJK1pTXJWxPIqS+4QrVcaEELZUpUIXcoM3yN+DBbti2Hk2AYvFwq1Fxxx0GlRy+3DHdKovT7hCCJuqcqELEOTvwaKQViSlG3lj/hqirqbSpHkr3Bz0NKzhyuAWsnKEEOLeqJKhm8fTxR7vxOME+lbnnZGP3uvmCCFE1XmRdju///479erVu9fNEEII4D4I3fPnz0voCiEqjCoduqqqcv78eerWrXuvmyKEEEAVD92EhAT0ej3VqlW7885CCGEDVTp0pT9XCFHRVOnQlf5cIURFU+VDV/pzhRAVSZUPXXnSFUJUJFU6dKVPVwhR0VTp0JUnXSFERVNlQzczM5Pk5GRq1qx5r5sihBD5qmzo/vHHHwQEBKDVlq2wuRBClIcqG7rStSCEqIgkdIUQwoaqdOjKGF0hREVTZUNXhosJISqiKhu60r0ghKiIqszKEYnpRtYcuUTUtVRuZuWQ0qg/269o8K1jlKV5hBAVhqIWs2Ruq1at1MOHD9uwOaV3Ii6F+bti2B2dAIDR9NcqlHmLUHYK9GZMx/o0rS2LUAohyp+iKEdUVW1V1GeV+kl3WURsscutG/4M4PAz8eyJTpTl1oUQ91ylDd3cwI0k69b11W9DVSErx8z0zZEAErxCiHumUobuibgUpm+OKhC4qimHpPAFGGKPYzGko/Pwo1rHkTjW++sJPyvHwvTNUQT5exDkL10NQgjbq5SjF+bvisFgMhfYplrM6Fy98Bsxk9oTV+HR4VkS1s/ClBJfYD+DycyCXTG2bK4QQuSrdKGbmG5kd3RCoT5cjZ0DHu2D0Xn4oiganOq3Rufui/FawYBVVdh5NoGkdKMNWy2EELkqXeiuOXKpRPuZM26Qk3wZO+86hT5TgDVHS3YeIYSwpkoXulHXUgsMCyuKajaRGDYHl0e6ovesXehzg8lC1NW08mqiEELcVqUL3VSDqdjPVdVC4sZPQKujerdXizlPjrWbJoQQd1TpQtfN4fYDLlRVJWnzF5gzUvAe8C6K9vb7ujnoy6N5QghRrEoXug393LDXFd3s5F/mk5MUh8/g99Dobz/110GnoWEN1/JqohBC3FalG6c7qEUt5vwSSe7rsL+Ybl4n/fjPoNVz6ctn87dX7zkWlyadC+yrAoNb+NugtUIIUZBNQvfWYjSpBhNuDjoa+rkxpKV/iYvRqKrKtm3bePfdd1EeGYri25hbR43p3H144J8b73geRYHOgd5SBEcIcU+Ua+gWX4zmGp9tiy5RMZqIiAjeeecdrly5wgcffMBDbZ9kxNcHycox3/aY23HQaRnTqX7pb0YIIayg3Pp0l0XEMmxJBFsj4zGaLIWGeRn+3BZ+Jp5hSyJYFhFb6BwnT56kf//+DB06lJCQEE6fPs3QoUNpXqc6IxrZo+aUboKDo17DlN4NZQqwEOKeKZfQ/asYTdHVv251azGavOA9f/48ISEhdOvWjc6dOxMdHc1LL72ETpf7YH7mzBnmTxzO8Eb2OOq1KEoxFwBUiwU7LUzp3UiK3Qgh7imrh25RxWhKIivHwoebzjBi3D9p06YNgYGBnDt3jtdffx0HB4f8/S5evEjPnj2ZM2cOM196ilUvt6VHY1/sdRoc/jaqwUGnwV6noZFrNm4HvyW4zQNWuUchhCgrq/XpGo1GxowZw+r1m8lIu1lklS+AlH0ruLkvFJ9hH+IY0Cx/e1bsca7s+JZzNy7h6+VJYGAgrq4Fh3UlJCTQvXt3Jk2aREhICABB/h4sCmlFUrqRNUcvEXU1jVRDDm4OehrWcGVwC3+qOelpvW4GK1asYMSIEda6ZSGEKDWrha7JZMLTtwbew2dQ3dmTrPOHSVg/i5ovzkPn4QtAzo2rZJ7dh9aleoFjsxMvkhj2MV5PTcT9oZZserkFGlNWgX3S0tLo3bs3gwYN4vXXXy90fU8Xe17pcPs10ebOncvw4cPp378/zs7OVrhjIYQoPat1Lzg7O1O3xwvoi6nylRy+kGqdngdNway/uX8Vrs164livFRqNlh0XsgosKmk0GhkwYADNmzfnww8/LFP72rVrR7t27Zg9e3aZjhdCCGuwap/urcVo/l7lKyNqH4pWj2O9Rwsdl305CoAr34wl5rNg5k55jeTk5NzzmM08++yzuLu7s3DhQpQ7vTUrxqxZs5g3bx4XLlwo8zmEEOJuWDV084rR/L3Kl8WYScru76j+5MtFHmdKSyL91E68B7xLzVcWk5WVxfjx41FVlXHjxpGYmEhoaCharfau2lenTh1ee+013nrrrbs6jxBClJVVQ9fNQVdkla+UfctxbtIlv2/37xS9HS5BT6KvXguNnSOPDxrF5s2bmTp1KgcPHmTdunUFRjDcjTfffJOIiAj27NljlfMJIURpWHVGWqCvKylbcqt8+QyZml/ly3DhBOa0JNKObQLAkplK4rqZuLUdjHvbwdh5B5BXS8FBp+FBb2eMRiMrVqxg3759uLm5Wa2NTk5OzJ49mwkTJnD48OG7fnoWQojSsOqT7oHvZ5FdRJUv3+HTqfnSfGq+8CU1X/gSrUt1qvcch2uLpwBweeRJ0k9uIyflGuYcA78smQFAeHg4Pj4+1mwiAEOHDsXFxYWlS5da/dxCCFEcqz3pXrhwge++/Rqt3u6OVb5QNGgcXNDYOQLg0rQ7ptQErn03CSxmdGoOO3bsICAgwFrNK3h5RWHu3Lk89dRTDBkyBHd393K5jhBC/J2iFjNPt1WrVurhw4dLdcITcSkMWxJRpmI0dlq4vuJd9KlX6NKlC9OnT6d+/fIrTjNq1Cg8PDyYM2dOuV1DCHH/URTliKqqrYr6zOrTgJvW9mBK74Y46kt3anutQsbe/yP0i4+IjY2ladOmtG3blnHjxnH9+nVrNxOA6dOn89///pezZ8+Wy/mFEOLvyqXgTUjbAKb0bpRbjOYO+yoK2OsUsvaHMnNUH5566imcnZ159913iYqKQq/X07hxY6ZNm0ZamnUXk/T19eWf//wnb7zxhlXPK4QQt1NupR0fqeVBkL97sRXANAq08HdF3fopE/u24tlnny3wuZeXF5999hmHDh3i3LlzNGjQgAULFpCTY71FJV977TWio6PZsmWL1c4phBC3U26lHYctieBgbDKWYko7WlQ4EptEUOe+TJw48bb7PfjggyxbtozNmzcTFhZG48aNWb16NcX1R5eUnZ0dn3zyCZMmTbJqmAshRFGsHrqlqaULgNaO0/oGRRYx/7vmzZvz888/s2jRImbNmkWbNm3YuXPnXbe5T58+1KlThwULFtz1uYQQojhWGb2QV9Zxyy/hxCckof1bWUdLjoEbO74lM2ofqsWEnfeD+IXMAiBlbyg3/7caRavHQa9Fo8Bvv/1G3bp1i72mxWJh9erVTJkyhQYNGjBz5kyaNm1ailsv6MyZM3Ts2JEzZ87g7e1d5vMIIUS5j14wmUzUrl2bjpPmU3vSKjw6PEvC+lmYUuIBSP55HhZDGjVHL6T2hBVUe3J0geOdG7XngclreO6rXaSnp98xcAE0Gg3Dhg0jMjKSp556ih49evDcc8+VuZhN48aNGTFiBO+9916ZjhdCiJKwSug6OzszbvI7HL2hBwqWdcxJiiPz3AE8e45H6+SOotFi71d47K2qws6zCSSll27dMzs7O8aNG0d0dDQPPvggLVq04I033iApKanU9zF16lR+/PFHTpw4UepjhRCiJKzWp7vmyKX8r28t62i8Eo3O3YeUvaHEfT6CK9+MJSPq1wLHZsYcJG7uMGIXvcr492aV6fpubm5MmzaN06dPk5WVRWBgIDNmzCAzM7PE56hWrRpTp07l9ddft8pLOiGE+DurhW5eLd2/l3U0pyWRk3ABjb0T/uO+o3q3V0na9Bk5iXEAODVqT81RC/F/LZRqPcezfumXrFixoszt8PPzY8GCBezfv5+jR4/SoEEDvv76a0wmU4mOHz16NImJifz4449lboMQQtyO1UI31WAqsqyjorMDjQ73J4blviyr8wgOdR4h64+jANh51UHn6omi0eLg34hGTz7DmjVr7ro9DRo04IcffmDt2rUsW7aMoKAg1q9ff8cnWJ1Ox9y5c5k8eTIGg+Gu2yGEELeyWui62mtJ2pxb1tF7wLv5ZR31PgGFdy5mxkR01Gl+/fVXPvjgA7Zu3UpKSspdtStvWNmcOXP497//Tfv27fn111+LPaZr1640b96cTz/9FIDEdCOLdp/n9VXHePG7Q7y+6hiLdp8vdf+zEEJYrcrYseVzMCfH4fPMhwXKOjrUfhidmzc3/7ca98eGYrxyFsPFk1Tr/AIAmdER2Nd5GI29M1yPQblymiEjniE9PZ0PP/yQo0eP4u/vT9u2bWnTpg1t27bl4YcfRqcredMVRaF379706NGD0NBQRowYQfPmzZkxYwaNGjUq8pg5c+bQpvdQorw7cOBi7vTjvKWIABx01/hsWzSdAr0Z07E+TWt7lOWvTQhxn7HKON0LFy4QEBCAotWD5q+i4HllHbMTLpC05QtyEmLRufng0eFZnAIfByBh/WwMfxxDNeegc/Ni2tsTeefNSfnnMJlMnDp1igMHDnDgwAEiIiKIi4ujefPmBYK4Vq1aJb5pg8HA/PnzmTVrFv3792fq1KmFjl8WEct/1v+GWVVAuf0vBIoCDjotU3o3JKRtQInbIISouoobp2vV0o4vf3+YrZHxJZuJVqiR0KOxL4tCimxnASkpKRw6dKhAENvb2+cHcJs2bWjZsuUdl1pPSUlh5syZLFmyhJdffpm3334bDw+PW2bVWYo9/laOeg1TejeS4BVC2C5076aWrqNey6qX2xLkX/pf01VV5Y8//iAiIiI/iE+ePEmDBg0KBHFgYCAaTeGn1vPnz9OrVy/Onz+PVqdHU60W7h2ew7FeK1RzDolhH2O8GoM59Tq+wz/C4YGg/GNvnVEH4KDXcurknWfUCSGqruJC16prpOXV0i3bU2LDMgUu5PbZ1q1bl7p16zJixAggd2ry8ePHiYiIIDw8nA8++ICkpCRat25dIIi9vLzw8/NjxIgRPP7447yxLor4+EQS1s+i5ovz0LpWx96/Ca6t+pO4bmaR13du1B6vvpPzn9YlcIUQt2PV0AXyf72evjkKg6n4ojfl2R+a193Qpk2b/G3Xr1/n4MGDREREMHfuXA4dOoSnp2d+ACuObhg9H8LJvV7+jDpnjydwe7R/7gmKeEq+1a2z6jxd7IvdVwhxf7J66EJu8Ab5e7BgVww7zyagAIYCb/41qEDnQG/GdKpf5ifc0vLx8aFPnz706dMHyC2aExUVld8lsWBnNMZ6XbBkZ+bPqCuJvBl1WpfqVHu0L2uONuCVDvXK81aEEJVUuYQuQJC/B4tCWpGUbmTN0UtEXU0j1ZCDm4OehjVcGdzC/54/DWo0Gho3bkzjxo154YUXeH3VMX46crHAjLo7cWrUHpdmPdE6e2C8Ek3iTx+xrn4tXunwjg3uQAhR2ZRb6ObxdLGvNE99NzOzC82ouxM7r7+ehh38G+Haqh+R+7cCErpCiMLKbbmeykZVVQ58N73QjLpSUxR0mjutDCeEuF9J6P7pH//4B1nXL1J72NQCM+oAVFMOqik792uLCdWUnV/DITM6ArMhHVVVMV45S9qRDbR7sqfN2y+EqBysOk63ssqbUWdvb0+25a+n1LwZdZcWvIg5teAy8LVe/Qadh2+BGXVaVy9cm/WgT107xo4aSevWrVGKW5lTCFEl2WxyRFVwt7PqOtb1oFHSPpYsWYKzszOjR48mJCQEDw+pzSDE/aLcl+upSsZ2qo+DTnvnHYvgoNMyqWcT3n77baKjo/nss8/Yt28fAQEBjBw5kl9//VWKowtxn5PQ/Zu8WXWO+tL91WgxF5hVp9Fo6NKlCytXruTcuXMEBQXx0ksv0aRJEz777LMyLSckhKj8JHSLENI2gCm9G+Go1xZX+hfIm1WngaM/knRgfZH7eHt788YbbxAZGcmiRYs4evQo9erVIzg4mF27dsnTrxD3kXIfp1tZlXZWnfuoxrRv3x4PDw9GjhxZ5DkVRaFDhw506NCB5ORkli1bxrhx48jJyWHUqFGMHDkSHx8f29ygEOKekBdpJVDSWXVRUVF07tyZhQsX8vTTT5fo3KqqEhERweLFi1m3bh3dunVj9OjRdO3atciKaEKIik9GL9jQkSNH6NWrFytXrqRLly6lOjYlJYXly5ezePFiUlNTGTVqFC+88AI1atQop9YKIcqDjF6woZYtW7J69WqGDRvGoUOHSnWsh4cHY8aM4dixY6xatYrY2FgaN27MgAED2LJlC2Zz6esUCyEqFgndctCpUye++eYb+vbty5kzZ0p9vKIoPProoyxevJiLFy/Su3dv3nvvPerWrcv777/PpUuXyqHVQghbkNAtJ3379mXOnDn06NGD2NjYMp/H1dWV0aNHc+jQIdatW8e1a9cICgqib9++hIWFYTKZrNdoIUS5k9AtRyEhIbz11lt069aNa9eu3fX5mjdvzoIFC4iLi2PgwIHMnDmTgIAA3nvvPS5cuGCFFgshypu8SLOB999/n7Vr17J7926rTwc+deoUS5YsITQ0lEcffZTRo0fTt29f9Hr9XZ03Md3ImiOXiLqWSqrBhJuDjoZ+bgxpee/rIAtR0cnohXtMVVUmTZrEwYMHCQ8Pv+MqxWWRlZXF2rVrWbx4MefOneP5559n1KhR1KtXulrGJ+JSmL8rht3RCQAYixib3CnQmzEd69O0ttSTEKIoMnrhHlMUhU8++YSHHnqIwYMHk52dbfVrODo6EhISwp49e9i5cyfZ2dk89thjPPnkk6xatQqj0XjHcyyLiGXYkgi2RsZjNFkKBC7kTg4xmiyEn4ln2JIIlkXEWv0+hKjqJHRtRKPR8PXXX2Nvb8+zzz5brsO/GjZsyCeffEJcXByjRo1i8eLF1K5dm8mTJ3P27Nkij1kWEfvnKs7FLyYKuQtwZuWYmb45UoJXiFKS0LUhnU7HypUrSUxMZMyYMeVec8He3p5hw4axfft29u/fj06no2PHjnTs2JHQ0FAMBgOQ26UwfXMUWTmWO5yxoKwcC9M3R/HbpZTyaL4QVZL06d4DaWlpdO3ala5duzJjxgybXjs7O5sNGzawePFijhw5QkhICDEeLdn04Us4N3wCr76TyYw5RGrED2QnXEDR6XGq15pqXUehsXcCwJSWSPIvCzFeOo2it+fxQaPZs9S29yFERSZ9uhWMq6srW7ZsISwsjNmzZ9v02nZ2dgwaNIhffvmFQ4cOoXP2YPt/P8G+xkP5+6jGDNwffwb/cd9Rc/QiTOlJ3Nj5bf7niRs+Qefhi//4ZfgM/g+/rpzHus2/2PQ+hKisJHTvEU9PT8LDw1m4cCFLliy5J2148MEHuaGths7JFYcHmuZvd27SCce6LdHoHdA6uODatAfGy5EAWLKzMF48ifvjz6Boddj51sW1UTtmzl14T+5BiMpGQvceqlWrFlu3bmXq1KmsXr3a5tdPTU3lxyWf4t55VLH7GeJOoc9baj6vO+qWbimzxcLv56LKq5lCVCkSuvdY/fr12bJlC+PHj+eXX2z7K/q///1v6rXvi87N67b7ZP1xjIyT2/FoHwKAxt4Je//G3Px1JaopG+O1GDLP7sdoyLJVs4Wo1CR0K4CgoCB++uknnn32Wfbv32+Tax4/fpxt27bxWP/nbruP8XIUiWEf4zXgHfTVa+Vv9+o7GdPNeC7Nf57kXxbg3KQz7p5+tmi2EJWerBxRQTz++ON8//33DBgwgK1btxIUFFSu19u1axexsbH83/inyMg2Y8nOAtXC1cQJ1Hjhc7Kvnef62g/w7D0Bx4BmBY7VufvgM+Q/+f+fvOFjGjdrXq7tFaKqkCFjFczq1auZOHEiu3fvpn79+uV2nczMTFJTU0nKMNJv3j4S96/FdDOe6j3GYs64QfyKf1G928s4N+pQ6NicxDi0rp4oOj0Zkfu4sX0JZ06fJvBB/3JrrxCVSXFDxuRJt4IZOnQoN2/epHv37uzdu5datWrd+aAycHJywsnJCT+ga4sEVh92QNHZoXVy58bOpVgyb5K0+QuSNn8B5D7d1hy1AICsP45yc/8qVJMRO996PP3PLyVwhSghedKtoGbPns13333Hnj178PT0LNdrnYhLYdiSCLJySj812V6r8MOrj+cvPS+EkCfdSumtt94iOTmZXr16sX37dlxdXfM/s3bZxaa1PZjSu+GftRdKPhVYr6ik7v6OC23MBPn3LfV1hbgfyZNuBaaqKq+++ioxMTFs2rSJswmGci27mFv0JgqDqfiiN4oCDjotU3o35CElnoEDBzJhwgTefPNNFEUp9XWFqGqknm4lZjabGTFiBJcd65JYpwNGk6XEgRjSNqDU1/vtUgoLdsWw82wCCrnlHPPkBXvnQG/GdKqf36Vw6dIl+vfvz8MPP8xXX32Fg4NDqa8rRFUioVvJ/XffeaaFnUTVlnw1CEe9him9G5UpeAGS0o2sOXqJqKtppBpycHPQ07CGK4NbFN2FkZGRwfPPP8/ly5f56aef8PX1LdN1hagKJHQrsbt5yeWo17Lq5bY2e8llsVh4//33Wbp0KevXr6dZs2Z3PkiIKkhepFVSISEh/LjxZwxZmWidq+HWdhCuTXsAYMkxcGPHt2RG7UO1mLDzfhC/kFkAGC78RsqvK8iOP88TC91JS7hik/ZqNBqmTp1K48aN6datG1999RUDBw60ybWFqCwkdCuwVye8wYHaQ8lBS05SHNeWv4Odbz3s/eqT/PM8VIuZmqMXonFwIfv6H/nHKXp7XIK6oZo6kvq/1SSlG226mOTQoUOpW7cuAwYMIDIyknfffVdesAnxJ6m9UIGdynRDo8vrx1VQUDDduEpOUhyZ5w7g2XM8Wid3FI0We7+/Zq/Z1wzE5eEu6Dxy6yGsOXrJ5m1v1aoVBw4cYP369QQHB5OVJQVxhAAJ3Qot6loqVzbN4+KcQVxZ8ipal+o41muF8Uo0OncfUvaGEvf5CK58M5aMqF+LPIeqQtTVNBu3PFfNmjXZvXs3AB07duTKFdt0cwhRkUnoVmCpBhOePcZQe9JqfINn4djgMRStHnNaEjkJF9DYO+E/7juqd3uVpE2fkZMYd5vz5Ni45X9xdHQkNDSU/v3706ZNG+TFrLjfSehWYG4OuV3uikaLQ+0mmNMSSTu2GUVnBxod7k8MQ9HqcajzCA51HiHrj6O3OU/Jh5qVB0VRmDJlCl988QW9evW6JwXbhagoJHQrsIZ+btjrbvkWWSyYblxF7xNQeOfbvqhSyb7+B6mpqeXRxFLJK1v55ptvMnXqVCyW0q0+LERVIKFbQV2/fh3tH/uxZGehWsxk/X6EjMjdOAQ0w6H2w+jcvLn5v9WoFjOGS2cwXDyJY90WAKiqBdWUDWYTChC5eSm1atWie/fuzJs3jwsXLtyz+2rWrBkHDx4kPDycZ555hszMzHvWFiHuBZkcUUElJCQwePBgIg4fJcdkRufug2vLvrg26wlAdsIFkrZ8QU5CLDo3Hzw6PItT4ONA7jjd+BXvFjhfu3btmDhxImFhYWzatIlatWrRr18/+vbtS8uWLdFobPvz12Aw8Morr3Dq1CnWr1+Pv7+UhhRVh8xIq8TKY0aa2Wzmf//7H2FhYWzYsIGbN2/St29f+vXrR5cuXXB0dLRW84ulqioff/wxn3/+OT/++CNt2rSxyXWFKG/Fha50L1RweWUXHfWl+8GMbM8AABm5SURBVFbl1l5oWOQUYK1WS7t27Zg9ezaRkZHs2rWLBg0aMHv2bPz8/BgwYADffvst8fHx1rqNIimKwltvvcWiRYvo27cvoaGh5Xo9ISoCedKtJMpSdrEsxW6SkpLYvHkzGzZsIDw8nMaNG9OvXz/69etHo0aNym1m2cmTJ+nXrx/Dhw/nww8/tHl3hxDWJN0LVURZyi7eDaPRyO7duwkLCyMsLAw7O7v8boh27dqh11t3KFpCQgKDBg3C09OT77//HhcXF6ueXwhbkdCtYkpbdtEaVFXlxIkTbNiwgbCwMM6fP0+vXr3o168fPXv2xN3d3SrXyc7OZsyYMRw6dIiwsDAeeOABq5xXCFuS0BVWd/nyZTZu3EhYWBh79+6ldevW+aMhHnzwwbs6t6qqfP7558yePZsffviBJ554wkqtFsI2JHRFuUpPT2fbtm2EhYWxceNG/Pz88vuBW7VqVeb+2S1btjBy5Ehmz57N888/b91GC1GOJHSFzZjNZg4cOJDfD3zjxg369OlDv3796Nq1K05OTqU6X2RkJH379mXAgAHMnDkTrVZbaB9rL9QpxN2S0BX3TExMTH4/8JEjR+jcuTP9+vXjqaeews/Pr0TnSEpKYsiQITg7OxMaGoqbmxuQO4a5PBfqFKKsJHRFhZCcnMyWLVsICwsjPDycwMDA/G6IJk2aFDscLScnh9dee429e/cSFhbG/usamwyhE6IsJHRFhZOdnc2ePXvyuyE0Gk3+i7gOHToUORxNVVUWLFjAR6v34NzuObJLUS/nbhfqFKI0JHRFhaaqKidPnsyflhwdHU3Pnj3p168fvXr1wsPDg5CQELZv305aegbZdq64tsldLy799E6Sf55/68lQTUb8np+LvV99UvaGcvN/q1H+XEnZQa/l1MnfqFu37j26W3E/kIUpRYWmKApBQUEEBQXxr3/9i6tXr7Jx40aWL1/OK6+8wqOPPkqrVq3YsWMHnx3OYNO+w1wLzV0vzqVJZ1yadM4/V/pv27i5fyV2vvXytzk3ao9X38koCvRo7CuBK+4pmWspKpwaNWowevRoNmzYwNWrV3nttddISkqiU8++hJ+8BOpf68X9Xfqp7Tg/3KXI/mFVhZ1nE0hKN9riNoQokjzpigrN2dmZ/v37079/fzr0D2bfZ8NQTUbsfOvhWK/gb2+mm9cxxp3Gs/eEAtszYw4SN3cYWpfqVHu0L2uONuCVDvUQ4l6Q0BWVRosRk7nQ8BmMl6MwXDyZ30+bJ/3Uduz9G6P3+GsomlOj9rg064nW2QPjlWgSf/qIdfVr8UqHd2zdfCEA6V4QlUiqwVRovbhbZZzagcsjXQtss/Oqg87VM/c4/0a4tupH5P6ttmy2EAVI6IpKI2+hTiB/vbg8hktnMKcn4xR4hzoNioJOUz7lKYUoCQldUeFdv36dlStXEuCmxU6jFlgvLk/Gye04NXgcjX3BacaZ0RGYDemoqorxylnSDofxSKvHbH0LQuSTPl1R4SmKwsKFCzl+4gTpWdlo3X2o1nU0Tg/lLu+jmrLJiNqH94DC/bQZkXtI2vw5qjkHrasX7m0Gcjh8LU2bbiA4OJjhw4dTu3ZtW9+SuI/J5AhRqbz8/WG2RsYXO/X3dvLG6S4Y0YK9e/cSGhrK2rVreeSRRwgODmbw4MFUq1bN+o0W9x1ZI01UGWM71cdBV7jSWEk46LSM6VQfjUZDx44dWbx4MVeuXGHChAn88ssvBAQEMHDgQNauXYvBYLByy4XIJaErKpWyLtSJycijurhCyxjZ29szYMAA1qxZw8WLF+nTpw8LFiygZs2avPTSS+zYsQOzufQrMQtxOxK6otIJaRvAlN6NcNRrudM6mYqSuxT9G13rcXD5J0ybNo3bdam5u7vz4osvsn37dk6ePEnjxo2ZPHkyderUYfLkyRw7duy2xwpRUtKnKyqt0i7UGR8fT7du3ejduzczZswo8crGZ86cITQ0lOXLl+Po6EhwcDAjRoy462WJRNUlVcZElVaahTqTkpLo3r077dq1Y+7cuaVaUl5VVfbv309oaCg//PADgYGBBAcHM2TIELy8vKx9W6ISk9AV4hYpKSn06tWLoKAgFi5cWKY13LKzswkPDyc0NJQtW7bQvn17goOD6devX6mXJBJVj4xeEOIWHh4ehIeHExUVxQsvvIDJZCr1Oezs7OjTpw8rVqwgLi6OIUOGsHTpUmrVqsVzzz1HeHh4mc4rqj4JXXFfcnV1ZcuWLVy9epXg4GBycnLu6lzPPfccv/zyC5GRkbRs2ZJ//etf1K5dm9dff51Dhw7JCziRT0JX3LecnJwICwsjMzOTIUOGYDTefZ1dPz8/JkyYwMGDB9m9ezceHh6MGDGCwMBApk2bRkxMjBVaLiozCV1xX3NwcGDt2rXodDqefvppsrKyrHbuBg0aMHXqVKKjo1m2bBnJycm0a9eONm3a8MUXXxAfH2+1a4nKQ0JX3Pfs7OxYuXIlnp6ePPXUU6Snp1v1/Iqi0Lp1az7//HMuXbrE+++/z6FDhwgMDKRXr14sW7bM6tcUFZeErhCATqfju+++o27duvTs2ZObN2+W23V69OjB999/z+XLl3nuuedYuXIl/v7+jBgxgk2bNt1V/7Ko+CR0hfiTVqtl8eLFNGvWjCeffJLk5ORyvZ6zszPDhw9n48aNnDt3jnbt2vHRRx9Rq1Ytxo4dy/79++UFXBUk43SF+BtVVXnrrbfYunUrW7duxdvbu8DnielG1hy5RNS1VFINJtwcdDT0c2NIy8KTMcrijz/+YPny5Sxbtozs7GxGjBhBcHAwDRs2vOtzV2Xl/X0pDZkcIUQpqarKf/7zH9asWcP27dupUaMGJ+JSmL8rht3RCQAYi5h23CnQmzEd69O0tsdtzly6Nhw7dozQ0FBWrFhBjRo1CA4OZtiwYdSsWfOuz1+RQupu2Pr7UhISukKU0YwZM/j2228Z//lqFkbEYzCZi63lqyi5JSSn9G5ISNsAq7XDbDaza9cuQkNDWbduHS1atCA4OJiBAwfi7u5eqnNVxJAqq2URsUzfHHXPvi+3v56ErhBl9uJH37LjhgfoSv7056jXMKV3o3L5B56VlcWmTZsIDQ1lx44d9OjRg+DgYHr16oWdnV2xx1bUkCqL3HuJJCvHcued/1Se35dbSegKUUohISFs376dtPQMsu3ccG0zENemPchOvEjSxk/zF8W086tPtW6vYOdVB8jtEkjZ9V/ST4SDAs89/wLfzi9dYZ3SSE5OZs2aNYSGhnL69GkGDRpEcHAw7dq1K1RToiKHVGmdiEth2JIIsnJKX+vYUa9l1cttC9VWtiYJXSFK6fTp09SvX5/xq0+yad9hroW+g8+Qqeg9/LAYMtC6+4BqIe3oJtJPhFPzpXkApB3bQuqhdfgOm46igfQfpzHj32/x6quvlnubL168yIoVKwgNDeXmzZsMGTKE33//nSNHjpCYlIzZxQf3Ds/hWK8V6ad3kvzz/L8OVlVUkxG/5+di71cfAOO1GG5sW0J2/Hmqubvy3r+mMGHChHK/j+LMmzeP//73vxw78RuOjTrg9dTE/M8yIveSsi8Uc1oSOlcvPDo+h1OD3EVIsxNiubHjG7KvnceSlcor3x9iUUiRmWgVUvBGiFJq0qQJaTnk9nuqCgoKphtX0Ti4oPPwzX9yVRRNgaXgM05tx631AHRuXmhdvLBv3o+vv1lqkzbXqVOHt99+m99++42NGzdisVjYvn07jo6OPDpxEe7tQ0hYPwtTSjwuTTpT5401+X+qd/8HOg8/7HzrAWDOvMn11f/BpXlP6ry+gv4f/UD37t1tch/FqVmzJq+98TauQd3gludFU1oiiRs+oXqXUdSeuBqPzi+SGDYHc0YKAIpGh1PD9nj2eg2AnWcTSEq/+2nfZSGhK8RtDAp5kXMzB3BlyatoXarjWO+vB5eLnz3DxY8HkLz1K9weG5K/PTvxInY+fxU3d/B9kFOnT9u03QCPPPIIn376KTdu3ODjLxZyMccVx/qt0bn7YrxWuP5D+qntOD/cJf+HSeqhdTg+2AKXJp1Bq+fXi5n41K5r69soZODAgWTWbIHW0bXAdnNaEhoHZxzrtUJRFJzqP4qit8eUkvsDUe/pj2vT7ui9c7uBFGDN0Uu2bj4gS7ALcVvNh08mNvAZjJejMFw8iaLV539WZ+IqLNkGMk5tR+vmk79dzTagsf+rnm6OzhFjVgYff/wxer0enU6X/9+SfF2affO+1mg0+eGp0Wi4bF8HvT6azJtJ5CRfxu7P4MljunkdY9xpPHv/1XVgvHwWO+8HuPb9ZHJuXMWxViCLg1x4Z0j7u/57VVUVi8VS5j+HY65i+luvqJ1fffSetck8dwDHeq3IijmIotOj9y56dQ+DyULU1bS7vpeykNAV4jZSDSYUjRaH2k3IOL2TtGObcWvVL/9zjZ0DLs17cenzYOxHL0Tr7IFi54DFmJm/jyU7C42dA/Hx8ZhMJnJycjCZTAW+Lmpbab++dZvFYikQxq7dx6Gr24bEsDm4PNIVvWftAveZfmo79v6N0Xv45W8zpyWSHn8e32EfYOcdwI2dS5k2Jpglb+tKHI5ms7nI7ZD7w6Csf5SO/yj0vVI0Wpwf7kJi2MeopmwUrR6vp/+Jxs6hmO/vvZluLaErxG24Odzyz8NiKdB3m+/PF1DmtCS0zh7YedUh+/of2NcMBCAn/nd86jzEnDlzbNRqsFgsBUJ57Mrf+OnzKaDVUb1b4Rd6Gad24P7Y0ALbFJ0dTg0ew75GAwDc2w3n0pEN/LTtOO7u7qUKSa1WWzA073Ikx+urjrH0i+MFtmXFHidl51J8R8zAzq8e2ddiSFjzAbqh07DzLbpbxM1BX+T28iahK8TfXL9+nR07dhDg3hg7jcrNmKNkRO7Gq99bZP1xDK2jG3qfANQcIyl7vkfj4ILeK/fp0fnhLrn9ofVaAQpph9Yx+LlRNm2/RqPBzs4OOzs7VFXl6IqPMWek4DNkKoq24D95w6UzmNOTcQp8osD2W/ulc+UGZUxMDN26dcPNza08b6FYDf3c0Clw62Cx7Pjfsa/dBPsaDwFgX6MBdjUDyYo9XmToOug0NKzhWmi7LUjoCvE3iqKwcOFCjp84QXpWNlp3H6p1HY3TQ23IiNpH8tavMKcloujssK/ZAJ+h01B0uZMSXJr1wpRyjavfjAPAvXkPPp/65j27l3/84x9kXb9I7WFTydEUntyRcXI7Tg0eL9APDeD8yJMk/vQR2a36ofeqQ9r+lXj61+PLL79k5MiRNGjQgPbt2+f/8fX1tcn9mEwm+jTx4l3VAqoF1ZQNGi32NR4iNWIN2fG/Y+dbl+xr5zHGnca1RW8gtx8Zcw6qOXcJJbMpm75NvIu7VLmRcbpCFOPl7w+zNTK+2Nlbt6Mo0KOxb7mOBy3OhQsXCAgIwN7enmzLX7/SV+85FpcmnVFN2cR9+SzeA97BMaBZoePTjm7m5v6VqDlGHOs0YX9YKEEN62M0Gjly5Ah79+5l7969/Prrr3h7excI4bp165bLhJCpU6cybdq0AtvcnxiOR/tgUo9sIO1QGObMFLSObri2eAq3NgMBMKXEc3nRSwWOe+CBB4iNjbV6G0EmRwhRZhV95lNJ3c0PDywWWvs7sHp8t9t8bOHUqVPs3buXPXv2sHfvXhRFKRDCDz/8cJlWXb6div59kckRQpRR09oeTOndEEd96f6p5E6fbVghAhdgbKf6OOi0ZTpWr1XYu+hfvP322xgMhkKfazQagoKCGDt2LKtWreLy5cvs2bOHnj17cvToUQYPHoynpyd9+vRh1qxZ7N+/n+zs7Lu6n8r8fZEnXSFKoCoUirmb2gvd6zoxbtw4Tp48ydKlS2nbtm2prn3t2jX27duX3yURHR1Nq1at8p+EH3vsMVxdS/9ia1lELP9Z/xtmVQHl9gGsAKrJyKB6Gj559WmgfEtbSveCEFbw26UUFuyKYefZBBRyB9jnySuJ2DnQmzGd6leYJ9y/u9sfHj/88AOvvfYaISEhvP/++zg6OpapHampqezfvz8/hI8ePUrDhg3zQ7hdu3b4+Pjc8TzR0dG06zeCXpPnEnEhrdjvSwcvA68/N5D/27SbH6MyyrW0pYSuEFaUlG5kzdFLRF1NI9WQg5uDnoY1XBnconIU/77bHx4JCQmMGzeOEydOsHTpUh577LG7bpPBYODw4cP5Ibx//378/PwK9AsHBAQUeDmnqio9e/akR48eTJo0qUTfl5EfLGF3mheKzq5cf2OR0BVCFHK3PzzWrl3LuHHjCA4O5oMPPijzU29RzGYzJ0+ezA/hvXv3otVqC4RwVFQU06ZN49ixY+j1d57osCwilg83R2KwQWlLCV0hRLlITExk/PjxHD16lG+//ZYnnnjizgeVgaqqnD9/Pn+ExO7du4mNjaVt27Y8/fTTtG/fnpYtWxYq4p5XCvK3kydxbNiBar1fz/+suFKQqimHG7v+S2bUXlRTNoOHDGXZN4tKFO4goSuEKGc//fQTY8eOZdiwYXz44Yc4OTnd+aC78O6773L27FmeeeaZ/CfhmJgYWrdunf8k3LZtW8LDw9FoNLz75TIuJqTk1981pSVyeeEofAb9C4e6Lck6f5jEdTOp9Y9v0Dp7kLJvOYbY43gP+jcKFowbZ/Bq8MBCY4RvR4aMCSHK1YABAzh58iTx8fE0bdqUvXv3ltu1zp49y5IlS5g3bx5Dhw7lyy+/5Pjx41y6dInJkyeTnZ3N1KlT8fPzY+bMmWzdG8FVg7ZA/d07lYLMijmIa6t+aB1d0Ti6o3mkF19/841V2i/TgIUQVuHp6Zm/cOYzzzzD0KFDmT59Os7Ozla7hqqqjB8/nilTplCjRo0Cn3l4eNC7d296986d+mswGDh48CDztkehqucL7FuiUpC39AIoKly5fJmbN2+WeiHQv5MnXSGEVT399NOcOnWKpKQkmjZtyp49e6x27rVr13Lt2jXGjRt3x30dHBzo0KEDNRs/iqoUnBhyaynIix8PIDFsDtV7jMsvBelQtyVph8MwZ97EnH6DpIPrAcjMzCx0ndKSJ10hhNVVr16d77//nrCwMIYPH86gQYOYMWPGHZ96i5uwYE8OEydOJDQ0FJ2u5NGVajAV2nanUpDujw0lxZDO1W/Ho2j1uDTrgen671Yp7COhK4QoN/369aNdu3ZMnDiRoKAgvvnmGzp16lRovxNxKczfFXObCQvX+GxbNF4512nZbSAdOnQoVRsK1EX+051KQWr09lTv/g+qd88tmJ52/Gd86jaySv0I6V4QQpSr6tWr89133/H5558TEhLCuHHjSE9Pz/98WUQsw5ZEsDUyHqPJUiBwIXfyhtFk4ZJanahaPVkWEVui66qqyuHDh4k+sB1MOfmlIFWLGfsaD2G8dIbs+N8B8ktB2vkEALmjG0xpSaiqivFyFKm/rmToK5Os8vchQ8aEEDZz48YNJk2axO7du/nmm2+47PhgmetB3G7CQmxsLMuXLyc0NJTLf778ulVJSkEaLp4iceOnWDJvonXzwqv9CE4t+6DEMw5lnK4QokLZvHkzr7z7Efqeb2JRSt/L+ffyjElJSfzwww+EhoYSGRnJkCFDCAkJ4fHHH0dRFJvXRS4udKVPVwhhc8uXLycpNgrDZ8PROlfDre0gXJv2IP30TpJ/nv/Xjn+uQef3/Fzs/eqjmnJI3vYVmdERtP7UQpPA+nh6enLgwAF69uzJW2+9RY8ePQrNTBvbqT57zyWWqf6ug07LmE717/aW80noCiFs7tUJb3Cg9lBy0JKTFMe15e9g51sPlyadcWnSOX+/9N+2cXP/Sux86wGQeng9xstR1HzpSxStnsurJ6MoCnFxccWu25ZXf7dsXRnWrb8rL9KEEDZ3KtMNjS6vjoGCglLkasvpp7bj/HCX/OpippvxONZtgda5Go7Orgx+7T+kpaWVaKHMkLYBTOndCEe9ljutJKQouV0YZSl2cyfypCuEsLmoa6lc2TSPjJPbUU1G7Hzr/bmC8l9MN69jjDuNZ+8J+dtcgrpzY9tiTGlJWByc2bZzLb169SrxdUPaBhDk73FP6yJL6AohbC7VYMKzxxiqd3sF4+UoDBdPomgLVvBKP7Ude//G6D388rfpq9VE6+bF5fkjQdFQvXZ93tsQWqprB/l7sCik1T2riyyhK4SwubwJC4pGi0PtJmSc3knasc24teqXv0/GqR24Pza0wHHJWxeimnLwn7ACjd6BWhfC6dWrFwcOHCh1Gzxd7HmlQ727u5EykD5dIYTNNfRzw153S/xYLAX6dA2XzmBOT8YpsGB93uz433F55Em0jq44OtgzZORoDh48SGJioq2aftckdIUQNnX9+nW0f+zHkp2FajGT9fsRMiJ34xDQLH+fjJPbcWrwOBr7gnV57Wo0IOPUDiyGDCxmE0kHN1CzZk28vLxsfRtlJt0LQgibUhSFZUu/5uLho+SYzOjcfajWdTROD7UBQDVlkxG1D+8B7xQ6tlqXF0ne+hWXF7+MDjO7mjflp59+svUt3BWZkSaEuCdOxKUwbElEmSYs/H1GWkUjK0cIISqcvAkLjvrSxVB5TFiwJeleEELcM3kTD6ZvjsJgMpfrsugVhYSuEOKeqggTFmxJQlcIcc/d6wkLtiShK4SoMO7VhAVbkhdpQghhQxK6QghhQxK6QghhQxK6QghhQ8XOSFMUJQG4YLvmCCFElfCAqqreRX1QbOgKIYSwLuleEEIIG5LQFUIIG5LQFUIIG5LQFUIIG5LQFUIIG/p/8rKPDiO1jY8AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# lets draw one component\n", "\n", "a_component=H.subgraph({2, 21, 181, 189, 215, 246, 265, 276, 330, 361, 375, 378, 429})\n", "\n", "print(nx.number_of_edges(a_component), nx.number_of_nodes(a_component))\n", "nx.draw_networkx(a_component)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Density\n", "\n", "* the relative number of edges\n", "* In a **simple undirected** graph this is \n", " * the number of existing edges\n", " * divided by\n", " * the maximum number of edges (with that amount of nodes)\n", " * whcih equals $N\\cdot (N-1)/2$" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.2564102564102564\n" ] } ], "source": [ "# density by networkx\n", "print(nx.density(a_component))" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.2564102564102564" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check with our own formula\n", "N= nx.number_of_nodes(a_component)\n", "\n", "nx.number_of_edges(a_component)/ (N*(N-1)/2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Compute length and density for each component\n", "\n", "* Of course with a comprehension\n", "* and a nice plot\n", "* we exclude singleton components" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(2, 1.0),\n", " (13, 0.2564102564102564),\n", " (7, 0.3333333333333333),\n", " (2, 1.0),\n", " (4, 0.5)]" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data= [(len(component), nx.density(H.subgraph(component)))\n", " for component in nx.connected_components(H)\n", " if len(component)>1\n", "]\n", "data[:5]" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "size\n", "2 1.000000\n", "3 0.944444\n", "4 0.819444\n", "5 0.800000\n", "6 0.400000\n", "7 0.476190\n", "8 0.535714\n", "9 0.333333\n", "13 0.243590\n", "16 0.283333\n", "Name: density, dtype: float64" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# average density per size of a component\n", "df= pd.DataFrame(data)\n", "df.columns=['size','density']\n", "df.groupby('size')['density'].mean()\n", "# conclsuion: the smaller the graph, the more dense (pretty obvious eh)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Cliques\n", "\n", "* A graph is a clique if and only if all edges are directly connected to each other\n", "* iff its density equals 1\n", "\n", "### flauw\n", "\n", "* elk paartje is een clique" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of cliques: 60\n" ] }, { "data": { "text/plain": [ "size\n", "2 100.000000\n", "3 83.333333\n", "4 41.666667\n", "5 0.000000\n", "6 0.000000\n", "7 0.000000\n", "8 0.000000\n", "9 0.000000\n", "13 0.000000\n", "16 0.000000\n", "Name: clique, dtype: float64" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['clique']= df.density==1\n", "print(\"Number of cliques: \", df.clique.sum())\n", "\n", "# percentage cliques per size\n", "df.groupby('size')['clique'].mean() *100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Path lengths, diameter\n", "\n", "* OK, not in all components is everuone connected to everyone,\n", "* but what is **the minimal number of steps needed** in each component to go from one node to another?\n", "* this is called the **diameter** of a network" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nx.draw_networkx(a_component)\n", "nx.diameter(a_component)" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(2, 1.0, 1),\n", " (13, 0.3333333333333333, 5),\n", " (7, 0.7142857142857143, 2),\n", " (2, 1.0, 1),\n", " (4, 0.8333333333333334, 2)]" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# compute the diameter for each componenet\n", "\n", "data= [(len(component), \n", " nx.density(nx.Graph(G.subgraph(component))),\n", " nx.diameter(nx.Graph(G.subgraph(component))))\n", " for component in nx.connected_components(H)\n", " if len(component)>1\n", "]\n", "data[:5]" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# turn to dataframe again\n", "\n", "df= pd.DataFrame(data)\n", "df.columns=['size','density','diameter']\n", "df.groupby('size')['diameter'].mean().plot(kind='bar',\n", " title='mean diameter of components grouped by size');" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 80.000000\n", "mean 1.250000\n", "std 0.626422\n", "min 1.000000\n", "25% 1.000000\n", "50% 1.000000\n", "75% 1.000000\n", "max 5.000000\n", "Name: diameter, dtype: float64" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.diameter.describe()" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.diameter.value_counts().plot(kind='bar',\n", " title='Number of components with diameter X');" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[NbConvertApp] Converting notebook FromSpreadsheetToNetwork.ipynb to slides\n", "[NbConvertApp] Writing 443640 bytes to FromSpreadsheetToNetwork.slides.html\n", "[NbConvertApp] Redirecting reveal.js requests to https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.5.0\n", "Serving your slides at http://127.0.0.1:8001/FromSpreadsheetToNetwork.slides.html\n", "Use Control-C to stop this server\n", "WARNING:tornado.access:404 GET /custom.css (127.0.0.1) 1.23ms\n", "WARNING:tornado.access:404 GET /custom.css (127.0.0.1) 0.96ms\n", "WARNING:tornado.access:404 GET /favicon.ico (127.0.0.1) 1.45ms\n", "^C\n", "\n", "Interrupted\n" ] } ], "source": [ "#!jupyter nbconvert --to slides --post serve --ServePostProcessor.port=8001 --ServerPostProcessor.ip='*' FromSpreadsheetToNetwork.ipynb" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" }, "toc": { "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }