· SG HIRSCHI
Datos de rendimiento (riro.de)
Resumen
Cada año en Suiza, 12 carreras se realizan con palomas homing. Al analizar los tiempos de vuelo y las distancias de los puntos de liberación a la loft casera de cada paloma, se puede calcular la velocidad media de cada palomo. Una tercera parte de las palomas participantes están listadas («prizes»). Los resultados (incluyendo velocidades, puntos, etc.) de estas razas están disponibles en RIRO (R)http://www.bas-riro.de/).
Utilizando scripts Python y expresiones regulares (GitHub), los datos de rendimiento de las palomas homing pueden ser importados en una base de datos (aquí, MySQL), agregados y luego formateados como HTML. Esto proporciona a los criadores una visión práctica de los resultados de sus palomas.
Aplicación
Base de datos
El modelo de datos está diseñado para ser tan simple como sea posible. Si bien los datos podrían ser altamente normalizados y escritos, esto sería excesivo para el objetivo final de una página de resultados en HTML5 / JavaScript / CSS. Por lo tanto, en este caso, sólo se crearon dos tablas en una base de datos MySQL:
- 2022 Flugsaison
- Los resultados para las palomas (rancos, puntos, velocidad, etc.) por vuelo, junto con información agregada (número de criadores, número de palomas, etc.).
- 2022 Eingesetzte Tauben
- Aquí, debe ser visible para cada vuelo que palomas fueron todavía o de nuevo utilizados.
Las siguientes declaraciones se pueden utilizar para crear las tablas:
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;
Fuentes de datos
Para este proyecto, dos fuentes pueden ser de interés:
- Datos sobre el rendimiento http://www.bas-riro.de/
- Datos del dispositivo TIPES https://tipes.de/
Desafortunadamente, los datos de clasificación son muy heterogéneos, que varían según la asociación de carreras, el país y a veces incluso por vuelo. Por ejemplo, esto puede ocurrir cuando algunos vuelos se realizan con otras asociaciones de carreras, dando lugar a una lista general de ranking al final.
Los datos del dispositivo Tipes incluyen los tiempos de llegada registrados para cada paloma y sirven como base para crear la clasificación general. Afortunadamente, estos datos siempre se formatean consistentemente.
Procesamiento de datos
Método
Para leer los datos de texto a veces heterogéneos consistente y genéricamente, se utilizan expresiones regulares. Al definir un conjunto de reglas sintácticas que son reconocidas y extraídas de los datos, los componentes individuales de texto pueden ser analizados en base a delimitadores específicos (por ejemplo, espacios). Puesto que ciertos componentes de texto pueden no estar siempre presentes, pueden ser declarados como «opcionales» en las reglas sintácticas.
En el sitio web https://regex101.com/, usted puede crear, comprobar, validar y probar estas reglas.

Los componentes codificados por colores individuales pueden ser utilizados posteriormente fácilmente en prácticamente cualquier lenguaje de programación.
Leyendo los datos de TIPES
Los datos de los dispositivos Tipes no sólo incluyen los tiempos de llegada, sino también enumera cada paloma que fue ingresada en el vuelo. Esto proporciona una buena base para las estadísticas para mostrar si la paloma se ingresó realmente en el vuelo respectivo. A continuación se muestra un ejemplo:

Para este formato específico, la siguiente expresión regular ha demostrado ser útil:
^([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.]*)$
Las instrucciones detalladas para el procesamiento se pueden encontrar en el repositorio público GitHub.
Leer datos de rendimiento (riro)

Para este formato, la siguiente expresión regular ha demostrado ser útil:
^(\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*)$
Esto permite la extracción estructurada de:
- Número de paloma (incluyendo la nacionalidad, el sexo y el año de nacimiento)
- Ranks (regional, grupo, etc.)
- Puntos de as (regional, grupo, etc.)
- Velocidad
- Nombre de Breeder
- …
Se pueden encontrar instrucciones detalladas para el procesamiento en el repositorio GitHub.
Datos Aggregation
Ahora que todos los datos necesarios se han importado en la base de datos MySQL, es importante visualizarla en un formato adecuado. Por ejemplo, consultar los resultados por paloma y vuelo y agruparlos en una tabla puede ser alcanzado como sigue:
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
Visualización de datos
Los resultados de la consulta SQL pueden ser transformados y agregados según sea necesario y luego se pueden reproducir como un sitio web HTML/JavaScript/CSS, por ejemplo.

Para hacer esta imprimible, también he implementado un botón «PDF Exportar». La salida puede no ser hermosa, pero es funcional.

Ahora todos los pasos están completos, y usted puede importar, procesar y finalmente actualizar el sitio web con los datos pertinentes en MySQL después de cada vuelo con sólo unos pocos clics. Ejemplos de estos sitios web se pueden encontrar en: https://patrick-hirschi.ch/brieftauben/
Artículo original archivado. Se conservan créditos de medios en el artículo.
← Diario