Bike-sales-data-metrics

Traitement, stockage, analyse et visualisation d'un fichier csv volumineux et de données en temps réel de ventes de vélos.

Stars
1
Committers
4

Ventes de vélos en Europe

Source de donnée

Dataset des ventes de vélos en Europe

Ce dataset offre des données structurées, idéales pour nos besoins en traitement batch et streaming.

Objectif

Analyser un fichier de ventes

Voici une liste de question que nous voulons aborder:

  1. Quel est le revenu réalisé pour chaque catégorie de produit ?
  2. Quel est le revenu réalise pour chaque sous-catégorie de produit ?
  3. Quel est le top 20 des produits générant le plus de revenu ?
  4. Un top 10 des produits générant le plus de revenu en France ?
  5. Quel tranche d'âge de client réalise le plus d'achats ?
  6. En temps réel, combien de profit a été réalisé les 30 derniers jours ?

Lancement

Mise en place et lancement du projet

1. Lancer le traitement en batch

source init.sh #ou ./init.sh 

Détails du script batch

  • Pull l'image du cluster hadoop
  • Lancer le docker compose contenant notre base de donnée PostgreSQL et le setup de l'application Grafana
  • Déplacer les scripts Spark et les fichiers à traiter vers le cluster hadoop
  • Lancer les scripts et alimenter la base de données

2. Lancer le traitement en temps réel

source init-streaming.sh #ou ./init-streaming.sh

# Pour relancer manuellement:
# docker exec hadoop-master /bin/bash -c "spark-submit --jars /opt/spark/jars/postgresql-42.7.3.jar --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.1.2 /root/sales/spark_listener.py"

Détails du script streaming

  • Lancer le docker compose stream contenent notre container pour le serveur fastAPI (port:8000) pour produire des données en temps réel et le broker kafka
  • Lancer le script d'écoute du producer kafka

Visualiser les données traitées

Enfin, veuillez vous rendre sur localhost:3000 dans le Dashboard et vous connecter sur Grafana (username: admin, password: admin) afin d'avoir la visualisation des réponses aux objectifs.

Comment produire des données en temps réel ?

# Client homme de 18 ans en Belgique achète un vélo de montagne MTB 1000 pour 250€, profit de 50€
curl --location 'localhost:8000/produce/' \
--header 'Content-Type: application/json' \
--data '{
           "Date": "2024-08-02",
           "Day": 2,
           "Month": 8,
           "Year": 2024,
           "Customer_Age": 18,
           "Age_Group": "Young Adults (25-34)",
           "Customer_Gender": "Male",
           "Country": "Belgium",
           "State": "California",
           "Product_Category": "Bikes",
           "Sub_Category": "Mountain Bikes",
           "Product": "MTB 1000",
           "Order_Quantity": 1,
           "Unit_Cost": 200.00,
           "Unit_Price": 250.00,
           "Profit": 50.00,
           "Cost": 200.00,
           "Revenue": 250.00
         }'

Ressources

Groupe

  • Faustine CHARRIER
  • Mattis ALMEIDA LIMA
  • Louisan TCHITOULA
  • Djédjé GBOBLE
  • Julien HEITZ