Analyse OLAP des Ventes de Fruits
Noms :
- ALLALI Chakib Khalil
- BENDJERID Mohammed Abdelaziz
Spécialité : Master 1 - Aide à la Décision et Systèmes Intelligents (ADSI)
Le dataset est généré artificiellement pour représenter les ventes de
fruits dans 5 supermarchés (s1 à s5) répartis
sur différentes zones géographiques : Est, Ouest, Sud,
Nord.
- Les fruits disponibles sont : orange, citron, banane,
kiwi
- Les années analysées sont : 2023, 2024, 2025
- Une quantité aléatoire est associée à chaque vente
Des règles de nettoyage ont été appliquées : - Exclusion des ventes
de banane et citron dans le
supermarché s2 - Suppression des ventes de
kiwi en 2024
library(plotly)
library(reshape2)
library(dplyr)
library(ggplot2)
supermarches <- c("s1", "s2", "s3", "s4", "s5")
fruits <- c("orange", "citron", "banane", "kiwi")
annees <- c(2023, 2024, 2025)
zones <- c("s1" = "Est", "s2" = "Ouest", "s3" = "Sud", "s4" = "Nord", "s5" = "Nord")
set.seed(911)
donnees_brutes <- data.frame(
Supermarche = sample(supermarches, 60, replace = TRUE),
Fruit = sample(fruits, 60, replace = TRUE),
Annee = sample(annees, 60, replace = TRUE),
Quantite = sample(0:100, 60, replace = TRUE)
)
donnees_brutes$Zone <- zones[donnees_brutes$Supermarche]
Data <- donnees_brutes %>%
filter(!(Supermarche == "s2" & Fruit %in% c("banane", "citron"))) %>%
filter(!(Fruit == "kiwi" & Annee == 2024)) %>%
distinct()
plot_olap <- function(data, titre = "Cube OLAP 3D") {
data$Zone_num <- as.numeric(as.factor(data$Zone))
plot_ly(
data,
x = ~Annee,
y = ~Fruit,
z = ~Zone_num,
color = ~Quantite,
text = ~paste("Quantité:", Quantite),
type = "scatter3d",
mode = "markers",
marker = list(size = 10, opacity = 0.8)
) %>% layout(
title = titre,
scene = list(
xaxis = list(title = "Année"),
yaxis = list(title = "Fruit"),
zaxis = list(title = "Zone")
)
)
}
cube_olap <- Data %>% filter(Quantite > 0)
plot_olap(cube_olap, "Cube OLAP - Quantité > 0")
Explication :
Ce cube affiche uniquement les ventes ayant une quantité strictement
positive.
Il permet d’analyser l’ensemble des transactions valides en se basant
sur trois axes : - l’année de vente (axe X), - le type de fruit (axe Y),
- et la zone géographique (axe Z).
Cela permet de repérer les tendances générales de vente sur la période
étudiée.
slice_2025 <- cube_olap %>% filter(Annee == 2025)
plot_olap(slice_2025, "Slice - Année 2025")
Explication :
Ce slice extrait uniquement les ventes qui ont eu lieu en 2025.
Cela permet de se concentrer sur une année spécifique pour faire une
analyse ciblée.
dice_sup_50 <- cube_olap %>% filter(Quantite > 50)
plot_olap(dice_sup_50, "Dice - Quantité > 50")
Explication :
Ce dice sélectionne uniquement les ventes où la quantité dépasse 50
unités.
Cela permet de détecter les cas de forte demande ou de succès
commerciaux remarquables.
slice_dice <- cube_olap %>% filter(Annee %in% c(2023, 2024) & Quantite > 40)
plot_olap(slice_dice, "Slice + Dice - 2023-2024 & Qte > 40")
Explication :
Cette vue combine deux filtres : les années 2023 et 2024, et une
quantité minimale de 40.
rollup_acide <- cube_olap %>%
mutate(Fruit = ifelse(Fruit %in% c("citron", "orange"), "acide", Fruit)) %>%
group_by(Zone, Fruit, Annee) %>%
summarise(Quantite = sum(Quantite), .groups = "drop")
plot_olap(rollup_acide, "Roll-up - Fruits acides regroupés")
Explication :
Le roll-up regroupe les fruits acides (orange et citron) sous une même
catégorie appelée « acide ».
drill_down_nord <- cube_olap %>% filter(Zone == "Nord")
plot_olap(drill_down_nord, "Drill-down - Zone Nord")
Explication :
Le drill-down permet de zoomer uniquement sur la zone Nord (supermarchés
s4 et s5).