R
- STID 1ère annéeCréer un document html
en R markdown
, contenant les éléments suivants. Vous devez faire un chapitre (avec titre de niveau 2 donc), pour chaque item de la liste suivante. N’hésitez pas à faire des sous-partie pour chaque sous-item. Vous devez utiliser le langage R
, et pas de SQL
.
Importer les données dans R
, à l’aide de read.table()
Categorie = read.table("Categorie.txt",
header = T, sep = ";", quote = '"', encoding = "UTF-8")
Client = read.table("Client.txt",
header = T, sep = ";", quote = '"', encoding = "UTF-8")
Commande = read.table("Commande.txt",
header = T, sep = ";", quote = '"', encoding = "UTF-8")
DetailCommande = read.table("DetailCommande.txt",
header = T, sep = ";", quote = '"', encoding = "UTF-8")
Employe = read.table("Employe.txt",
header = T, sep = ";", quote = '"', encoding = "UTF-8")
Fournisseur = read.table("Fournisseur.txt",
header = T, sep = ";", quote = '"', encoding = "UTF-8")
Messager = read.table("Messager.txt",
header = T, sep = ";", quote = '"', encoding = "UTF-8")
Produit = read.table("Produit.txt",
header = T, sep = ";", quote = '"', encoding = "UTF-8")
"Royaume-Uni"
Ici, nous utilisons la fonction subset()
qui permet de faire :
subset =
)select =
)A = subset(Employe, subset = Pays == "Royaume-Uni", select = c(Nom, prenom))
knitr::kable(A, row.names = FALSE, caption = "Employés du Royaume-Uni")
Nom | prenom |
---|---|
Buchanan | Steven |
Suyama | Michael |
Emery | Patrick |
Dodsworth | Anne |
Suyama | Jordan |
La première étape ici est de créer une table avec uniquement la colone Fonction
. Ensuite, grâce à la fonction unique()
, nous supprimons les doublons.
B1 = subset(Employe, select = Fonction)
B2 = unique(B1)
knitr::kable(B2, row.names = FALSE, caption = "Fonctions existantes")
Fonction |
---|
Représentant(e) |
Vice-Président |
Chef des ventes |
Assistante commerciale |
Après avoir dénombrer les employés par pays avec un calcul d’agrégat, réalisé via la fonction aggregate()
, nous renommons les colonnes du résultat pour que le tableau fourni soit correct.
C1 = aggregate(NoEmp ~ Pays, Employe, length)
C2 = setNames(C1, c("Pays", "Effectif"))
knitr::kable(C2, row.names = FALSE, caption = "Répartition des employés par pays")
Pays | Effectif |
---|---|
Etats-Unis | 5 |
Royaume-Uni | 5 |
Dans cette demande, nous devons regrouper des informations de Produit
(dénombrement) avec des informations de Fournisseur
(pays). Nou devons donc faire une jointure (avec merge()
), puis faire le calcul d’agrégat et un renommage.
D1 = merge(Produit, Fournisseur)
D2 = aggregate(Refprod ~ Pays, D1, length)
D3 = setNames(D2, c("Pays", "Effectif"))
knitr::kable(D3, row.names = FALSE, caption = "Répartition des produits par pays")
Pays | Effectif |
---|---|
Allemagne | 9 |
Australie | 8 |
Brésil | 1 |
Canada | 4 |
Danemark | 2 |
Espagne | 2 |
Etats-Unis | 12 |
Finlande | 3 |
France | 10 |
Italie | 6 |
Japon | 6 |
Norvège | 3 |
Pays-Bas | 2 |
Royaume-Uni | 7 |
Singapour | 3 |
Suède | 6 |
On peut aussi vouloir trier le résultat par ordre décroissant de nombre de produits.
D4 = D3[order(D3$Effectif, decreasing = TRUE),]
knitr::kable(D4, row.names = FALSE, caption = "Répartition triée")
Pays | Effectif |
---|---|
Etats-Unis | 12 |
France | 10 |
Allemagne | 9 |
Australie | 8 |
Royaume-Uni | 7 |
Italie | 6 |
Japon | 6 |
Suède | 6 |
Canada | 4 |
Finlande | 3 |
Norvège | 3 |
Singapour | 3 |
Danemark | 2 |
Espagne | 2 |
Pays-Bas | 2 |
Brésil | 1 |
Cette demande est similaire à la précédente. Par contre, vues les questions qui suivent, nous allons réutiliser le résultat de la jointure de Produit
et Categorie
.
E = merge(Produit, Categorie)
E1a = aggregate(Refprod ~ NomCateg, E, length)
E1b = setNames(E1a, c("Catégorie", "Effectif"))
knitr::kable(E1a, row.names = FALSE, caption = "Répartition des produits par catégorie")
NomCateg | Refprod |
---|---|
Boissons | 15 |
Condiments | 12 |
Desserts | 14 |
Pâtes et céréales | 7 |
Poissons et fruits de mer | 13 |
Produits laitiers | 12 |
Produits secs | 5 |
Viandes | 6 |
min
) et le prix maximum (max
)Il faut ici créer les trois autres table, pour chaque agrégat à calculer, puis faire la jointure entre les 4 tables ainsi obtenues (avec la précédente).
E2a = aggregate(PrixUnit ~ NomCateg, E, mean)
E2b = setNames(E2a, c("Catégorie", "Prix moyen"))
E3a = aggregate(PrixUnit ~ NomCateg, E, min)
E3b = setNames(E3a, c("Catégorie", "Prix minimum"))
E4a = aggregate(PrixUnit ~ NomCateg, E, max)
E4b = setNames(E4a, c("Catégorie", "Prix maximum"))
Efinal = merge(merge(merge(E1b, E2b), E3b), E4b)
knitr::kable(Efinal, row.names = FALSE, caption = "Résumé des produits par catégorie", digits = 2)
Catégorie | Effectif | Prix moyen | Prix minimum | Prix maximum |
---|---|---|---|---|
Boissons | 15 | 191.58 | 22.50 | 1317.50 |
Condiments | 12 | 115.31 | 50.00 | 219.50 |
Desserts | 14 | 140.06 | 46.00 | 405.00 |
Pâtes et céréales | 7 | 101.25 | 35.00 | 190.00 |
Poissons et fruits de mer | 13 | 98.53 | 30.00 | 312.50 |
Produits laitiers | 12 | 148.04 | 12.50 | 275.00 |
Produits secs | 5 | 161.85 | 50.00 | 265.00 |
Viandes | 6 | 270.03 | 37.25 | 618.95 |
MontantCommande
qui contient, pour chaque commande, les informations suivantesPour cette demande, il faut en premier lieu calculer le faire coût de chaque produit, stocké dans une nouvelle variable. Puis, on réalise les calculs d’agrégats (nombre et somme) à partir de la table DetailCommade
. Ensuite, on joint Commande
et les deux tables créées (avec un renommage des variables de celles-ci précédemment). Enfin, on ne garde que quelques informations et on calcule le montant final.
F1 = transform(DetailCommande, coutProduit = PrixUnit * Qte * (1 - Remise.))
F2a = aggregate(Refprod ~ Nocom, F1, length)
F2b = setNames(F2a, c("NoCom", "NbProduits"))
F3a = aggregate(coutProduit ~ Nocom, F1, sum)
F3b = setNames(F3a, c("NoCom", "MtProduits"))
F4 = merge(merge(Commande, F2b), F3b)
F5 = subset(F4, select = c(NoCom, Port, MtProduits, NbProduits))
MontantCommande = transform(F5, MtCommande = Port + MtProduits)
knitr::kable(head(MontantCommande), row.names = FALSE, caption = "Premières lignes de la table `MontantCommande`", digits = 2)
NoCom | Port | MtProduits | NbProduits | MtCommande |
---|---|---|---|---|
10248 | 162 | 2200.0 | 3 | 2362.0 |
10249 | 58 | 9317.0 | 2 | 9375.0 |
10250 | 329 | 7758.0 | 3 | 8087.0 |
10251 | 207 | 3270.3 | 3 | 3477.3 |
10252 | 256 | 17989.5 | 3 | 18245.5 |
10253 | 291 | 7224.0 | 3 | 7515.0 |
Après avoir fait la jointure entre Commande
et la nouvelle table MontantCommande
, on fait la somme des montants des commandes pour chaque client. Ensuite, on regroupe avec Clinet
pour récupérer le nom de la société. Enfin, puisqu’on affiche un chiffre d’affaires par client, on fait un tri décroissant sur le montant total des commandes.
G1 = merge(Commande, MontantCommande)
G2 = aggregate(MtCommande ~ CodeCli, G1, sum)
G3 = setNames(G2, c("CodeCli", "MontantCommandes"))
G4 = merge(Client, G3)
G5 = subset(G4, select = c(Societe, MontantCommandes))
G6 = G5[order(G5$MontantCommandes, decreasing = TRUE),]
knitr::kable(G6, row.names = FALSE, caption = "Chiffre d'affaires de chaque client")
Societe | MontantCommandes |
---|---|
QUICK-Stop | 579397.65 |
Ernst Handel | 555283.90 |
Save-a-lot Markets | 555230.80 |
Rattlesnake Canyon Grocery | 266146.94 |
Hungry Owl All-Night Grocers | 263601.05 |
Hanari Carnes | 167771.10 |
Königlich Essen | 158563.15 |
Folk och fä HB | 156255.10 |
Mère Paillarde | 151313.15 |
White Clover Markets | 143566.35 |
Frankenversand | 140280.65 |
Queen Cozinha | 138451.95 |
Berglunds snabbköp | 132446.85 |
Suprêmes délices | 124537.40 |
Piccolo und mehr | 121536.40 |
HILARIÓN-Abastos | 120125.00 |
Bon app’ | 116624.05 |
Bottom-Dollar Markets | 107924.25 |
Richter Supermarkt | 101718.40 |
Lehmanns Marktstand | 101356.25 |
Great Lakes Food Market | 97980.85 |
Blondel père et fils | 95757.15 |
Simons bistro | 86306.85 |
LINO-Delicateses | 85731.70 |
Seven Seas Imports | 85658.30 |
LILA-Supermercado | 84046.65 |
Vaffeljernet | 83946.00 |
Wartian Herkku | 82342.35 |
Old World Delicatessen | 80779.75 |
Eastern Connection | 77969.00 |
Around the Horn | 73507.50 |
Ottilies Käseladen | 66748.75 |
Ricardo Adocicados | 65381.55 |
Chop-suey Chinese | 63591.80 |
Folies gourmandes | 61484.00 |
Godos Cocina Típica | 60050.75 |
Split Rail Beer & Ale | 60021.40 |
Tortuga Restaurante | 56396.00 |
Maison Dewey | 50988.70 |
Die Wandernde Kuh | 50088.65 |
La maison d’Asie | 49827.50 |
Victuailles en stock | 48343.30 |
Gourmet Lanchonetes | 43686.00 |
Magazzini Alimentari Riuniti | 38213.20 |
Reggiani Caseifici | 36815.00 |
B’s Beverages | 36556.00 |
Antonio Moreno Taquería | 36452.60 |
Tradição Hipermercados | 35595.40 |
Que Delícia | 34957.65 |
Furia Bacalhau e Frutos do Mar | 33524.65 |
Island Trading | 32533.00 |
Wellington Importadora | 31319.20 |
Santé Gourmet | 30037.00 |
Princesa Isabel Vinhos | 27049.20 |
Morgenstern Gesundkost | 26811.00 |
Toms Spezialitäten | 24504.80 |
Pericles Comidas clásicas | 22612.00 |
Bólido Comidas preparadas | 22121.00 |
Familia Arquibaldo | 21679.50 |
Lonesome Pine Restaurant | 21679.00 |
Drachenblut Delikatessen | 20342.00 |
Comércio Mineiro | 19987.00 |
Océano Atlántico Ltda. | 18839.00 |
Wolski Zajazd | 18515.00 |
The Big Cheese | 18127.00 |
Blauer See Delikatessen | 17038.00 |
France restauration | 16708.00 |
Let’s Stop N Shop | 16378.75 |
Hungry Coyote Import Store | 16356.00 |
Wilman Kala | 16234.00 |
Rancho grande | 15328.00 |
Spécialités du monde | 12661.00 |
Alfreds Futterkiste | 11809.00 |
La corne d’abondance | 10400.00 |
The Cracker Box | 10384.00 |
Cactus Comidas para llevar | 9433.00 |
Ana Trujillo Emparedados y helados | 9272.00 |
Consolidated Holdings | 8871.00 |
Du monde entier | 8394.00 |
Trail’s Head Gourmet Provisioners | 8196.00 |
Franchi S.p.A. | 8103.00 |
GROSELLA-Restaurante | 7785.00 |
Vins et alcools Chevalier | 7689.00 |
Romero y tomillo | 7677.00 |
Galería del gastrónomo | 4376.00 |
North/South | 3433.00 |
Laughing Bacchus Wine Cellars | 2650.00 |
Lazy K Kountry Store | 1887.00 |
Centro comercial Moctezuma | 520.00 |
On réutilise ici la table créée précédemment, résultante de la jointure entre Client
et celle où l’on a calculer pour chaque client la somme des montants des commandes. On fait donc ensuite un aggrégat par pays, que l’on trie pour affichage.
H1 = aggregate(MontantCommandes ~ Pays, G4, sum)
H2 = H1[order(H1$MontantCommandes, decreasing = TRUE),]
knitr::kable(H2, row.names = FALSE, caption = "Chiffre d'affaires par pays")
Pays | MontantCommandes |
---|---|
États-Unis | 1296733.84 |
Allemagne | 1196939.90 |
Autriche | 676820.30 |
Brésil | 558829.35 |
France | 427888.00 |
Royaume-Uni | 318527.80 |
Venezuela | 297688.35 |
Suède | 288701.95 |
Irlande | 263601.05 |
Canada | 261887.40 |
Belgique | 175526.10 |
Danemark | 170252.85 |
Suisse | 165310.20 |
Mexique | 125252.60 |
Finlande | 98576.35 |
Espagne | 94224.75 |
Italie | 83131.20 |
Portugal | 60573.85 |
Argentine | 43600.00 |
Norvège | 30037.00 |
Pologne | 18515.00 |