Analyse des échanges collaboratifs avec igraph

blog1analyse du réseau d’échange

Le tableau analysé comprend toutes les paires orientées (Prêteurs ->Emprunteurs) donc un identificateur prêteur et un autre emprunteur. 2500 paires (arcs) sont analysées. Chaque arc est caractérisé par le nombre de transactions effectuées.

Dans la première ligne on indique que le graphe est orienté et que les noeuds sont identifiés par id .La seconde ligne commande le mode de representation. On a choisit ici un algorithme de forme kk dontla référence est :bbb. C’est un choix classique de repréentation des similarités utile quand le nombre d’objets représenté est grand.

g <- graph.data.frame(G, directed=TRUE, vertice=Id)
l <- layout_with_kk(g)
V(g)$label <- NA
V(g)$size <- 1*log(Id$Total)
E(g)$arrow.size <- 0.2*G$pret #épaisseur des arcs en fonction du nb de prets entre deux personnes
plot(g,layout=l)

blog01
La signature du graphe est donnée dans l’histogramme suivant de la distribution du nombre d’arc accordées aux nœuds. C’est une distribution clairement negative exponentielle, peut-étre puissance.Le graph log log avec le package poweRlaw, permet d’y répondre (on emprunte le code à Ruliana ).

deg <- degree(g, mode="all")
hist(deg, breaks=1:vcount(g)-1, main="Histogram of node degree",xlim=c(0,50))

blog02

library("poweRlaw")
library(ggplot2)
# Just loading my data

G.degrees <- degree(g)

# Let's count the frequencies of each degree
G.degree.histogram <- as.data.frame(table(G.degrees))

# Need to convert the first column to numbers, otherwise
# the log-log thing will not work (that's fair...)
G.degree.histogram[,1] <- as.numeric(G.degree.histogram[,1])

# Now, plot it!
ggplot(G.degree.histogram, aes(x = G.degrees, y = Freq)) +
  geom_point() +
  scale_x_continuous("Degree\n(nodes with this amount of connections)",
                     breaks = c(1, 3, 10, 30, 100, 300),
                     trans = "log10") +
  scale_y_continuous("Frequency\n(how many of them)",
                     breaks = c(1, 3, 10, 30, 100, 300, 1000),
                     trans = "log10") +
  ggtitle("Degree Distribution (log-log)") +
  theme_bw()+ geom_smooth(method='lm')

blog03

On peut raffiner en selectionnant des noeuds ou des arc. Ici on supprime les arcs entre des paires à échange unique, ce qui éclaircit le graphique.

h <- delete_edges(g, E(g)[pret<2]) #supprime les arc inférieur à
plot(h,layout=l)

blog04

 

Identifier les influenceurs

On peut faire varier la taille des noeuds en fonction de leurs caractéristiques, dans l’exemple suivant on la définit comme proportionnelle au « degré » des noeuds en calculant d’abord cette variable à partir de la fonction degree et du graphe g. Ce qui met mieux en valeur les nœuds centraux, et le nuage des échanges uniques.

plot(g, vertex.size=deg*0.1)

blog05

 

L’analyse peut être un peu plus compliquée et on peut chercher à évaluer l’Autorité et la Centralité des agents qui échangent. On utilise pour celà les fonctions hub_score et authority_score, calculé comme le score sur la première composante de A’A, respectivement AA’, sur la base du modèle Hits de  Jon Kleinberg« Authoritative sources in a hyperlinked environment »Journal of the ACMvol. 46, no 5,‎ p. 604-632 (DOI 10.1145/324133.324140lire en ligne ).

hs <- as.data.frame(hub_score(g, weights=NA)$vector) 
hs$owner_email<-row.names(hs)
hs$hub<-hs$`hub_score(g, weights = NA)$vector`
as <- as.data.frame(authority_score(g, weights=NA)$vector)
as$receiver_email<-row.names(as)
as$authority<-as$`authority_score(g, weights = NA)$vector`
par(mfrow=c(1,2)) #pour juxtaposer les graphes
plot(g, vertex.size=hs$hub, main="Hubs : prêtent à de nombreuses pers.")
plot(g, vertex.size=as$authority*8, main="Authorities : empruntent aux hubs")

hub et authorité

 

Publicités

Un commentaire sur “Analyse des échanges collaboratifs avec igraph

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s