TimeSeries
Ce cookbook montre des exemples concrets d’utilisation de l’objet TimeSeries de la bibliothèque PyCTOH.
Création d’un objet TimeSeries
Pour créer un objet TimeSeries, suivez ces étapes :
# Importer les modules nécessaires
from pyctoh.db.catalogue import Catalogue
from pyctoh.track.timeseries import TimeSeries
# Charger le catalogue de produits CTOH
# Remplacez le chemin par celui de votre catalogue
cat = Catalogue(filepath="/ctoh/data/db/catalogue_yml/ctoh_products_base.yml")
# Sélectionner une trace spécifique
# Ici, on choisit la trace numéro 9
track_num = 9
track_obj = cat.query('ja3_a_cnes_f_sgdr', tracks=[track_num])
# Créer un objet TimeSeries à partir de la trace sélectionnée
ts = TimeSeries(track_obj, track_num)
Visualisation
Vous pouvez visualiser les données de la série temporelle de différentes façons :
# Visualiser les données en fonction du temps
# 'data_20/ku/sig0_ocog' est le chemin de la variable à visualiser
# 'time' est utilisé comme axe des abscisses
# Le résultat est sauvegardé dans un fichier nommé 'sig0.png'
ts.plot('data_20/ku/sig0_ocog', abs_x='time', filename='sig0.png')
# Visualiser les données sur une carte géographique
# Le résultat est sauvegardé dans un fichier nommé 'sig0_map.png'
ts.map_plot('data_20/ku/sig0_ocog', filename='sig0_map.png')
Création de la trace normalisée d’un produit
Voici un exemple complet pour le produit ja3_a_cnes_f_sgdr :
# Importer les modules nécessaires
from pathlib import Path
from pyctoh.db.catalogue import Catalogue
from pyctoh.track.timeseries import TimeSeries
# Nom du produit à traiter
prod_name = "ja3_a_cnes_f_sgdr"
# Charger le catalogue de la base de données
# Remplacez les chemins par ceux de votre base de données
catalogue_filepath = "/ctoh/data/projects/normpass_test_XTrack/ctoh_products_base.yml"
metadata_dir = "/ctoh/data/projects/normpass_test_XTrack/metadb"
cat = Catalogue(catalogue_filepath, metadata_dir=metadata_dir)
# Répertoire où les traces normalisées seront sauvegardées
db_dir = Path("/ctoh/data/projects/normpass_test_XTrack")
# Parcourir chaque trace du produit
for t in range(1, 255):
print(f"Traitement de la trace : {t}")
# Sélectionner la trace actuelle
tracks = [t]
# Charger le produit en mémoire
# `decode_times=False` permet d'optimiser le temps de chargement
tr = cat.query_product(
prod_name, tracks=tracks, decode_times=False
)
# Créer un objet TimeSeries pour la trace actuelle
ts = TimeSeries(tr, tracks[0])
ts.prod_name = prod_name
# Trace de référence
reftrack_filepath=db_dir.joinpath("ja3_a_cnes_f_sgdr","reftrack",f"JA3_A_RefTrack_{t:04d}.nc")
# Chargement de l'index précalculé en base de données
ts.load_norm_index(reftrack_filepath=reftrack_filepath)
# Calculer la structure de trace normalisée
ts.to_normpass([])
# export de la trace normalisée
ts.export_normpass(output_dir=output_dir.joinpath("normpass"))
Calcul d’une trace de référence d’un produit
Exemple pour le produit ja3_a_cnes_f_sgdr :
# Importer les modules nécessaires
from pathlib import Path
from pyctoh.db.catalogue import Catalogue
from pyctoh.track.timeseries import TimeSeries
# Nom du produit à traiter
prod_name = "ja3_a_cnes_f_sgdr"
# Charger le catalogue de la base de données
# Remplacez les chemins par ceux de votre base de données
catalogue_filepath = "/ctoh/data/projects/normpass_test_XTrack/ctoh_products_base.yml"
metadata_dir = "/ctoh/data/projects/normpass_test_XTrack/metadb"
cat = Catalogue(catalogue_filepath, metadata_dir=metadata_dir)
# Répertoire où les traces normalisées seront sauvegardées
db_dir = Path("/ctoh/data/projects/normpass_test_XTrack")
# Parcourir chaque trace du produit
for t in range(1, 255):
print(f"Traitement de la trace : {t}")
# Sélectionner la trace actuelle
tracks = [t]
# Charger le produit en mémoire
# `decode_times=False` permet d'optimiser le temps de chargement
tr = cat.query_product(
prod_name, tracks=tracks, decode_times=False
)
# Créer un objet TimeSeries pour la trace actuelle
ts = TimeSeries(tr, tracks[0])
ts.prod_name = prod_name
# Calculer l'index normalisé
# Les paramètres doivent être configurés en fonction du produit
# - ref_freq : fréquence de référence
# - delta_lat_eq : seuil de latitude à l'équateur
# - delta_lon_apex : seuil de longitude pour les apex
# - index_length : longueur du segment de trace pour l'interpolation
# - apex_idx_offset : décalage de l'index pour les apex
# - dist_max : distance maximale entre le point de référence et la trace
ts.calc_norm_index(ref_freq=20., delta_lat_eq=5., delta_lon_apex=5., index_length=50, apex_idx_offset=300, dist_max=110)
# Calculer la structure de trace normalisée
ts.to_normpass([])
# Calculer la trace de référence
ts.calc_reftrack()
# Exporter la trace de référence
# Remplacez le chemin par celui de votre répertoire de sortie
ts.export_reftrack(output_dir=db_dir.joinpath("reftrack"))