Python Avance pour Lead Developers

Master 2 LDF 2025-2026

Projet Final : Plateforme d'Analyse de Donnees Temps Reel

Concevoir et developper une architecture complète pour le traitement et la visualisation de donnees massives

Contexte et Enjeux Professionnels

Vous êtes Lead Developer dans une startup de SaaS qui propose une plateforme d'analyse de donnees. Votre equipe doit creer un système robuste, scalable et maintenable capable de :

Ce projet simule les defis reels que vous rencontrerez dans votre carriere de Lead Developer.

Objectifs Pedagogiques

A la fin de ce projet, vous devez etre capable de :

Architecture Generale du Projet

Votre plateforme doit etre organisee selon cette architecture :

Architecture en Couches

projet_analyse/ ├── data_loader/ # Couche d'entree des donnees │ ├── __init__.py │ ├── csv_loader.py │ └── data_validator.py ├── data_processor/ # Couche de traitement des donnees │ ├── __init__.py │ ├── cleaner.py │ ├── aggregator.py │ └── statistics.py ├── visualization/ # Couche de visualisation │ ├── __init__.py │ ├── chart_builder.py │ └── report_generator.py ├── tests/ # Tests unitaires │ ├── __init__.py │ ├── test_loader.py │ ├── test_processor.py │ └── test_visualization.py ├── main.py # Point d'entree principal ├── config.py # Configuration centralisee ├── requirements.txt # Dependencies └── README.md # Documentation

Donnees d'Entree

Vous allez travailler avec des donnees de ventes multi-sources. Voici un exemple de fichier ventes_2025.csv contenant plusieurs mois de donnees :

