Newer
Older
1
2
3
4
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Project Notebook: Network Analysis\n",
"\n",
"In this notebook, we will explore the analysis of network-structured data using the NetworkX package. This package makes it easy to handle and analyse network-structured data, with many standard network algorithms implemented out-of-the-box.\n",
"\n",
"Let's start by importing NetworkX. \n",
"\n",
"To display graphs, we will need to import matplotlib. We can do this using `import matplotlib`, but it is actually more convenient to use the command `%pylab inline`. This imports NumPy and matplotlib in a way that allows them to interface well with NetworkX within Jupyter notebooks. Note that `%pylab inline` is a Jupyter-notebooks specific command (any command starting with % is not native python and is known as a Jupyter \"magic\" command). "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline\n",
"import networkx as nx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Working with Graphs\n",
"\n",
"## A first Graph object\n",
"NetworkX is a tool for working with networks, also called _graphs_. A graph is a collection of nodes (also called vertices), which are linked by edges. An edge from vertex $v$ to vertex $w$ can be described as the pair $(v, w)$. We'll soon see how to create our own graphs, but NetworkX also has some classical graphs pre-loaded. Let's look at one of these, a graph of 15th century Florentine families. Two family nodes are linked by an edge if there was a marriage linking the families."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"networkx.classes.graph.Graph"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G = nx.florentine_families_graph()\n",
"type(G)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now `G` is a Graph object. It has a set of vertices, and a set of edges, each of which we can access."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"NodeView(('Acciaiuoli', 'Medici', 'Castellani', 'Peruzzi', 'Strozzi', 'Barbadori', 'Ridolfi', 'Tornabuoni', 'Albizzi', 'Salviati', 'Pazzi', 'Bischeri', 'Guadagni', 'Ginori', 'Lamberteschi'))"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G.nodes"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"EdgeView([('Acciaiuoli', 'Medici'), ('Medici', 'Barbadori'), ('Medici', 'Ridolfi'), ('Medici', 'Tornabuoni'), ('Medici', 'Albizzi'), ('Medici', 'Salviati'), ('Castellani', 'Peruzzi'), ('Castellani', 'Strozzi'), ('Castellani', 'Barbadori'), ('Peruzzi', 'Strozzi'), ('Peruzzi', 'Bischeri'), ('Strozzi', 'Ridolfi'), ('Strozzi', 'Bischeri'), ('Ridolfi', 'Tornabuoni'), ('Tornabuoni', 'Guadagni'), ('Albizzi', 'Ginori'), ('Albizzi', 'Guadagni'), ('Salviati', 'Pazzi'), ('Bischeri', 'Guadagni'), ('Guadagni', 'Lamberteschi')])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G.edges"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the objects `G.nodes`, `G.edges` are _views_. Like NumPy views, if we change `G` then the view is accordingly updated."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"NodeView(('Acciaiuoli', 'Medici', 'Castellani', 'Peruzzi', 'Strozzi', 'Barbadori', 'Ridolfi', 'Tornabuoni', 'Albizzi', 'Salviati', 'Pazzi', 'Bischeri', 'Guadagni', 'Ginori', 'Lamberteschi', 'Corleone'))"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nodes = G.nodes #Create a node view\n",
"G.add_node('Corleone') #Add a sicilian family.\n",
"nodes #The node view has changed!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To get a visual feel for the data, let's remove that last node and display the graph. To create visuals, `nx` will need matplotlib."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"G.remove_node('Corleone') #Remove the non-Florentines."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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RGzO29ubwMBADu3dy+fffEMri4WawH8Bnxb53EDAo8gvJyAUeL/gPYsFj4gIXFxcGDNmDAABAQEsXbq04r6MiAEUziJic4mJiURFRXFvXh53mkxsADKAz4FXgH35n/sGyMz/tQa4C3gEeLXI+0erV8fLzY3BgwdX9NcQMUw1owsQkarj8ccfp1q1anh6evLYY48x8/x53HJyCo/3AvoCO4FORc77DRgFrAWaFHnfDDyenc2U1q3p37+//b+AiINQOIuIzURGRtK7d+8rbwwcSDQwB2sA5wEXgXZFzkkHBgFvAw9edb1ngBbAa97e9itaxAEpnEXEbrI9PHgCCMcawC7A40DBFJE8YBjwEDDhqnP/AfwKxADUqVMR5Yo4DD1zFhG7udS6NdmAF9aWQDTwbZHjbwB/AR9fdV408D9AJODm5gbt2iFyO1E4i4jd1Jwwgf+pVo3BQB1gJRBU5PiXwP/LP1YwYnsF8BWQArQCPMxmPGbPZuLEiRVau4iRtAiJiNhXSAhERlpX/iorkwmCg2HtWtvXJeLAFM4iYl979miFMJEyUre2iNhXly7WTSzc3ct2nru79TwFs9yGNFpbROyvYHep6dOtS3JqVyqRG1K3tohUnNhY61rZUVHWEC665nbBfs79+1v3c1aLWW5jCmcRqXgpKRAaCgcPQmqqdR5zu3YwZgx4eRldnYjhFM4iIiIORgPCREREHIzCWURExMEonEVERByMwllERMTBKJxFREQcjMJZRETEwSicRUREHIzCWURExMEonEVERByMwllERMTBKJxFREQcjMJZRETEwSicRUREHIzCWURExMEonEVERByMwllERMTBKJxFREQcjMJZRETEwSicRUREHIzCWURExMEonEVERByMwllERMTBKJxFREQcjMJZRETEwSicRUREHIzCWURExMEonEVERByMwllERMTBKJxFREQcjMJZRETEwSicRUREHMz/AUDwKOKiC4IpAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"nx.draw(G, with_labels=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generating Graph objects\n",
"We'll also need to know how to create our own graphs in NetworkX. We can build a graph from scratch, starting with an empty graph and adding nodes and edges - either one at a time or in groups."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"G = nx.Graph()\n",
"G.add_node(0)\n",
"G.add_nodes_from([1, 2, 3])\n",
"G.add_edge(0, 1)\n",
"G.add_edges_from([(1, 2), (2, 3), (3, 0)])\n",
"nx.draw(G, with_labels=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's great, but quite time-consuming. We can create a graph in one step by giving `nx` a list of edges."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"G = nx.Graph([(0, 1), (1, 2), (2, 3), (3, 0)])\n",
"nx.draw(G, with_labels=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise\n",
"Write a function `complete_graph` that accepts an integer `n`, and returns a Graph object with `n` nodes each linked to every other node."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We may also create directed graphs (digraphs). In the above, our edges had no notion of direction: $(u, v)$ was viewed as the same as $(v, u)$. If we create a digraph, these two edges would be treated differently: the first linking the two edges in the direction _from_ $u$ _to_ $v$, and the second linking them in the opposite direction. Here's an example."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"G_1 = nx.Graph([('u', 'v')])\n",
"nx.draw(G_1, with_labels=True)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"G_2 = nx.DiGraph([('v', 'u')])\n",
"nx.draw(G_2, with_labels=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The other kind of graph we might want to work with is a multigraph. This is a graph where there might be multiple edges joining $u$ and $v$. There are multigraph versions of both the Graph and DiGraph classes of objects."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"MultiEdgeView([('u', 'v', 0), ('u', 'v', 1)])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G_3 = nx.MultiGraph([('u', 'v'), ('u', 'v')])\n",
"G_3.edges"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"OutMultiEdgeView([('u', 'v', 0), ('v', 'u', 0)])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G_4 = nx.MultiDiGraph([('u', 'v'), ('v', 'u')])\n",
"G_4.edges"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In a MultiGraph or MultiDiGraph, an edge is now a triple, listing the vertices joined in the first two entries and an identifier of the distinct edge in the third entry.\n",
"\n",
"We won't generally have cause to generate a graph from scratch, and NetworkX has [a host of graph generating functions](https://networkx.github.io/documentation/stable/reference/generators.html) available. Of particular use might be the functions for generating random graphs. For instance, we can generate a graph at random with $n$ nodes and $m$ edges."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"G = nx.gnm_random_graph(10, 15)\n",
"nx.draw(G)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"All of the methods we have used for creating graphs are called _constructor_ methods."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise ??\n",
"Generate Watts-Strogatz graphs with N=250, and investigate what happens to the average clustering coefficient as K increases."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Algorithms for Graphs\n",
"NetworkX has [convenient implementations](https://networkx.github.io/documentation/stable/reference/algorithms/index.html) of a range of graph algorithms covering a wealth of possible applications. For instance, \n",
"\n",
"[EXAMPLE]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Extended Example: Email Data\n",
"Here we have data<sup>[[1]](#snap)</sup> from an undisclosed European research institution, representing email exchanges between individuals within the institution\n",
"\n",
"## Loading and preparing the data\n",
"The data represents the institution's email network. Individuals are each allocated a unique number. Each line of the file `email-Eu-core.txt` has two identifying nummbers separated by a space, e.g. `n m`, denoting that person $n$ sent an email to person $m$.\n",
"\n",
"We want to analyse this data as a directed graph. To read the data in, create a list called `edges`, and fill it by reading the file line by line, using the string utility function `.split()` to create tuples representing edges. The pass this list to the `nx` constructor for digraphs."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"edges = []\n",
"fptr = open(\"./data/email-Eu-core.txt\", \"r\")\n",
"\n",
"for l in fptr:\n",
" edges.append(l.split())\n",
"\n",
"G = nx.DiGraph(edges)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The institution is organised into 42 departments, each of which is assigned a unique identifying number. Each line of the file `email-Eu-core-department-labels.txt` has an individual's identifier, followed by the number identifying their department after a space. Open this file and create a dictionary mapping individuals to their departments."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"truth_dict = {}\n",
"fptr = open(\"./data/email-Eu-core-department-labels.txt\", \"r\")\n",
"for l in fptr:\n",
" truth_dict.update({l.split()[0]:l.split()[1]})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A graph may be connected or disconnected. An undirected graph is connected if any node can reach any other by walking through a sequence of edges: otherwise it is disconnected. A directed graph is strongly connected if any node can reach any other through a sequence of edges, respecting their direction, and is weakly connected if it is connected, when considered as an undirected graph.\n",
"\n",
"Ude the methods `nx.is_weakly_connected` to check if the graph is weakly connected. If it is not, obtain the subgraph which is the largest weakly connected component."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Check it is weakly connected!\n",
"nx.is_weakly_connected(G)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"986\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n",
"1\n"
]
}
],
"source": [
"comps = nx.weakly_connected_components(G)\n",
"for c in comps:\n",
" print(len(c))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"986"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"G = sorted(nx.weakly_connected_component_subgraphs(G), key=len, reverse=True)[0]\n",
"len(G)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Algorithms for connectedness\n",
"We can find trhe best connected member if this graph using an algorithm called _pagerank_. We treat an edge directed inwards towards a node as a reccommendation of that node's importance. These reccommendations are weighted by the importance of the reccommending nodes. That may sound circular, but in fact, clever linear algebra allows us to easily compute a score based on this measure of \"importance\". This is the pagerank of a graph. \n",
"\n",
"The method `nx.pagerank` will return a dictionary mapping nodes to their respective ranking. Use this ti find out which member of the institution has the highest pagerank!\n",
"\n",
"(Side note: if we consider the graph of the world wide web, where nodes are pages and edges are hyperlinks betweenn them, then pagerank denotes the \"best\" or \"most important\" webpage. The algorithm was developed by google to help rank search results, and is still used today whenever you erform a google search!)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"PR = nx.pagerank(G)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.009629994334257513, '1')"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Get central team members!\n",
"sorted_d = sorted((value, key) for (key,value) in PR.items())\n",
"sorted_d[-1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If you use `G.degree`, you will see that the highest scoring node by pagerank is not simply the most well-connected node! (Degree of a node is the number of nodes it is connected to by an edge)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's try to draw the graph of the department that person `1` belongs to. Use your dictionary of department membership to find the nodes which are in the same department as `1`, and then use `nx.subgraph` to produce the graph just containing these nodes."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dept = truth_dict['1']\n",
"dlist = []\n",
"for i in truth_dict.keys():\n",
" if truth_dict[i] == dept:\n",
" dlist.append(i)\n",
"D = nx.subgraph(G, dlist)\n",
"cols = ['r' for i in dlist]\n",
"cols[dlist.index('1')] = 'g'\n",
"nx.draw(D, with_labels=True, node_color = cols)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'1'"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"truth_dict['1']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Another graph property we might be interested in is which edges are bridges. A bridge is an edge which, if removed, would disconnect the graph. Using `nx.bridges`, find out how many bridges this graph has. How many bridges occur within a department?"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'0',\n",
" '1',\n",
" '10',\n",
" '11',\n",
" '14',\n",
" '16',\n",
" '17',\n",
" '19',\n",
" '2',\n",
" '20',\n",
" '21',\n",
" '22',\n",
" '23',\n",
" '24',\n",
" '27',\n",
" '28',\n",
" '30',\n",
" '38',\n",
" '4',\n",
" '7',\n",
" '9'}"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Bridge analysis!\n",
"count = 0\n",
"bad_depts = []\n",
"for b in list(nx.bridges(G.to_undirected())):\n",
" if truth_dict[b[0]] == truth_dict[b[1]]:\n",
" count += 1\n",
" bad_depts.append(truth_dict[b[0]])\n",
"set(bad_depts)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The identification of bridges could be useful in, for instance, strategic planning. The help us identify network vulnerabilities, in this case, edges which are crucial to the connectivity of the network. A planner might identify bridges, and investigate which interactions they represent to find ways of strengthening or developing connections in the network.\n",
"\n",
"Som community detection algorithms rely on bridge detection. The [Girvan-Newman](https://en.wikipedia.org/wiki/Girvan%E2%80%93Newman_algorithm) algorithm involves detecting edges which are bridges, or edges which are a lot like bridges, and successively removing them. This slowly disconnects the graph, grouping nodes into communities based on the connected components they end up in. Since many of the departments contain bridges, this method would fail to preserve departmental communities. That may or may not be bad, but it's something we should be aware of.\n",
"\n",
"If we have ground-truth data for a network, or another network which we believe to have similar structure, we can perform simple checks like the one above to determine whether a given algorithm is likely to give us useful information."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Degree Distribution\n",
"How will we know when two networks have a similar structure? There is no simple answer to this question. In the below activity, we'll try to figure out how much like a social network this email network is.\n",
"\n",
"One property that has been observed in some social networks is scalefree structure. This is indicated by plotting the degree distribution of the graph. For every possible degree, we can obtain the number of nodes in the graph with this degree. This data is called the _degree distribution_ of the graph. We can make a plot degree versus the number of nodes observed with this degree in a log-log plot, then if the points lie in a line this indicates a scalefree structure.\n",
"\n",
"In the example below, we calculate the degree distribution from a graph randomly generated using the barabasi-albert method, which was designed to produce scalefree networks. "
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7ff0ad66c390>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Generate graph\n",
"B_A_graph = nx.barabasi_albert_graph(10000, 50)\n",
"\n",
"#Get a list of node degrees\n",
"deg_list = list(dict(B_A_graph.degree()).values())\n",
"\n",
"#Use a Counter to total the occurrences of each degree.\n",
"from collections import Counter\n",
"counts = Counter(deg_list)\n",
"degs = list(counts.keys())\n",
"freqs = list(counts.values())\n",
"\n",
"#Take logs and scatter.\n",
"x = log(degs)\n",
"y = log(freqs)\n",
"scatter(x, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The top end of the above looks quite linear, while the lower end is a bit splayed out. This is characteristic of a small scalefree network.\n",
"\n",
"In the above code, we used the inbuild `nx` method to obtain a dictionary-like structure mapping nodes to their degree (for technical reasons, custom libraries like `nx` often have their own versions of standard data structures). Casting this to a regular python dict, we can obtain the values and then cast these again to a list!\n",
"\n",
"We then used the Counter object. Calling a Counter on a list will produce a dict mapping unique entries of the list to their frequency in the list.\n",
"\n",
"Finally, we used `numpy.log` and `matlpolib.pyplot.scatter` to obtain a log-log plot. Note that we were able to call these using just `log` and `scatter`. This is a feature of having used `%pylab inline`, which means the functions in `numpy` and `matplotlib.pyplot` are callable at the top level.\n",
"\n",
"By eyeballing the graph above, we can say that the data looks like it falls into a line. We can make this precise using Pearson's coefficient. A coefficient value near $\\pm1$ suggest the data are strongly correlated (are a lot like a line), while a value near zero suggest weak correlsation. The Pearson correlation coefficient is implemented in `numpy`. The method `numpy.corrcoef` called with two data sets returns a matrix sowing their correlation. The PCC is in any non-diagonal element of this matrix."
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1. , -0.91919094],\n",
" [-0.91919094, 1. ]])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"corrcoef(x, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So we can see that `x, y` have a fairly good negative correlation. This formalises out notion of the extent to which `x, y` lie on a downwardly sloping line.\n",
"\n",
"Now try plotting the degree distribution of `G`. Do you think this suggests a scale-free structure? Comare this to a [barabasi-albert graph](https://networkx.github.io/documentation/stable/reference/generated/networkx.generators.random_graphs.barabasi_albert_graph.html#networkx.generators.random_graphs.barabasi_albert_graph) with the same number of nodes as G. You should set the parameter `m` to be the average degree of a node in `G`.\n",
"\n",
"Try the same for the subraph you obtained of a single department of the institution. Is this more or less like a social network? Do you think size matters?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# References\n",
"1. Data obtained from _SNAP Datasets: Stanford Large Network Dataset Collection_, Jure Leskovec and Andrej Krevl 2014, http://snap.stanford.edu/data, accessed Jan 2019.<a name=\"snap\"></a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Miscellaneous"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"matplotlib.scat"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "cannot convert dictionary update sequence element #0 to a sequence",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-27-25dbc040aa19>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdegvals\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdegs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: cannot convert dictionary update sequence element #0 to a sequence"
]
}
],
"source": [
"degvals = dict(degs).values()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from collections import Counter\n",
"counter = Counter(dict(degs).values())\n",
"l1 = list(counter.keys())\n",
"l2 = []\n",
"for l in counter.keys():\n",
" l2.append(counter[l])\n",
"x = log(l1)\n",
"y = log(l2)\n",
"scatter(x, y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"nx.draw_circular(nx.triad_graph('300'))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"nx.draw_circular(nx.triad_graph('201'))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"nx.draw_circular(nx.triad_graph('102'))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"nx.draw_circular(nx.triad_graph('003'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"cens = nx.triadic_census(G)\n",
"ws_triads = {'003': 0,\n",
" '012': 0,\n",
" '021C': 0,\n",
" '021D': 0,\n",
" '021U': 0,\n",
" '030C': 0,\n",
" '030T': 0,\n",
" '102': 0,\n",
" '111D': 0,\n",
" '111U': 0,\n",
" '120C': 0,\n",
" '120D': 0,\n",
" '120U': 0,\n",
" '201': 0,\n",
" '210': 0,\n",
" '300': 0}\n",
"n = 0\n",
"for i in linspace(0.25, 0.75, 10):\n",
" WS = nx.watts_strogatz_graph(len(G), 51, i).to_directed()\n",
" tr = nx.triadic_census(WS)\n",
" for t in tr.keys():\n",
" ws_triads[t] += tr[t]\n",
" n += 1\n",
" print(\"Completed %d\" % n)\n",
" \n",
"for t in ws_triads:\n",
" m = ws_triads[t]/10\n",
" ws_triads[t] = m"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],