找出單車塔系列挑戰,所有休息時間;分析Garmin FIT file
緣起
上次東三塔27H41M完賽,2026年手滑報名28H,只剩19分鐘緩衝,完賽邊緣!所以我得仔細爬梳2025年的資料,把事情規劃好
騎得快很難,體能弱很難立刻變強;優化休息時間倒是簡單很多。我問AI工具教我怎麼從Garmin FIT檔找出所有休息時間,經過一番努力,這篇文章介紹兩個方法
軟體抓回來,餵Fit檔案就能畫圖;整個挖空的區域是停等,一目暸然
標出長休息點,台東都歷(30),睿豐門市(40)時間超乎預期。明年專心優化這裡吧
工程師,還是想掌控一切,自己寫script最對味
我還是想自己操作FIT檔,理由略過1000字。步驟和思路列在下面,下次可以抄
- fitfileviewer.com
這個網站很好用,塞FIT file能轉出CSV檔,再用EXCEL分析;EXCEL技能點滿的同學可以在這裡停下(我不是);後面基本上所有分析,都是用這個網站做交叉比對 - 安裝Python3開發環境
只裝Python3,我不喜歡裝很大包的安裝包,簡潔一點 - 用venv安裝所有套件,創造虛擬目錄,和其他環境隔開
python3 -m venv bike_analysis // 創造出虛擬環境
cd bike_analysis // 切到虛擬環境目錄
source bin/activate // 啟用此虛擬環境
然後安裝需要的套件
pip3 install fitparse // fit 檔分析套件
pip3 install jupyter // jupyter 開發環境
pip3 install matplotlib // 做圖工具 - 啟動jupyter
jupyter notebook
jupyter notebook簡介
我很少用jupyter,基本上是為了這件事裝;不過我知道,他可以把Python的軟體切成一塊一塊的執行,反覆的操作。以我這次做實驗,效能會提高很多
下圖,首先我開了一個notebook叫Untitled,然後把fit檔拷貝到裡面去
第一個區塊,示範怎麼開檔。這裡有一個列印紀錄的函數,後面會反覆使用
第二個區塊,列出FIT檔裡所有的紀錄。這裡看得出FIT檔的資料是分門別類的
第三個區塊,我們來看file_id這個區塊資料;上方是FIT File Viewer印的資料,下方是Jupyter notebook印的。基本上是完全一樣的,這樣有信心啦
我很用功,FIT File Viewer裡每張表格,我都用Python看過。這樣我會比較有信心
找出休息時間
在FIT檔,Events表格紀錄一些有趣的事件,我感興趣的是Timer start/stop-all。停紅綠燈或是休息,都會產生"stop-all"事件;繼續走會產生"start"事件;每個事件都有時間
經過一番研究,我寫了下面那段code做分析;大致邏輯如下
- 只要遇到timer事件,就塞到timestamp[],紀錄所有start/stop-all事件
['start', time]
['stop', time] - 掃描timestamp[],從第一個掃到最後。如果遇到[x]是stop,[x+1]是start,代表暫停。這時候計算[x+1].time - [x].time就是休息幾秒,存在time_delta[]
- 累加time_delta[],就知道總計休息時間
- 排序time_delta[]取前20大,就知道停等最久的位置
效果很不錯,總計有106次停止事件,3.5H;排行前20大總計2.85H,這些巨大休息的洞
- 2189秒(CP4睿豐門市,36.5M)
- 1721秒(台東都歷,28.7M)
- 1685秒(CP2花蓮新城)
- 1181秒(CP3北回歸線)
X軸是所有休息時間排序,Y軸是累加休息時間。總時間在後段快速累加上去。所以停紅綠燈真的沒佔多少時間
一些有趣的數據
碼表和哪些裝置互聯
位置紀錄
每秒一個點,有經緯度,心律,距離(每秒移動多遠),功率,溫度,... 前面休息的時間戳記,也可以在這裡找到具體的位置
心跳的精確時間,拿來算HRV
ANT+心跳表,裡面自帶心跳間距,精度是1/1024s。所以碼表紀錄每秒鐘,每個心跳的間距。把這些數量算出來,可以推估騎東三塔,心跳跳了幾下!
裝置電量和溫度
每分鐘會丟出一筆電池電量;可以分析碼表電量能撐多久
結語
分析那麼多,還是得好好練車,不然還是騎不完 >_<
留言