Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ltossian/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.
https://github.com/ltossian/bike-sales-data-metrics
fastapi grafana hadoop kafka postgresql python spark
Last synced: 27 days ago
JSON representation
Traitement, stockage, analyse et visualisation d'un fichier csv volumineux et de données en temps réel de ventes de vélos.
- Host: GitHub
- URL: https://github.com/ltossian/bike-sales-data-metrics
- Owner: LTOssian
- Created: 2024-07-12T14:26:33.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-08-07T14:24:53.000Z (3 months ago)
- Last Synced: 2024-10-11T06:04:01.319Z (27 days ago)
- Topics: fastapi, grafana, hadoop, kafka, postgresql, python, spark
- Language: Python
- Homepage:
- Size: 5.11 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Ventes de vélos en Europe
![Docker](https://img.shields.io/badge/Docker-blue) ![Bash](https://img.shields.io/badge/Bash-lightgrey) ![Python](https://img.shields.io/badge/Python-blue) ![FastAPI](https://img.shields.io/badge/FastAPI-green) ![Spark](https://img.shields.io/badge/Spark-orange) ![Kafka](https://img.shields.io/badge/Kafka-brown) ![Hadoop](https://img.shields.io/badge/Hadoop-yellow) ![Grafana](https://img.shields.io/badge/Grafana-red) ![Postgres](https://img.shields.io/badge/PostgreSQL-pink)
Screenshot du dashboard Bike Sales## Source de donnée
[Dataset des ventes de vélos en Europe](https://www.kaggle.com/datasets/sadiqshah/bike-sales-in-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
Votre rapport Hadoop (dans un scénario idéal).
http://localhost:8088/cluster/apps### Mise en place et lancement du projet
#### 1. Lancer le traitement en batch
```bash
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
```bash
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
Schéma de l'architecture (voir le détails dans le dossier tp00-pipeline-architecture)#### Visualiser les données traitées
Enfin, veuillez vous rendre sur [localhost:3000 dans le Dashboard](http://localhost:3000/d/ddtc9zkmxla80e/bike-sales-analytics?orgId=1) et vous connecter sur Grafana (username: admin, password: admin) afin d'avoir la visualisation des [réponses aux objectifs](#objectif).
#### Comment produire des données en temps réel ?
```bash
# 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
- L'image initial du cluster hadoop vient du [TP BigData de l'Ecole Centrale de Lyon](https://gitlab.ec-lyon.fr/sderrode/TP_BigData_ECL) proposé par Stéphane DERRODE.
- [Documentation pySpark](https://spark.apache.org/docs/latest/api/python/index.html)
- [Documentation Grafana](https://grafana.com/docs/grafana/latest/)## Groupe
- Faustine CHARRIER
- Mattis ALMEIDA LIMA
- Louisan TCHITOULA
- Djédjé GBOBLE
- Julien HEITZ