← Diario

· 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:

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.

Esempio di prova di un'espressione regolare per la parsing di una linea di risultati RIRO

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.

Tipes Esempio Dati (data di volo in verde, orario di arrivo in giallo e numero di piccione in rosso)

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)

Esempio di dati della classifica da 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.

Esempio sito web con i risultati aggregati (il prodotto finale)

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

Produzione PDF

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