Commit 3eccc953 authored by Ednomesor's avatar Ednomesor

MAJ Quanti

parent 4e1df9e8
...@@ -3,13 +3,6 @@ ...@@ -3,13 +3,6 @@
# 27 juin 2017 # 27 juin 2017
#Réseau bipartite #Réseau bipartite
library(bipartite) library(igraph)
#Création d'un réseau bipartite
#Chargement d'un réseau bipartite
#Visualisation
#Mesuses
# https://rpubs.com/lgadar/load-bipartite-graph
\ No newline at end of file
...@@ -15,7 +15,7 @@ knitr::opts_chunk$set(echo = TRUE) ...@@ -15,7 +15,7 @@ knitr::opts_chunk$set(echo = TRUE)
``` ```
## Avant-propos ## Avant-propos
Ce document a été conçu en support à la séance *Initiation à l'analyse de réseaux* pour la formation Quantilille 2017. Dans cette séance, nous serons amenés à manipuler les logiciels R et RStudio ainsi que les packages **igraph**, **bipartite**. Ce document a été conçu en support à la séance *Initiation à l'analyse de réseaux* pour la formation Quantilille 2017. Dans cette séance, nous serons amenés à manipuler les logiciels R et RStudio ainsi que les packages **igraph**..
Ce document rédigé en R Markdown a l'avantage de mêler texte, commande R et visualisation sur un seul et même document. Ce document rédigé en R Markdown a l'avantage de mêler texte, commande R et visualisation sur un seul et même document.
...@@ -26,10 +26,21 @@ Les données que nous allons manipuler peuvent, quant à elles, faire l'objet de ...@@ -26,10 +26,21 @@ Les données que nous allons manipuler peuvent, quant à elles, faire l'objet de
L'ensemble des données, scripts et présentations que j'ai produit pour la formation Quantilille est disponible sur le dépôt GIT : L'ensemble des données, scripts et présentations que j'ai produit pour la formation Quantilille est disponible sur le dépôt GIT :
## Ressources utiles ## Ressources utiles
Laurent Beauguitte, Analyser les réseaux avec R (packages statnet, igraph et tnet). DEA. Analyser les réseaux avec R, UMR Géographie-cités, 2012, pp.17. Disponible sur HalSHS <https://cel.archives-ouvertes.fr/cel-00687871/document>
Julien Barnier, \textit{Introduction à R}, livret de formation, dernière version disponible sur : <http://alea.fr.eu.org/pages/intro-R>. Julien Barnier, \textit{Introduction à R}, livret de formation, dernière version disponible sur : <http://alea.fr.eu.org/pages/intro-R>.
Julien Barnier, *Analyse de réseau avec R*, livret de formation, 2011 :
<https://alea.fr.eu.org/git/doc_reseaux_r.git/blob_plain/HEAD:/networks.pdf>
Tutoriel sur igraph produit par l'un de ses développeurs <http://igraph.github.io/netuser15/user-2015.html#1> Tutoriel sur igraph produit par l'un de ses développeurs <http://igraph.github.io/netuser15/user-2015.html#1>
Concernant les différentes méthodes de détection de communautés avec igraph :
<https://stackoverflow.com/questions/9471906/what-are-the-differences-between-community-detection-algorithms-in-igraph>
Egalement pour une version précédente de igraph :
<https://www.r-bloggers.com/summary-of-community-detection-algorithms-in-igraph-0-6/>
## 1 - Introduction ## 1 - Introduction
### Présentation de R ### Présentation de R
...@@ -115,9 +126,10 @@ is_simple(g1) ...@@ -115,9 +126,10 @@ is_simple(g1)
### Graphe orienté ou non orienté ### Graphe orienté ou non orienté
A chaque fois, il est faut spécifier si le graphe en question (créé manuellement ou importé depuis un fichier extérieur) est orienté ou non. Par défaut, igraph considérera que le graphe est orienté (valeur `directed = T` par défaut) A chaque fois, il est faut spécifier si le graphe en question (créé manuellement ou importé depuis un fichier extérieur) est orienté ou non. Par défaut, igraph considérera que le graphe est orienté (valeur `directed = T` par défaut)
Un graphe orienté est constitué de noeuds reliés entre eux par des liens directionnels (ou bidirectionnels) qui précisent que la relation part d'un noeud pour se diriger vers un autre, la réciprocité n'est pas nécessairement présente. Ex : Anne offre un café à Christophe mais Christophe n'a pas offert de café à Anne - Quel goujat !. Si Christophe a finalement offert un café à Anne, j'aurais indiqué la réciprocité de cette relation par un lien orienté d'Anne vers Christophe, puis de Christophe vers Anne. Mais si je m'interesse seulement au fait qu'Anne et Christophe ont eu un échange à la machine à café qu'importe la direction du don, j'aurais créé un lien non orienté entre ces deux acteurs. Tout dépend de ce que l'on cherche à démontrer. Un graphe orienté est constitué de noeuds reliés entre eux par des liens directionnels (ou bidirectionnels) qui précisent que la relation part d'un noeud pour se diriger vers un autre, la réciprocité n'est pas nécessairement présente. Ex : Anne offre un café à Christophe mais Christophe n'a pas offert de café à Anne - Quel goujat !. Là, la relation est unidirectionnelle.
Si Christophe a finalement offert un café à Anne, j'aurais indiqué la réciprocité de cette relation par un lien orienté d'Anne vers Christophe, puis de Christophe vers Anne. Mais si je m'interesse seulement au fait qu'Anne et Christophe ont eu un échange à la machine à café qu'importe la direction du don, j'aurais créé un lien non orienté entre ces deux acteurs. Tout dépend de ce que l'on cherche à démontrer.
Créer un graphe orienté dans igraph (je précise le nombre de sommets totaux avec `n =` ) On va créer un graphe orienté dans igraph (je précise le nombre de sommets totaux avec `n =` )
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4} ```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
#Je crée un graphe orienté à 8 sommets #Je crée un graphe orienté à 8 sommets
...@@ -146,6 +158,7 @@ plot(g2) ...@@ -146,6 +158,7 @@ plot(g2)
#Est-ce un graphe simple maintenant ? #Est-ce un graphe simple maintenant ?
is_simple(g2) is_simple(g2)
g2
``` ```
...@@ -180,7 +193,7 @@ plot(g4bis) ...@@ -180,7 +193,7 @@ plot(g4bis)
### Encore une autre façon de formaliser un graphe ### Encore une autre façon de formaliser un graphe
C'est formalisation utilise les signes `+` et `-` pour caractériser les relations entre les noeuds. Dans le cas d'un graphe orienté, `+-` et `-+` pour l'orientation du lien, `+` pour la réciproque. Cette formalisation utilise les signes `+` et `-` pour caractériser les relations entre les noeuds. Dans le cas d'un graphe orienté, `+-` et `-+` pour l'orientation du lien, `+` pour la réciproque.
Si le nom du noeud contient un espace ou un caractère spécial on utilise la double quote (c'est le cas ici de Marie Louise). Si le nom du noeud contient un espace ou un caractère spécial on utilise la double quote (c'est le cas ici de Marie Louise).
On utilise la virgule pour créer un isolé. On utilise la virgule pour créer un isolé.
...@@ -211,7 +224,7 @@ plot(g4, edge.arrow.size=0.5, ...@@ -211,7 +224,7 @@ plot(g4, edge.arrow.size=0.5,
## 3 - Manipuler mon objet igraph ## 3 - Manipuler mon objet igraph
Quand je créé un graphe manuellement ou quand je charge un jeu de données réseaux avec le package `igraph`, j'initialise un objet igraph doté de certaines caractéristiques. Pour les connaître, je demande à R des informations sur l'objet igraph que je viens de créer/charger : Quand je crée un graphe manuellement ou quand je charge un jeu de données réseaux avec le package `igraph`, j'initialise un objet igraph doté de certaines caractéristiques. Pour les connaître, je demande à R des informations sur l'objet igraph que je viens de créer/charger :
```{r} ```{r}
#Info générale sur mon objet igraph #Info générale sur mon objet igraph
g4 g4
...@@ -221,7 +234,7 @@ Il renvoie une sorte de résumé, comprenez : ...@@ -221,7 +234,7 @@ Il renvoie une sorte de résumé, comprenez :
* `IGRAPH` : c'est un objet igraph (jusque là tout va bien !) * `IGRAPH` : c'est un objet igraph (jusque là tout va bien !)
* `DN--` : D pour *directed graph* (sinon U pour *undirected*), N pour *named graph* c'est à dire qu'igraph à reconnu que les noeuds portaient des noms, les deux autres lettres (absentes ici) seraient W pour *weighted graph* si les liens sont valués et B pour *bipartite graph* si le graph est bipartite (2-mode). * `DN--` : D pour *directed graph* (sinon U pour *undirected*), N pour *named graph* c'est à dire qu'igraph à reconnu que les noeuds portaient des noms, les deux autres lettres (absentes ici) seraient W pour *weighted graph* si les liens sont valués et B pour *bipartite graph* si le graph est biparti (2-mode).
* 8 correspond à l'ordre d'un graphe, c'est-à-dire le nombre de ses noeuds * 8 correspond à l'ordre d'un graphe, c'est-à-dire le nombre de ses noeuds
...@@ -267,7 +280,7 @@ V(g4)$genre <- c("homme", "homme", "homme", "homme", "femme", "femme", "femme", ...@@ -267,7 +280,7 @@ V(g4)$genre <- c("homme", "homme", "homme", "homme", "femme", "femme", "femme",
On peut aussi le faire pour les liens `E(nomdugraphe)$nomattribut` On peut aussi le faire pour les liens `E(nomdugraphe)$nomattribut`
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4} ```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
# Valuons notre réseau # Valuons notre réseau
E(g4)$weight <- c(3,5,1,4,8,4,1) E(g4)$weight <- c(3,5,1,4,8,4)
``` ```
...@@ -366,6 +379,11 @@ noeuds<-read.csv("~/Bureau/Formation/Nice_GDR/nice1/script_R/data/nodes_anonym.c ...@@ -366,6 +379,11 @@ noeuds<-read.csv("~/Bureau/Formation/Nice_GDR/nice1/script_R/data/nodes_anonym.c
head(noeuds) head(noeuds)
``` ```
```{r}
liens<-read.csv("~/Bureau/Formation/Nice_GDR/nice1/script_R/data/edges_anonym.csv", sep = ",", header = TRUE)
head(liens)
```
Nous allons créer un nouvel objet graphe (ou plutôt écraser l'ancien) qui importera à la fois les données sur les liens et celles sur les noeuds que je viens de mettre respectivement dans deux dataframes différents. Nous allons créer un nouvel objet graphe (ou plutôt écraser l'ancien) qui importera à la fois les données sur les liens et celles sur les noeuds que je viens de mettre respectivement dans deux dataframes différents.
```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4} ```{r, tidy=TRUE, tidy.opts=list(width.cutoff=60), fig.align='center', fig.height=4}
#transformation en objet igraph #transformation en objet igraph
......
...@@ -15,7 +15,7 @@ knitr::opts_chunk$set(echo = TRUE) ...@@ -15,7 +15,7 @@ knitr::opts_chunk$set(echo = TRUE)
``` ```
## Avant-propos ## Avant-propos
Ce document a été conçu en support à la séance *Initiation à l'analyse de réseaux* pour la formation Quantilille 2017. Dans cette séance, nous serons amenés à manipuler les logiciels R et RStudio ainsi que les packages **igraph**, **bipartite**. Ce document a été conçu en support à la séance *Initiation à l'analyse de réseaux* pour la formation Quantilille 2017. Dans cette séance, nous serons amenés à manipuler les logiciels R et RStudio ainsi que les packages **igraph**.
Ce document rédigé en R Markdown a l'avantage de mêler texte, commande R et visualisation sur un seul et même document. Ce document rédigé en R Markdown a l'avantage de mêler texte, commande R et visualisation sur un seul et même document.
...@@ -412,4 +412,4 @@ Il existe plusieurs algorithmes de détection de communautés dans igraph : ...@@ -412,4 +412,4 @@ Il existe plusieurs algorithmes de détection de communautés dans igraph :
## Réseau bipartite ## Réseau biparti
\ No newline at end of file \ 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