· SG HIRSCHI
Performance Data (riro.de)
Sintesi
Ogni anno in Svizzera, 12 gare si tengono con piccioni. Analizzando i tempi di volo e le distanze dai punti di rilascio al loft di ogni piccione, è possibile calcolare la velocità media per ciascun piccione. Un terzo dei piccioni partecipanti sono elencati («prizes»). I risultati (comprese velocità, punti, ecc) di queste razze sono messi a disposizione su RIRO («prizzi»).http://www.bas-riro.de/).
Utilizzo di script Python e espressioni regolari (GitHub), i dati delle prestazioni dei piccioni possono essere importati in un database (qui, MySQL), aggregati e poi formattati come HTML.
Atto
Database
Mentre i dati potrebbero essere altamente normalizzati e digitati, questo sarebbe eccessivo per l'obiettivo finale di una pagina dei risultati in HTML5 / JavaScript / CSS. Pertanto, in questo caso, solo due tabelle sono state create in un database MySQL:
- 2022 Flugsaison
- I risultati per i piccioni (corsi, punti, velocità, ecc.) per volo, insieme a informazioni aggregate (numero di allevatori, numero di piccioni, ecc.).
- 2022 Eingesetzte Tauben
- Qui, dovrebbe essere visibile per ogni volo che i piccioni erano ancora o di nuovo utilizzati.
Le seguenti dichiarazioni possono essere utilizzate per creare le tabelle:
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;
Fonti di dati
Per questo progetto, due fonti possono essere di interesse:
- Dati di performance da http://www.bas-riro.de/
- Dati dal dispositivo TIPES https://tipes.de/
Purtroppo, i dati della classifica sono molto eterogenei, variando da associazione di corse, paese e talvolta anche in volo. Ad esempio, questo può verificarsi quando alcuni voli vengono condotti con altre associazioni di corse, con conseguente classifica generale alla fine.
I dati del dispositivo Tipes includono i tempi di arrivo registrati per ogni piccione e servono come base per la creazione della classifica generale.
Trattamento dei dati
Metodo
Per leggere i dati di testo a volte eterogenei in modo coerente e generico, vengono utilizzate espressioni regolari. Definindo una serie di regole sintattiche riconosciute ed estratte dai dati, i singoli componenti del testo possono essere analizzati in base a specifici delimitatori (ad esempio spazi).
Sul sito web https://regex101.com/, è possibile creare, controllare, convalidare e testare queste regole.

I singoli componenti codificati a colori possono essere successivamente utilizzati in praticamente qualsiasi linguaggio di programmazione.
Leggere i dati dei SUGGERIMENTI
I dati dei dispositivi Tipes non comprendono solo gli orari di arrivo, ma elencano anche ogni piccione inserito nel volo. Questo fornisce una buona base per le statistiche per mostrare se il piccione è stato effettivamente inserito nel rispettivo volo.

Per questo formato specifico, la seguente espressione regolare ha dimostrato di essere 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.]*)$
Le istruzioni dettagliate per l'elaborazione possono essere trovate nel repository GitHub pubblico.
Leggere i dati sulle prestazioni (riro)

Per questo formato, la seguente espressione regolare ha dimostrato di essere 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*)$
Ciò consente l'estrazione strutturata di:
- Numero di piccione (compresa la nazionalità, il sesso e l'anno di nascita)
- Classi (regionale, gruppo, ecc.)
- Punti di asso (regionale, gruppo, ecc.)
- Velocità
- Il nome di Breeder
- …
Le istruzioni dettagliate per l'elaborazione possono essere trovate nel repository pubblico GitHub.
Aggregazione dei dati
Ora che tutti i dati necessari sono stati importati nel database MySQL, è importante visualizzarli in un formato appropriato. Ad esempio, querying dei risultati per piccione e volo e aggregarli in una tabella può essere raggiunto come segue:
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
Visualizzazione dei dati
I risultati della query SQL possono essere ulteriormente trasformati e aggregati secondo le necessità e poi generati come sito web HTML/JavaScript/CSS, ad esempio.

Per rendere questa stampabile, ho anche implementato un pulsante «PDF Export»; l'output potrebbe non essere bello, ma è funzionale.

Ora tutti i passaggi sono completi, e si può importare, elaborare e infine aggiornare il sito web con i dati pertinenti in MySQL dopo ogni volo con pochi clic. Esempi di questi siti possono essere trovati a: https://patrick-hirschi.ch/brieftauben/
Archiviato l'articolo originale. I crediti di media nell'articolo sono conservati.
← Diario