· 光緒總督
性能數據(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;
數據來源
這個項目有兩個來源可能值得關注:
- 業績數據來自 http://www.bas-riro.de/
- 來自TIPES設備的數據 https://tipes.de/
不幸的是,排名數據差異很大,因賽車協會,國家,有時甚至因飛行而異。 例如,當某些飛行與其他賽車協會一起進行時,就可能出現這種情況,最終形成了一個全面的排名清單.
來自Tipes設備的數據包括每個鴿子的註冊到達時間,併成爲創建總體排名的基礎. 幸運的是,這個數據總是格式一致.
數據處理
方法
讀取有時是多種多樣的文本數據時,通常使用正則表達式。通過定義一套從數據中確認和提取的合成規則,單個文本組件可以根據特定的分隔符(例如空格)進行解析。由於某些文本組件可能並不總是存在的,因此可以在合成規則中宣佈爲“可選的”部分。
網站上 https://regex101.com/,您可以創建、檢查、驗證和測試這些規則。

單個的色碼組件隨後可以很容易地用於幾乎所有編程語言.
讀取 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)

對於這種格式,下列正則表達式已證明是有用的:
^(\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 導出 ” 按鈕。 輸出可能並不漂亮, 但功能良好 。

現在所有步驟都已經完成,您可以導入,處理,最後在每次飛行後用MySQL中的相關數據更新網站,只需點擊幾下即可。這些網站的例子見: https://patrick-hirschi.ch/brieftauben/
存檔原始文章 文章中的媒體信用被保留.
← 日誌