+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Instructies: + + Onderstaande is nodig om je notebook werkende te krijgen. + + Bij het opstarten van je notebook dien je de chunk van regel 28 t/m 40 en regel 42 t/m 46 te runnen. + + Daarna spring je naar regel 76 waar je je eerste SQL-chunk kan maken. + + + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dit is een voorbeeld van hoe je aan de slag zou kunnen gaan met R chunks in een Notebook. Hierin ga je: + opmaak toepassen + functies uit Datacamp toepassen op een “eigen” dataset + oefenen met “knitten” Er is met zogenaamde Markdown allerlei opmaak toegepast op de tekst rondom de chunks. Dit is anders dan hoe het in Word gaat (daar is het meer What You See Is What You Get), het is wel vergelijkbaar met de opmaak van pagina’s in Wikipedia.
Hieronder wordt een library geladen waar functies in zitten die we verderop in het Notebook gaan gebruiken: tidyverse. Daarnaast wordt hier de dataset geïmporteerd zodat we daar vragen aan kunnen stellen.
UPDATE dataset SET besteldatum = DATE(besteldatum, 'unixepoch'), leverdatum = DATE(leverdatum, 'unixepoch'), betaaldatum = DATE(betaaldatum, 'unixepoch');
Als je bovenstaande code uitvoert door op het groene pijltje rechtsbovenin de chunk te drukken, gebeurt er nog vrij weinig. Als het goed is verschijnt er alleen even een groen balkje naast de code regels. Tenminste, als je het Excel bestand op de juiste plek hebt geüpload. Het laden van de libraries hoeven we maar 1 keer te doen en het is wel zo overzichtelijk om dat allemaal aan het begin van je document te doen voor je de inhoud in duikt.
De dataset is nu opgeslagen in een database waarvoor we een connectie hebben gemaakt die ‘con’ heet. Elke keer als we dus gegevens uit die database willen halen zullen we dus eerst die connectie moeten gaan noemen.
In de onderstaande chunk is de meest basale vorm van een query opgesteld. Je kan deze laten uitvoeren door op de groene knop te drukken of door de query-code te selecteren en op Ctrl+Shift+Enter te drukken. Merk ook de eerste regel op waarin ‘connection=con’ staat. Deze is nodig om contact met de database te maken.
/*deze query zoekt voor alle informatie van de familie de Boer en sorteert het op prijs van hoog naar laag. */
SELECT *
FROM dataset
WHERE naam == 'Boer, de'
ORDER BY regelOmzet DESC;
| regioCode | regiomgr | mgrnm | regelOmzet | bestelnr | Verkoper | besteldatum | Jaar_bestel | Maand_bestel | leverdatum | Jaar_leverdatum | Maand_leverdaum | betaaldatum | Jaar_Betaaldum | Maand_Betaaldatum | klantnr | naam | postcodehuisnr | woonplaats | aantal | artikelnr | omschrijving | catomschrijving | prijs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GVGH | 804 | Herman | 623.20 | 1050 | 901 | 2012-03-30 | 2012 | 3 | 2012-04-04 | 2012 | 4 | 2012-04-18 | 2012 | 4 | 15 | Boer, de | 5463ZK1003 | Veghel | 16 | 402 | Ganzenlever | luxe artikelen van de traitteur | 38.95 |
| GVGH | 805 | Gerda | 592.00 | 1421 | 903 | 2014-10-29 | 2014 | 10 | 2014-11-03 | 2014 | 11 | 2014-11-21 | 2014 | 11 | 15 | Boer, de | 5463ZK1003 | Veghel | 16 | 402 | Ganzenlever | luxe artikelen van de traitteur | 37.00 |
| GVGH | 804 | Herman | 506.35 | 1157 | 901 | 2012-12-18 | 2012 | 12 | 2012-12-25 | 2012 | 12 | 2013-01-18 | 2013 | 1 | 15 | Boer, de | 5463ZK1003 | Veghel | 13 | 402 | Ganzenlever | luxe artikelen van de traitteur | 38.95 |
| GVGH | 802 | Bertha | 494.50 | 1193 | 904 | 2013-03-31 | 2013 | 3 | 2013-04-01 | 2013 | 4 | 2013-05-01 | 2013 | 5 | 15 | Boer, de | 5463ZK1003 | Veghel | 23 | 401 | Kaviaar | luxe artikelen van de traitteur | 21.50 |
| GVGH | 801 | Karel | 462.00 | 1250 | 906 | 2013-08-14 | 2013 | 8 | 2013-08-19 | 2013 | 8 | 2013-08-29 | 2013 | 8 | 15 | Boer, de | 5463ZK1003 | Veghel | 24 | 403 | Vruchtenyoghurt Aardbei | zuivelartikelen | 19.25 |
| GVGH | 805 | Gerda | 450.00 | 1421 | 903 | 2014-10-29 | 2014 | 10 | 2014-11-03 | 2014 | 11 | 2014-11-21 | 2014 | 11 | 15 | Boer, de | 5463ZK1003 | Veghel | 20 | 410 | Soja Vanillevla Biologisch | biologische artikelen | 22.50 |
| GVGH | 804 | Herman | 408.50 | 1418 | 901 | 2014-10-21 | 2014 | 10 | 2014-10-26 | 2014 | 10 | 2014-11-19 | 2014 | 11 | 15 | Boer, de | 5463ZK1003 | Veghel | 19 | 401 | Kaviaar | luxe artikelen van de traitteur | 21.50 |
| GVGH | 804 | Herman | 405.00 | 1217 | 901 | 2013-06-12 | 2013 | 6 | 2013-06-19 | 2013 | 6 | 2013-07-01 | 2013 | 7 | 15 | Boer, de | 5463ZK1003 | Veghel | 18 | 410 | Soja Vanillevla Biologisch | biologische artikelen | 22.50 |
| GVGH | 802 | Bertha | 373.15 | 1355 | 904 | 2014-05-30 | 2014 | 5 | 2014-06-04 | 2014 | 6 | 2014-06-10 | 2014 | 6 | 15 | Boer, de | 5463ZK1003 | Veghel | 17 | 411 | Sojamelk Gezoet Biologisch | biologische artikelen | 21.95 |
| GVGH | 805 | Gerda | 350.00 | 1416 | 903 | 2014-10-12 | 2014 | 10 | 2014-10-17 | 2014 | 10 | 2014-11-10 | 2014 | 11 | 15 | Boer, de | 5463ZK1003 | Veghel | 20 | 408 | Soja Chocolademelk Biologisch | biologische artikelen | 17.50 |
/*Deze query zoekt de naam, woonplaats product, aantal en totale prijs van een klant met klantnummer 16 die producten heeft gekocht in een winkel in eindhoven. Dit wordt gesorteerd op prijs van hoog naar laag.(klantnummer kan eenvoudig worden aangepast voor het zoeken naar een specifieke klant)*/
SELECT regioCode, klantnr, naam, woonplaats, omschrijving AS product, aantal AS Aantal, regelOmzet AS Totale_prijs
FROM dataset
WHERE woonplaats == 'Eindhoven'
GROUP BY omschrijving
HAVING (klantnr) == 16
ORDER BY regelOmzet desc;
| regioCode | klantnr | naam | woonplaats | product | Aantal | Totale_prijs |
|---|---|---|---|---|---|---|
| REHV | 16 | Velzenmaker | Eindhoven | Ganzenlever | 20 | 779.00 |
| REHV | 16 | Velzenmaker | Eindhoven | Soja Vanillevla Biologisch | 15 | 315.00 |
| REHV | 16 | Velzenmaker | Eindhoven | Vruchtenyoghurt Mango | 11 | 178.75 |
| REHV | 16 | Velzenmaker | Eindhoven | Kaviaar | 5 | 107.50 |
| REHV | 16 | Velzenmaker | Eindhoven | Magere Kwark | 11 | 98.45 |
| REHV | 16 | Velzenmaker | Eindhoven | Soja Chocolademelk Biologisch | 6 | 97.50 |
| REHV | 16 | Velzenmaker | Eindhoven | Zwezerik | 6 | 77.70 |
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Opdracht + + Bouw een aantal SQL-queries die interessante informatie opvragen uit de data. Je kan denken aan vragen zoals + + - Hoeveel verschillende verkopers zijn er? + + - Hoeveel verkopers per regio zijn er? + + + + Maak zo meer SQL-queries op de gegeven dataset (of een eigen dataset) waarin gebruik gemaakt is van onder andere + + WHERE, ORDER BY, GROUP BY, HAVING en subqueries; + + + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*De query zoekt het aantal verkopers per regio en welke regio dat is.*/
SELECT regioCode, COUNT(DISTINCT verkoper) AS verkoper_per_regio
FROM dataset
GROUP BY regioCode
| regioCode | verkoper_per_regio |
|---|---|
| GVGH | 6 |
| REHV | 6 |
| RHMD | 6 |
Nieuwe query’s kan je aanroepen door in de balk van dit subscherm op het pijltje naast het groene C-knopje te drukken en te kiezen voor SQL. Vergeet niet de connectie ‘con’ heet en daar aan moet linken, net zoals de bovenstaande query’s.
De resultaten van het notebook kan je opslaan als een HTML-pagina. Om dat te doen klik je in de bovenstaande balk op de pijl naast Preview en selecteer je Knit to HTML. Een andere optie is om Ctrl+Shift+K in te drukken om een HTML bestand te krijgen.
/*De query geeft voor elke manager in welke regio ze werken en hoeveel omzet ze in totaal hebben gemaakt.*/
SELECT regioCode AS regiocode, mgrnm AS managernaam, SUM(regelOmzet)AS totale_omzet
FROM dataset
GROUP BY regioCode, mgrnm;
| regiocode | managernaam | totale_omzet |
|---|---|---|
| GVGH | Bertha | 6790.10 |
| GVGH | Gerda | 6223.50 |
| GVGH | Harrie | 5173.35 |
| GVGH | Herman | 7119.70 |
| GVGH | Karel | 10045.40 |
| GVGH | Klaas | 4053.00 |
| REHV | Bertha | 5977.00 |
| REHV | Gerda | 11363.20 |
| REHV | Harrie | 7490.35 |
| REHV | Herman | 8828.75 |
/* Geeft de top 5 best verkochte producten per regio op basis van totale omzet. */
SELECT regioCode, omschrijving AS product, SUM(regelOmzet) AS totale_omzet
FROM dataset
GROUP BY regioCode, omschrijving
ORDER BY regioCode, totale_omzet DESC
LIMIT 5;
| regioCode | product | totale_omzet |
|---|---|---|
| GVGH | Ganzenlever | 7597.60 |
| GVGH | Kaviaar | 5074.00 |
| GVGH | Soja Vanillevla Biologisch | 4594.50 |
| GVGH | Soja Chocolademelk Biologisch | 3682.35 |
| GVGH | Vruchtenyoghurt Mango | 3558.75 |
/* Geeft de totale omzet per woonplaats. */
SELECT woonplaats, SUM(regelOmzet) AS totale_omzet
FROM dataset
GROUP BY woonplaats
ORDER BY totale_omzet DESC;
| woonplaats | totale_omzet |
|---|---|
| Eindhoven | 38033.50 |
| Helmond | 26287.65 |
| Veghel | 26017.40 |
| Erp | 13387.65 |
| Laarbeek | 13208.70 |
| Waalre | 9907.55 |
/* Geeft de totale omzet van klanten die meer hebben uitgegeven dan de gemiddelde klant. */
SELECT klantnr, naam, SUM(regelOmzet) AS totale_omzet
FROM dataset
GROUP BY klantnr
HAVING SUM(regelOmzet) > (SELECT AVG(regelOmzet) FROM dataset)
ORDER BY totale_omzet DESC;
| klantnr | naam | totale_omzet |
|---|---|---|
| 11 | Jansen | 14246.30 |
| 13 | Heiden, van der | 13985.60 |
| 19 | Zuur | 13637.25 |
| 14 | Kraymans | 13387.65 |
| 18 | Bocht | 13208.70 |
| 12 | Rademakers | 12556.10 |
| 15 | Boer, de | 12380.15 |
| 17 | Jansen | 12302.05 |
| 16 | Velzenmaker | 11231.10 |
| 20 | Bakermans | 9907.55 |