Aller au contenu

Adapter le package à ses données

Cette page décrit le passage du test set anonymisé à un projet réel. Elle sert de checklist avant de lancer les notebooks de production ou l'API xyt_gps dans un script.

1. Stabiliser les fichiers d'entrée

Le package attend des tables GPS structurées autour de quatre objets :

Table Obligatoire Rôle
storyline oui événements GPS : stays et tracks
trips oui déplacements agrégés fournis par la source
journeys oui chaînes de déplacements
user_statistics recommandé suivi utilisateur et dates de couverture
sociodemographics optionnel variables individuelles jointes par user_id

Avant de transformer les données, lancer un contrôle de colonnes :

report = xyt.check_raw_import_columns(
    storyline,
    user_statistics,
    trips=trips,
    journeys=journeys,
)
report.query("status == 'missing_required'")

Une colonne obligatoire manquante doit être corrigée dans la donnée source, dans le landing ou dans le mapping de colonnes. Elle ne doit pas être compensée par un fallback implicite.

2. Définir explicitement le projet

Les choix méthodologiques doivent être visibles dans ProjectConfig :

config = xyt.ProjectConfig(
    experiment_name="mon-projet",
    motiontag_project_name="mon-export-source",
    start_expe="2026-04-01",
    end_expe="2026-06-30",
    phases=(
        xyt.Phase("Phase1", "2026-04-01", "2026-04-21"),
        xyt.Phase("Phase2", "2026-04-22", "2026-05-19"),
    ),
)

Si le projet n'a pas de phase, utiliser phases=(). Si une phase future n'a pas encore commencé, ne pas l'instancier dans ProjectConfig. Dans un fichier JSON de configuration projet, utiliser null pour documenter une date absente, mais le code qui construit ProjectConfig doit ignorer cette phase tant que ses deux dates ne sont pas connues.

3. Charger les données

Lorsque les fichiers suivent le nommage attendu par le fournisseur, le package peut les trouver depuis ProjectConfig. Pour un notebook, il est souvent plus lisible de charger les tables explicitement :

raw = xyt.RawGpsData(
    storyline=storyline,
    trips=trips,
    journeys=journeys,
    user_statistics=user_statistics,
)

Le diagnostic utile avant transformation :

validation = xyt.validate_gps_raw(raw)
summary = {
    name: {
        "ok": report.ok,
        "errors": sum(issue.severity == "error" for issue in report.issues),
        "warnings": sum(issue.severity == "warning" for issue in report.issues),
    }
    for name, report in validation.items()
}

4. Transformer sur un petit échantillon

Avant un traitement complet, filtrer quelques utilisateurs complets et lancer une transformation minimale :

result = xyt.run_mobility_pipeline(
    config,
    raw=raw_sample,
    sociodemo=sociodemographics_sample,
    resample_missing_days=False,
    clean_leg_geometries=False,
    add_length_outlier_flags=False,
    add_signal_quality_flags=False,
    compute_indicators=False,
)

Ce test vérifie les dates, les géométries, les liens trips / journeys et les mappings de modes sans lancer toute la chaîne d'indicateurs.

5. Passer au traitement complet

Une fois le diagnostic validé :

  • réactiver les contrôles utiles au projet ;
  • expliciter les phases réellement disponibles ;
  • documenter les seuils retenus ;
  • conserver les sorties intermédiaires et les rapports de validation ;
  • relancer les notebooks de production dans l'ordre.

Les notebooks quickstart-analyse-gps.ipynb et diagnostiquer-ses-donnees.ipynb montrent ces étapes sur le test set anonymisé.