· SG HIRSCHI
Date privind performanța (riro.de)
Rezumat
În fiecare an în Elveţia, 12 curse sunt ţinute cu porumbei homing. Analizând timpii de zbor şi distanţe de la punctele de eliberare pentru fiecare porumbel . Apartament acasă, viteza medie pentru fiecare porumbel pot fi calculate. O treime din porumbeii participanţi sunt enumerate ( bază). Rezultatele (inclusiv viteze, puncte, etc) ale acestor rase sunt puse la dispoziţie pe RIRO (http://www.bas-riro.de/).
Folosind scripturi Python și expresii regulate (GitHub), datele de performanță ale porumbeilor homing pot fi importate într-o bază de date (aici, MySQL), agregate, și apoi formatate ca HTML. Acest lucru oferă crescătorilor o imagine de ansamblu practică a porumbeilor lor.
Punerea în aplicare
Baza de date
Modelul de date este conceput pentru a fi cât mai simplu posibil. În timp ce datele ar putea fi foarte normalizate și tastat, acest lucru ar fi excesiv pentru scopul final al unei pagini rezultate în HTML5 / JavaScript / CSS. Prin urmare, în acest caz, doar două tabele au fost create într-o bază de date MySQL:
- 2022 Flugsaison
- Rezultatele pentru porumbei (ranks, puncte, viteză etc.) per zbor, împreună cu informații agregate (număr de crescători, număr de porumbei etc.).
- 2022 Eingesetzte Tauben
- Aici, ar trebui să fie vizibil pentru fiecare zbor care porumbeii au fost încă sau din nou utilizate.
Următoarele declarații pot fi folosite pentru a crea tabelele:
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;
Surse de date
Pentru acest proiect, două surse pot fi de interes:
- Date de performanță din http://www.bas-riro.de/
- Date de la dispozitivul TIPES https://tipes.de/
Din păcate, datele clasamentului sunt foarte eterogene, variind de asocierea curselor, țară și uneori chiar de zbor. De exemplu, acest lucru se poate întâmpla atunci când anumite zboruri sunt efectuate cu alte asociații de curse, ceea ce duce la o listă generală de clasament la sfârșitul anului.
Datele de la dispozitivul Tipes includ orele de sosire înregistrate pentru fiecare porumbel și servește ca bază pentru crearea clasamentului general. Din fericire, aceste date sunt întotdeauna formatate în mod constant.
Prelucrarea datelor
Metoda
Pentru a citi datele uneori eterogene de text în mod consecvent și generic, expresiile regulate sunt utilizate. Prin definirea unui set de reguli sintactice care sunt recunoscute și extrase din date, componentele individuale ale textului pot fi parsed pe baza delimitătorilor specifice (de exemplu, spații). Deoarece anumite componente text nu pot fi întotdeauna prezente, acestea pot fi declarate ca
Pe site-ul https://regex101.com/, puteți crea, verifica, valida și testa aceste reguli.

Componentele individuale codate în culori pot fi ulterior utilizate cu ușurință în practic orice limbaj de programare.
Citirea datelor TIPES
Datele de pe dispozitivele Tipes nu numai că includ orele de sosire, ci şi listează fiecare porumbel care a fost introdus în zbor. Aceasta oferă o bază bună pentru statistici pentru a arăta dacă porumbelul a fost efectiv înscris în zborul respectiv. Mai jos este un exemplu:

Pentru acest format specific, următoarea expresie regulată s-a dovedit utilă:
^([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.]*)$
Instrucţiunile detaliate pentru prelucrare pot fi găsite în depozitul public GitHub.
Date privind performanța de citire (riro)

Pentru acest format, următoarea expresie regulată s-a dovedit utilă:
^(\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*)$
Aceasta permite extragerea structurată a:
- Numărul porumbelului (inclusiv naționalitatea, sexul și anul nașterii)
- Ferme (regionale, de grup etc.)
- Ace points (regional, group etc.)
- Viteza
- Numele societății de ameliorare
- …
Instrucţiuni detaliate pentru prelucrare pot fi găsite în depozitul public GitHub.
Agregarea datelor
Acum, că toate datele necesare au fost importate în baza de date MySQL, este important să-l vizualizeze într-un format adecvat. De exemplu, interogarea rezultatelor per porumbel și zbor și agregarea acestora într-un tabel pot fi realizate după cum urmează:
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
Vizualizarea datelor
Rezultatele interogării SQL pot fi ulterior transformate și agregate, după cum este necesar și apoi produse ca un site web HTML/JavaScript/CSS, de exemplu.

Pentru a face acest lucru printable, am implementat, de asemenea, un buton de export PDF. Ieșirea nu poate fi frumos, dar este funcțional.

Acum, toate etapele sunt complete, și puteți importa, procesa, și în cele din urmă actualiza site-ul cu datele relevante în MySQL după fiecare zbor cu doar câteva clicuri. Exemple de aceste site-uri web pot fi găsite la: https://patrick-hirschi.ch/brieftauben/
Arhivat articol original. Creditele media în articol sunt conservate.
← Jurnal