Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

438 rindas
14KB

  1. <!DOCTYPE html>
  2. <html lang="" xml:lang="">
  3. <head>
  4. <title>Principes de design, Visualisation de données tabulaires</title>
  5. <meta charset="utf-8" />
  6. <meta name="author" content="Maxime Wack" />
  7. <script src="libs/header-attrs-2.1/header-attrs.js"></script>
  8. <link href="libs/remark-css-0.0.1/default.css" rel="stylesheet" />
  9. <script src="libs/htmlwidgets-1.5.1/htmlwidgets.js"></script>
  10. <script src="libs/jquery-1.12.4/jquery.min.js"></script>
  11. <link href="libs/datatables-css-0.0.0/datatables-crosstalk.css" rel="stylesheet" />
  12. <script src="libs/datatables-binding-0.13/datatables.js"></script>
  13. <link href="libs/dt-core-1.10.20/css/jquery.dataTables.min.css" rel="stylesheet" />
  14. <link href="libs/dt-core-1.10.20/css/jquery.dataTables.extra.css" rel="stylesheet" />
  15. <script src="libs/dt-core-1.10.20/js/jquery.dataTables.min.js"></script>
  16. <link href="libs/crosstalk-1.1.0.1/css/crosstalk.css" rel="stylesheet" />
  17. <script src="libs/crosstalk-1.1.0.1/js/crosstalk.min.js"></script>
  18. <link rel="stylesheet" href="css/my_style.css" type="text/css" />
  19. </head>
  20. <body>
  21. <textarea id="source">
  22. class: center, middle, title
  23. # UE Visualisation
  24. ### 2020-2021
  25. ## Dr. Maxime Wack
  26. ### AHU Informatique médicale
  27. #### Hôpital Européen Georges Pompidou, &lt;/br&gt; Université de Paris
  28. ---
  29. class: center, middle
  30. # Objectifs
  31. ## Principes de design
  32. ## Visualisation de données tabulaires
  33. ---
  34. class: center, middle
  35. # Principes de design
  36. ---
  37. class: center
  38. # *Éléments* de design
  39. ### Espace
  40. ### Point
  41. ### Ligne
  42. ### Surface
  43. ### Taille
  44. ### Couleur
  45. ### Forme
  46. ### ...
  47. ---
  48. class: center
  49. # *Principes* de design
  50. Autant de principes que de designers
  51. ![:scale 50%](03-img/designprinciples.png)
  52. [https://principles.design](https://principles.design)
  53. ---
  54. class: center
  55. # Principes de design
  56. ### Unité/Harmonie
  57. ### Motifs
  58. ### Équilibre
  59. ### Hiérarchisation
  60. ### Mouvement
  61. ### Contraste
  62. ---
  63. class: middle
  64. # Unité / Harmonie
  65. .pull-left[
  66. ### Principe **fondamental** de la visualisation
  67. ### L'ensemble doit être **visuellement cohérent**
  68. ### Notion de **composition** des éléments en un tout
  69. ]
  70. .pull-right[![:scale 100%](03-img/princ_unite.png)]
  71. ---
  72. class: middle
  73. # Motifs
  74. .pull-left[
  75. ### Répétition **régulière** d'un ou plusieurs *éléments*
  76. ### Principal outil de la visualisation de **collections de données**
  77. ]
  78. .pull-right[![:scale 100%](03-img/princ_motif.png)]
  79. ---
  80. class: middle
  81. # Équilibre
  82. .pull-left[
  83. ### Distribution **équilibrée** des éléments visuels
  84. ### Utiliser la **symmétrie** pour comparer
  85. ### Utiliser l'**assymétrie** pour appuyer sur les différences
  86. ### La symmétrie **radiale** permet d'organiser autour d'un élément central
  87. ]
  88. .pull-right[![:scale 100%](03-img/princ_equilibre.png)]
  89. ---
  90. class: middle
  91. # Hiérarchisation
  92. .pull-left[
  93. ### **Insister** sur le message à communiquer
  94. ### Donner une **importance relative** indicative de la réalité
  95. ### Choix des couleurs (*rareté* des couleurs)
  96. ### Gestion du **contraste**
  97. ### **Échelles** et **proportions**
  98. ]
  99. .pull-right[![:scale 80%](03-img/princ_hierarch.png)]
  100. ---
  101. class: middle
  102. # Mouvement
  103. .pull-left[
  104. ### Même sur une image **fixe**
  105. ### Notion de directionalité
  106. ### **Diriger** le regard du lecteur
  107. ]
  108. .pull-right[![:scale 100%](03-img/princ_mouvement.png)]
  109. ---
  110. class: middle
  111. # Contraste
  112. .pull-left[
  113. ### **Juxtaposition** d'éléments **opposés** (couleur, luminosité, direction)
  114. ### Mise en avant **relative**
  115. ### Contraste ↔ Similarité
  116. ]
  117. .pull-right[![:scale 100%](03-img/princ_contraste.png)]
  118. ---
  119. class:center,middle
  120. # Code
  121. ## **Pas** de code spécifique
  122. ### Application des *principes* en manipulant les *éléments*
  123. ### *Data* → **Motifs, Mouvement**
  124. ### *Aesthetics* → **Hiérarchisation, Contraste**
  125. ### *Theme* → **Unité, Équilibre**
  126. ---
  127. class:center, middle
  128. # Exemples
  129. [Dark Horse Analytics](https://www.darkhorseanalytics.com/blog/data-looks-better-naked)
  130. ---
  131. class:center, middle
  132. ![](03-img/data-ink.gif)
  133. ---
  134. class:center, middle
  135. ![](03-img/ClearOffTheTableMd.gif)
  136. ---
  137. class:center, middle
  138. ![](03-img/map_reduce2.gif)
  139. ---
  140. class:center, middle
  141. ![](03-img/devourThePie3.gif)
  142. ---
  143. class: center, middle
  144. # Visualisation de données tabulaires
  145. ---
  146. class:center
  147. # Excel
  148. ![](03-img/excel_data.png)
  149. ---
  150. class:center, middle
  151. ![](03-img/excel_menu.png)
  152. ---
  153. class:center, middle
  154. ![](03-img/excel_graph.png)
  155. ---
  156. # Edgar F Codd
  157. .pull-left[
  158. ### 1923 - 2003
  159. ### Prix Turing 1981
  160. ### Inventeur des **modèles relationnels** pour la gestion de bases de données
  161. ### Définition des formes normales dans un papier de conférence en **1971**
  162. ]
  163. .pull-right[![](03-img/Edgar_F_Codd.jpg)]
  164. ---
  165. # Formes normales
  166. ## 1NF : une donnée par cellule
  167. *Le domaine de chaque attribut ne contient que des données atomiques*
  168. ## 2NF : 1NF + attributs par clé
  169. *Un attribut non-clé ne dépend pas d'une partie de la clé mais de toute la clé*
  170. ## 3NF : 2NF + attributs de la clé indépendants les uns des autres
  171. *Un attribut non-clé ne dépend pas d'un ou plusieurs attributs ne participant pas à la clé*
  172. ---
  173. class: center
  174. # 1NF
  175. .tiny[
  176. <div id="htmlwidget-ed9a1e3d61409db59c35" style="width:100%;height:auto;" class="datatables html-widget"></div>
  177. <script type="application/json" data-for="htmlwidget-ed9a1e3d61409db59c35">{"x":{"filter":"none","data":[["TV"],["samsung, sony"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Produit<\/th>\n <th>Fournisseur<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
  178. ]
  179. <div id="htmlwidget-ebe80773fb69db27cf4f" style="width:100%;height:auto;" class="datatables html-widget"></div>
  180. <script type="application/json" data-for="htmlwidget-ebe80773fb69db27cf4f">{"x":{"filter":"none","data":[["TV","TV"],["samsung","sony"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Produit<\/th>\n <th>Fournisseur<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
  181. ---
  182. class: center
  183. # 2NF
  184. <div id="htmlwidget-ee242f05e408d1eb9179" style="width:100%;height:auto;" class="datatables html-widget"></div>
  185. <script type="application/json" data-for="htmlwidget-ee242f05e408d1eb9179">{"x":{"filter":"none","data":[["TV","Phone","TV"],["Samsung","Samsung","Sony"],["Seoul","Seoul","Tokyo"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Produit<\/th>\n <th>Fournisseur<\/th>\n <th>Ville<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
  186. <div id="htmlwidget-c801f7d6b53b7811b729" style="width:100%;height:auto;" class="datatables html-widget"></div>
  187. <script type="application/json" data-for="htmlwidget-c801f7d6b53b7811b729">{"x":{"filter":"none","data":[["TV","Phone","TV"],["Samsung","Samsung","Sony"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Produit<\/th>\n <th>Fournisseur<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script><div id="htmlwidget-0148400918fb4a491269" style="width:100%;height:auto;" class="datatables html-widget"></div>
  188. <script type="application/json" data-for="htmlwidget-0148400918fb4a491269">{"x":{"filter":"none","data":[["Samsung","Sony"],["Seoul","Tokyo"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Fournisseur<\/th>\n <th>Ville<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
  189. ---
  190. class: center
  191. # 3NF
  192. <div id="htmlwidget-a89ba4457df337d092d6" style="width:100%;height:auto;" class="datatables html-widget"></div>
  193. <script type="application/json" data-for="htmlwidget-a89ba4457df337d092d6">{"x":{"filter":"none","data":[["Samsung","Sony"],["Seoul","Tokyo"],["Corée du sud","Japon"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Fournisseur<\/th>\n <th>Ville<\/th>\n <th>Pays<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
  194. <div id="htmlwidget-8e92e02ba989d695591a" style="width:100%;height:auto;" class="datatables html-widget"></div>
  195. <script type="application/json" data-for="htmlwidget-8e92e02ba989d695591a">{"x":{"filter":"none","data":[["Samsung","Sony"],["Seoul","Tokyo"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Fournisseur<\/th>\n <th>Ville<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script><div id="htmlwidget-8a3bbe898c949d9851bb" style="width:100%;height:auto;" class="datatables html-widget"></div>
  196. <script type="application/json" data-for="htmlwidget-8a3bbe898c949d9851bb">{"x":{"filter":"none","data":[["Seoul","Tokyo"],["Corée","Japon"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Ville<\/th>\n <th>Pays<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
  197. ---
  198. class: center
  199. # À plat
  200. <div id="htmlwidget-ef3bd6c9602e98da3370" style="width:100%;height:auto;" class="datatables html-widget"></div>
  201. <script type="application/json" data-for="htmlwidget-ef3bd6c9602e98da3370">{"x":{"filter":"none","data":[["TV","Phone","TV"],["Samsung","Samsung","Sony"],["Seoul","Seoul","Tokyo"],["Corée","Corée","Japon"]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th>Produit<\/th>\n <th>Fournisseur<\/th>\n <th>Ville<\/th>\n <th>Pays<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"paging":false,"info":false,"searching":false,"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
  202. ### Opération facile à réaliser
  203. ### Chaque observation contient toute l'information
  204. ---
  205. class: center
  206. # Avec ggplot2
  207. ### Relation **1:1** entre *observation* et unité de *geometry*
  208. ### Valeur d'*aesthetic* directement accessible par *observation*
  209. </textarea>
  210. <style data-target="print-only">@media screen {.remark-slide-container{display:block;}.remark-slide-scaler{box-shadow:none;}}</style>
  211. <script src="https://remarkjs.com/downloads/remark-latest.min.js"></script>
  212. <script src="addons/macros.js"></script>
  213. <script>var slideshow = remark.create({
  214. "ratio": "4:3",
  215. "countIncrementalSlides": false,
  216. "self-contained": true
  217. });
  218. if (window.HTMLWidgets) slideshow.on('afterShowSlide', function (slide) {
  219. window.dispatchEvent(new Event('resize'));
  220. });
  221. (function(d) {
  222. var s = d.createElement("style"), r = d.querySelector(".remark-slide-scaler");
  223. if (!r) return;
  224. s.type = "text/css"; s.innerHTML = "@page {size: " + r.style.width + " " + r.style.height +"; }";
  225. d.head.appendChild(s);
  226. })(document);
  227. (function(d) {
  228. var el = d.getElementsByClassName("remark-slides-area");
  229. if (!el) return;
  230. var slide, slides = slideshow.getSlides(), els = el[0].children;
  231. for (var i = 1; i < slides.length; i++) {
  232. slide = slides[i];
  233. if (slide.properties.continued === "true" || slide.properties.count === "false") {
  234. els[i - 1].className += ' has-continuation';
  235. }
  236. }
  237. var s = d.createElement("style");
  238. s.type = "text/css"; s.innerHTML = "@media print { .has-continuation { display: none; } }";
  239. d.head.appendChild(s);
  240. })(document);
  241. // delete the temporary CSS (for displaying all slides initially) when the user
  242. // starts to view slides
  243. (function() {
  244. var deleted = false;
  245. slideshow.on('beforeShowSlide', function(slide) {
  246. if (deleted) return;
  247. var sheets = document.styleSheets, node;
  248. for (var i = 0; i < sheets.length; i++) {
  249. node = sheets[i].ownerNode;
  250. if (node.dataset["target"] !== "print-only") continue;
  251. node.parentNode.removeChild(node);
  252. }
  253. deleted = true;
  254. });
  255. })();
  256. (function() {
  257. "use strict"
  258. // Replace <script> tags in slides area to make them executable
  259. var scripts = document.querySelectorAll(
  260. '.remark-slides-area .remark-slide-container script'
  261. );
  262. if (!scripts.length) return;
  263. for (var i = 0; i < scripts.length; i++) {
  264. var s = document.createElement('script');
  265. var code = document.createTextNode(scripts[i].textContent);
  266. s.appendChild(code);
  267. var scriptAttrs = scripts[i].attributes;
  268. for (var j = 0; j < scriptAttrs.length; j++) {
  269. s.setAttribute(scriptAttrs[j].name, scriptAttrs[j].value);
  270. }
  271. scripts[i].parentElement.replaceChild(s, scripts[i]);
  272. }
  273. })();
  274. (function() {
  275. var links = document.getElementsByTagName('a');
  276. for (var i = 0; i < links.length; i++) {
  277. if (/^(https?:)?\/\//.test(links[i].getAttribute('href'))) {
  278. links[i].target = '_blank';
  279. }
  280. }
  281. })();</script>
  282. <script>
  283. slideshow._releaseMath = function(el) {
  284. var i, text, code, codes = el.getElementsByTagName('code');
  285. for (i = 0; i < codes.length;) {
  286. code = codes[i];
  287. if (code.parentNode.tagName !== 'PRE' && code.childElementCount === 0) {
  288. text = code.textContent;
  289. if (/^\\\((.|\s)+\\\)$/.test(text) || /^\\\[(.|\s)+\\\]$/.test(text) ||
  290. /^\$\$(.|\s)+\$\$$/.test(text) ||
  291. /^\\begin\{([^}]+)\}(.|\s)+\\end\{[^}]+\}$/.test(text)) {
  292. code.outerHTML = code.innerHTML; // remove <code></code>
  293. continue;
  294. }
  295. }
  296. i++;
  297. }
  298. };
  299. slideshow._releaseMath(document);
  300. </script>
  301. <!-- dynamically load mathjax for compatibility with self-contained -->
  302. <script>
  303. (function () {
  304. var script = document.createElement('script');
  305. script.type = 'text/javascript';
  306. script.src = 'https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML';
  307. if (location.protocol !== 'file:' && /^https?:/.test(script.src))
  308. script.src = script.src.replace(/^https?:/, '');
  309. document.getElementsByTagName('head')[0].appendChild(script);
  310. })();
  311. </script>
  312. </body>
  313. </html>