Commit 05cbb55b authored by Ednomesor's avatar Ednomesor

MAJ QUANTI

parent f927d7f4
#R. Letricot - Quantilille
# Initiation à l'analyse de réseau - Séance 2
# 27 juin 2017
#Je nettoie mon espace de travail
rm(list=ls())
setwd("~/Documents/framagit/cours_SNA/script_R/")
#J'active mes extensions
library(igraph)
library(colorRamps)
#####Préparation à l'exercice####
#Chargement des données
liens<-read.csv("data/stormofswords/stormofswords_liens.csv",sep=",", header=TRUE)
noeuds<-read.csv("data/stormofswords/stormofswords_noeuds.csv",sep=",", header=TRUE)
#transformation en objet igraph
net<- graph_from_data_frame(d=liens, vertices=noeuds, directed = F)
#Aïe ! Le pb est que l'id ne correspond pas au nom des listes de liens
#J'ai besoin de remodeler mes dataframes
#J'utilise la fonction subset pour n'utiliser que les colonnes utiles
liens<-subset(liens, select = c("source", "target", "weight"))
noeuds<-subset(noeuds, select = c("nom", "sexe", "maison", "maison_code"))
#normalement là tout se passera bien
net<- graph_from_data_frame(d=liens, vertices=noeuds, directed = F)
####Rappel####
class(net)
(net)
# E pour inspecter les arêtes du réseau
E(net)
# V pour inspecter les sommets du réseau
V(net)
#S'il y a des données attributaires arêtes/sommets on peut y accéder de cette façon
E(net)$weight
V(net)$sexe
V(net)$maison
####A propos des fichiers####
#Comment ce fichier a-t-il été constitué ? De quoi s'agit-il ?
#Etude du 3e livre du trône de fer
#Chaque personnage cité dans l'ouvrage est un noeud du réseau
#Un lien entre deux personnages a été créé si leur nom apparait à un distance de 15 mots dans le livre
#Les liens ne sont pas orientés mais valués selon leur récurrence entre les personnages
#Pour plus d'information sur la constitution du fichier : https://www.macalester.edu/~abeverid/thrones.html
####MESURES SUR LE GRAPHE####
#Densité du graphe
graph.density(net)
#Diamètre du graphe
diameter(net)
#Transitivité - clustering coefficient
transitivity(net, type=c("globalundirected"))
V(net)$TRANS<-transitivity(net, type=c("localundirected"))
#### MESURES SUR LES SOMMETS ####
###Centralité de degré###
#Les personnnages les + connectés - noeuds du réseau ayant un grand nombre de liens incidents
V(net)$DC<-degree(net)
#Ce qui donne les mesures suivantes
V(net)$DC
#taille du label du noeud
plot(net,
vertex.size=V(net)$DC/8,
vertex.color="purple",
vertex.label = V(net)$name,
vertex.label.cex=V(net)$DC/18,
vertex.label.color="grey10",
layout = layout.fruchterman.reingold(net)
)
resultats<-as_data_frame(net, what = c("vertices"))
plot(resultats)
#On peut récupérer ces valeurs dans un dataframe
test<- data.frame(
deg.centralite = V(net)$DC,
row.names = V(net)$name
)
#On peut enlever les noeuds les moins importants
net2<-delete_vertices(net, V(net)$DC<0.01)
plot(net2,
vertex.size=V(net2)$DC*20,
vertex.color="purple",
vertex.label = V(net2)$name,
vertex.label.cex=V(net2)$DC*5,
vertex.label.color="grey10",
layout = layout.fruchterman.reingold(net2)
)
#### CENTRALITE D'INTERMEDIARITE ####
V(net)$BET<-betweenness(net)
#On peut récupérer ces valeurs dans un dataframe
test<- data.frame(
deg.centralite = V(net)$DC,
deg.intermed = V(net)$BET,
row.names = V(net)$name
)
#Visualisation des résultats
plot(net,
vertex.size=V(net)$BET/190,
vertex.color="green",
vertex.label = V(net)$name,
vertex.label.color="grey10",
layout = layout.fruchterman.reingold(net)
)
####CENTRALITE DE PROXIMITE####
#Closeness Centrality#
V(net)$CLO<-closeness(net)
#On peut récupérer ces valeurs dans un dataframe
test<- data.frame(
deg.centralite = V(net)$DC,
deg.intermed = V(net)$BET,
deg.close = V(net)$CLO,
row.names = V(net)$name
)
####CENTRALITE EN VECTEUR PROPRE
#Eigenvector Centrality#
V(net)$EIGEN<-evcent(net)$vector
#On peut récupérer ces valeurs dans un dataframe
test<- data.frame(
deg.centralite = V(net)$DC,
deg.intermed = V(net)$BET,
deg.close = V(net)$CLO,
eigen.centralite = V(net)$EIGEN,
row.names = V(net)$name
)
####POINT D'ARTICULATION DU RESEAU ####
articulation_points(net)
####MESURES LIENS####
#Edge betweenness
E(net)$EDG.BET<-edge.betweenness(net)
#Longueur du chemin moyen
average.path.length(net)
#Chemin plus court
df.shortest<-as.data.frame(shortest.paths(net))
#### CLIQUES ####
#Taille de la plus grande clique
clique_num(net)
# Noeud impliqué dans la plus grande clique
largest_cliques(net)
coreness(net)
#Récupérer toutes les mesures du graphe dans un dataframe
#On peut vouloir ces résultats dans un dataframe
df.allmesures<-as_long_data_frame(net)
This diff is collapsed.
......@@ -53,8 +53,6 @@ setwd("~/Documents/framagit/cours_SNA/script_R/")
library(igraph)
library(colorRamps)
####POUR DEBUTER : ANALYSES DE BASES SUR PETITS GRAPHES####
#Créer 2 graphes, l'un orienté et l'autre non orienté
net <- make_graph("Krackhardt_Kite")
net
......@@ -112,13 +110,25 @@ diameter(net2)
La densité du graphe orienté est plus faible car on compte tous les liens possibles dans un sens et dans l'autre de la relation entre deux noeuds.
Avec l'ajout de l'orientation des liens on a rallongé la longueur du plus court chemin dans le graphe orienté.
Avec l'ajout de l'orientation des liens, on a rallongé la longueur du plus court chemin dans le graphe orienté.
## Mesures locales
### Transitivité - Clustering coefficient
Avec cette mesure, on s'intéresse aux triades du réseau - donc à une relation entre trois sommets. Il s'agit d'identifier si l'ensemble des noeuds de la triade sont connectés individuellement entre eux.
Cette mesure peut s'appliquer tant à l'ensemble du réseau qu'au niveau des noeuds. On parle respectivement de transitivité globale ou locale du réseau.
```{r}
transitivity(net, type=c("globalundirected"))
transitivity(net2, type = c("global"))
V(net)$TRANS<-transitivity(net, type=c("localundirected"))
transitivity(net2, type = c("local"))
```
### Mesures sur les noeuds
#### Centralité de degré
## Mesures locales
### Centralité de degré
L'une des premières mesures à tester sur son réseau est le degré de centralité des noeuds. Cette mesure permet de calculer le nombre de liens adjacents le reliant à d'autres noeuds du réseau. En d'autres termes, cela se rapprocherait d'un indice de popularité dans la mesure où un noeud au plus haut degré de centralité signifie qu'il peut atteindre directement un grand nombre d'autres noeuds du réseau.
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
......@@ -137,7 +147,7 @@ plot(net,
vertex.label.color="black",
rescale=F,
layout = l,
main="Degré de centralité"
main="Degré de centralité - non orienté"
)
```
......@@ -162,12 +172,12 @@ plot(net2,
vertex.label.color="black",
rescale=F,
layout = l2,
main="Degré de centralité"
main="Degré de centralité - orienté"
)
```
#### Centralité d'intermédiarité
### Centralité d'intermédiarité
La centralité d'intermédiarité (*betweenness centrality*) s'intéresse à la position intermédiaire que peuvent occuper certains acteurs du graphe. Elle calcule le nombre de fois où un sommet est sur le plus court chemin entre deux noeuds quelconques du réseau. Une forte centralité d'intermédiarité revèle une position stratégique du noeud pour assurer la circulation de l'information par exemple.
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
......@@ -181,7 +191,7 @@ plot(net,
vertex.label.color="grey10",
rescale=F,
layout = l,
main="Degré d'intermédiarité"
main="Degré d'intermédiarité - non orienté"
)
```
......@@ -199,12 +209,12 @@ plot(net2,
vertex.label.color="grey10",
rescale=F,
layout = l,
main="Degré d'intermédiarité"
main="Degré d'intermédiarité - orienté"
)
```
#### Centralité de proximité
### Centralité de proximité
Cette mesure donne pour chaque noeud son éloignement/proximité moyen avec l'ensemble des noeuds du graphe.
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
......@@ -219,10 +229,12 @@ plot(net,
vertex.label.color="grey10",
rescale=F,
layout = l,
main="Centralité de proximité"
main="Centralité de proximité - non orienté"
)
#Visualisation des résultats
```
```{r}
plot(net2,
vertex.size=V(net2)$CLO*200,
vertex.color="purple",
......@@ -230,16 +242,16 @@ plot(net2,
vertex.label.color="grey10",
rescale=F,
layout = l,
main="Centralité de proximité"
main="Centralité de proximité - orienté"
)
```
```{r}
#Eigenvector Centrality#
### Centralité en vecteur propre
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
V(net)$EIGEN<-evcent(net)$vector
V(net2)$EIGEN<-evcent(net2)$vector
#Visualisation des résultats
plot(net,
......@@ -249,12 +261,79 @@ plot(net,
vertex.label.color="grey10",
rescale=F,
layout = l,
main="Centralité en vecteur propre"
main="Centralité en vecteur propre - non orienté"
)
```
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
plot(net2,
vertex.size=V(net2)$EIGEN*20,
vertex.color="pink",
vertex.label=paste0(V(net2)$name, ":", (V(net2)$EIGEN)),
vertex.label.color="grey10",
rescale=F,
layout = l,
main="Centralité en vecteur propre - orienté"
)
```
### Point d'articulation
Un point d'articulation en théorie des graphes est le ou le noeuds du réseau qui s'ils sont retirés vont augmenter le nombre de composantes connexes du réseau.
```{r}
articulation_points(net)
```
### Mesures sur les liens
### Centralité d'intermédiarité sur les liens
De la même que nous l'avons fait pour les noeuds, le centralité d'intermédiarité peut s'effectuer sur les liens du réseau en calculant le nombre de fois où le lien est emprunté par les plus courts chemins.
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
E(net)$EDG.BET<-edge.betweenness(net)
#Visualisation des résultats
plot(net,
vertex.size=10,
vertex.label.color="grey10",
edge.width=E(net)$EDG.BET*0.7,
rescale=F,
layout = l,
main="Edge betweennesse centrality"
)
```
Les fonctions suivantes donnent la longueur moyenne des chemins entre tous les noeuds, et la liste des chemins les plus courts du réseau.
```{r}
average.path.length(net)
mean_distance(net)
```
```{r}
shortest.paths(net, "A", "H")
all_shortest_paths(net, "A", "H")$nrgeo
path.length.hist(net)$res
```
### Cliques
Une clique est un sous-graphe maximal complet d'au moins trois sommets. Un sommet peut appartenir à plusieurs cliques.
```{r}
#Taille de la plus grande clique
clique_num(net)
# Noeud impliqué dans la plus grande clique
largest_cliques(net)
```
La définition de la clique demeure assez contraignante. Il arrive qu'un sous-graphe ne soit pas complet mais néanmoins pertinent du point de vue de la question de recherche. C'est pourquoi d'autres méthodes permettent de fixer soi-même les structures de cliques recherchées.
## Réseau bipartite
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment