<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="generator" content="pandoc" /> <title>TP5 - Récapitulatif - correction</title> <script src="libs/jquery-1.11.3/jquery.min.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link href="libs/bootstrap-3.3.5/css/journal.min.css" rel="stylesheet" /> <script src="libs/bootstrap-3.3.5/js/bootstrap.min.js"></script> <script src="libs/bootstrap-3.3.5/shim/html5shiv.min.js"></script> <script src="libs/bootstrap-3.3.5/shim/respond.min.js"></script> <script src="libs/navigation-1.1/tabsets.js"></script> <link href="libs/highlightjs-1.1/default.css" rel="stylesheet" /> <script src="libs/highlightjs-1.1/highlight.js"></script> <!-- Font Awesome --> <script src="https://use.fontawesome.com/32d8325004.js"></script> <link rel="stylesheet" href="libs/font-awesome-4.7.0/css/font-awesome.min.css"> <!-- CSS perso --> <style> .contenu { margin-bottom: 50px; } .contact-liens { text-align: center; } .contact-liens:hover { text-decoration: none; } .contact-icones { height: 30px; } /* Espacement pour barre du haut et pied de page */ #header, .section.level1 { margin-top: 60px; margin-bottom: 60px; } /* Espacement pour table des matières */ #TOC { margin-top: 100px; } .footer { position: fixed; width: 100%; text-align: center; bottom: 0; left: 0; background-color: #E6E6E6; } </style> <style type="text/css">code{white-space: pre;}</style> <style type="text/css"> pre:not([class]) { background-color: white; } </style> <script type="text/javascript"> if (window.hljs && document.readyState && document.readyState === "complete") { window.setTimeout(function() { hljs.initHighlighting(); }, 0); } </script> <style type="text/css"> h1 { font-size: 34px; } h1.title { font-size: 38px; } h2 { font-size: 30px; } h3 { font-size: 24px; } h4 { font-size: 18px; } h5 { font-size: 16px; } h6 { font-size: 12px; } .table th:not([align]) { text-align: left; } </style> <link rel="stylesheet" href="libs/bootstrap-journal.min.css" type="text/css" /> </head> <body> <style type = "text/css"> .main-container { max-width: 940px; margin-left: auto; margin-right: auto; } code { color: inherit; background-color: rgba(0, 0, 0, 0.04); } img { max-width:100%; height: auto; } .tabbed-pane { padding-top: 12px; } button.code-folding-btn:focus { outline: none; } </style> <div class="container-fluid main-container"> <!-- tabsets --> <script> $(document).ready(function () { window.buildTabsets("TOC"); }); </script> <!-- code folding --> <div class="navbar navbar-default navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-main"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="index.html">FX Jollois</a> </div> <div id="navbar-main" class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Données <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="accesdonnees.html">A télécharger</a></li> <li><a href="donnees-integrees-r.html">Sous R</a></li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Enseignement <span class="caret"></span></a> <ul class="dropdown-menu"> <li class="dropdown-header">DUT 1ère année</li> <li><a href="exploitation-donnees.html">Exploitation de données</a></li> <li><a href="initiation-a-r.html">Initiation à R</a></li> <li><a href="reporting.html">Reporting</a></li> <li><a href="complements-r.html">Compléments sur R</a></li> <li class="dropdown-header">DUT 2ème année</li> <li><a href="prog-stat-r.html">Programmation statistique avec R</a></li> <li class="dropdown-header">LP MDS Santé</li> <li><a href="info-dec-sante.html">Informatique décisionnelle</a></li> <li class="dropdown-header">DU Analyste Big Data</li> <li><a href="initiation-r-du.html">Initiation à R</a></li> <li><a href="connexion-r-mongodb.html">Connexion entre R et MongoDB</a></li> <li class="dropdown-header">DU Dataviz</li> <li><a href="analyse-donnees.html">Analyse de données</a></li> <li><a href="visualisation-donnees.html">Visualisation de données - R</a></li> <li><a href="visualisation-donnees-tableau.html">Visualisation de données - Tableau</a></li> <li><a href="visualisation-donnees-d3.html">Visualisation de données - D3</a></li> <li role="separator" class="divider"></li> <li class="dropdown-header">Master</li> <li><a href="slides/cnam-classif-modeles.html">Classification et Modèles de mélange</a></li> <li><a href="analyse-donnees-massives.html">Analyse de Données Massives</a></li> <li class="dropdown-header">Iran</li> <li><a href="stat-prog-R.html">Statistical Programming using R</a></li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Recherche <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="recherche.html">Sujets</a></li> <li><a href="publications.html">Publications</a></li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Réalisations <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="realisations.html">Détail</a></li> <li role="separator" class="divider"></li> <li><a href="http://up5.fr/explore-data" target="_blank">explore-data</a></li> <li><a href="http://fxjollois.github.io/cours-sql/" target="_blank">Appli web de cours pour SQL</a></li> </ul> </li> </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="contact.html">Contact</a></li> </ul> </div><!--/.nav-collapse --> </div><!--/.container-fluid --> </div> <div class="contenu"> <div class="fluid-row" id="header"> <h1 class="title toc-ignore">TP5 - Récapitulatif - <em>correction</em></h1> <h3 class="subtitle"><em>Initiation a <code>R</code> - STID 1ère année</em></h3> </div> <p>Créer un document <code>html</code> en <code>R markdown</code>, 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 <code>R</code>, et pas de <code>SQL</code>.</p> <div id="importation" class="section level2"> <h2>Importation</h2> <p>Importer les données dans <code>R</code>, à l’aide de <code>read.table()</code></p> <pre class="r"><code>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")</code></pre> <hr /> </div> <div id="employes" class="section level2"> <h2>Employés</h2> <div id="lister-les-employes-nom-et-prenom-situes-au-royaume-uni" class="section level3"> <h3>Lister les employés (nom et prénom) situés au <code>"Royaume-Uni"</code></h3> <p>Ici, nous utilisons la fonction <code>subset()</code> qui permet de faire :</p> <ul> <li>une restriction aux employés du Royaume-Uni (avec <code>subset =</code>)</li> <li>une projection sur le nom et le prénom (avec <code>select =</code>)</li> </ul> <pre class="r"><code>A = subset(Employe, subset = Pays == "Royaume-Uni", select = c(Nom, prenom)) knitr::kable(A, row.names = FALSE, caption = "Employés du Royaume-Uni")</code></pre> <table> <caption>Employés du Royaume-Uni</caption> <thead> <tr class="header"> <th align="left">Nom</th> <th align="left">prenom</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">Buchanan</td> <td align="left">Steven</td> </tr> <tr class="even"> <td align="left">Suyama</td> <td align="left">Michael</td> </tr> <tr class="odd"> <td align="left">Emery</td> <td align="left">Patrick</td> </tr> <tr class="even"> <td align="left">Dodsworth</td> <td align="left">Anne</td> </tr> <tr class="odd"> <td align="left">Suyama</td> <td align="left">Jordan</td> </tr> </tbody> </table> </div> <div id="lister-les-differentes-fonctions-occupees-par-les-employes" class="section level3"> <h3>Lister les différentes fonctions occupées par les employés</h3> <p>La première étape ici est de créer une table avec uniquement la colone <code>Fonction</code>. Ensuite, grâce à la fonction <code>unique()</code>, nous supprimons les doublons.</p> <pre class="r"><code>B1 = subset(Employe, select = Fonction) B2 = unique(B1) knitr::kable(B2, row.names = FALSE, caption = "Fonctions existantes")</code></pre> <table> <caption>Fonctions existantes</caption> <thead> <tr class="header"> <th align="left">Fonction</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">Représentant(e)</td> </tr> <tr class="even"> <td align="left">Vice-Président</td> </tr> <tr class="odd"> <td align="left">Chef des ventes</td> </tr> <tr class="even"> <td align="left">Assistante commerciale</td> </tr> </tbody> </table> </div> <div id="indiquer-le-nombre-demployes-par-pays" class="section level3"> <h3>Indiquer le nombre d’employés par pays</h3> <p>Après avoir dénombrer les employés par pays avec un calcul d’agrégat, réalisé via la fonction <code>aggregate()</code>, nous renommons les colonnes du résultat pour que le tableau fourni soit correct.</p> <pre class="r"><code>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")</code></pre> <table> <caption>Répartition des employés par pays</caption> <thead> <tr class="header"> <th align="left">Pays</th> <th align="right">Effectif</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">Etats-Unis</td> <td align="right">5</td> </tr> <tr class="even"> <td align="left">Royaume-Uni</td> <td align="right">5</td> </tr> </tbody> </table> <hr /> </div> </div> <div id="produits" class="section level2"> <h2>Produits</h2> <div id="lister-le-nombre-de-produits-par-pays-des-fournisseurs" class="section level3"> <h3>Lister le nombre de produits par pays des fournisseurs</h3> <p>Dans cette demande, nous devons regrouper des informations de <code>Produit</code> (dénombrement) avec des informations de <code>Fournisseur</code> (pays). Nou devons donc faire une jointure (avec <code>merge()</code>), puis faire le calcul d’agrégat et un renommage.</p> <pre class="r"><code>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")</code></pre> <table> <caption>Répartition des produits par pays</caption> <thead> <tr class="header"> <th align="left">Pays</th> <th align="right">Effectif</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">Allemagne</td> <td align="right">9</td> </tr> <tr class="even"> <td align="left">Australie</td> <td align="right">8</td> </tr> <tr class="odd"> <td align="left">Brésil</td> <td align="right">1</td> </tr> <tr class="even"> <td align="left">Canada</td> <td align="right">4</td> </tr> <tr class="odd"> <td align="left">Danemark</td> <td align="right">2</td> </tr> <tr class="even"> <td align="left">Espagne</td> <td align="right">2</td> </tr> <tr class="odd"> <td align="left">Etats-Unis</td> <td align="right">12</td> </tr> <tr class="even"> <td align="left">Finlande</td> <td align="right">3</td> </tr> <tr class="odd"> <td align="left">France</td> <td align="right">10</td> </tr> <tr class="even"> <td align="left">Italie</td> <td align="right">6</td> </tr> <tr class="odd"> <td align="left">Japon</td> <td align="right">6</td> </tr> <tr class="even"> <td align="left">Norvège</td> <td align="right">3</td> </tr> <tr class="odd"> <td align="left">Pays-Bas</td> <td align="right">2</td> </tr> <tr class="even"> <td align="left">Royaume-Uni</td> <td align="right">7</td> </tr> <tr class="odd"> <td align="left">Singapour</td> <td align="right">3</td> </tr> <tr class="even"> <td align="left">Suède</td> <td align="right">6</td> </tr> </tbody> </table> <p>On peut aussi vouloir trier le résultat par ordre décroissant de nombre de produits.</p> <pre class="r"><code>D4 = D3[order(D3$Effectif, decreasing = TRUE),] knitr::kable(D4, row.names = FALSE, caption = "Répartition triée")</code></pre> <table> <caption>Répartition triée</caption> <thead> <tr class="header"> <th align="left">Pays</th> <th align="right">Effectif</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">Etats-Unis</td> <td align="right">12</td> </tr> <tr class="even"> <td align="left">France</td> <td align="right">10</td> </tr> <tr class="odd"> <td align="left">Allemagne</td> <td align="right">9</td> </tr> <tr class="even"> <td align="left">Australie</td> <td align="right">8</td> </tr> <tr class="odd"> <td align="left">Royaume-Uni</td> <td align="right">7</td> </tr> <tr class="even"> <td align="left">Italie</td> <td align="right">6</td> </tr> <tr class="odd"> <td align="left">Japon</td> <td align="right">6</td> </tr> <tr class="even"> <td align="left">Suède</td> <td align="right">6</td> </tr> <tr class="odd"> <td align="left">Canada</td> <td align="right">4</td> </tr> <tr class="even"> <td align="left">Finlande</td> <td align="right">3</td> </tr> <tr class="odd"> <td align="left">Norvège</td> <td align="right">3</td> </tr> <tr class="even"> <td align="left">Singapour</td> <td align="right">3</td> </tr> <tr class="odd"> <td align="left">Danemark</td> <td align="right">2</td> </tr> <tr class="even"> <td align="left">Espagne</td> <td align="right">2</td> </tr> <tr class="odd"> <td align="left">Pays-Bas</td> <td align="right">2</td> </tr> <tr class="even"> <td align="left">Brésil</td> <td align="right">1</td> </tr> </tbody> </table> </div> <div id="lister-le-nombre-de-produits-par-categorie" class="section level3"> <h3>Lister le nombre de produits par catégorie</h3> <p>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 <code>Produit</code> et <code>Categorie</code>.</p> <pre class="r"><code>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")</code></pre> <table> <caption>Répartition des produits par catégorie</caption> <thead> <tr class="header"> <th align="left">NomCateg</th> <th align="right">Refprod</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">Boissons</td> <td align="right">15</td> </tr> <tr class="even"> <td align="left">Condiments</td> <td align="right">12</td> </tr> <tr class="odd"> <td align="left">Desserts</td> <td align="right">14</td> </tr> <tr class="even"> <td align="left">Pâtes et céréales</td> <td align="right">7</td> </tr> <tr class="odd"> <td align="left">Poissons et fruits de mer</td> <td align="right">13</td> </tr> <tr class="even"> <td align="left">Produits laitiers</td> <td align="right">12</td> </tr> <tr class="odd"> <td align="left">Produits secs</td> <td align="right">5</td> </tr> <tr class="even"> <td align="left">Viandes</td> <td align="right">6</td> </tr> </tbody> </table> </div> <div id="ajouter-le-prix-moyen-le-prix-minimum-min-et-le-prix-maximum-max" class="section level3"> <h3>Ajouter le prix moyen, le prix minimum (<code>min</code>) et le prix maximum (<code>max</code>)</h3> <p>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).</p> <pre class="r"><code>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)</code></pre> <table> <caption>Résumé des produits par catégorie</caption> <thead> <tr class="header"> <th align="left">Catégorie</th> <th align="right">Effectif</th> <th align="right">Prix moyen</th> <th align="right">Prix minimum</th> <th align="right">Prix maximum</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">Boissons</td> <td align="right">15</td> <td align="right">191.58</td> <td align="right">22.50</td> <td align="right">1317.50</td> </tr> <tr class="even"> <td align="left">Condiments</td> <td align="right">12</td> <td align="right">115.31</td> <td align="right">50.00</td> <td align="right">219.50</td> </tr> <tr class="odd"> <td align="left">Desserts</td> <td align="right">14</td> <td align="right">140.06</td> <td align="right">46.00</td> <td align="right">405.00</td> </tr> <tr class="even"> <td align="left">Pâtes et céréales</td> <td align="right">7</td> <td align="right">101.25</td> <td align="right">35.00</td> <td align="right">190.00</td> </tr> <tr class="odd"> <td align="left">Poissons et fruits de mer</td> <td align="right">13</td> <td align="right">98.53</td> <td align="right">30.00</td> <td align="right">312.50</td> </tr> <tr class="even"> <td align="left">Produits laitiers</td> <td align="right">12</td> <td align="right">148.04</td> <td align="right">12.50</td> <td align="right">275.00</td> </tr> <tr class="odd"> <td align="left">Produits secs</td> <td align="right">5</td> <td align="right">161.85</td> <td align="right">50.00</td> <td align="right">265.00</td> </tr> <tr class="even"> <td align="left">Viandes</td> <td align="right">6</td> <td align="right">270.03</td> <td align="right">37.25</td> <td align="right">618.95</td> </tr> </tbody> </table> </div> </div> <div id="creer-une-table-montantcommande-qui-contient-pour-chaque-commande-les-informations-suivantes" class="section level2"> <h2>Créer une table <code>MontantCommande</code> qui contient, pour chaque commande, les informations suivantes</h2> <ul> <li>Numéro de commande</li> <li>Montant total de la commande</li> <li>Frais de port</li> <li>Montant total des produits</li> <li>Nombre de produits différents dans la commande</li> </ul> <p>Pour 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 <code>DetailCommade</code>. Ensuite, on joint <code>Commande</code> 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.</p> <pre class="r"><code>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)</code></pre> <table> <caption>Premières lignes de la table <code>MontantCommande</code></caption> <thead> <tr class="header"> <th align="right">NoCom</th> <th align="right">Port</th> <th align="right">MtProduits</th> <th align="right">NbProduits</th> <th align="right">MtCommande</th> </tr> </thead> <tbody> <tr class="odd"> <td align="right">10248</td> <td align="right">162</td> <td align="right">2200.0</td> <td align="right">3</td> <td align="right">2362.0</td> </tr> <tr class="even"> <td align="right">10249</td> <td align="right">58</td> <td align="right">9317.0</td> <td align="right">2</td> <td align="right">9375.0</td> </tr> <tr class="odd"> <td align="right">10250</td> <td align="right">329</td> <td align="right">7758.0</td> <td align="right">3</td> <td align="right">8087.0</td> </tr> <tr class="even"> <td align="right">10251</td> <td align="right">207</td> <td align="right">3270.3</td> <td align="right">3</td> <td align="right">3477.3</td> </tr> <tr class="odd"> <td align="right">10252</td> <td align="right">256</td> <td align="right">17989.5</td> <td align="right">3</td> <td align="right">18245.5</td> </tr> <tr class="even"> <td align="right">10253</td> <td align="right">291</td> <td align="right">7224.0</td> <td align="right">3</td> <td align="right">7515.0</td> </tr> </tbody> </table> </div> <div id="calculer-le-montant-total-des-commandes-de-chaque-client" class="section level2"> <h2>Calculer le montant total des commandes de chaque client</h2> <p>Après avoir fait la jointure entre <code>Commande</code> et la nouvelle table <code>MontantCommande</code>, on fait la somme des montants des commandes pour chaque client. Ensuite, on regroupe avec <code>Clinet</code> 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.</p> <pre class="r"><code>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")</code></pre> <table> <caption>Chiffre d’affaires de chaque client</caption> <thead> <tr class="header"> <th align="left">Societe</th> <th align="right">MontantCommandes</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">QUICK-Stop</td> <td align="right">579397.65</td> </tr> <tr class="even"> <td align="left">Ernst Handel</td> <td align="right">555283.90</td> </tr> <tr class="odd"> <td align="left">Save-a-lot Markets</td> <td align="right">555230.80</td> </tr> <tr class="even"> <td align="left">Rattlesnake Canyon Grocery</td> <td align="right">266146.94</td> </tr> <tr class="odd"> <td align="left">Hungry Owl All-Night Grocers</td> <td align="right">263601.05</td> </tr> <tr class="even"> <td align="left">Hanari Carnes</td> <td align="right">167771.10</td> </tr> <tr class="odd"> <td align="left">Königlich Essen</td> <td align="right">158563.15</td> </tr> <tr class="even"> <td align="left">Folk och fä HB</td> <td align="right">156255.10</td> </tr> <tr class="odd"> <td align="left">Mère Paillarde</td> <td align="right">151313.15</td> </tr> <tr class="even"> <td align="left">White Clover Markets</td> <td align="right">143566.35</td> </tr> <tr class="odd"> <td align="left">Frankenversand</td> <td align="right">140280.65</td> </tr> <tr class="even"> <td align="left">Queen Cozinha</td> <td align="right">138451.95</td> </tr> <tr class="odd"> <td align="left">Berglunds snabbköp</td> <td align="right">132446.85</td> </tr> <tr class="even"> <td align="left">Suprêmes délices</td> <td align="right">124537.40</td> </tr> <tr class="odd"> <td align="left">Piccolo und mehr</td> <td align="right">121536.40</td> </tr> <tr class="even"> <td align="left">HILARIÓN-Abastos</td> <td align="right">120125.00</td> </tr> <tr class="odd"> <td align="left">Bon app’</td> <td align="right">116624.05</td> </tr> <tr class="even"> <td align="left">Bottom-Dollar Markets</td> <td align="right">107924.25</td> </tr> <tr class="odd"> <td align="left">Richter Supermarkt</td> <td align="right">101718.40</td> </tr> <tr class="even"> <td align="left">Lehmanns Marktstand</td> <td align="right">101356.25</td> </tr> <tr class="odd"> <td align="left">Great Lakes Food Market</td> <td align="right">97980.85</td> </tr> <tr class="even"> <td align="left">Blondel père et fils</td> <td align="right">95757.15</td> </tr> <tr class="odd"> <td align="left">Simons bistro</td> <td align="right">86306.85</td> </tr> <tr class="even"> <td align="left">LINO-Delicateses</td> <td align="right">85731.70</td> </tr> <tr class="odd"> <td align="left">Seven Seas Imports</td> <td align="right">85658.30</td> </tr> <tr class="even"> <td align="left">LILA-Supermercado</td> <td align="right">84046.65</td> </tr> <tr class="odd"> <td align="left">Vaffeljernet</td> <td align="right">83946.00</td> </tr> <tr class="even"> <td align="left">Wartian Herkku</td> <td align="right">82342.35</td> </tr> <tr class="odd"> <td align="left">Old World Delicatessen</td> <td align="right">80779.75</td> </tr> <tr class="even"> <td align="left">Eastern Connection</td> <td align="right">77969.00</td> </tr> <tr class="odd"> <td align="left">Around the Horn</td> <td align="right">73507.50</td> </tr> <tr class="even"> <td align="left">Ottilies Käseladen</td> <td align="right">66748.75</td> </tr> <tr class="odd"> <td align="left">Ricardo Adocicados</td> <td align="right">65381.55</td> </tr> <tr class="even"> <td align="left">Chop-suey Chinese</td> <td align="right">63591.80</td> </tr> <tr class="odd"> <td align="left">Folies gourmandes</td> <td align="right">61484.00</td> </tr> <tr class="even"> <td align="left">Godos Cocina Típica</td> <td align="right">60050.75</td> </tr> <tr class="odd"> <td align="left">Split Rail Beer & Ale</td> <td align="right">60021.40</td> </tr> <tr class="even"> <td align="left">Tortuga Restaurante</td> <td align="right">56396.00</td> </tr> <tr class="odd"> <td align="left">Maison Dewey</td> <td align="right">50988.70</td> </tr> <tr class="even"> <td align="left">Die Wandernde Kuh</td> <td align="right">50088.65</td> </tr> <tr class="odd"> <td align="left">La maison d’Asie</td> <td align="right">49827.50</td> </tr> <tr class="even"> <td align="left">Victuailles en stock</td> <td align="right">48343.30</td> </tr> <tr class="odd"> <td align="left">Gourmet Lanchonetes</td> <td align="right">43686.00</td> </tr> <tr class="even"> <td align="left">Magazzini Alimentari Riuniti</td> <td align="right">38213.20</td> </tr> <tr class="odd"> <td align="left">Reggiani Caseifici</td> <td align="right">36815.00</td> </tr> <tr class="even"> <td align="left">B’s Beverages</td> <td align="right">36556.00</td> </tr> <tr class="odd"> <td align="left">Antonio Moreno Taquería</td> <td align="right">36452.60</td> </tr> <tr class="even"> <td align="left">Tradição Hipermercados</td> <td align="right">35595.40</td> </tr> <tr class="odd"> <td align="left">Que Delícia</td> <td align="right">34957.65</td> </tr> <tr class="even"> <td align="left">Furia Bacalhau e Frutos do Mar</td> <td align="right">33524.65</td> </tr> <tr class="odd"> <td align="left">Island Trading</td> <td align="right">32533.00</td> </tr> <tr class="even"> <td align="left">Wellington Importadora</td> <td align="right">31319.20</td> </tr> <tr class="odd"> <td align="left">Santé Gourmet</td> <td align="right">30037.00</td> </tr> <tr class="even"> <td align="left">Princesa Isabel Vinhos</td> <td align="right">27049.20</td> </tr> <tr class="odd"> <td align="left">Morgenstern Gesundkost</td> <td align="right">26811.00</td> </tr> <tr class="even"> <td align="left">Toms Spezialitäten</td> <td align="right">24504.80</td> </tr> <tr class="odd"> <td align="left">Pericles Comidas clásicas</td> <td align="right">22612.00</td> </tr> <tr class="even"> <td align="left">Bólido Comidas preparadas</td> <td align="right">22121.00</td> </tr> <tr class="odd"> <td align="left">Familia Arquibaldo</td> <td align="right">21679.50</td> </tr> <tr class="even"> <td align="left">Lonesome Pine Restaurant</td> <td align="right">21679.00</td> </tr> <tr class="odd"> <td align="left">Drachenblut Delikatessen</td> <td align="right">20342.00</td> </tr> <tr class="even"> <td align="left">Comércio Mineiro</td> <td align="right">19987.00</td> </tr> <tr class="odd"> <td align="left">Océano Atlántico Ltda.</td> <td align="right">18839.00</td> </tr> <tr class="even"> <td align="left">Wolski Zajazd</td> <td align="right">18515.00</td> </tr> <tr class="odd"> <td align="left">The Big Cheese</td> <td align="right">18127.00</td> </tr> <tr class="even"> <td align="left">Blauer See Delikatessen</td> <td align="right">17038.00</td> </tr> <tr class="odd"> <td align="left">France restauration</td> <td align="right">16708.00</td> </tr> <tr class="even"> <td align="left">Let’s Stop N Shop</td> <td align="right">16378.75</td> </tr> <tr class="odd"> <td align="left">Hungry Coyote Import Store</td> <td align="right">16356.00</td> </tr> <tr class="even"> <td align="left">Wilman Kala</td> <td align="right">16234.00</td> </tr> <tr class="odd"> <td align="left">Rancho grande</td> <td align="right">15328.00</td> </tr> <tr class="even"> <td align="left">Spécialités du monde</td> <td align="right">12661.00</td> </tr> <tr class="odd"> <td align="left">Alfreds Futterkiste</td> <td align="right">11809.00</td> </tr> <tr class="even"> <td align="left">La corne d’abondance</td> <td align="right">10400.00</td> </tr> <tr class="odd"> <td align="left">The Cracker Box</td> <td align="right">10384.00</td> </tr> <tr class="even"> <td align="left">Cactus Comidas para llevar</td> <td align="right">9433.00</td> </tr> <tr class="odd"> <td align="left">Ana Trujillo Emparedados y helados</td> <td align="right">9272.00</td> </tr> <tr class="even"> <td align="left">Consolidated Holdings</td> <td align="right">8871.00</td> </tr> <tr class="odd"> <td align="left">Du monde entier</td> <td align="right">8394.00</td> </tr> <tr class="even"> <td align="left">Trail’s Head Gourmet Provisioners</td> <td align="right">8196.00</td> </tr> <tr class="odd"> <td align="left">Franchi S.p.A.</td> <td align="right">8103.00</td> </tr> <tr class="even"> <td align="left">GROSELLA-Restaurante</td> <td align="right">7785.00</td> </tr> <tr class="odd"> <td align="left">Vins et alcools Chevalier</td> <td align="right">7689.00</td> </tr> <tr class="even"> <td align="left">Romero y tomillo</td> <td align="right">7677.00</td> </tr> <tr class="odd"> <td align="left">Galería del gastrónomo</td> <td align="right">4376.00</td> </tr> <tr class="even"> <td align="left">North/South</td> <td align="right">3433.00</td> </tr> <tr class="odd"> <td align="left">Laughing Bacchus Wine Cellars</td> <td align="right">2650.00</td> </tr> <tr class="even"> <td align="left">Lazy K Kountry Store</td> <td align="right">1887.00</td> </tr> <tr class="odd"> <td align="left">Centro comercial Moctezuma</td> <td align="right">520.00</td> </tr> </tbody> </table> </div> <div id="calculer-le-montant-total-des-commandes-pour-chaque-pays-des-clients" class="section level2"> <h2>Calculer le montant total des commandes pour chaque pays des clients</h2> <p>On réutilise ici la table créée précédemment, résultante de la jointure entre <code>Client</code> 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.</p> <pre class="r"><code>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")</code></pre> <table> <caption>Chiffre d’affaires par pays</caption> <thead> <tr class="header"> <th align="left">Pays</th> <th align="right">MontantCommandes</th> </tr> </thead> <tbody> <tr class="odd"> <td align="left">États-Unis</td> <td align="right">1296733.84</td> </tr> <tr class="even"> <td align="left">Allemagne</td> <td align="right">1196939.90</td> </tr> <tr class="odd"> <td align="left">Autriche</td> <td align="right">676820.30</td> </tr> <tr class="even"> <td align="left">Brésil</td> <td align="right">558829.35</td> </tr> <tr class="odd"> <td align="left">France</td> <td align="right">427888.00</td> </tr> <tr class="even"> <td align="left">Royaume-Uni</td> <td align="right">318527.80</td> </tr> <tr class="odd"> <td align="left">Venezuela</td> <td align="right">297688.35</td> </tr> <tr class="even"> <td align="left">Suède</td> <td align="right">288701.95</td> </tr> <tr class="odd"> <td align="left">Irlande</td> <td align="right">263601.05</td> </tr> <tr class="even"> <td align="left">Canada</td> <td align="right">261887.40</td> </tr> <tr class="odd"> <td align="left">Belgique</td> <td align="right">175526.10</td> </tr> <tr class="even"> <td align="left">Danemark</td> <td align="right">170252.85</td> </tr> <tr class="odd"> <td align="left">Suisse</td> <td align="right">165310.20</td> </tr> <tr class="even"> <td align="left">Mexique</td> <td align="right">125252.60</td> </tr> <tr class="odd"> <td align="left">Finlande</td> <td align="right">98576.35</td> </tr> <tr class="even"> <td align="left">Espagne</td> <td align="right">94224.75</td> </tr> <tr class="odd"> <td align="left">Italie</td> <td align="right">83131.20</td> </tr> <tr class="even"> <td align="left">Portugal</td> <td align="right">60573.85</td> </tr> <tr class="odd"> <td align="left">Argentine</td> <td align="right">43600.00</td> </tr> <tr class="even"> <td align="left">Norvège</td> <td align="right">30037.00</td> </tr> <tr class="odd"> <td align="left">Pologne</td> <td align="right">18515.00</td> </tr> </tbody> </table> </div> </div> <div class="footer"> Site créé avec <a href="http://www.r-project.org" target="_blank"><code>R</code></a> et la librairie <a href="http://rmarkdown.rstudio.com/" target="_blank"><code>rmarkdown</code></a>. </div> <script> $("#TOC").css("margin-top", "100px"); </script> </div> <script> // add bootstrap table styles to pandoc tables function bootstrapStylePandocTables() { $('tr.header').parent('thead').parent('table').addClass('table table-condensed'); } $(document).ready(function () { bootstrapStylePandocTables(); }); </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-AMS-MML_HTMLorMML"; document.getElementsByTagName("head")[0].appendChild(script); })(); </script> </body> </html>