date,produit,categorie,prix,quantite,ville,source 2025-01-01,Stylo,Fournitures,1.5,10,Paris,web 2025-01-01,Cahier,Fournitures,3.0,5,Lyon,magasin 2025-01-02,Souris,Electronique,25.0,2,Paris,web 2025-01-03,Clavier,Electronique,80.0,3,Marseille,web 2025-01-03,Stylo,Fournitures,1.5,20,Lyon,magasin 2025-01-04,Cahier,Fournitures,3.0,,Lyon,web 2025-01-04,Ecran,Electronique,350.0,1,Paris,web 2025-01-05,Stylo,Fournitures,1.5,15,Paris,magasin 2025-01-06,Webcam,Electronique,60.0,4,Lille,web 2025-01-07,Tapis de souris,Fournitures,12.0,10,Bordeaux,magasin 2025-01-08,Clavier,Electronique,80.0,2,Paris,web 2025-01-09,Souris,Electronique,25.0,5,Lyon,magasin 2025-01-10,USB-C Hub,Electronique,45.0,3,Marseille,web 2025-01-11,Cahier,Fournitures,3.0,30,Lille,magasin 2025-01-12,Ecran,Electronique,350.0,,Paris,web 2025-01-13,Webcam,Electronique,60.0,2,Lyon,web 2025-01-14,Tapis de souris,Fournitures,12.0,25,Paris,magasin 2025-01-15,Stylo,Fournitures,1.5,50,Bordeaux,web 2025-01-15,Stylo,Fournitures,1.5,50,Bordeaux,web 2025-01-16,USB-C Hub,Electronique,45.0,5,Paris,magasin 2025-01-17,Clavier,Electronique,80.0,,Marseille,web 2025-01-18,Souris,Electronique,25.0,8,Lille,magasin 2025-01-19,Cahier,Fournitures,3.0,15,Paris,web 2025-01-20,Ecran,Electronique,350.0,2,Lyon,magasin 2025-02-01,Stylo,Fournitures,1.5,12,Paris,web 2025-02-02,Cahier,Fournitures,3.0,8,Lyon,magasin 2025-02-03,Souris,Electronique,25.0,4,Paris,web 2025-02-04,Clavier,Electronique,80.0,2,Marseille,web 2025-02-05,Stylo,Fournitures,1.5,18,Lyon,magasin 2025-02-06,Cahier,Fournitures,3.0,7,Lille,web 2025-02-07,Ecran,Electronique,350.0,1,Paris,magasin 2025-02-08,Stylo,Fournitures,1.5,14,Bordeaux,web 2025-02-09,Webcam,Electronique,60.0,3,Lyon,magasin 2025-02-10,Tapis de souris,Fournitures,12.0,11,Paris,web 2025-02-11,Clavier,Electronique,80.0,3,Marseille,magasin 2025-02-12,Souris,Electronique,25.0,6,Lille,web 2025-02-13,USB-C Hub,Electronique,45.0,4,Paris,magasin 2025-02-14,Cahier,Fournitures,3.0,20,Bordeaux,web 2025-02-15,Ecran,Electronique,350.0,,Lyon,magasin 2025-02-16,Webcam,Electronique,60.0,2,Paris,web 2025-02-17,Tapis de souris,Fournitures,12.0,22,Marseille,magasin 2025-02-18,Stylo,Fournitures,1.5,45,Lille,web 2025-02-19,USB-C Hub,Electronique,45.0,3,Paris,magasin 2025-02-20,Clavier,Electronique,80.0,,Lyon,web 2025-03-01,Stylo,Fournitures,1.5,11,Paris,web 2025-03-02,Cahier,Fournitures,3.0,6,Lyon,magasin 2025-03-03,Souris,Electronique,25.0,3,Paris,web 2025-03-04,Clavier,Electronique,80.0,4,Marseille,web 2025-03-05,Stylo,Fournitures,1.5,19,Lyon,magasin 2025-03-06,Cahier,Fournitures,3.0,9,Lille,web 2025-03-07,Ecran,Electronique,350.0,2,Paris,magasin 2025-03-08,Stylo,Fournitures,1.5,13,Bordeaux,web 2025-03-09,Webcam,Electronique,60.0,5,Lyon,magasin 2025-03-10,Tapis de souris,Fournitures,12.0,12,Paris,web 2025-03-11,Clavier,Electronique,80.0,1,Marseille,magasin 2025-03-12,Souris,Electronique,25.0,7,Lille,web 2025-03-13,USB-C Hub,Electronique,45.0,2,Paris,magasin 2025-03-14,Cahier,Fournitures,3.0,24,Bordeaux,web 2025-03-15,Ecran,Electronique,350.0,1,Lyon,magasin 2025-03-16,Webcam,Electronique,60.0,3,Paris,web 2025-03-17,Tapis de souris,Fournitures,12.0,20,Marseille,magasin 2025-03-18,Stylo,Fournitures,1.5,48,Lille,web 2025-03-19,USB-C Hub,Electronique,45.0,6,Paris,magasin 2025-03-20,Clavier,Electronique,80.0,2,Lyon,web 2025-04-01,Stylo,Fournitures,1.5,9,Paris,web 2025-04-02,Cahier,Fournitures,3.0,4,Lyon,magasin 2025-04-03,Souris,Electronique,25.0,5,Paris,web 2025-04-04,Clavier,Electronique,80.0,3,Marseille,web 2025-04-05,Stylo,Fournitures,1.5,17,Lyon,magasin 2025-04-06,Cahier,Fournitures,3.0,8,Lille,web 2025-04-07,Ecran,Electronique,350.0,1,Paris,magasin 2025-04-08,Stylo,Fournitures,1.5,16,Bordeaux,web 2025-04-09,Webcam,Electronique,60.0,4,Lyon,magasin 2025-04-10,Tapis de souris,Fournitures,12.0,9,Paris,web 2025-04-11,Clavier,Electronique,80.0,,Marseille,magasin 2025-04-12,Souris,Electronique,25.0,5,Lille,web 2025-04-13,USB-C Hub,Electronique,45.0,3,Paris,magasin 2025-04-14,Cahier,Fournitures,3.0,18,Bordeaux,web 2025-04-15,Ecran,Electronique,350.0,2,Lyon,magasin 2025-04-16,Webcam,Electronique,60.0,1,Paris,web 2025-04-17,Tapis de souris,Fournitures,12.0,23,Marseille,magasin 2025-04-18,Stylo,Fournitures,1.5,52,Lille,web 2025-04-19,USB-C Hub,Electronique,45.0,4,Paris,magasin 2025-04-20,Clavier,Electronique,80.0,2,Lyon,web 2025-05-01,Stylo,Fournitures,1.5,13,Paris,web 2025-05-02,Cahier,Fournitures,3.0,5,Lyon,magasin 2025-05-03,Souris,Electronique,25.0,6,Paris,web 2025-05-04,Clavier,Electronique,80.0,,Marseille,web 2025-05-05,Stylo,Fournitures,1.5,21,Lyon,magasin 2025-05-06,Cahier,Fournitures,3.0,10,Lille,web 2025-05-07,Ecran,Electronique,350.0,1,Paris,magasin 2025-05-08,Stylo,Fournitures,1.5,15,Bordeaux,web 2025-05-09,Webcam,Electronique,60.0,2,Lyon,magasin 2025-05-10,Tapis de souris,Fournitures,12.0,14,Paris,web

