2.8 TP – Exploration des données
Les données utilisées dans ce TP sont disponibles sur en ligne.
Dans ce TP nous allons découvrir les fonctions du package igraph
pour calculer différentes statisitiques de graphe. Chargons alors la library igraph
:
ainsi que deux jeux de données que nous avons déjà vu au dernier TP:
friends <- read.table(file='Friendship-network_data_2013.csv')
amis <- graph_from_data_frame(friends, directed=TRUE)
Propiétés de base d’un graphe
Rappelons les fonctions suivantes pour déterminer l’ordre et la taille d’un graphe, obtenir la liste des noeuds ou d’arêtes ainsi que savoir si le graphe est orienté ou non:
## [1] 77
## [1] 254
## + 77/77 vertices, from 35f79c9:
## [1] 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] 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] 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] 76 77
## + 254/254 edges from 35f79c9:
## [1] 1-- 2 1-- 3 1-- 4 3-- 4 1-- 5 1-- 6 1-- 7 1-- 8 1-- 9 1--10
## [11] 11--12 4--12 3--12 1--12 12--13 12--14 12--15 12--16 17--18 17--19
## [21] 18--19 17--20 18--20 19--20 17--21 18--21 19--21 20--21 17--22 18--22
## [31] 19--22 20--22 21--22 17--23 18--23 19--23 20--23 21--23 22--23 17--24
## [41] 18--24 19--24 20--24 21--24 22--24 23--24 13--24 12--24 24--25 12--25
## [51] 25--26 24--26 12--26 25--27 12--27 17--27 26--27 12--28 24--28 26--28
## [61] 25--28 27--28 12--29 28--29 24--30 28--30 12--30 24--31 31--32 12--32
## [71] 24--32 28--32 12--33 12--34 28--34 12--35 30--35 12--36 35--36 30--36
## [81] 35--37 36--37 12--37 30--37 35--38 36--38 37--38 12--38 30--38 35--39
## [91] 36--39 37--39 38--39 12--39 30--39 26--40 26--41 25--42 26--42 42--43
## + ... omitted several edges
## [1] FALSE
et pour le graphe d’amis:
## [1] 134
## [1] 668
## + 134/134 vertices, named, from f65e8a1:
## [1] 1 3 27 28 32 34 45 46 48 55 61 63 70 72 79
## [16] 80 85 92 101 117 119 120 122 124 125 132 134 147 151 156
## [31] 159 165 170 173 184 190 196 200 201 202 205 211 213 214 219
## [46] 222 232 240 242 245 248 252 255 257 265 268 272 275 277 285
## [61] 312 325 327 335 343 353 364 366 388 407 425 429 440 441 447
## [76] 452 465 468 471 480 486 488 491 492 494 496 498 502 520 531
## [91] 545 564 576 577 587 601 603 605 612 622 624 634 642 674 691
## [106] 694 753 765 769 771 779 797 798 845 857 866 867 869 883 884
## [121] 894 920 959 960 970 974 1228 1332 1401 1485 1519 1594 1828 38
## + 668/668 edges from f65e8a1 (vertex names):
## [1] 1 ->55 1 ->205 1 ->272 1 ->494 1 ->779 1 ->894 3 ->1 3 ->28 3 ->147
## [10] 3 ->272 3 ->407 3 ->674 3 ->884 27->63 27->173 28->202 28->327 28->353
## [19] 28->407 28->429 28->441 28->492 28->545 32->440 32->624 32->797 32->920
## [28] 34->151 34->277 34->502 34->866 45->48 45->79 45->335 45->496 45->601
## [37] 45->674 45->765 46->117 46->196 46->257 46->268 48->45 48->79 48->496
## [46] 55->1 55->170 55->205 55->252 55->272 55->779 55->883 55->894 61->797
## [55] 63->27 63->125 63->173 70->101 70->132 70->240 70->425 70->447 72->407
## [64] 72->674 72->857 79->45 79->48 79->335 79->496 79->601 79->674 79->765
## [73] 80->120 80->285 80->468 80->601 85->190 85->213 85->214 85->335 85->603
## [82] 85->605 85->765 92->468 92->845
## + ... omitted several edges
## [1] TRUE
Les degrés avec igraph
Dans le cas d’un graphe non dirigé, calcul des degrés:
## [1] 10 1 3 3 1 1 1 1 1 1 1 36 2 1 1 1 9 7 7 7 7 7 7 15 11
## [26] 16 11 17 4 8 2 4 1 2 6 6 6 6 6 3 1 11 3 3 2 1 1 2 22 7
## [51] 2 7 2 1 4 19 2 11 15 11 9 11 13 12 13 12 10 1 10 10 10 9 3 2 2
## [76] 7 7
Dans le cas d’un graphe dirigé, calcul des degrés entrants et sortants:
## 1 3 27 28 32 34 45 46 48 55 61 63 70 72 79 80
## 6 7 2 8 4 4 7 4 3 8 1 3 5 3 7 4
## 85 92 101 117 119 120 122 124 125 132 134 147 151 156 159 165
## 7 2 9 16 6 3 5 2 9 7 3 10 13 1 2 1
## 170 173 184 190 196 200 201 202 205 211 213 214 219 222 232 240
## 6 3 3 4 5 2 8 5 12 3 2 3 1 3 2 7
## 242 245 248 252 255 257 265 268 272 275 277 285 312 325 327 335
## 3 7 3 7 1 3 9 5 11 3 6 5 2 7 8 3
## 343 353 364 366 388 407 425 429 440 441 447 452 465 468 471 480
## 3 5 5 1 8 13 10 7 5 7 8 5 3 7 2 2
## 486 488 491 492 494 496 498 502 520 531 545 564 576 577 587 601
## 2 3 4 9 8 8 2 5 4 3 3 2 4 2 5 7
## 603 605 612 622 624 634 642 674 691 694 753 765 769 771 779 797
## 6 5 2 8 10 3 7 6 10 2 2 3 9 2 9 5
## 798 845 857 866 867 869 883 884 894 920 959 960 970 974 1228 1332
## 2 6 5 9 2 4 13 2 11 3 6 2 2 2 3 6
## 1401 1485 1519 1594 1828 38
## 4 1 6 2 2 0
## 1 3 27 28 32 34 45 46 48 55 61 63 70 72 79 80
## 11 4 3 10 2 4 8 5 5 9 0 2 5 4 8 5
## 85 92 101 117 119 120 122 124 125 132 134 147 151 156 159 165
## 5 3 8 11 8 4 6 2 7 6 4 3 5 0 0 1
## 170 173 184 190 196 200 201 202 205 211 213 214 219 222 232 240
## 8 2 5 4 6 4 4 3 11 3 3 5 4 3 2 6
## 242 245 248 252 255 257 265 268 272 275 277 285 312 325 327 335
## 3 9 2 7 2 4 7 5 15 3 3 4 2 6 6 6
## 343 353 364 366 388 407 425 429 440 441 447 452 465 468 471 480
## 4 6 6 1 5 12 8 5 3 8 9 8 4 6 2 2
## 486 488 491 492 494 496 498 502 520 531 545 564 576 577 587 601
## 2 3 4 6 8 7 2 6 3 3 3 3 3 2 7 4
## 603 605 612 622 624 634 642 674 691 694 753 765 769 771 779 797
## 5 7 2 7 7 9 8 6 13 5 4 6 4 1 9 10
## 798 845 857 866 867 869 883 884 894 920 959 960 970 974 1228 1332
## 4 5 3 5 2 10 12 3 9 2 5 5 2 2 2 7
## 1401 1485 1519 1594 1828 38
## 4 1 5 2 2 3
Distribution empirique des degrés:
## [1] 0.00000000 0.22077922 0.12987013 0.07792208 0.03896104 0.00000000
## [7] 0.06493506 0.12987013 0.01298701 0.03896104 0.06493506 0.07792208
## [13] 0.02597403 0.02597403 0.00000000 0.02597403 0.01298701 0.01298701
## [19] 0.00000000 0.01298701 0.00000000 0.00000000 0.01298701 0.00000000
## [25] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
## [31] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
## [37] 0.01298701
## [1] 0.007462687 0.052238806 0.194029851 0.179104478 0.074626866 0.111940299
## [7] 0.074626866 0.104477612 0.067164179 0.052238806 0.029850746 0.014925373
## [13] 0.007462687 0.022388060 0.000000000 0.000000000 0.007462687
Représentation graphique de la distribution empirique des degrés:
barplot(degree_distribution(miserab), names.arg=as.character(0:max(degree(miserab))), col='green', main='Degrés des noeuds des Misérables')
Les degrés par la matrice d’adjacence On peut vérifier à la main que les degrés des noeuds sont bien donnés par la somme de la ligne ou de la colonne de la matrice d’adjacence:
## [1] 6
## 1
## 6
## [1] 11
## 1
## 11
Autres indicateurs
Familiarisez-vous avec les fonctions suivantes d’igraph
pour un graphe G
, et
appliquez-les aux graphes des misérables et d’amis:
components(G)
edge_density(G)
diameter(G, directed=TRUE, unconnected=FALSE)
diameter(G, directed=TRUE, unconnected=TRUE)
get_diameter(G, directed=TRUE)
count_triangles(G)
transitivity(G)
neighbors(G, 1, mode='out')
neighbors(G, 1, mode='in')
neighbors(G, 1, mode='all')
K3 <- cliques(G, min=3, max=3)
K3[[1]]
length(K3)
closeness(G)
betweenness(G)
plot(G, vertex.size=betweenness(G))
Exercice 2.
Analysez les graphes de l’exercice 1 Chapitre ??.
In 1977, W. W. Zachary recorded interactions in a karate club for two years. During observation, a conflict developed between the administrator and the instructor.