script_bipartis.R 5.23 KB
Newer Older
Marion Maisonobe's avatar
Marion Maisonobe committed
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

setwd("F:/Lexar/ECOLE_THEM_GDR/BIPARTIS")
getwd()


library("igraph")
library("tnet")

## ------------------------------------------------------------------------

#ouvrir le fichier contenant la matrice
mat<-read.csv(file="freeman_friendship.csv", header=T, sep=";")

#remplacer les cases vides par des zéros
mat<-as.matrix(mat[,2:20])

mat[is.na(mat)] = 0

#transformer la matrice en objet igraph
g<-graph_from_incidence_matrix(as.matrix(mat), directed = FALSE, multiple = FALSE, 
                            weighted = NULL, add.names = NULL)
g

## ------------------------------------------------------------------------

#l'attribut "type" permet de différencier les deux ensembles de sommets

#nommer les membres du réseau

V(g)[V(g)$type == 0]$name<-1:29

#nommer les évènements

V(g)[V(g)$type == 1]$name<-paste("E",1:19, sep="" )

vertex_attr(g, "label") <- V(g)$name


## ------------------------------------------------------------------------

#symboliser les évènements par des carrés et les individus par des cercles

V(g)[V(g)$type == 1]$shape <- "square"
V(g)[V(g)$type == 0]$shape <- "circle"

#choisir deux gammes de couleur pour bien distinguer les deux ensembles de sommets

col <- c("steelblue", "orange")

#suppression des isolés
g1 <- delete.vertices(g, V(g)[degree(g)==0])

plot(g1,
  vertex.color = col[as.numeric(V(g1)$type)+1],
  vertex.label.cex=0.6,
  main= "Réseaux acteurs-évènements",
  sub= "Les isolés ne sont pas représentés"
  ,layout=layout.fruchterman.reingold(g1, niter=10000) #layout_as_bipartite
)


## ------------------------------------------------------------------------

#mesurer le degré
V(g)$degre <- degree(g)

#degré des évènements: combien d'individus ont participé à chaque évènement ?
V(g)[V(g)$type == 1]$degre


## ------------------------------------------------------------------------
#degré des individus: à combien d'évènements ont participé chaque individus ?
V(g)[V(g)$type == 0]$degre

## ------------------------------------------------------------------------

#extraire la liste des composantes connexes
cp <- components(g)

#repérer l'identifiant de la composante principale

X<-which(cp$csize==max(cp$csize))

#associer aux sommets du graphe, le vecteur d'appartenance à une composante 

V(g)$membership<-cp$membership

#compter le nombre d'individus dans la composante principale
vcount(induced.subgraph(g,V(g)[V(g)$type == 0 & V(g)$membership==X]))

#compter le nombre d'évènements dans la composante principale
vcount(induced.subgraph(g,V(g)[V(g)$type == 1 & V(g)$membership==X]))


## ------------------------------------------------------------------------

#transformer le graphe en liste de liens pour appliquer les fonctions du package tnet

net<-get.edgelist(g,names=F)

# calculer la matrice des plus courts chemins entre individus

mat_pcc<-distance_tm(as.tnet(net), projection.method="sum")


## ------------------------------------------------------------------------

#trouver la longueur du plus long des plus courts chemins

max(mat_pcc[,1:21], na.rm=T)


## ------------------------------------------------------------------------

#différentes méthodes de projection

#obtenir le réseau des individus non-valué

onemode1<-projecting_tm(net, method="binary")

#obtenir le réseau des individus valué en fonction du nombre d'évènements partagés

onemode2<-projecting_tm(net, method="sum")

#obtenir le réseau des individus valué en fonction du nombre d'évènements partagés 
#et pondéré en fonction du nombre de participants à chaque évènement
#est cohérent puisque moins il y a de monde dans un évènement, 
#plus il y a de chance que les participants se soient parlés

onemode3<-projecting_tm(net, method="Newman")


## ------------------------------------------------------------------------

#différents indices de centralité

#calcul du degré des individus

degree_tm <- degree_tm(net, measure="degree")

#calcul du coefficient de reinforcement

reinforcement_tm(net)

#calcul du clustering coefficient

clustering_tm(net)



## ------------------------------------------------------------------------
#Changer l'ordre des colonnes dans le fichier d'entrée

net2 <- net[,2:1]


## ------------------------------------------------------------------------
library("bipartite")

#ouvrir le fichier contenant la matrice
mat<-read.csv(file="freeman_friendship.csv", header=T, sep=";")

#transformer en objet de type matrice
mat<-as.matrix(mat[1:29,2:20])

#renommer les colonnes (évènements)
colnames(mat)<- paste("E",1:19, sep="" )

#remplacer les cases vides par des zéros
mat[is.na(mat)] = 0

#représenter l'information
plotweb(mat)


## ------------------------------------------------------------------------

#mesures
networklevel(mat)


## ------------------------------------------------------------------------

#mesures
indices_link<-linklevel(mat)


## ------------------------------------------------------------------------

#calculer le degré normalisé
ND(mat, normalised = T )


## ------------------------------------------------------------------------

#modèle nul
modele_nul<-mgen(mat)

modele_nul<-nullmodel(N=5, mat, method="mgen")


## ------------------------------------------------------------------------

#trouver des partitions
mod_mat<-computeModules(mat)

plotModuleWeb(mod_mat)