--- title: "Graphes" author: "Maxime Wack" date: "17/11/2020" output: xaringan::moon_reader: css: ['default','css/my_style.css'] lib_dir: libs seal: false nature: ratio: '4:3' countIncrementalSlides: false self-contained: true beforeInit: "addons/macros.js" highlightLines: true --- ```{r setup, include=FALSE} library(tidyverse) library(DT) library(knitr) opts_chunk$set(echo = TRUE, ## fig.asp= .5, message = F, warning = F) options(DT.options = list(paging = F, search = F, info = F)) datatable <- partial(datatable, rownames = F) ``` class: center, middle, title # UE Visualisation ### 2020-2021 ## Dr. Maxime Wack ### AHU Informatique médicale #### Hôpital Européen Georges Pompidou,
Université de Paris --- # Graphe bipartite .pull-left[ ### Graphe contenant deux sets de sommets **complèment déconnectés** ### Dit aussi 2-coloriable ] .pull-right[ ![](06-img/bipartite.png) ] --- # Projection .pull-left[ ### Méthode permettant de créer **deux** graphes ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie ] .pull-right[ ![](06-img/71.png) ] --- # Projection .pull-left[ ### Méthode permettant de créer **deux** graphes ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie ] .pull-right[ ![](06-img/72.png) ] --- # Projection .pull-left[ ### Méthode permettant de créer **deux** graphes ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie ] .pull-right[ ![](06-img/73.png) ] --- # Projection .pull-left[ ### Méthode permettant de créer **deux** graphes ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie ] .pull-right[ ![](06-img/74.png) ] --- # Projection .pull-left[ ### Méthode permettant de créer **deux** graphes ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie ] .pull-right[ ![](06-img/75.png) ] --- # Projection .pull-left[ ### Méthode permettant de créer **deux** graphes ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie ] .pull-right[ ![](06-img/76.png) ] --- # Projection .pull-left[ ### Méthode permettant de créer **deux** graphes ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie ] .pull-right[ ![](06-img/77.png) ] --- class:center # Projection .pull-right[ ![](06-img/bipartite.png) ] --- class:center # Projection .pull-left[ ![](06-img/numbered_.png) ] .pull-right[ ![](06-img/bipartite.png) ] --- class:center # Projection .pull-c1[ ![](06-img/numbered_.png) ] .pull-c2[ ![:scale 75%](06-img/bipartite.png) ] -- .pull-c3[ ![:scale 65%](06-img/projection.png) ] --- # OMIM *Online Mendelian Inheritance in Men* Base de données d'associations connues gène ↔ phénotype https://omim.org https://maximewack.com/files/OMIM.csv --- class: center # The Human Disease Network https://www.ncbi.nlm.nih.gov/pubmed/17502601 ![:scale 90%](06-img/HDN_principe.png) --- class: center # The Human Disease Network https://www.ncbi.nlm.nih.gov/pubmed/17502601 ![:scale 90%](06-img/HDN.png) --- # Librairies ```{r libs} library(igraph) library(ggraph) library(tidyverse) ``` --- class:center,middle # igraph --- # Créer des graphes ```{r create graph, eval = F} # Graphe sans arête graph.empty(n = 10, directed = T) # Graphe complètement connecté graph.full(n = 10, directed = F, loops = F) # Graphe en étoile graph.star(n = 10, mode = "out") ``` --- # Chargement du graphe ```{r load} read_csv("lab06-data/OMIM.csv") -> OMIM ``` ```{r load show, echo = F} OMIM %>% slice(70:80) %>% datatable ``` --- # Chargement du graphe ```{r graph data frame} graph.data.frame(OMIM, directed = F) -> graphe ``` ```{r graph data frame show, echo = F} graphe ``` --- # Informations sur le graphe ### Sommets ```{r vcount} vcount(graphe) ``` ### Arêtes ```{r ecount} ecount(graphe) ``` --- # Informations sur le graphe ### Dirigé ? ```{r directed} is.directed(graphe) ``` ### Voisins d'un sommet ```{r neighbors} neighbors(graphe, V(graphe)[2019]) ``` --- # Projection ```{r projection} # Établir les types (gène, phénotype) V(graphe)$type <- bipartite.mapping(graphe)$type # Créer les projections projs <- bipartite.projection(graphe) # Séparer les projections en deux graphes HDN <- projs$proj1 HGN <- projs$proj2 ``` --- # HDN ```{r HDN} HDN ``` --- # HGN ```{r HGN} HGN ``` --- # Décomposition en sous-graphes ```{r decompos} HDN %>% decompose -> diseases ``` --- # ggraph ```{r visu} graph_one <- function(graph) { ggraph(graph) + geom_edge_diagonal() + geom_node_label(aes(label = name)) } ``` --- # Filtrer sous-graphes < 10 sommets ```{r sous-graphes par sommets} diseases %>% keep(map_dbl(diseases, vcount) >= 10) %>% map(graph_one) -> plots ``` --- # Malformations cardiaques ```{r cardiaques} plots[[5]] ``` --- # Surdités ```{r surdités} plots[[9]] ``` --- # Ostéogénèses imparfaites ```{r Ostéogénèses} plots[[12]] ``` --- # Export ```{r export, eval = F} write.graph(HDN, file = "diseases.graphml", format = "graphml") write.graph(HGN, file = "genes.graphml", format = "graphml") ```