Aller au contenu

Application d'analyse sur mesure

FastAPI + SVG, servie sur demo.metrika.fr/analyse.

Pourquoi elle existe

Un outil comme Metabase couvre l'essentiel des besoins d'exploration, mais plafonne dès qu'on sort de son cadre : rendu imposé, interactions limitées, identité visuelle du produit et non de l'entreprise, impossibilité de composer une visualisation qui n'existe pas dans son catalogue.

Cette application démontre l'alternative. Même entrepôt, même couche gold, mais rendu et interactions entièrement maîtrisés.

Metabase Sur mesure
Mise en route minutes jours
Autonomie de l'utilisateur totale — il crée ses questions nulle — il consomme ce qui est développé
Maîtrise du rendu catalogue imposé totale
Identité visuelle celle du produit celle de l'entreprise
Visualisations inédites impossible possible
Performance correcte optimisable — ici une requête pour toute la page

Les deux se complètent : Metabase pour l'exploration libre, le sur mesure pour ce qui doit être exactement juste.

Architecture

flowchart LR
    N[Navigateur] -->|"/analyse"| T[Traefik]
    T -->|stripprefix| A[FastAPI]
    A -->|"lecture seule"| P[(gold)]
    A -->|"JSON"| N
    N -->|"rendu SVG"| N
  • FastAPI avec un pool de connexions asynchrone (psycopg)
  • Rôle app_reader : lecture seule, restreint au schéma gold. L'application ne voit ni la donnée brute, ni les vues intermédiaires
  • Conteneur non privilégié, aucune écriture sur disque
  • Zéro bibliothèque JavaScript : tous les graphiques sont construits en SVG

Un seul aller-retour

La page appelle GET /analyse/api/synthese, qui regroupe les huit jeux de données nécessaires. Sur une connexion mobile, la latence pèse davantage que le volume : un appel de 130 ms bat six appels de 40 ms.

curl -s "https://demo.metrika.fr/analyse/api/synthese?mois=24" | head -c 200

Les points d'entrée sont documentés automatiquement sur /analyse/api/docs.

Point d'entrée Contenu
/api/synthese tout ce dont la page a besoin
/api/kpis indicateurs de tête
/api/mensuel série financière mensuelle
/api/regions indicateurs par région
/api/sante sonde de disponibilité

Sécurité des requêtes

Toutes les requêtes SQL sont écrites en dur dans app/requetes.py : aucune construction dynamique à partir d'une entrée utilisateur. Le seul paramètre accepté est la profondeur d'historique, bornée à un ensemble de valeurs connues (6, 12, 24, 36) avant d'atteindre la base.

La carte choroplèthe

Les contours des régions viennent du GeoJSON officiel, simplifié par l'algorithme de Douglas-Peucker :

python3 scripts/generer_carte_regions.py
Avant Après
Taille 489 Ko 40 Ko
Points 12 571 3 366 (26,8 %)

Le script produit deux sorties : des tracés SVG projetés pour cette application, et un GeoJSON allégé pour les cartes personnalisées de Metabase.

Projection

Une projection équirectangulaire simple étirerait la France en largeur. Le script corrige par le cosinus de la latitude moyenne — sans quoi l'Hexagone paraît écrasé.

Adaptation aux écrans

La page est pensée pour le mobile d'abord. Les graphiques ne sont pas redimensionnés : ils sont redessinés au changement de taille, avec une temporisation de 180 ms. Le nombre de graduations, la hauteur des zones et la largeur des étiquettes s'adaptent à la place disponible.

Le réglage système « animations réduites » est respecté : les compteurs affichent directement leur valeur finale et les tracés ne s'animent pas.