← 日志

· 光绪总督

性能数据(riro.de)

内容提要

瑞士每年都有12场比赛与飞鸽一起举行,通过分析飞行时间和从释放点到每只鸽家阁的距离,可以计算出每只鸽的平均速度,三分之一的参加鸽子('prizes')被列出来,这些比赛的结果(包括速度,分数等)在RIRO上公布(RIRO).http://www.bas-riro.de/).

使用 Python 脚本和正则表达式( S)GitHub 图像),可以将寄存鸽的性能数据导入数据库(这里,MySQL)汇总,然后格式化为HTML。这为育种者提供了它们鸽子 ' 结果的实际概况。

执行情况

数据库

数据模型的设计尽可能简单。 虽然数据可以高度正常化和输入,但对于HTML5/JavaScript / CSS中的结果页的最终目标来说,这太过分了。 因此,在这种情况下,在 MySQL 数据库中只创建了两个表格:

  • 2022 Flugsaison (英语).
    • 每次飞行的鸽子(等级,分数,速度等)结果,连同汇总信息(饲养者数量,鸽子数量等).
  • 2022 Eingesetzte Tauben (英语).
    • 在这里,对于鸽子仍然或再次使用的每一次飞行,都应该可见.

以下语句可用于创建表格:

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;

数据来源

这个项目有两个来源可能值得关注:

不幸的是,排名数据差异很大,因赛车协会,国家,有时甚至因飞行而异。 例如,当某些飞行与其他赛车协会一起进行时,就可能出现这种情况,最终形成了一个全面的排名清单.

来自Tipes设备的数据包括每个鸽子的注册到达时间,并成为创建总体排名的基础. 幸运的是,这个数据总是格式一致.

数据处理

方法

读取有时是多种多样的文本数据时,通常使用正则表达式。通过定义一套从数据中确认和提取的合成规则,单个文本组件可以根据特定的分隔符(例如空格)进行解析。由于某些文本组件可能并不总是存在的,因此可以在合成规则中宣布为“可选的”部分。

网站上 https://regex101.com/,您可以创建、检查、验证和测试这些规则。

用于解析 RIRO 结果线的正则表达式的测试示例

单个的色码组件随后可以很容易地用于几乎所有编程语言.

读取 TIPES 数据

Tipes 设备的数据不仅包括抵达时间,而且还列出飞行中输入的每个鸽子。这为统计表明鸽子是否实际进入相应飞行提供了良好依据。以下就是一个例子:

Tipes 示例数据(飞行日期为绿色,到达时间为黄色,鸽号为红色)

对于这一具体格式,以下正则表达式证明是有用的:

^([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.]*)$

详细的处理指令可以在公共的GitHub寄存器中找到.

读取性能数据( riro)

来自RIRO的示例排名数据

对于这种格式,下列正则表达式已证明是有用的:

^(\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*)$

这使得能够有条理地提取:

  • 鸽子数量(包括国籍、性别和出生年份)
  • 军衔(区域、团体等)
  • Ace点( 区域, 组等)
  • 速度
  • 育种者的名字
  • …

详细的处理指令可以在公共的GitHub寄存器中找到.

数据汇总

现在所有必要的数据都输入了MySQL数据库,重要的是以适当的格式将其直观化. 例如,查询每个鸽子和飞行的结果并将其汇总到一个表格中可以实现如下:

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

数据可视化

SQL查询的结果可以根据需要进一步转化和汇总,然后输出为HTML/JavaScript/CSS网站等.

附有汇总结果的示例网站(最终产品)

为了让这个可以打印, 我还执行了一个“ PDF 导出 ” 按钮。 输出可能并不漂亮, 但功能良好 。

PDF 输出

现在所有步骤都已经完成,您可以导入,处理,最后在每次飞行后用MySQL中的相关数据更新网站,只需点击几下即可。这些网站的例子见: https://patrick-hirschi.ch/brieftauben/

存档原始文章 文章中的媒体信用被保留.

← 日志