← 日誌

· 光緒總督

性能數據(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/

存檔原始文章 文章中的媒體信用被保留.

← 日誌