Libraries:
Bij ons bedrijf verkopen we drones aan webshops of winkels die de bestellingen bezorgen via de drone. In het ERD tabel die ingeladen wordt staan de klantnummer, username, het bedrijf die is gekoppeld aan de username, de specificaties van de drone, het aantal bestelde drones door een account, de bezorglocatie en de bezorgdatum. De specificaties hebben we minimaal gehouden om het makkelijk te houden.
De relevante data in de tabel is de username, bedrijfnaam, het aantal bestellingen, de bezorglocatie en de bezorgdatum.
Deze code is nodig om SQL statements los te kunnen laten op het excel bestand.
#Onderstaande niet veranderen !
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
#Als er in de tabel variabelen met datums voorkomen, dan moeten die aangepast worden zodat de datumvelden als teksttype worden opgeslagen en niet als datumtijd type. Zie onderstaand voorbeeld: copy_to(con, mutate_at(df, vars(ends_with("datum")), as.character), "factOrders")
#copy_to(con, mutate_at(df, vars(ends_with("datum")), as.character), "factOrders")
copy_to(con, mutate_at(df, vars(starts_with("datum")), as.character),
"ERD")
knitr::opts_chunk$set(connection = "con")
De tafel wordt via SQL ingeladen. De bezorgdatum wordt in excel als ‘willekeurige’ cijfers weergeven, maar in R Studio wordt het weer normaal weergeven.
select *
from ERD
Klantnummer | Username | Bedrijfsnaam | Specs | Aantalbestellingen | Bezorglocatie | Bezorgdatum |
---|---|---|---|---|---|---|
1 | Amazon1 | Amazon | Bezorgdrone | 100 | Los Angeles | 1571184000 |
2 | Amazon2 | Amazon | Bezorgdrone | 100 | New York | 1578960000 |
3 | Bol.com1 | Bol.com | Bezorgdrone | 30 | Amsterdam | 1597276800 |
4 | Bol.com2 | Bol.com | Bezorgdrone | 10 | Rotterdam | 1602201600 |
5 | Coolblue1 | Coolblue | Bezorgdrone | 15 | Amsterdam | 1606435200 |
6 | Coolblue2 | Coolblue | Bezorgdrone | 15 | Utrecht | 1616371200 |
7 | Zalando1 | Zalando | Bezorgdrone | 50 | Berlijn | 1621987200 |
8 | Zalando2 | Zalando | Bezorgdrone | 20 | Eindhoven | 1624320000 |
9 | Azerty1 | Azerty | Bezorgdrone | 5 | Eindhoven | 1632182400 |
10 | Azerty2 | Azerty | Bezorgdrone | 5 | Amsterdam | 1636070400 |
KPI 1: Aantal drones per bedrijf
Reden: Als we weten hoeveel drones een bedrijf besteld, weten we hoeveel drones we nog op voorraad hebben en hoeveel drones er eventueel er nog gemaakt moet worden.
Conclusie: Uit de R chunk kunnen we zien dat er een totaal van 616 drones zijn besteld en dat we die aantal moeten leveren. Uit de grafiek kunnen we zien hoeveel drones elk bedrijf heeft besteld.
x <- aggregate(Aantalbestellingen~Bedrijfsnaam, df, sum)
x
## Bedrijfsnaam Aantalbestellingen
## 1 AliExpress 200
## 2 Amazon 200
## 3 Azerty 10
## 4 Bol.com 40
## 5 Coolblue 30
## 6 De Bijenkorf 10
## 7 MediaMarkt 20
## 8 Praxis 6
## 9 Wehkamp 30
## 10 Zalando 70
sum(df$Aantalbestellingen)
## [1] 616
bp <- ggplot(x, aes(x = "", y = Aantalbestellingen, fill = Bedrijfsnaam)) +
geom_bar(width = 1, stat = "identity")
pie <- bp + coord_polar("y", start = 0) + geom_text(aes(label = paste0(Aantalbestellingen)), position = position_stack(vjust = 0.5))
pie = pie + labs(x = NULL, y = NULL, fill = NULL, title = "Aantal verkochte drones per bedrijf")
pie = pie + theme_classic() + theme(axis.line = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
plot.title = element_text(hjust = 0.5, color = "#666666"))
pie
KPI 2: Aantal bestellingen
Reden: Bij het aantal bestellingen kunnen we zien in welk deel van het jaar of welke tijdperiode we veel drones op voorraad moeten hebben en of het dan druk wordt.
Conclusie: Uit de grafiek kunnen we zien dat het in het begin best wel veel drones zijn gekocht en dus moeten we veel drones op voorraad hebben. Daarna is het een stuk minder dus is het wat minder druk, maar daarna zijn er weer veel bestellingen gemaakt en moeten we weer veel drones op voorraad hebben.
De horizontale lijn is het gemiddelde aantal bestellingen die is gemaakt.
df %>%
select(Bezorgdatum, Aantalbestellingen)
## # A tibble: 20 x 2
## Bezorgdatum Aantalbestellingen
## <dttm> <dbl>
## 1 2019-10-16 00:00:00 100
## 2 2020-01-14 00:00:00 100
## 3 2020-08-13 00:00:00 30
## 4 2020-10-09 00:00:00 10
## 5 2020-11-27 00:00:00 15
## 6 2021-03-22 00:00:00 15
## 7 2021-05-26 00:00:00 50
## 8 2021-06-22 00:00:00 20
## 9 2021-09-21 00:00:00 5
## 10 2021-11-05 00:00:00 5
## 11 2021-09-24 00:00:00 100
## 12 2021-08-12 00:00:00 100
## 13 2021-06-02 00:00:00 5
## 14 2021-03-30 00:00:00 5
## 15 2021-02-08 00:00:00 10
## 16 2020-11-11 00:00:00 10
## 17 2020-09-23 00:00:00 3
## 18 2020-06-30 00:00:00 3
## 19 2020-05-28 00:00:00 10
## 20 2019-10-22 00:00:00 20
ggplot(df, aes(Bezorgdatum, Aantalbestellingen)) +
geom_line() + geom_hline(yintercept = mean(df$Aantalbestellingen), color = "blue")
KPI 3: Aantal bestellingen per specifieke stad
Reden: Als we weten hoeveel bestellingen er in een specifieke stad zijn gedaan, kunnen we ook schatten wat de leveringstijden zijn en kunnen we de kosten daarvan ook meerekenen bij de totale kosten.
Conclusie: Uit de tabel kunnen we zien dat de meeste bestellingen binnen Nederland zijn en zijn de reiskosten dus ook redelijk laag. Aan de andere kant zijn er ook veel bestellingen in het buitenland gedaan en zijn dus de reiskosten hoger om de drones naar die plekken te leveren.
aantalBestellingenPerStad <- aggregate(Aantalbestellingen~Bezorglocatie, df, sum)
aantalBestellingenPerStad
## Bezorglocatie Aantalbestellingen
## 1 Amsterdam 50
## 2 Berlijn 50
## 3 Den Helder 3
## 4 Eindhoven 30
## 5 Groningen 10
## 6 Hengelo 10
## 7 Hongkong 100
## 8 Los Angeles 100
## 9 Maastricht 3
## 10 New York 100
## 11 Peking 100
## 12 Rotterdam 10
## 13 Tilburg 20
## 14 Utrecht 25
## 15 Zwolle 5
ggplot(aantalBestellingenPerStad, aes(Bezorglocatie, Aantalbestellingen)) +
geom_col()
KPI 4: Wanneer worden er veel of weinig drones verkocht
Reden: Hier kunnen we zien of er op een jaar veel of weinig drones zijn verkocht. Dan kunnen we zien of een groei is voor het verkopen van de drones of niet.
Conclusie: Er is een duidelijk groei voor de verkoop van de groei omdat er in 2019 maar 120 drones zijn verkocht en in 2021 315 zijn verkocht.
Jaar <- format(as.Date(df$Bezorgdatum, format="%Y/%m/%d"), "%Y")
bestellingenPerJaar <- aggregate(Aantalbestellingen~Jaar, df, sum)
bestellingenPerJaar
## Jaar Aantalbestellingen
## 1 2019 120
## 2 2020 181
## 3 2021 315
ggplot(df, aes(Jaar, Aantalbestellingen)) +
geom_col()
KPI 5: Aantal producten
Reden: Bij deze KPI kunnen we zien hoeveel drones elke account bestelt heeft. Dan kunnen we zien welke account, een bedrijf maar in een andere plaats, hoeveel drones bestelt heeft. Zo kunnen we ook zien of een bedrijf in een andere vestiging meer drones koopt dan in een andere plaats.
Conclusie: Uit de tabel en grafiek kunnen we halen dat bijvoorbeeld Bol.com op een andere account meer drones heeft gekocht dan de andere, maar bij Amazon is het aantal bestellingen tussen de twee account hetzelfde.
df %>%
select(Username, Aantalbestellingen) %>%
arrange(desc(Username))
## # A tibble: 20 x 2
## Username Aantalbestellingen
## <chr> <dbl>
## 1 Zalando2 20
## 2 Zalando1 50
## 3 Wehkamp2 20
## 4 Wehkamp1 10
## 5 Praxis2 3
## 6 Praxis1 3
## 7 MediaMarkt2 10
## 8 MediaMarkt1 10
## 9 DeBijenkorf2 5
## 10 DeBijenkorf1 5
## 11 Coolblue2 15
## 12 Coolblue1 15
## 13 Bol.com2 10
## 14 Bol.com1 30
## 15 Azerty2 5
## 16 Azerty1 5
## 17 Amazon2 100
## 18 Amazon1 100
## 19 AliExpress2 100
## 20 AliExpress1 100
ggplot(df, aes(Username, Aantalbestellingen)) +
geom_col()