Missions a Realiser

1Couche de Chargement des Donnees

Objectif : Concevoir un systeme modulaire pour charger et valider les donnees.

Creez les modules data_loader/csv_loader.py et data_loader/data_validator.py :

  • CSVLoader : Classe responsable du chargement des fichiers CSV avec gestion d'erreurs robuste.
  • DataValidator : Classe pour valider les donnees (types, valeurs manquantes, doublons).
  • Utiliser des patterns comme le Repository Pattern pour abstraire l'acces aux donnees.
  • Implémenter la gestion des exceptions personnalisees.
  • Logger les operations importantes avec le module logging.

2Couche de Traitement des Donnees

Objectif : Implementer des transformations complexes et performantes.

Creez les modules data_processor/cleaner.py, data_processor/aggregator.py et data_processor/statistics.py :

  • DataCleaner : Nettoyage avance (outliers, normalisation, encodage).
  • DataAggregator : Agrégations complexes (groupby multiples, pivots).
  • StatisticsCalculator : Calcul de statistiques descriptives et inferentielles.
  • Optimiser les performances avec Numpy et Pandas.
  • Ajouter des commentaires sur les choix de performance.

3Couche de Visualisation

Objectif : Creer des visualisations professionnelles et interactives.

Creez les modules visualization/chart_builder.py et visualization/report_generator.py :

  • ChartBuilder : Generer des graphiques varies (histogrammes, camemberts, courbes).
  • ReportGenerator : Creer des rapports visuels complets en HTML ou PDF.
  • Utiliser Matplotlib pour les graphiques statiques ou Plotly pour l'interactivite.
  • Exporter les resultats en PDF et HTML.

4Configuration et Logging

Objectif : Centraliser la configuration et implementer un logging professionnel.

Creez config.py et utilisez le logging :

  • Utiliser un fichier config.py pour centralisr toutes les configurations.
  • Utiliser le module logging pour tracer les operations.
  • Implementer differents niveaux de log (DEBUG, INFO, WARNING, ERROR).
  • Sauvegarder les logs dans des fichiers.

5Tests Unitaires et d'Integration

Objectif : Assurer la qualite du code avec une couverture de tests.

Creez une suite de tests dans le dossier tests/ :

  • Tests unitaires pour chaque classe/fonction principale.
  • Tests d'integration pour les workflows complets.
  • Utiliser pytest ou unittest.
  • Viser une couverture d'au moins 70% du code.
  • Tests des cas d'erreur et des limites (edge cases).

6Documentation et README

Objectif : Documenter le projet pour une equipe de developpeurs.

Creez une documentation complète :

  • README detaille avec instructions d'installation et d'utilisation.
  • Docstrings complets pour toutes les classes et methodes.
  • Documentation de l'architecture et des patterns utilises.
  • Guide de contribution et de developpement.
  • Exemples d'utilisation pour chaque module.

7Application Principale

Objectif : Orchestrer tous les modules pour creer une application complete.

Creez main.py qui :

  • Charge les donnees depuis un ou plusieurs CSV.
  • Traite et nettoie les donnees.
  • Calcule les statistiques et agrégations.
  • Genere les visualisations et rapports.
  • Exporte les resultats (PDF, Excel, HTML).
  • Logs toutes les operations.

Exigences Techniques et Qualite du Code

Architecture et Patterns

  • Utiliser la programmation orientee objet (classes, heritage, polymorphisme).
  • Appliquer des patterns de conception : MVC, Repository Pattern, Factory Pattern.
  • Separation des responsabilites (SoC).
  • Respect du principe SOLID.

