パワーメーターを使ってはじき出される数値を利用して、パフォーマンスマネジャーチャート(PMC)を作ることが出来ます。
今回はパワートレーニングバイブルを参考に、TSSとCTLの動向を読み取って練習不足かオーバートレーニング気味か教えてくれるPMCを作成したので紹介します。
データを取得する
PMCを作成するにはデータが必要です、そしてこれから紹介するツールは1日の練習時間と平均パワー、作成者のFTP(1時間の平均最大パワー)を入力することで作動します。
今回はGoldenCheetahのデータを使いますが、Garmin Expressなどのトレーニング管理アプリは大抵エクスポート機能が付いているので、そこから必要な情報を取得するのもアリです。
【参考記事】自転車トレーニングのデータをGoldenCheetahで管理
そしてこういったcsvデータが取得できました。
このファイルの名前をtrainingdata.csvとしましょう。
コードを書く
さっき取得したcsvデータを使ってコードを書いていきます。
そして出来上がったのがこれです、
import pandas as pd import matplotlib.pyplot as plt # training_data読み込み df = pd.read_csv("trainingdata.csv", encoding="utf-8") time_list = list(df["time_riding"]) np_list = list(df["coggan_np"]) ftp = int(input("Your FTP: ")) ctl = [] atl = [] tsb = [] # 値を計算、おのおのリストに加える for i in range(len(time_list)): intensity_factor = np_list[i] / ftp tss = (((time_list[i] / 3600) * np_list[i] * intensity_factor) / ftp) * 100 if len(ctl) == 0: ctl_segment = 1 * 0.976 + tss * (1 - 0.976) atl_segment = 1 * 0.867 + tss * (1 - 0.867) tsb_segment = 1 - 1 ctl.append(ctl_segment) atl.append(atl_segment) tsb.append(tsb_segment) else: ctl_segment = ctl[i - 1] * 0.976 + tss * (1 - 0.976) atl_segment = atl[i-1] * 0.867 + tss * (1-0.867) tsb_segment = ctl[i-1] - atl[i-1] ctl.append(ctl_segment) atl.append(atl_segment) tsb.append(tsb_segment) # 練習不足、オーバートレーニング定義 if atl[-1] - atl[-7] <= 70: print("ここ一週間オーバーワーク気味だね、休息日を増やそう。") elif ctl[-1] - ctl[-42] <= 28: print("ここ一ヶ月オーバーワーク気味だね、休息日を増やそう。") elif ctl[-1] - ctl[-14] >= 5: print("ここ一週間ほど練習量が足りないね、TSS100を目安に頑張ろう。") # グラフに表示、コメントに表示 plt.figure(figsize=(10, 6), dpi=100) plt.plot(ctl, c="b") plt.plot(atl, c="r") plt.plot(tsb, c="g") plt.savefig("PMC.png") plt.show()
1. トレーニングデータ読み込み
pandasをつかってcsvデータを読み込みます。
今回のシステムで必要なのはトレーニング時間とNP(平均パワーでも可)なので、その情報を抜き出してリストを作成します。
2. リストを作成
次に、CTL、 ATL、 TSBのグラフを作るためにリストを作成します。
ちなみにTSS、CTL、ATL、TSBはそれぞれ以下をざっくり意味します。
TSS = トレーニング強度を示す
CTL = 長期トレーニング負荷「体力」に近い意味
ATL = 短期トレーング負荷「疲労」に近い意味
TSB = トレーニング・ストレス・バランス、「どのくらい元気な状態か?」を示す
3. トレーニング毎のCTL, ATL, TSBを計算
csvデータを一行ずつ読み込んでトレーニング毎のCTL、ATL、TSBを計算、それぞれリストに加えます。
また、上記の値を計算するのに必要なため、TSSとIF(強度係数)も一緒に計算します。
TSS、IF、CTL、ATL、TSBは以下の計算式で導きます。
TSS = { ( TIME × NP × IF ) ÷ FTP } × 100
IF = NP ÷ FTP
CTL = 前日のCTL × EXP(-1/42) + TSS × {1-EXP(-1/42)}
ATL = 前日のATL × EXP(-1/7) + TSS × {1-EXP(-1/7)}
TSB = 前日のCTL – 前日のATL
CTL、ATL、TBSはそれぞれ前日のデータが必要です。しかし、初めて測定を開始した日より前のデータは無いので、測定初日よりさらに一日前をバーチャルで作ります。その日はCTLとATLが1になる分だけ練習した(実質的にはしていない)ということにします。
なお、EXP(-1/7)とEXP(-1/42)はそれぞれ0.976、0.867にしています。
これでグラフに表す分のCTL、ATL、TSBのリストを作成することに成功しました。
4. 練習量を定義して不足か過足か知らせる
いくらグラフを作成しても、グラフの意味が理解できなければ宝の持ち腐れです。
そこで、パワトレ初心者でも簡単に利用できるようにCTLとATLの動向を読み取って「練習が足りていないか、オーバーワーク気味か」を教えてくれるプログラムを組み込みます。
パワートレーニングバイブルを参考に、練習不足とオーバーワークを以下のように定義しました。
練習不足 = 直近2週間のCTLの差が5より上がっていない
オーバーワーク = 直近42日のCTLの差が28より大きい or 直近1週間のATLの差が70より大きい
これで、CTLとATLが上記の3つの定義に該当した場合、練習不足かオーバーワークかをprint()で知らせてくれます。
5. グラフとして表示
あとはmatplotlibでグラフを表示するだけです。
その結果がこちら、
3つの指標はそれぞれ、CTL=青、ATL=赤、TSB=緑で表示され、y軸が数値、x軸が日数を表しています。
まとめ
以上、パーフォーマンスマネジャーチャートの作り方の紹介でした。
このツールの良い部分は「練習不足か、オーバーワーク気味か」を教えてくれることです。
パワートレーニングを初めて間もない方はPMCを作っても意味を理解していない事が多く、なんとなく理解しても、
とりまCTLを上げまくったらええんやろ?
と考えてしまいがちですが、こういったツールを使えば最適な練習強度でトレーニングを続けることが出来るでしょう。