Python — KPIs, qualité & mini-app

Jeu de données e-commerce fictif et pipeline léger en Pandas : génération → ingestion & nettoyage → KPIs + graphiques → contrôles qualité & journal → mini-app Streamlit. L’objectif est d’illustrer un flux « du notebook au produit » simple, reproductible et prêt à brancher sur un tableau de bord.

Python Pandas SQLite Matplotlib Streamlit

↩ Retour au Showcase

P1 — Ingestion & nettoyage

Schéma logique & tables clean (customers → orders → order_items, products, payments)
Modèle minimal clean : customers → orders → order_items (+ products, payments). Les mêmes données sont persistées en Parquet (analyse rapide) et dans SQLite (SQL ad-hoc).

Objectifs & portée

Transformer des fichiers bruts en un jeu de tables lisibles et typées. On force les formats (dates, montants), on gère les valeurs douteuses, et on écrit deux sorties complémentaires : Parquet (lecture/BI rapide) et SQLite (jointures SQL simples).

  • Validations de base : coercition numérique, parsing de dates, colonnes requises.
  • Convention de nommage : snake_case et clés techniques _id.
  • Persistance duale : Parquet (colonne) pour l’analytics, SQLite pour l’explo ad-hoc.
Extrait de script d’ingestion & nettoyage (pandas → Parquet & SQLite)
Fichiers Parquet produits pendant l’ingestion — format compact & rapide.
Tables Parquet générées (customers.parquet, orders.parquet, …)
Sorties Parquet générées (5 fichiers) — vérification rapide du découpage par entité.

Bénéfice : démarrer des analyses reproductibles (parquet + SQL) sans dépendre d’un entrepôt externe.

P2 — KPIs mensuels & graphiques

CSV des KPIs mensuels (year_month, revenue_chf, orders_cnt, active_customers, avg_order_value)
Export sales_monthly.csv : un format d’échange universel (BI, Excel, outils no-code).

Qu’est-ce qu’on calcule ?

  • CA mensuel (CHF), volume de commandes, clients actifs, panier moyen.
  • Fenêtre temporelle continue via un calendrier (tous les mois présents, même sans ventes).
  • Exports CSV + PNG pour partage rapide dans des slides/rapports.
Courbe : chiffre d'affaires mensuel
Évolution du chiffre d’affaires : on repère les creux, pics et saisonnalités.
Barres : nombre de commandes mensuel
Rythme des commandes : utile pour suivre l’adoption et la rétention.
Console - script P2 terminé, chemins d'exports
Trace d’exécution : chemins des exports et aperçu des 12 premières lignes.

P3 — Contrôles qualité & journal

Synthèse des contrôles qualité (doublons, NULL, paiements négatifs, références orphelines)
Synthèse des règles : doublons (clé composite), valeurs NULL, montants négatifs, références orphelines.

Pourquoi c’est utile ?

Avant d’alimenter un dashboard, on mesure la santé des données. Chaque règle renvoie un volume affecté et une sévérité (low/medium/high). Les résultats alimentent un journal d’exécution pour suivre l’historique des traitements.

  • Fichier logs/job_runs.csv : job_name, timestamp, status, issues_found, message.
  • Exploitable facilement : on filtre par job, agrège par jour/semaine, alerte via n8n/Make.
  • Base d’un contrôle continu (DataOps) sans infra lourde.
Extrait de journal des jobs (CSV)
Extrait de journal après un run de qualité — utile pour auditer et diagnostiquer.

P4 — Mini-app Streamlit (KPIs & API)

Dashboard Streamlit : table derniers mois, 2 graphiques (CA et commandes)
Vue principale : derniers mois en table + deux graphiques. La mini-app lit les exports générés en P2.

Interaction & intégration

Un bouton déclenche un appel d’API externe (mock FX & météo), concatène un message lisible et inscrit une nouvelle ligne dans le journal. On démontre ainsi comment « brancher le monde extérieur » dans un flux Python très simple.

  • Écriture append dans job_runs.csv avec un message métier (EUR/CHF, météo Genève).
  • Rechargement instantané côté UI pour visualiser l’impact de l’action.
  • Point d’entrée naturel pour notifier/planifier (cron, Azure, GitHub Actions).
Journal Streamlit après appel d'API (message EUR/CHF, météo Genève)
Feedback utilisateur clair + ligne de log persistée.
job_runs.csv après l'appel d'API (ligne external_api)
Trace côté fichiers : un nouvel enregistrement external_api horodaté.