@@ -0,0 +1,339 @@ | |||||
<!DOCTYPE html> | |||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> | |||||
<head> | |||||
<title>Graphes</title> | |||||
<meta charset="utf-8" /> | |||||
<meta name="author" content="Maxime Wack" /> | |||||
<link href="libs/remark-css-0.0.1/default.css" rel="stylesheet" /> | |||||
<link rel="stylesheet" href="css/my_style.css" type="text/css" /> | |||||
</head> | |||||
<body> | |||||
<textarea id="source"> | |||||
class: center, middle, title | |||||
# UE Visualisation | |||||
### 2019-2020 | |||||
## Dr. Maxime Wack | |||||
### AHU Informatique médicale | |||||
#### Hôpital Européen Georges Pompidou, </br> Université de Paris | |||||
--- | |||||
class: center, middle | |||||
# Objectif | |||||
## Théorie des graphes | |||||
## Créer et manipuler des graphes | |||||
## Représenter des graphes | |||||
--- | |||||
# Théorie des graphes | |||||
### Étude des graphes et leurs applications | |||||
### Topologie des graphes | |||||
### Propriétés des graphes | |||||
### Développement d'algorithmes | |||||
- parcours en largeur/profondeur | |||||
- calcul de trajet (A*, Dijkstra) | |||||
- détection de sous-graphes | |||||
- inférence, effets de réseaux | |||||
- résolution de contraintes | |||||
--- | |||||
# Graphes | |||||
.pull-left[ | |||||
## Graphes ou réseaux | |||||
*graphs* and *networks* | |||||
## Représentation de **relations** entre des **éléments** | |||||
] | |||||
.pull-right[ | |||||
![](06_img/graphe.png) | |||||
] | |||||
--- | |||||
# Sommets | |||||
.pull-left[ | |||||
### (ou nœuds, ou points)</br> *vertex (vertices)* en anglais | |||||
### Servent à représenter les **éléments** | |||||
### Peuvent posséder des **attributs** arbitraires (label, valeurs, etc.) | |||||
### Des attributs peuvent être **calculés** (degré, centralité, etc.) | |||||
] | |||||
.pull-right[ | |||||
![](06_img/vertices.png) | |||||
] | |||||
--- | |||||
# Arêtes | |||||
.pull-left[ | |||||
### (ou liens, ou lignes)</br> *edges* en anglais | |||||
### Servent à représenter les **relations** | |||||
### Peuvent également posséder des **attributs** (label, poids, etc.) | |||||
] | |||||
.pull-right[ | |||||
![](06_img/edges.png) | |||||
] | |||||
--- | |||||
# Graphe dirigé | |||||
.pull-left[ | |||||
### Graphe dont les arêtes ont une **direction** | |||||
### Arêtes **bidirectionnelles** possibles | |||||
] | |||||
.pull-right[ | |||||
![](06_img/directed.png) | |||||
] | |||||
--- | |||||
# Cycles | |||||
.pull-left[ | |||||
### Groupes de sommets formant un **anneau** | |||||
### Dans un graphe dirigé, on doit pouvoir tourner | |||||
] | |||||
.pull-right[ | |||||
![](06_img/cycle.png) | |||||
] | |||||
--- | |||||
# Clique | |||||
.pull-left[ | |||||
### Ensemble de sommets **tous connectés entre eux** | |||||
] | |||||
.pull-right[ | |||||
![](06_img/clique.png) | |||||
] | |||||
--- | |||||
# Graphe connecté | |||||
.pull-left[ | |||||
### Graphe dont **tous les sommets** forment une **clique** | |||||
] | |||||
.pull-right[ | |||||
![](06_img/connected.png) | |||||
] | |||||
--- | |||||
# Arbre | |||||
.pull-left[ | |||||
### Graphe ne comportant **pas de cycle** | |||||
### Possède une ou plusieurs **racines** | |||||
] | |||||
.pull-right[ | |||||
![](06_img/tree.png) | |||||
] | |||||
--- | |||||
# Graphe dirigé acyclique | |||||
.pull-left[ | |||||
### Depuis le graphe dirigé précédent | |||||
### Quelles arêtes supprimer pour obtenir un DAG ? | |||||
] | |||||
.pull-right[ | |||||
![](06_img/directed.png) | |||||
] | |||||
--- | |||||
# Graphe dirigé acyclique | |||||
.pull-left[ | |||||
### **DAG** (Directed Acyclic Graph) | |||||
### Structure très reconnue | |||||
- Réseaux bayésiens | |||||
- Arbres généalogiques | |||||
- Systèmes de contrôle de version | |||||
- Systèmes de workflow | |||||
- Graphe de citations | |||||
] | |||||
.pull-right[ | |||||
![](06_img/DAG.png) | |||||
] | |||||
--- | |||||
# Représentation numérique | |||||
.pull-left[ | |||||
![](06_img/numbered.png) | |||||
] | |||||
.pull-right[ | |||||
## Liste de sommets | |||||
`(1, 2, 3, 4, 5, 6, 7, 8)` | |||||
## Liste d'arêtes | |||||
`((2, 1), (3, 1), (4, 1),`</br> | |||||
` (2, 3), (4, 3), (4, 2),`</br> | |||||
` (2, 5), (5, 2), (5, 7),`</br> | |||||
` (6, 5), (6, 7), (7, 4),`</br> | |||||
` (7, 8))` | |||||
] | |||||
--- | |||||
# Représentation numérique | |||||
.pull-left[ | |||||
![](06_img/numbered.png) | |||||
] | |||||
## Matrice d'adjacence | |||||
``` | |||||
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] | |||||
## [1,] 0 0 0 0 0 0 0 0 | |||||
## [2,] 1 0 1 0 1 0 0 0 | |||||
## [3,] 1 0 0 0 0 0 0 0 | |||||
## [4,] 1 1 1 0 0 0 0 0 | |||||
## [5,] 0 1 0 0 0 0 1 0 | |||||
## [6,] 0 0 0 0 1 0 1 0 | |||||
## [7,] 0 0 0 1 0 0 0 1 | |||||
## [8,] 0 0 0 0 0 0 0 0 | |||||
``` | |||||
--- | |||||
class: center | |||||
# Visualisation | |||||
## Cytoscape | |||||
## yEd | |||||
## ggraph | |||||
--- | |||||
# Outils externes | |||||
## Cytoscape | |||||
https://cytoscape.org/ | |||||
Pour l'analyse de réseaux, orienté biologie à l'origine</br> | |||||
Visualisation de réseaux</br> | |||||
Calculs d'indicateurs</br> | |||||
Mapping d'attributs sur des propriété esthétiques | |||||
## yEd | |||||
https://www.yworks.com/products/yed | |||||
Éditeur de graphes, multiples supportés</br> | |||||
Visualisation de réseaux</br> | |||||
Nombreux algorithmes de layout</br> | |||||
Calculs d'indicateurs</br> | |||||
Mapping d'attributs sur des propriété esthétiques</br> | |||||
--- | |||||
# ggraph | |||||
https://ggraph.data-imaginist.com/ | |||||
### `geom_node_*` → geom pour les sommets | |||||
### `geom_edge_*` → geom pour les arêtes | |||||
### Propriété `layout` dans `ggraph()` | |||||
</textarea> | |||||
<style data-target="print-only">@media screen {.remark-slide-container{display:block;}.remark-slide-scaler{box-shadow:none;}}</style> | |||||
<script src="https://remarkjs.com/downloads/remark-latest.min.js"></script> | |||||
<script src="addons/macros.js"></script> | |||||
<script>var slideshow = remark.create({ | |||||
"ratio": "4:3", | |||||
"countIncrementalSlides": false, | |||||
"self-contained": true | |||||
}); | |||||
if (window.HTMLWidgets) slideshow.on('afterShowSlide', function (slide) { | |||||
window.dispatchEvent(new Event('resize')); | |||||
}); | |||||
(function(d) { | |||||
var s = d.createElement("style"), r = d.querySelector(".remark-slide-scaler"); | |||||
if (!r) return; | |||||
s.type = "text/css"; s.innerHTML = "@page {size: " + r.style.width + " " + r.style.height +"; }"; | |||||
d.head.appendChild(s); | |||||
})(document); | |||||
(function(d) { | |||||
var el = d.getElementsByClassName("remark-slides-area"); | |||||
if (!el) return; | |||||
var slide, slides = slideshow.getSlides(), els = el[0].children; | |||||
for (var i = 1; i < slides.length; i++) { | |||||
slide = slides[i]; | |||||
if (slide.properties.continued === "true" || slide.properties.count === "false") { | |||||
els[i - 1].className += ' has-continuation'; | |||||
} | |||||
} | |||||
var s = d.createElement("style"); | |||||
s.type = "text/css"; s.innerHTML = "@media print { .has-continuation { display: none; } }"; | |||||
d.head.appendChild(s); | |||||
})(document); | |||||
// delete the temporary CSS (for displaying all slides initially) when the user | |||||
// starts to view slides | |||||
(function() { | |||||
var deleted = false; | |||||
slideshow.on('beforeShowSlide', function(slide) { | |||||
if (deleted) return; | |||||
var sheets = document.styleSheets, node; | |||||
for (var i = 0; i < sheets.length; i++) { | |||||
node = sheets[i].ownerNode; | |||||
if (node.dataset["target"] !== "print-only") continue; | |||||
node.parentNode.removeChild(node); | |||||
} | |||||
deleted = true; | |||||
}); | |||||
})();</script> | |||||
<script> | |||||
(function() { | |||||
var links = document.getElementsByTagName('a'); | |||||
for (var i = 0; i < links.length; i++) { | |||||
if (/^(https?:)?\/\//.test(links[i].getAttribute('href'))) { | |||||
links[i].target = '_blank'; | |||||
} | |||||
} | |||||
})(); | |||||
</script> | |||||
<script> | |||||
slideshow._releaseMath = function(el) { | |||||
var i, text, code, codes = el.getElementsByTagName('code'); | |||||
for (i = 0; i < codes.length;) { | |||||
code = codes[i]; | |||||
if (code.parentNode.tagName !== 'PRE' && code.childElementCount === 0) { | |||||
text = code.textContent; | |||||
if (/^\\\((.|\s)+\\\)$/.test(text) || /^\\\[(.|\s)+\\\]$/.test(text) || | |||||
/^\$\$(.|\s)+\$\$$/.test(text) || | |||||
/^\\begin\{([^}]+)\}(.|\s)+\\end\{[^}]+\}$/.test(text)) { | |||||
code.outerHTML = code.innerHTML; // remove <code></code> | |||||
continue; | |||||
} | |||||
} | |||||
i++; | |||||
} | |||||
}; | |||||
slideshow._releaseMath(document); | |||||
</script> | |||||
<!-- dynamically load mathjax for compatibility with self-contained --> | |||||
<script> | |||||
(function () { | |||||
var script = document.createElement('script'); | |||||
script.type = 'text/javascript'; | |||||
script.src = 'https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML'; | |||||
if (location.protocol !== 'file:' && /^https?:/.test(script.src)) | |||||
script.src = script.src.replace(/^https?:/, ''); | |||||
document.getElementsByTagName('head')[0].appendChild(script); | |||||
})(); | |||||
</script> | |||||
</body> | |||||
</html> |
@@ -0,0 +1,548 @@ | |||||
<!DOCTYPE html> | |||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> | |||||
<head> | |||||
<title>Graphes</title> | |||||
<meta charset="utf-8" /> | |||||
<meta name="author" content="Maxime Wack" /> | |||||
<link href="libs/remark-css-0.0.1/default.css" rel="stylesheet" /> | |||||
<script src="libs/htmlwidgets-1.5.1/htmlwidgets.js"></script> | |||||
<script src="libs/jquery-1.12.4/jquery.min.js"></script> | |||||
<link href="libs/datatables-css-0.0.0/datatables-crosstalk.css" rel="stylesheet" /> | |||||
<script src="libs/datatables-binding-0.10/datatables.js"></script> | |||||
<link href="libs/dt-core-1.10.19/css/jquery.dataTables.min.css" rel="stylesheet" /> | |||||
<link href="libs/dt-core-1.10.19/css/jquery.dataTables.extra.css" rel="stylesheet" /> | |||||
<script src="libs/dt-core-1.10.19/js/jquery.dataTables.min.js"></script> | |||||
<link href="libs/crosstalk-1.0.0/css/crosstalk.css" rel="stylesheet" /> | |||||
<script src="libs/crosstalk-1.0.0/js/crosstalk.min.js"></script> | |||||
<link rel="stylesheet" href="css/my_style.css" type="text/css" /> | |||||
</head> | |||||
<body> | |||||
<textarea id="source"> | |||||
class: center, middle, title | |||||
# UE Visualisation | |||||
### 2019-2020 | |||||
## Dr. Maxime Wack | |||||
### AHU Informatique médicale | |||||
#### Hôpital Européen Georges Pompidou, </br> 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 | |||||
library(igraph) | |||||
library(ggraph) | |||||
library(tidyverse) | |||||
``` | |||||
--- | |||||
class:center,middle | |||||
# igraph | |||||
--- | |||||
# Créer des graphes | |||||
```r | |||||
# 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 | |||||
read_csv("lab06_data/OMIM.csv") -> OMIM | |||||
``` | |||||
<div id="htmlwidget-47d834c4dcc97d74e7ee" style="width:100%;height:auto;" class="datatables html-widget"></div> | |||||
<script type="application/json" data-for="htmlwidget-47d834c4dcc97d74e7ee">{"x":{"filter":"none","data":[["ACYL-CoA DEHYDROGENASE, SHORT-CHAIN, DEFICIENCY OF","ADAMS-OLIVER SYNDROME 1","ADAMS-OLIVER SYNDROME 2","ADAMS-OLIVER SYNDROME 3","ADENINE PHOSPHORIBOSYLTRANSFERASE DEFICIENCY","LUNG CANCER","LUNG CANCER","LUNG CANCER","LUNG CANCER","LUNG CANCER","LUNG CANCER"],["ACADS","ARHGAP31","DOCK6","RBPJ","APRT","CYP2A6","EGFR","TNFSF6","IRF1","BRAF","ERBB2"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Disease<\/th>\n <th>Gene<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"search":false,"info":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script> | |||||
--- | |||||
# Chargement du graphe | |||||
```r | |||||
graph.data.frame(OMIM, directed = F) -> graphe | |||||
``` | |||||
``` | |||||
## IGRAPH 01bad3b UN-- 6288 4234 -- | |||||
## + attr: name (v/c) | |||||
## + edges from 01bad3b (vertex names): | |||||
## [1] ADRENAL HYPERPLASIA, CONGENITAL, DUE TO 17-ALPHA-HYDROXYLASE DEFICIENCY--CYP17A1 | |||||
## [2] 17-BETA-HYDROXYSTEROID DEHYDROGENASE X DEFICIENCY --HSD17B10 | |||||
## [3] 2-METHYLBUTYRYL-CoA DEHYDROGENASE DEFICIENCY --ACADSB | |||||
## [4] THREE M SYNDROME 1 --CUL7 | |||||
## [5] THREE M SYNDROME 2 --OBSL1 | |||||
## [6] 3-METHYLCROTONYL-CoA CARBOXYLASE 1 DEFICIENCY --MCCC1 | |||||
## [7] 3-METHYLCROTONYL-CoA CARBOXYLASE 2 DEFICIENCY --MCCC2 | |||||
## + ... omitted several edges | |||||
``` | |||||
--- | |||||
# Informations sur le graphe | |||||
### Sommets | |||||
```r | |||||
vcount(graphe) | |||||
``` | |||||
``` | |||||
## [1] 6288 | |||||
``` | |||||
### Arêtes | |||||
```r | |||||
ecount(graphe) | |||||
``` | |||||
``` | |||||
## [1] 4234 | |||||
``` | |||||
--- | |||||
# Informations sur le graphe | |||||
### Dirigé ? | |||||
```r | |||||
is.directed(graphe) | |||||
``` | |||||
``` | |||||
## [1] FALSE | |||||
``` | |||||
### Voisins d'un sommet | |||||
```r | |||||
neighbors(graphe, V(graphe)[2019]) | |||||
``` | |||||
``` | |||||
## + 1/6288 vertex, named, from 01bad3b: | |||||
## [1] SLC25A3 | |||||
``` | |||||
--- | |||||
# Projection | |||||
```r | |||||
# É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 | |||||
``` | |||||
``` | |||||
## IGRAPH 8db9c9b UNW- 3512 2839 -- | |||||
## + attr: name (v/c), weight (e/n) | |||||
## + edges from 8db9c9b (vertex names): | |||||
## [1] 17-BETA-HYDROXYSTEROID DEHYDROGENASE X DEFICIENCY--MENTAL RETARDATION, X-LINKED 17 | |||||
## [2] 17-BETA-HYDROXYSTEROID DEHYDROGENASE X DEFICIENCY--MENTAL RETARDATION, X-LINKED, SYNDROMIC 10 | |||||
## [3] 3-HYDROXYACYL-CoA DEHYDROGENASE DEFICIENCY --HYPERINSULINEMIC HYPOGLYCEMIA, FAMILIAL, 4 | |||||
## [4] 3-METHYLGLUTACONIC ACIDURIA, TYPE III --OPTIC ATROPHY 3, AUTOSOMAL DOMINANT | |||||
## [5] 46,XX SEX REVERSAL 1 --46,XY SEX REVERSAL 1 | |||||
## + ... omitted several edges | |||||
``` | |||||
--- | |||||
# HGN | |||||
```r | |||||
HGN | |||||
``` | |||||
``` | |||||
## IGRAPH 65dfdde UNW- 2776 2810 -- | |||||
## + attr: name (v/c), weight (e/n) | |||||
## + edges from 65dfdde (vertex names): | |||||
## [1] AKR1C2--AKR1C4 LMNA --MYBPC3 LMNA --ZMPSTE24 GNAS --SSTR5 | |||||
## [5] GNAS --AIP GNAS --STX16 GNAS --GNASAS1 COL2A1--COL11A2 | |||||
## [9] FGFR3 --KRAS FGFR3 --HRAS FGFR3 --RB1 FGFR3 --PIK3CA | |||||
## [13] FGFR3 --AKT1 FGFR3 --APC FGFR3 --TP53 FGFR3 --NRAS | |||||
## [17] FGFR3 --FLCN FGFR3 --MLH3 FGFR3 --ODC1 FGFR3 --CCND1 | |||||
## [21] FGFR3 --PLA2G2A FGFR3 --PTPRJ FGFR3 --EP300 FGFR3 --BUB1B | |||||
## [25] FGFR3 --TLR2 FGFR3 --TLR4 FGFR3 --AURKA FGFR3 --BCL10 | |||||
## [29] FGFR3 --AXIN2 FGFR3 --PDGFRL FGFR3 --KIT FGFR3 --STK11 | |||||
## + ... omitted several edges | |||||
``` | |||||
--- | |||||
# Décomposition en sous-graphes | |||||
```r | |||||
HDN %>% | |||||
decompose -> diseases | |||||
``` | |||||
--- | |||||
# ggraph | |||||
```r | |||||
graph_one <- function(graph) | |||||
{ | |||||
ggraph(graph) + | |||||
geom_edge_diagonal() + | |||||
geom_node_label(aes(label = name)) | |||||
} | |||||
``` | |||||
--- | |||||
# Filtrer sous-graphes < 10 sommets | |||||
```r | |||||
diseases %>% | |||||
keep(map_dbl(diseases, vcount) >= 10) %>% | |||||
map(graph_one) -> plots | |||||
``` | |||||
--- | |||||
# Malformations cardiaques | |||||
```r | |||||
plots[[5]] | |||||
``` | |||||
![](lab06_graphes_files/figure-html/cardiaques-1.png)<!-- --> | |||||
--- | |||||
# Surdités | |||||
```r | |||||
plots[[9]] | |||||
``` | |||||
![](lab06_graphes_files/figure-html/surdités-1.png)<!-- --> | |||||
--- | |||||
# Ostéogénèses imparfaites | |||||
```r | |||||
plots[[12]] | |||||
``` | |||||
![](lab06_graphes_files/figure-html/Ostéogénèses-1.png)<!-- --> | |||||
--- | |||||
# Export | |||||
```r | |||||
write.graph(HDN, file = "diseases.graphml", format = "graphml") | |||||
write.graph(HGN, file = "genes.graphml", format = "graphml") | |||||
``` | |||||
</textarea> | |||||
<style data-target="print-only">@media screen {.remark-slide-container{display:block;}.remark-slide-scaler{box-shadow:none;}}</style> | |||||
<script src="https://remarkjs.com/downloads/remark-latest.min.js"></script> | |||||
<script src="addons/macros.js"></script> | |||||
<script>var slideshow = remark.create({ | |||||
"ratio": "4:3", | |||||
"countIncrementalSlides": false, | |||||
"self-contained": true, | |||||
"highlightLines": true | |||||
}); | |||||
if (window.HTMLWidgets) slideshow.on('afterShowSlide', function (slide) { | |||||
window.dispatchEvent(new Event('resize')); | |||||
}); | |||||
(function(d) { | |||||
var s = d.createElement("style"), r = d.querySelector(".remark-slide-scaler"); | |||||
if (!r) return; | |||||
s.type = "text/css"; s.innerHTML = "@page {size: " + r.style.width + " " + r.style.height +"; }"; | |||||
d.head.appendChild(s); | |||||
})(document); | |||||
(function(d) { | |||||
var el = d.getElementsByClassName("remark-slides-area"); | |||||
if (!el) return; | |||||
var slide, slides = slideshow.getSlides(), els = el[0].children; | |||||
for (var i = 1; i < slides.length; i++) { | |||||
slide = slides[i]; | |||||
if (slide.properties.continued === "true" || slide.properties.count === "false") { | |||||
els[i - 1].className += ' has-continuation'; | |||||
} | |||||
} | |||||
var s = d.createElement("style"); | |||||
s.type = "text/css"; s.innerHTML = "@media print { .has-continuation { display: none; } }"; | |||||
d.head.appendChild(s); | |||||
})(document); | |||||
// delete the temporary CSS (for displaying all slides initially) when the user | |||||
// starts to view slides | |||||
(function() { | |||||
var deleted = false; | |||||
slideshow.on('beforeShowSlide', function(slide) { | |||||
if (deleted) return; | |||||
var sheets = document.styleSheets, node; | |||||
for (var i = 0; i < sheets.length; i++) { | |||||
node = sheets[i].ownerNode; | |||||
if (node.dataset["target"] !== "print-only") continue; | |||||
node.parentNode.removeChild(node); | |||||
} | |||||
deleted = true; | |||||
}); | |||||
})(); | |||||
// adds .remark-code-has-line-highlighted class to <pre> parent elements | |||||
// of code chunks containing highlighted lines with class .remark-code-line-highlighted | |||||
(function(d) { | |||||
const hlines = d.querySelectorAll('.remark-code-line-highlighted'); | |||||
const preParents = []; | |||||
const findPreParent = function(line, p = 0) { | |||||
if (p > 1) return null; // traverse up no further than grandparent | |||||
const el = line.parentElement; | |||||
return el.tagName === "PRE" ? el : findPreParent(el, ++p); | |||||
}; | |||||
for (let line of hlines) { | |||||
let pre = findPreParent(line); | |||||
if (pre && !preParents.includes(pre)) preParents.push(pre); | |||||
} | |||||
preParents.forEach(p => p.classList.add("remark-code-has-line-highlighted")); | |||||
})(document);</script> | |||||
<script> | |||||
(function() { | |||||
var links = document.getElementsByTagName('a'); | |||||
for (var i = 0; i < links.length; i++) { | |||||
if (/^(https?:)?\/\//.test(links[i].getAttribute('href'))) { | |||||
links[i].target = '_blank'; | |||||
} | |||||
} | |||||
})(); | |||||
</script> | |||||
<script> | |||||
slideshow._releaseMath = function(el) { | |||||
var i, text, code, codes = el.getElementsByTagName('code'); | |||||
for (i = 0; i < codes.length;) { | |||||
code = codes[i]; | |||||
if (code.parentNode.tagName !== 'PRE' && code.childElementCount === 0) { | |||||
text = code.textContent; | |||||
if (/^\\\((.|\s)+\\\)$/.test(text) || /^\\\[(.|\s)+\\\]$/.test(text) || | |||||
/^\$\$(.|\s)+\$\$$/.test(text) || | |||||
/^\\begin\{([^}]+)\}(.|\s)+\\end\{[^}]+\}$/.test(text)) { | |||||
code.outerHTML = code.innerHTML; // remove <code></code> | |||||
continue; | |||||
} | |||||
} | |||||
i++; | |||||
} | |||||
}; | |||||
slideshow._releaseMath(document); | |||||
</script> | |||||
<!-- dynamically load mathjax for compatibility with self-contained --> | |||||
<script> | |||||
(function () { | |||||
var script = document.createElement('script'); | |||||
script.type = 'text/javascript'; | |||||
script.src = 'https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML'; | |||||
if (location.protocol !== 'file:' && /^https?:/.test(script.src)) | |||||
script.src = script.src.replace(/^https?:/, ''); | |||||
document.getElementsByTagName('head')[0].appendChild(script); | |||||
})(); | |||||
</script> | |||||
</body> | |||||
</html> |
@@ -0,0 +1,4 @@ | |||||
/*! noUiSlider - 7.0.10 - 2015-03-17 17:30:22 */ | |||||
.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;-ms-user-select:none;-moz-user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative;direction:ltr}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-handle{position:relative;z-index:1}.noUi-stacking .noUi-handle{z-index:10}.noUi-state-tap .noUi-origin{-webkit-transition:left .3s,top .3s;transition:left .3s,top .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-base{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.noUi-horizontal{height:10px}.noUi-horizontal .noUi-handle{width:24px;height:18px;left:-12px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-background{background:#FAFAFA;box-shadow:inset 0 1px 1px #f0f0f0}.noUi-connect{background:#3FB8AF;box-shadow:inset 0 0 3px rgba(51,51,51,.45);-webkit-transition:background 450ms;transition:background 450ms}.noUi-origin{border-radius:2px}.noUi-target{border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-target.noUi-connect{box-shadow:inset 0 0 3px rgba(51,51,51,.45),0 3px 6px -5px #BBB}.noUi-dragable{cursor:w-resize}.noUi-vertical .noUi-dragable{cursor:n-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:9px;width:1px;background:#E8E7E6;left:9px;top:3.5px}.noUi-handle:after{left:12px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect,[disabled].noUi-connect{background:#B8B8B8}[disabled] .noUi-handle{cursor:not-allowed} |
@@ -0,0 +1,401 @@ | |||||
/** | |||||
* selectize.bootstrap3.css (v0.12.0) - Bootstrap 3 Theme | |||||
* Copyright (c) 2013–2015 Brian Reavis & contributors | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this | |||||
* file except in compliance with the License. You may obtain a copy of the License at: | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software distributed under | |||||
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF | |||||
* ANY KIND, either express or implied. See the License for the specific language | |||||
* governing permissions and limitations under the License. | |||||
* | |||||
* @author Brian Reavis <brian@thirdroute.com> | |||||
*/ | |||||
.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { | |||||
visibility: visible !important; | |||||
background: #f2f2f2 !important; | |||||
background: rgba(0, 0, 0, 0.06) !important; | |||||
border: 0 none !important; | |||||
-webkit-box-shadow: inset 0 0 12px 4px #ffffff; | |||||
box-shadow: inset 0 0 12px 4px #ffffff; | |||||
} | |||||
.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { | |||||
content: '!'; | |||||
visibility: hidden; | |||||
} | |||||
.selectize-control.plugin-drag_drop .ui-sortable-helper { | |||||
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); | |||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); | |||||
} | |||||
.selectize-dropdown-header { | |||||
position: relative; | |||||
padding: 3px 12px; | |||||
border-bottom: 1px solid #d0d0d0; | |||||
background: #f8f8f8; | |||||
-webkit-border-radius: 4px 4px 0 0; | |||||
-moz-border-radius: 4px 4px 0 0; | |||||
border-radius: 4px 4px 0 0; | |||||
} | |||||
.selectize-dropdown-header-close { | |||||
position: absolute; | |||||
right: 12px; | |||||
top: 50%; | |||||
color: #333333; | |||||
opacity: 0.4; | |||||
margin-top: -12px; | |||||
line-height: 20px; | |||||
font-size: 20px !important; | |||||
} | |||||
.selectize-dropdown-header-close:hover { | |||||
color: #000000; | |||||
} | |||||
.selectize-dropdown.plugin-optgroup_columns .optgroup { | |||||
border-right: 1px solid #f2f2f2; | |||||
border-top: 0 none; | |||||
float: left; | |||||
-webkit-box-sizing: border-box; | |||||
-moz-box-sizing: border-box; | |||||
box-sizing: border-box; | |||||
} | |||||
.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { | |||||
border-right: 0 none; | |||||
} | |||||
.selectize-dropdown.plugin-optgroup_columns .optgroup:before { | |||||
display: none; | |||||
} | |||||
.selectize-dropdown.plugin-optgroup_columns .optgroup-header { | |||||
border-top: 0 none; | |||||
} | |||||
.selectize-control.plugin-remove_button [data-value] { | |||||
position: relative; | |||||
padding-right: 24px !important; | |||||
} | |||||
.selectize-control.plugin-remove_button [data-value] .remove { | |||||
z-index: 1; | |||||
/* fixes ie bug (see #392) */ | |||||
position: absolute; | |||||
top: 0; | |||||
right: 0; | |||||
bottom: 0; | |||||
width: 17px; | |||||
text-align: center; | |||||
font-weight: bold; | |||||
font-size: 12px; | |||||
color: inherit; | |||||
text-decoration: none; | |||||
vertical-align: middle; | |||||
display: inline-block; | |||||
padding: 1px 0 0 0; | |||||
border-left: 1px solid rgba(0, 0, 0, 0); | |||||
-webkit-border-radius: 0 2px 2px 0; | |||||
-moz-border-radius: 0 2px 2px 0; | |||||
border-radius: 0 2px 2px 0; | |||||
-webkit-box-sizing: border-box; | |||||
-moz-box-sizing: border-box; | |||||
box-sizing: border-box; | |||||
} | |||||
.selectize-control.plugin-remove_button [data-value] .remove:hover { | |||||
background: rgba(0, 0, 0, 0.05); | |||||
} | |||||
.selectize-control.plugin-remove_button [data-value].active .remove { | |||||
border-left-color: rgba(0, 0, 0, 0); | |||||
} | |||||
.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover { | |||||
background: none; | |||||
} | |||||
.selectize-control.plugin-remove_button .disabled [data-value] .remove { | |||||
border-left-color: rgba(77, 77, 77, 0); | |||||
} | |||||
.selectize-control { | |||||
position: relative; | |||||
} | |||||
.selectize-dropdown, | |||||
.selectize-input, | |||||
.selectize-input input { | |||||
color: #333333; | |||||
font-family: inherit; | |||||
font-size: inherit; | |||||
line-height: 20px; | |||||
-webkit-font-smoothing: inherit; | |||||
} | |||||
.selectize-input, | |||||
.selectize-control.single .selectize-input.input-active { | |||||
background: #ffffff; | |||||
cursor: text; | |||||
display: inline-block; | |||||
} | |||||
.selectize-input { | |||||
border: 1px solid #cccccc; | |||||
padding: 6px 12px; | |||||
display: inline-block; | |||||
width: 100%; | |||||
overflow: hidden; | |||||
position: relative; | |||||
z-index: 1; | |||||
-webkit-box-sizing: border-box; | |||||
-moz-box-sizing: border-box; | |||||
box-sizing: border-box; | |||||
-webkit-box-shadow: none; | |||||
box-shadow: none; | |||||
-webkit-border-radius: 4px; | |||||
-moz-border-radius: 4px; | |||||
border-radius: 4px; | |||||
} | |||||
.selectize-control.multi .selectize-input.has-items { | |||||
padding: 5px 12px 2px; | |||||
} | |||||
.selectize-input.full { | |||||
background-color: #ffffff; | |||||
} | |||||
.selectize-input.disabled, | |||||
.selectize-input.disabled * { | |||||
cursor: default !important; | |||||
} | |||||
.selectize-input.focus { | |||||
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); | |||||
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); | |||||
} | |||||
.selectize-input.dropdown-active { | |||||
-webkit-border-radius: 4px 4px 0 0; | |||||
-moz-border-radius: 4px 4px 0 0; | |||||
border-radius: 4px 4px 0 0; | |||||
} | |||||
.selectize-input > * { | |||||
vertical-align: baseline; | |||||
display: -moz-inline-stack; | |||||
display: inline-block; | |||||
zoom: 1; | |||||
*display: inline; | |||||
} | |||||
.selectize-control.multi .selectize-input > div { | |||||
cursor: pointer; | |||||
margin: 0 3px 3px 0; | |||||
padding: 1px 3px; | |||||
background: #efefef; | |||||
color: #333333; | |||||
border: 0 solid rgba(0, 0, 0, 0); | |||||
} | |||||
.selectize-control.multi .selectize-input > div.active { | |||||
background: #428bca; | |||||
color: #ffffff; | |||||
border: 0 solid rgba(0, 0, 0, 0); | |||||
} | |||||
.selectize-control.multi .selectize-input.disabled > div, | |||||
.selectize-control.multi .selectize-input.disabled > div.active { | |||||
color: #808080; | |||||
background: #ffffff; | |||||
border: 0 solid rgba(77, 77, 77, 0); | |||||
} | |||||
.selectize-input > input { | |||||
display: inline-block !important; | |||||
padding: 0 !important; | |||||
min-height: 0 !important; | |||||
max-height: none !important; | |||||
max-width: 100% !important; | |||||
margin: 0 !important; | |||||
text-indent: 0 !important; | |||||
border: 0 none !important; | |||||
background: none !important; | |||||
line-height: inherit !important; | |||||
-webkit-user-select: auto !important; | |||||
-webkit-box-shadow: none !important; | |||||
box-shadow: none !important; | |||||
} | |||||
.selectize-input > input::-ms-clear { | |||||
display: none; | |||||
} | |||||
.selectize-input > input:focus { | |||||
outline: none !important; | |||||
} | |||||
.selectize-input::after { | |||||
content: ' '; | |||||
display: block; | |||||
clear: left; | |||||
} | |||||
.selectize-input.dropdown-active::before { | |||||
content: ' '; | |||||
display: block; | |||||
position: absolute; | |||||
background: #ffffff; | |||||
height: 1px; | |||||
bottom: 0; | |||||
left: 0; | |||||
right: 0; | |||||
} | |||||
.selectize-dropdown { | |||||
position: absolute; | |||||
z-index: 10; | |||||
border: 1px solid #d0d0d0; | |||||
background: #ffffff; | |||||
margin: -1px 0 0 0; | |||||
border-top: 0 none; | |||||
-webkit-box-sizing: border-box; | |||||
-moz-box-sizing: border-box; | |||||
box-sizing: border-box; | |||||
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); | |||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); | |||||
-webkit-border-radius: 0 0 4px 4px; | |||||
-moz-border-radius: 0 0 4px 4px; | |||||
border-radius: 0 0 4px 4px; | |||||
} | |||||
.selectize-dropdown [data-selectable] { | |||||
cursor: pointer; | |||||
overflow: hidden; | |||||
} | |||||
.selectize-dropdown [data-selectable] .highlight { | |||||
background: rgba(255, 237, 40, 0.4); | |||||
-webkit-border-radius: 1px; | |||||
-moz-border-radius: 1px; | |||||
border-radius: 1px; | |||||
} | |||||
.selectize-dropdown [data-selectable], | |||||
.selectize-dropdown .optgroup-header { | |||||
padding: 3px 12px; | |||||
} | |||||
.selectize-dropdown .optgroup:first-child .optgroup-header { | |||||
border-top: 0 none; | |||||
} | |||||
.selectize-dropdown .optgroup-header { | |||||
color: #777777; | |||||
background: #ffffff; | |||||
cursor: default; | |||||
} | |||||
.selectize-dropdown .active { | |||||
background-color: #f5f5f5; | |||||
color: #262626; | |||||
} | |||||
.selectize-dropdown .active.create { | |||||
color: #262626; | |||||
} | |||||
.selectize-dropdown .create { | |||||
color: rgba(51, 51, 51, 0.5); | |||||
} | |||||
.selectize-dropdown-content { | |||||
overflow-y: auto; | |||||
overflow-x: hidden; | |||||
max-height: 200px; | |||||
} | |||||
.selectize-control.single .selectize-input, | |||||
.selectize-control.single .selectize-input input { | |||||
cursor: pointer; | |||||
} | |||||
.selectize-control.single .selectize-input.input-active, | |||||
.selectize-control.single .selectize-input.input-active input { | |||||
cursor: text; | |||||
} | |||||
.selectize-control.single .selectize-input:after { | |||||
content: ' '; | |||||
display: block; | |||||
position: absolute; | |||||
top: 50%; | |||||
right: 17px; | |||||
margin-top: -3px; | |||||
width: 0; | |||||
height: 0; | |||||
border-style: solid; | |||||
border-width: 5px 5px 0 5px; | |||||
border-color: #333333 transparent transparent transparent; | |||||
} | |||||
.selectize-control.single .selectize-input.dropdown-active:after { | |||||
margin-top: -4px; | |||||
border-width: 0 5px 5px 5px; | |||||
border-color: transparent transparent #333333 transparent; | |||||
} | |||||
.selectize-control.rtl.single .selectize-input:after { | |||||
left: 17px; | |||||
right: auto; | |||||
} | |||||
.selectize-control.rtl .selectize-input > input { | |||||
margin: 0 4px 0 -2px !important; | |||||
} | |||||
.selectize-control .selectize-input.disabled { | |||||
opacity: 0.5; | |||||
background-color: #ffffff; | |||||
} | |||||
.selectize-dropdown, | |||||
.selectize-dropdown.form-control { | |||||
height: auto; | |||||
padding: 0; | |||||
margin: 2px 0 0 0; | |||||
z-index: 1000; | |||||
background: #ffffff; | |||||
border: 1px solid #cccccc; | |||||
border: 1px solid rgba(0, 0, 0, 0.15); | |||||
-webkit-border-radius: 4px; | |||||
-moz-border-radius: 4px; | |||||
border-radius: 4px; | |||||
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); | |||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); | |||||
} | |||||
.selectize-dropdown .optgroup-header { | |||||
font-size: 12px; | |||||
line-height: 1.42857143; | |||||
} | |||||
.selectize-dropdown .optgroup:first-child:before { | |||||
display: none; | |||||
} | |||||
.selectize-dropdown .optgroup:before { | |||||
content: ' '; | |||||
display: block; | |||||
height: 1px; | |||||
margin: 9px 0; | |||||
overflow: hidden; | |||||
background-color: #e5e5e5; | |||||
margin-left: -12px; | |||||
margin-right: -12px; | |||||
} | |||||
.selectize-dropdown-content { | |||||
padding: 5px 0; | |||||
} | |||||
.selectize-dropdown-header { | |||||
padding: 6px 12px; | |||||
} | |||||
.selectize-input { | |||||
min-height: 34px; | |||||
} | |||||
.selectize-input.dropdown-active { | |||||
-webkit-border-radius: 4px; | |||||
-moz-border-radius: 4px; | |||||
border-radius: 4px; | |||||
} | |||||
.selectize-input.dropdown-active::before { | |||||
display: none; | |||||
} | |||||
.selectize-input.focus { | |||||
border-color: #66afe9; | |||||
outline: 0; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); | |||||
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); | |||||
} | |||||
.has-error .selectize-input { | |||||
border-color: #a94442; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | |||||
} | |||||
.has-error .selectize-input:focus { | |||||
border-color: #843534; | |||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; | |||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; | |||||
} | |||||
.selectize-control.multi .selectize-input.has-items { | |||||
padding-left: 9px; | |||||
padding-right: 9px; | |||||
} | |||||
.selectize-control.multi .selectize-input > div { | |||||
-webkit-border-radius: 3px; | |||||
-moz-border-radius: 3px; | |||||
border-radius: 3px; | |||||
} | |||||
.form-control.selectize-control { | |||||
padding: 0; | |||||
height: auto; | |||||
border: none; | |||||
background: none; | |||||
-webkit-box-shadow: none; | |||||
box-shadow: none; | |||||
-webkit-border-radius: 0; | |||||
-moz-border-radius: 0; | |||||
border-radius: 0; | |||||
} |