Convertir un dataset Open sans adapter existant¶
Il arrive qu'on tombe sur un dataset public intéressant (Zenodo,
Kaggle, Figshare…) qui n'a pas encore d'entrée dédiée sous
datasets/ dans le monorepo. Voici le chemin manuel pour en tirer
un dataset Telemachus Telemachus valide.
0. Vérifier la licence avant tout¶
Appliquez le test de Écrire un adapter → Piège licence.
Une source en CC-BY-NC-ND interdit de republier un dérivé : vous
pouvez publier le code de l'adapter, pas le parquet converti.
Tout ce qui suit suppose que vous avez le droit de garder une copie
locale pour votre propre usage.
1. Inventorier la source¶
Ouvrez les fichiers bruts et identifiez, colonne par colonne, ce que chaque flux contient vraiment :
| Colonne source | Unité | Cadence | Correspond à Telemachus |
|---|---|---|---|
timestamp_ms |
ms depuis epoch | — | ts (convertir en datetime UTC) |
latitude |
deg | 1 Hz | lat |
longitude |
deg | 1 Hz | lon |
speed_kmh |
km/h | 1 Hz | speed_mps (÷ 3.6) |
accel_x_g |
g | 100 Hz | ax_mps2 (× 9.80665) |
accel_y_g |
g | 100 Hz | ay_mps2 |
accel_z_g |
g | 100 Hz | az_mps2 |
gyro_x_dps |
deg/s | 100 Hz | gx_rad_s (× π/180) |
| … |
Si une colonne Telemachus attendue manque, décidez tout de suite comment la gérer :
- Colonnes GPS absentes au rythme IMU → laisser en
NaN(convention multi-rate, SPEC-01 §3.5) - Heading manquant → le recalculer depuis deux points GPS consécutifs (bearing Haversine)
- Gyro absent → laisser les colonnes gyro absentes (SPEC-01 §3.3 : absentes ou full-NaN, jamais remplies avec des zéros)
2. Télécharger et décompresser¶
Les scripts vivent dans un dossier adapter dans votre copie de travail, pas commité si la licence est restrictive :
mkdir -p datasets/xx_my_source/
cd datasets/xx_my_source/
cat > download.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
mkdir -p raw
curl -sSL -o raw/data.zip "https://example.org/dataset.zip"
cd raw && unzip -q data.zip && cd ..
echo "fichiers bruts sous datasets/xx_my_source/raw/"
EOF
chmod +x download.sh
3. Écrire l'adapter¶
Le template complet est sur Écrire un adapter. Le minimum à faire :
- Lire les fichiers bruts (CSV / Parquet / format vendor).
- Renommer et convertir les colonnes (attention aux unités !) vers les noms Telemachus.
- Trier par
ts, s'assurer de la monotonie, dédupliquer si besoin. - Écrire le parquet Telemachus.
- Produire un
manifest.yamlqui déclarehardware,sensors.*.rate_hz,acc_periods(start/end/frame), le blocsourceet lalicense.
4. Détecter le frame accéléromètre¶
Étape critique, souvent oubliée. Faites ce check sur un segment stationnaire connu (device à l'arrêt sur une table, véhicule à l'arrêt moteur coupé) :
import numpy as np, pandas as pd
df = pd.read_parquet("data.parquet")
# Prendre une fenêtre stationnaire (10 premières secondes ici)
rest = df.iloc[:int(10 * 100)] # 10 s à 100 Hz
a_norm = np.sqrt(rest["ax_mps2"]**2 + rest["ay_mps2"]**2 + rest["az_mps2"]**2)
mean_g = a_norm.mean()
print(f"||a|| au repos : {mean_g:.2f} m/s²")
if mean_g > 8:
frame = "raw" # gravité présente
elif mean_g < 2:
frame = "compensated" # firmware l'a retirée
else:
frame = "partial"
print(f"→ frame = {frame}")
Et reportez le résultat dans manifest.yaml sous acc_periods :
acc_periods:
- start: 2024-01-01T00:00:00Z
end: 2024-12-31T23:59:59Z
frame: raw # ou compensated / partial
detection_method: auto
residual_g: 0.0 # uniquement si frame=partial
5. Valider¶
Les deux artefacts doivent passer :
# Manifest
ajv validate \
-s spec/schemas/telemachus_manifest_v0.8.json \
-d datasets/xx_my_source/manifest.yaml
# Sanity Telemachus (pas encore de CLI canonique)
python -c "
import pandas as pd
df = pd.read_parquet('datasets/xx_my_source/data.parquet')
req = ['ts','lat','lon','speed_mps','ax_mps2','ay_mps2','az_mps2']
assert not [c for c in req if c not in df.columns], 'colonnes manquantes'
assert df['ts'].is_monotonic_increasing
print('OK')
"
6. Partager (optionnel)¶
Si la licence autorise la redistribution :
- Ouvrez une PR qui ajoute votre adapter sous
python-cli/adapters/. - Ajoutez le
manifest.yamlsousdatasets/xx_my_source/. - Volume brut < 10 Mo : vous pouvez committer le parquet directement.
Au-delà :
git-lfspour les fichiers > 10 Mo, ou mettez le parquet sur Zenodo et référencez-le dans le manifest.
La matrice des sources Open vous dit quelles sources sont déjà couvertes, histoire d'éviter les doublons.