Performance et Scalabilite

  • Optimiser le traitement des donnees avec Numpy et Pandas.
  • Gerer les donnees volumineuses sans surcharge memoire.
  • Profiler le code pour identifier les goulots d'etranglement.
  • Utiliser des structures de donnees appropriees.

Qualite du Code

  • Code conforme PEP 8.
  • Docstrings detailles pour tous les modules/classes/methodes.
  • Noms de variables et fonctions explicites.
  • Pas de code duplike (DRY principle).
  • Gestion d'erreurs robuste avec exceptions personnalisees.

Logging et Monitoring

  • Utiliser le module logging avec differents niveaux.
  • Logs dans des fichiers avec rotation.
  • Tracer les operations critiques.
  • Afficher des metriques de performance.

Stack Technologique Recommandee

Donnees : Pandas, Numpy
Visualisation : Matplotlib, Plotly
Export : openpyxl (Excel), reportlab (PDF)
Dashboard (Bonus) : Streamlit ou Dash
Tests : pytest
Logging : logging (stdlib)
Code Quality : pylint, flake8, black

Livrables Attendus

1. Architecture Modulaire Complete

Dossier projet bien organise avec tous les modules cites, structures selon l'architecture en couches.

2. Code Commentes et Documente

Tous les fichiers Python avec docstrings completes, commentaires explicatifs et README detaille.

3. Suite de Tests

Tests unitaires et d'integration couvrant au moins 70% du code avec un rapport de couverture.

4. Rapports et Visualisations

Au moins 5 graphiques differents et un rapport complet en PDF/HTML generés automatiquement.

5. Fichiers de Donnees Traites

Fichier Excel avec donnees nettoyees, agrégations et resultats statistiques.

6. Documentation Technique

Documentation detaillee de l'architecture, guide d'utilisation et guide de contribution.

Bareme de Notation

1. Architecture et Patterns de Conception 20 pts
2. Couche de Chargement et Validation 15 pts
3. Couche de Traitement et Analyse 20 pts
4. Visualisations et Rapports 15 pts
5. Tests Unitaires et d'Integration 15 pts
6. Configuration, Logging et Qualite du Code 10 pts
7. Documentation et README 5 pts
TOTAL : 100 points

Points Bonus pour Lead Developers (Optionnel)

  • +10 pts : Deploiement Docker et configuration CI/CD (GitHub Actions, GitLab CI).
  • +10 pts : Cache et optimisation des performances avec Redis ou memcache.
  • +10 pts : Dashboard interactif avec Streamlit ou Dash.
  • +8 pts : Profiling avance et rapport de performance detaille.
  • +8 pts : Support de plusieurs sources de donnees (CSV, JSON, XML, Parquet).
  • +7 pts : Pipeline d'ETL complet avec scheduling (APScheduler).

Conseils pour Reussir

  • Pensez architecture en premier : Ne commencez pas le code sans avoir defini une architecture claire.
  • Modularite : Chaque classe doit avoir une responsabilite unique.
  • Tests des le depart : Ecrivez les tests en parallele du code.
  • Performance : Profiler votre code et optimiser les operations coûteuses.
  • Documentation : Documentez au fur et a mesure, pas a la fin.
  • Code Review : Relisez votre code comme si vous deviez le maintenir.
  • Gestion des erreurs : Prevoyez tous les cas d'erreur possibles.
  • Qualite du code : Utilisez des outils comme pylint et black pour garantir la qualite.

Ressources et References

  • Pandas et Numpy documentation : https://pandas.pydata.org/, https://numpy.org/
  • Design Patterns : "Design Patterns: Elements of Reusable Object-Oriented Software" (Gang of Four)
  • SOLID Principles : https://en.wikipedia.org/wiki/SOLID
  • PEP 8 Style Guide : https://pep8.org/
  • Pytest : https://pytest.org/
  • Plotly : https://plotly.com/python/

Delai de Remise

A definir selon votre calendrier academique.

Format de remise : Depot Git (GitHub/GitLab) avec historique de commits, ou archive ZIP avec tous les fichiers et dossiers.