· SG HIRSCHI
Données de performance (riro.de)
Résumé
Chaque année en Suisse, 12 courses sont organisées avec des pigeons homogénés. En analysant les temps de vol et les distances entre les points de relâchement et chaque loft d'accueil des pigeons, on peut calculer la vitesse moyenne pour chaque pigeon. Un tiers des pigeons participants sont listés («prizes»).http://www.bas-riro.de/).
Utilisation de scripts Python et d'expressions régulières (GitHub), les données de performance des pigeons d'élevage peuvent être importées dans une base de données (ici, MySQL), agrégées, puis formatées en HTML. Ceci fournit aux éleveurs un aperçu pratique des résultats de leurs pigeons.
Mise en œuvre
Base de données
Le modèle de données est conçu pour être aussi simple que possible. Bien que les données puissent être fortement normalisées et dactylographiées, cela serait excessif pour l'objectif ultime d'une page de résultats en HTML5 / JavaScript / CSS. Par conséquent, dans ce cas, seulement deux tables ont été créées dans une base de données MySQL:
- 2022 Flugsaison
- Les résultats pour les pigeons (ranches, points, vitesse, etc.) par vol, ainsi que les informations agrégées (nombre d'éleveurs, nombre de pigeons, etc.).
- 2022 Eingesetzte Tauben
- Ici, il devrait être visible pour chaque vol que les pigeons étaient encore ou encore utilisés.
Les instructions suivantes peuvent être utilisées pour créer les tableaux :
CREATE TABLE `2022_Flugsaison` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`taubennr` varchar(255) NOT NULL,
`mmin` varchar(255) NOT NULL,
`prs_fg` varchar(255) DEFAULT NULL,
`prs_rv` varchar(255) DEFAULT NULL,
`aspkt_fg` varchar(255) DEFAULT NULL,
`aspkt_rv` varchar(255) DEFAULT NULL,
`insert_dttm` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`km` varchar(255) NOT NULL,
`prs` varchar(255) NOT NULL,
`auflassort` varchar(255) NOT NULL,
`prs_zt` varchar(255) NOT NULL,
`flugnummer` varchar(255) NOT NULL,
`prs_tb` varchar(255) DEFAULT NULL,
`flugdatum` date DEFAULT NULL,
`anz_ztr_fg` varchar(255) DEFAULT NULL,
`anz_ztr_rv` varchar(255) DEFAULT NULL,
`anz_tbn_fg` varchar(255) DEFAULT NULL,
`anz_tbn_rv` varchar(255) DEFAULT NULL,
`prs_rg` varchar(255) DEFAULT NULL,
`anz_tbn_rg` varchar(255) DEFAULT NULL,
`anz_ztr_rg` varchar(255) DEFAULT NULL,
`aspkt_rg` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=917 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `2022_Eingesetzte_Tauben` (
`id` int NOT NULL AUTO_INCREMENT,
`taubennr` varchar(255) NOT NULL,
`flugnummer` varchar(255) NOT NULL,
`insert_dttm` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=297 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Sources des données
Pour ce projet, deux sources peuvent être intéressantes :
- Données sur les résultats http://www.bas-riro.de/
- Données de l'appareil TIPES https://tipes.de/
Malheureusement, les données de classement sont très hétérogènes, variant selon l'association de course, le pays et parfois même par vol. Par exemple, cela peut se produire lorsque certains vols sont effectués avec d'autres associations de course, ce qui donne lieu à une liste globale de classement à la fin.
Les données de l'appareil Tipes comprennent les heures d'arrivée enregistrées pour chaque pigeon et servent de base à la création du classement général. Heureusement, ces données sont toujours formatées de façon uniforme.
Traitement des données
Méthode
Pour lire les données textuelles parfois hétérogènes de manière cohérente et générique, on utilise des expressions régulières. En définissant un ensemble de règles syntaxiques qui sont reconnues et extraites des données, on peut analyser des composants texte individuels en fonction de délimiteurs spécifiques (par exemple, espaces).
Sur le site https://regex101.com/, vous pouvez créer, vérifier, valider et tester ces règles.

Les différents composants codés en couleurs peuvent être ensuite facilement utilisés dans pratiquement n'importe quel langage de programmation.
Lecture des données TIPES
Les données des appareils Tipes comprennent non seulement les heures d'arrivée, mais aussi la liste de chaque pigeon qui a été entré dans le vol. Ceci fournit une bonne base pour les statistiques pour montrer si le pigeon a effectivement été entré dans les vols respectifs.

Pour ce format spécifique, l'expression régulière suivante s'est révélée utile:
^([0-9][0-9][0-9][0-9])([1-9][0-9])([A-Z][A-Z]?)\s*(0*)([1-9][0-9]*w?)\s*([0-9]*)\s*([0-9A-Z]*)(\*)([0-9]*;)([A-Z][A-Z]?)([0-9]*).([1-9][0-9]).([0-9]*w?);([a-zA-Z0-9.]*)$
Les instructions détaillées pour le traitement se trouvent dans le dépôt public GitHub.
Lire les données de performance (riro)

Pour ce format, l'expression régulière suivante s'est révélée utile :
^(\s*)([1-9][0-9]*[a-z]?)(\s*)([1-9][0-9]*[a-z]?)?(\s*)([1-9][0-9]*[a-z]?)?(\s*)([0-9][A-Z][0-9]\/)?(\s*)([0-1][0-9]*)?(\s*)([0-9]*)?(\s*)([0-9]*)?(\s*)([a-zA-Z]*)?(\s*)([0-9]*)(\s*)([0-9]*)?(\s*)([0-9]*W?\s)(\s*)([a-zA-Zäöüéèß&]*[.,]?\s*[,]?\s*[a-zA-Zäöüéèß&]*\s*[,+]?[a-zA-Zäöüéèß&]*\s*[+-.\/]*\s*[a-zA-Zäöüéèß&]*.?)(\s*)([0-9][0-9])(\s*)([0-9]*\/\s*[0-9]*)?(\s*)([0-9][0-9]?\s)?(\s*)([0-9][0-9]?\s)?(\s*)([0-9]*.[0-9]*.[0-9]*)(\s*)(-?[0-9]\s)?(\s*)([0-9]*,[0-9]*)(\s*)([0-9]*,[0-9]*)?(\s*)([0-9]*,[0-9]*)?(\s*)([0-9]*,[0-9]*)?(\s*)([A-Z])?(\s*)([0-9]*\/\s*[0-9]*)(\s*)([0-9]*)(\s*)([0-9]*,?[0-9]*)(\s*)([0-9]*)(\s*)([0-9]*)(\s*)$
Cela permet l'extraction structurée de:
- Nombre de pigeons (y compris la nationalité, le sexe et l'année de naissance)
- Classements (régionaux, de groupe, etc.)
- Points d'as (régionaux, groupes, etc.)
- Vitesse
- Nom de l'éleveur
- …
Des instructions détaillées pour le traitement peuvent être trouvées dans le dépôt public GitHub.
Agrégation des données
Maintenant que toutes les données nécessaires ont été importées dans la base de données MySQL, il est important de les visualiser dans un format approprié. Par exemple, l'interrogation des résultats par pigeon et vol et leur regroupement dans une table peuvent être réalisés comme suit:
SELECT EING.taubennr,
CAST(EING.flugnummer AS UNSIGNED) AS flugnummer,
RESULTATE.prs_fg,
RESULTATE.prs_rv,
RESULTATE.prs_zt,
IF(RESULTATE.aspkt_fg IS NULL OR RESULTATE.aspkt_fg='',NULL,CAST(REPLACE(RESULTATE.aspkt_fg,',','.') AS DECIMAL(4,2))) AS aspkt_fg,
IF(RESULTATE.aspkt_rv IS NULL OR RESULTATE.aspkt_rv='',NULL,CAST(REPLACE(RESULTATE.aspkt_rv,',','.') AS DECIMAL(4,2))) AS aspkt_rv
FROM brieftauben.`2022_Eingesetzte_Tauben` AS EING
LEFT JOIN brieftauben.`2022_Flugsaison` AS RESULTATE ON RESULTATE.taubennr = EING.taubennr AND RESULTATE.flugnummer = EING.flugnummer
Visualisation des données
Les résultats de la requête SQL peuvent être transformés et agrégés selon les besoins, puis publiés en tant que site Web HTML/JavaScript/CSS, par exemple.

Pour rendre cette impression imprimable, j'ai également implémenté un bouton «PDF Export». La sortie peut ne pas être belle, mais elle est fonctionnelle.

Maintenant toutes les étapes sont terminées, et vous pouvez importer, traiter et enfin mettre à jour le site Web avec les données pertinentes dans MySQL après chaque vol en quelques clics. Des exemples de ces sites Web peuvent être trouvés à: https://patrick-hirschi.ch/brieftauben/
Article original archivé. Les crédits médias de l'article sont conservés.
← Journal