TCX計算機として開発を進めていたpythonのユーティリティ、ようやくまとまってきたのでgithubに放流しました。
基本的にpythonライブラリとしての位置づけで、CUIすらオマケという状態なのでいろいろ不便かと思いますが、テスト、デバッグ、開発に協力してくれる方募集です。
■動作要件
私の手元ではMacOSX 10.5, py25, py25-lxml(from MacPorts), Garmin Edge 705 v2.70で動作確認をしていますが、以下の環境を満たせば動作すると思います。Linuxなどであれば楽に動くはず。
- Python 2.5以降 (Python 3000で動くか不明)
- python-lxml
■サポートしているファイルフォーマット
現在サポートしているファイルはGarmin TCXファイルのみです。将来的に、PowerTap, Polarのデータにも対応予定です。
■実装されている機能
以下を実装しています。
計算) o Activity + Duration (sec or hh:mm:ss format) + Distance + Total Ascent + Average HR, Speed/Pace, Cadence o Power + Normalized Power + Average Power + Variability Index + Intensity Factor + Training Stress Score + Work + Mean Maximal Power
コンバータ) o TCX to CSV o TCX to KML o Power / Leg Velocity o Course Profile
■簡単な使い方
アクティビティサマリの計算。
斜度の計算がぶっ壊れてる…。
% ./bicicalc.py ../Garmin/History/2009-06-04-15-17-27.tcx
Duration: 01:14:12
Total Distance: 27.86km
Total Ascent: 345.27m
Average Power: 137.86W
Normalized Power: 176.00W
Variability Index: 1.285
Work: 578.441kJ
Min Max Average
HeartRate(bpm): 64 176 127
Cadence(rpm): 0 111 56
Speed(km/h): 0 64 24
Power(W): 0 906 137
Grade: -434.7% 230.9% 0.2%
FTPを指定(–ftpオプション)するとIF, TSSなどを計算します。
% ./bicicalc.py --ftp=230 ../Garmin/History/2009-06-04-15-17-27.tcx
Duration: 01:14:12
Total Distance: 27.86km
Total Ascent: 345.27m
Average Power: 137.86W
Normalized Power: 176.00W
Intensity Factor: 0.765
Training Stress Score: 72.414
Variability Index: 1.285
Work: 578.441kJ
Min Max Average
HeartRate(bpm): 64 176 127
Cadence(rpm): 0 111 56
Speed(km/h): 0 64 24
Power(W): 0 906 137
Grade: -434.7% 230.9% 0.2%
MMPの計算。
% ./g_mmp.py ../Garmin/History/2009-06-04-15-17-27.tcx
== 5 seconds Mean Maximal Power ==
Average Watts: 705.00W
Max Power: 732W
Work: 3526J
(略)
== 15 minutes Mean Maximal Power ==
Average Watts: 165.00W
Max Power: 732W
Work: 147949J
任意秒のMMP計算。–mmp-secondオプションを付ける。
% ./g_mmp.py --mmp-second=15 ../Garmin/History/2009-06-04-15-17-27.tcx
== 15 seconds Mean Maximal Power ==
Average Watts: 636.00W
Max Power: 732W
Work: 9545J
分単位でMMP計算するには–mmp-minuteオプションを付ける。
% ./g_mmp.py --mmp-minute=5 ../Garmin/History/2009-06-04-15-17-27.tcx
== 5 minutes Mean Maximal Power ==
Average Watts: 223.00W
Max Power: 479W
Work: 68063J
CSVへ変換。
% ./bicicalc.py --dump-csv ../Garmin/History/2009-03-15-04-00-01.tcx
KMLへ変換。変換した物をGoogle Mapsに食べさせることも可能。 →リンクのサンプル、表示イメージのサンプル。
% ./bicicalc.py --dump-kml ../Garmin/History/2009-03-15-04-00-01.tcx
power / legspeedの出力。クランク長を入力する。
% ./bicicalc.py --dump-power-legspd --crank-len=172.5 ../Garmin/History/2009-03-15-04-00-01.tcx
チャートにプロットするとこうなる。 [flickr]photo:3401487623[/flickr]
コースプロファイルを出力する。
% ./bicicalc.py --dump-profile ../Garmin/History/2009-03-15-04-00-01.tcx
チャートにプロットするとこうなる。 [flickr]photo:3632150630[/flickr]
ユーザプロファイルの出力。
% ./g_userprofile.py ../Garmin/Profile/UserProfile.tcx
UserProfile
BirthDate: 1978-01-13
Gender: Male
Weight: 64.0kg
MaximumHR: 198
GearWeight: 8.00kg
FTP: 230Watts
Low High
HeartRate Zone 1: 99 119
HeartRate Zone 2: 119 139
HeartRate Zone 3: 139 158
HeartRate Zone 4: 158 178
HeartRate Zone 5: 178 198
Low High
Power Zone 1: 58 127
Power Zone 2: 129 173
Power Zone 3: 175 207
Power Zone 4: 209 241
Power Zone 5: 244 276
Power Zone 6: 278 345
Power Zone 7: 347 460
■プログラム内部的なこと
TCXをパースしてpythonの辞書に詰め込んでいます(辞書の形式はbicicalc独自)。
内部データは基本的にこの辞書のみで、辞書を操作するための関数群を複数実装しており、コマンドラインユーティリティはファイルをパースする、関数を通してフィルタする、整形して表示する機能を有しています。
なので、他のファイルフォーマット(例えばPowerTapとかPolarとか)から辞書へ変換するコードを追加することで、実装済みの計算関数を利用することが可能です。
■最後に
このツールがサイクリストの役に立つことを祈ります。楽しんで!
[ad#text_wide]