You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

375 lines
5.3KB

  1. ---
  2. title: "Graphes"
  3. author: "Maxime Wack"
  4. date: "19/11/2019"
  5. output:
  6. xaringan::moon_reader:
  7. css: ['default','css/my_style.css']
  8. lib_dir: libs
  9. seal: false
  10. nature:
  11. ratio: '4:3'
  12. countIncrementalSlides: false
  13. self-contained: true
  14. beforeInit: "addons/macros.js"
  15. highlightLines: true
  16. pdf_document:
  17. seal: false
  18. ---
  19. ```{r setup, include=FALSE}
  20. library(tidyverse)
  21. library(DT)
  22. library(knitr)
  23. opts_chunk$set(echo = TRUE,
  24. ## fig.asp= .5,
  25. message = F,
  26. warning = F)
  27. options(DT.options = list(paging = F,
  28. search = F,
  29. info = F))
  30. datatable <- partial(datatable, rownames = F)
  31. ```
  32. class: center, middle, title
  33. # UE Visualisation
  34. ### 2019-2020
  35. ## Dr. Maxime Wack
  36. ### AHU Informatique médicale
  37. #### Hôpital Européen Georges Pompidou, </br> Université de Paris
  38. ---
  39. # Graphe bipartite
  40. .pull-left[
  41. ### Graphe contenant deux sets de sommets **complèment déconnectés**
  42. ### Dit aussi 2-coloriable
  43. ]
  44. .pull-right[
  45. ![](06_img/bipartite.png)
  46. ]
  47. ---
  48. # Projection
  49. .pull-left[
  50. ### Méthode permettant de créer **deux** graphes
  51. ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie
  52. ]
  53. .pull-right[
  54. ![](06_img/71.png)
  55. ]
  56. ---
  57. # Projection
  58. .pull-left[
  59. ### Méthode permettant de créer **deux** graphes
  60. ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie
  61. ]
  62. .pull-right[
  63. ![](06_img/72.png)
  64. ]
  65. ---
  66. # Projection
  67. .pull-left[
  68. ### Méthode permettant de créer **deux** graphes
  69. ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie
  70. ]
  71. .pull-right[
  72. ![](06_img/73.png)
  73. ]
  74. ---
  75. # Projection
  76. .pull-left[
  77. ### Méthode permettant de créer **deux** graphes
  78. ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie
  79. ]
  80. .pull-right[
  81. ![](06_img/74.png)
  82. ]
  83. ---
  84. # Projection
  85. .pull-left[
  86. ### Méthode permettant de créer **deux** graphes
  87. ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie
  88. ]
  89. .pull-right[
  90. ![](06_img/75.png)
  91. ]
  92. ---
  93. # Projection
  94. .pull-left[
  95. ### Méthode permettant de créer **deux** graphes
  96. ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie
  97. ]
  98. .pull-right[
  99. ![](06_img/76.png)
  100. ]
  101. ---
  102. # Projection
  103. .pull-left[
  104. ### Méthode permettant de créer **deux** graphes
  105. ### Les sommets d'une partie sont connectés s'ils partagent un sommet d'une autre partie
  106. ]
  107. .pull-right[
  108. ![](06_img/77.png)
  109. ]
  110. ---
  111. class:center
  112. # Projection
  113. .pull-right[
  114. ![](06_img/bipartite.png)
  115. ]
  116. ---
  117. class:center
  118. # Projection
  119. .pull-left[
  120. ![](06_img/numbered_.png)
  121. ]
  122. .pull-right[
  123. ![](06_img/bipartite.png)
  124. ]
  125. ---
  126. class:center
  127. # Projection
  128. .pull-c1[
  129. ![](06_img/numbered_.png)
  130. ]
  131. .pull-c2[
  132. ![:scale 75%](06_img/bipartite.png)
  133. ]
  134. --
  135. .pull-c3[
  136. ![:scale 65%](06_img/projection.png)
  137. ]
  138. ---
  139. # OMIM
  140. *Online Mendelian Inheritance in Men*
  141. Base de données d'associations connues gène ↔ phénotype
  142. https://omim.org
  143. https://maximewack.com/files/OMIM.csv
  144. ---
  145. class: center
  146. # The Human Disease Network
  147. https://www.ncbi.nlm.nih.gov/pubmed/17502601
  148. ![:scale 90%](06_img/HDN_principe.png)
  149. ---
  150. class: center
  151. # The Human Disease Network
  152. https://www.ncbi.nlm.nih.gov/pubmed/17502601
  153. ![:scale 90%](06_img/HDN.png)
  154. ---
  155. # Librairies
  156. ```{r libs}
  157. library(igraph)
  158. library(ggraph)
  159. library(tidyverse)
  160. ```
  161. ---
  162. class:center,middle
  163. # igraph
  164. ---
  165. # Créer des graphes
  166. ```{r create graph, eval = F}
  167. # Graphe sans arête
  168. graph.empty(n = 10, directed = T)
  169. # Graphe complètement connecté
  170. graph.full(n = 10, directed = F, loops = F)
  171. # Graphe en étoile
  172. graph.star(n = 10, mode = "out")
  173. ```
  174. ---
  175. # Chargement du graphe
  176. ```{r load}
  177. read_csv("lab06_data/OMIM.csv") -> OMIM
  178. ```
  179. ```{r load show, echo = F}
  180. OMIM %>%
  181. slice(70:80) %>%
  182. datatable
  183. ```
  184. ---
  185. # Chargement du graphe
  186. ```{r graph data frame}
  187. graph.data.frame(OMIM, directed = F) -> graphe
  188. ```
  189. ```{r graph data frame show, echo = F}
  190. graphe
  191. ```
  192. ---
  193. # Informations sur le graphe
  194. ### Sommets
  195. ```{r vcount}
  196. vcount(graphe)
  197. ```
  198. ### Arêtes
  199. ```{r ecount}
  200. ecount(graphe)
  201. ```
  202. ---
  203. # Informations sur le graphe
  204. ### Dirigé ?
  205. ```{r directed}
  206. is.directed(graphe)
  207. ```
  208. ### Voisins d'un sommet
  209. ```{r neighbors}
  210. neighbors(graphe, V(graphe)[2019])
  211. ```
  212. ---
  213. # Projection
  214. ```{r projection}
  215. # Établir les types (gène, phénotype)
  216. V(graphe)$type <- bipartite.mapping(graphe)$type
  217. # Créer les projections
  218. projs <- bipartite.projection(graphe)
  219. # Séparer les projections en deux graphes
  220. HDN <- projs$proj1
  221. HGN <- projs$proj2
  222. ```
  223. ---
  224. # HDN
  225. ```{r HDN}
  226. HDN
  227. ```
  228. ---
  229. # HGN
  230. ```{r HGN}
  231. HGN
  232. ```
  233. ---
  234. # Décomposition en sous-graphes
  235. ```{r decompos}
  236. HDN %>%
  237. decompose -> diseases
  238. ```
  239. ---
  240. # ggraph
  241. ```{r visu}
  242. graph_one <- function(graph)
  243. {
  244. ggraph(graph) +
  245. geom_edge_diagonal() +
  246. geom_node_label(aes(label = name))
  247. }
  248. ```
  249. ---
  250. # Filtrer sous-graphes < 10 sommets
  251. ```{r sous-graphes par sommets}
  252. diseases %>%
  253. keep(map_dbl(diseases, vcount) >= 10) %>%
  254. map(graph_one) -> plots
  255. ```
  256. ---
  257. # Malformations cardiaques
  258. ```{r cardiaques}
  259. plots[[5]]
  260. ```
  261. ---
  262. # Surdités
  263. ```{r surdités}
  264. plots[[9]]
  265. ```
  266. ---
  267. # Ostéogénèses imparfaites
  268. ```{r Ostéogénèses}
  269. plots[[12]]
  270. ```
  271. ---
  272. # Export
  273. ```{r export, eval = F}
  274. write.graph(HDN, file = "diseases.graphml", format = "graphml")
  275. write.graph(HGN, file = "genes.graphml", format = "graphml")
  276. ```