|
|
@@ -15,8 +15,19 @@ output: |
|
|
|
--- |
|
|
|
|
|
|
|
```{r, include = FALSE} |
|
|
|
library(ggplot2) |
|
|
|
library(dplyr) |
|
|
|
library(tidyverse) |
|
|
|
library(DT) |
|
|
|
library(knitr) |
|
|
|
|
|
|
|
opts_chunk$set(echo = F, |
|
|
|
warning = F, |
|
|
|
error = F, |
|
|
|
message = F) |
|
|
|
options(DT.options = list(paging = F, |
|
|
|
info = F, |
|
|
|
searching = F)) |
|
|
|
|
|
|
|
datatable <- partial(datatable, rownames = F) |
|
|
|
``` |
|
|
|
|
|
|
|
class: center, middle, title |
|
|
@@ -38,6 +49,11 @@ class: center, middle |
|
|
|
|
|
|
|
## Visualisation de données tabulaires |
|
|
|
|
|
|
|
--- |
|
|
|
class: center, middle |
|
|
|
|
|
|
|
# Principes de design |
|
|
|
|
|
|
|
--- |
|
|
|
class: center |
|
|
|
|
|
|
@@ -53,7 +69,7 @@ class: center |
|
|
|
### ... |
|
|
|
|
|
|
|
--- |
|
|
|
class: center,middle |
|
|
|
class: center |
|
|
|
|
|
|
|
# *Principes* de design |
|
|
|
|
|
|
@@ -64,7 +80,7 @@ Autant de principes que de designers |
|
|
|
[https://principles.design](https://principles.design) |
|
|
|
|
|
|
|
--- |
|
|
|
class: center,middle |
|
|
|
class: center |
|
|
|
|
|
|
|
# Principes de design |
|
|
|
|
|
|
@@ -76,8 +92,7 @@ class: center,middle |
|
|
|
### Contraste |
|
|
|
|
|
|
|
--- |
|
|
|
class: center,middle |
|
|
|
|
|
|
|
class: middle |
|
|
|
|
|
|
|
# Unité / Harmonie |
|
|
|
|
|
|
@@ -92,8 +107,7 @@ class: center,middle |
|
|
|
.pull-right[![:scale 100%](03_img/princ_unite.png)] |
|
|
|
|
|
|
|
--- |
|
|
|
class: center,middle |
|
|
|
|
|
|
|
class: middle |
|
|
|
|
|
|
|
# Motifs |
|
|
|
|
|
|
@@ -106,8 +120,7 @@ class: center,middle |
|
|
|
.pull-right[![:scale 100%](03_img/princ_motif.png)] |
|
|
|
|
|
|
|
--- |
|
|
|
class: center,middle |
|
|
|
|
|
|
|
class: middle |
|
|
|
|
|
|
|
# Équilibre |
|
|
|
|
|
|
@@ -124,7 +137,7 @@ class: center,middle |
|
|
|
.pull-right[![:scale 100%](03_img/princ_equilibre.png)] |
|
|
|
|
|
|
|
--- |
|
|
|
class:center,middle |
|
|
|
class: middle |
|
|
|
|
|
|
|
# Hiérarchisation |
|
|
|
|
|
|
@@ -143,7 +156,7 @@ class:center,middle |
|
|
|
.pull-right[![:scale 80%](03_img/princ_hierarch.png)] |
|
|
|
|
|
|
|
--- |
|
|
|
class: center,middle |
|
|
|
class: middle |
|
|
|
|
|
|
|
# Mouvement |
|
|
|
|
|
|
@@ -158,7 +171,7 @@ class: center,middle |
|
|
|
.pull-right[![:scale 100%](03_img/princ_mouvement.png)] |
|
|
|
|
|
|
|
--- |
|
|
|
class:center,middle |
|
|
|
class: middle |
|
|
|
|
|
|
|
# Contraste |
|
|
|
|
|
|
@@ -211,3 +224,145 @@ class:center, middle |
|
|
|
class:center, middle |
|
|
|
|
|
|
|
![](03_img/devourThePie3.gif) |
|
|
|
|
|
|
|
--- |
|
|
|
class: center, middle |
|
|
|
|
|
|
|
# Visualisation de données tabulaires |
|
|
|
|
|
|
|
--- |
|
|
|
class:center |
|
|
|
|
|
|
|
# Excel |
|
|
|
|
|
|
|
![](03_img/excel_data.png) |
|
|
|
|
|
|
|
--- |
|
|
|
class:center, middle |
|
|
|
|
|
|
|
![](03_img/excel_menu.png) |
|
|
|
|
|
|
|
--- |
|
|
|
class:center, middle |
|
|
|
|
|
|
|
![](03_img/excel_graph.png) |
|
|
|
|
|
|
|
--- |
|
|
|
|
|
|
|
# Edgar F Codd |
|
|
|
|
|
|
|
.pull-left[ |
|
|
|
|
|
|
|
### 1923 - 2003 |
|
|
|
|
|
|
|
### Prix Turing 1981 |
|
|
|
|
|
|
|
### Inventeur des **modèles relationnels** pour la gestion de bases de données |
|
|
|
|
|
|
|
### Définition des formes normales dans un papier de conférence en **1971** |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
.pull-right[![](03_img/Edgar_F_Codd.jpg)] |
|
|
|
|
|
|
|
--- |
|
|
|
|
|
|
|
# Formes normales |
|
|
|
|
|
|
|
## 1NF : une donnée par cellule |
|
|
|
*Le domaine de chaque attribut ne contient que des données atomiques* |
|
|
|
|
|
|
|
## 2NF : 1NF + attributs par clé |
|
|
|
*Un attribut non-clé ne dépend pas d'une partie de la clé mais de toute la clé* |
|
|
|
|
|
|
|
## 3NF : 2NF + attributs de la clé indépendants les uns des autres |
|
|
|
*Un attribut non-clé ne déponde pas d'un ou plusieurs attributs ne participant pas à la clé* |
|
|
|
|
|
|
|
--- |
|
|
|
class: center |
|
|
|
|
|
|
|
# 1NF |
|
|
|
|
|
|
|
.tiny[ |
|
|
|
```{r 0nf} |
|
|
|
data.frame(Produit = "TV", |
|
|
|
Fournisseur = "samsung, sony") %>% |
|
|
|
datatable |
|
|
|
``` |
|
|
|
] |
|
|
|
↓ |
|
|
|
```{r 1nf} |
|
|
|
data.frame(Produit = c("TV", "TV"), |
|
|
|
Fournisseur = c("samsung", "sony")) %>% |
|
|
|
datatable |
|
|
|
``` |
|
|
|
|
|
|
|
--- |
|
|
|
class: center |
|
|
|
|
|
|
|
# 2NF |
|
|
|
|
|
|
|
```{r 2nf} |
|
|
|
data.frame(Produit = c("TV", "Phone", "TV"), |
|
|
|
Fournisseur = c("Samsung", "Samsung", "Sony"), |
|
|
|
Ville = c("Seoul", "Seoul", "Tokyo")) %>% |
|
|
|
datatable |
|
|
|
``` |
|
|
|
↓ |
|
|
|
```{r 2nf ok} |
|
|
|
data.frame(Produit = c("TV", "Phone", "TV"), |
|
|
|
Fournisseur = c("Samsung", "Samsung", "Sony")) %>% |
|
|
|
datatable |
|
|
|
|
|
|
|
data.frame(Fournisseur = c("Samsung", "Sony"), |
|
|
|
Ville = c("Seoul", "Tokyo")) %>% |
|
|
|
datatable |
|
|
|
``` |
|
|
|
|
|
|
|
--- |
|
|
|
class: center |
|
|
|
|
|
|
|
# 3NF |
|
|
|
|
|
|
|
```{r 3nf} |
|
|
|
data.frame(Fournisseur = c("Samsung", "Sony"), |
|
|
|
Ville = c("Seoul", "Tokyo"), |
|
|
|
Pays = c("Corée du sud", "Japon")) %>% |
|
|
|
datatable |
|
|
|
``` |
|
|
|
↓ |
|
|
|
```{r 3nf ok} |
|
|
|
data.frame(Fournisseur = c("Samsung", "Sony"), |
|
|
|
Ville = c("Seoul", "Tokyo")) %>% |
|
|
|
datatable |
|
|
|
|
|
|
|
data.frame(Ville = c("Seoul", "Tokyo"), |
|
|
|
Pays = c("Corée", "Japon")) %>% |
|
|
|
datatable |
|
|
|
``` |
|
|
|
|
|
|
|
--- |
|
|
|
class: center |
|
|
|
|
|
|
|
# À plat |
|
|
|
|
|
|
|
```{r flat} |
|
|
|
data.frame(Produit = c("TV", "Phone", "TV"), |
|
|
|
Fournisseur = c("Samsung", "Samsung", "Sony"), |
|
|
|
Ville = c("Seoul", "Seoul", "Tokyo"), |
|
|
|
Pays = c("Corée", "Corée", "Japon")) %>% |
|
|
|
datatable |
|
|
|
``` |
|
|
|
|
|
|
|
### Opération facile à réaliser |
|
|
|
|
|
|
|
### Chaque observation contient toute l'information |
|
|
|
|
|
|
|
--- |
|
|
|
class: center |
|
|
|
|
|
|
|
# Avec ggplot2 |
|
|
|
|
|
|
|
### Relation **1:1** entre *observation* et unité de *geometry* |
|
|
|
|
|
|
|
### Valeur d'*aesthetic* directement accessible par *observation* |