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émagold. 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.
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 :
| 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.