見出し画像

筋力強化のためのトレーニングメニュー提示プログラム

 筋力強化に特化したトレーニングプログラムを提示してくれるコード(pythonにて)を作成しました.強化するトレーニングは,スクワット・ベンチプレス・デッドリフトの3種目となっています.

 このトレーングメニューは,day1~day4の4回のトレーニングを1つのweekの単位とするマイクロサイクルになっています.トレーング内容は,スクワット週2回,ベンチプレス週2回,デッドリフト週1回としています.

 流れとしては,個人データの入力→推定ベスト重量の算出→疲労度とトレーニング強度の感想→トレーニングメニューの提示となっています.

 推定ベスト重量は,2019年に開催されたジャパンクラシックパワーリフティング選手権大会(JCP)の男子のデータで重回帰の予測モデルから算出します.

 トレーニングプログラムは,ピリオダイゼーションにも適用できるように,adaptation or deload期間,Strehngth development期間,Maximum muscle strength期間の3つの期間を選べるようになっています.Adaptation or deload期間では運動強度60%で8レップ2セットを中心に,Strehngth development期間では運動強度75%で5レップ4セットを中心に,Maximum muscle strength期間では運動強度87.5%で2レップ3セットを中心にしています.

 プログラムのコードは↓からダウンロードできるようになっています.

 コード全体は,この記事の一番最後に載せています.

 コードの解説をしていきます.

1. 個人データの入力

#個人データ入力

#体重
weight=100
#年齢
age=20

#試合の日の第一試技にする重量 or マックス重量の90%~95%の重量
SQs1=200 #スクワット(SQ)
BNs1=100 #ベンチプレス(BN)
DLs1=200 #デッドリフト(DL)

 体重(kg)と年齢(歳)の数値をまず入力します.そのあとに,パワーリフティングの試合日における第一試技の重量を入力します.もし第一試技にする重量が分からない人は,マックス重量の90%~95%の重量を入力してください(ここでは,試合日の第一試技にする重量をマックス重量の90%~95%の重量だと仮定しています).今回は,仮のデータとして,体重に100,年齢に20,試合の日の第一試技にする重量のスクワットを200,試合の日の第一試技にする重量のベンチプレスを100,試合の日の第一試技にする重量のデッドリフトを200と入力しています.

2. 推定ベスト重量の算出

#推定ベスト重量の算出
#SQの推定ベスト重量
SQm=SQs1*0.982917+weight*0.157134+age*(-0.049384)+6.9212514881147
SQ=SQm
print('SQの推定ベスト重量:{}kg'.format(round(SQm)))

#BNの推定ベスト重量
BNm=BNs1*1.017229+weight*0.031749+age*(-0.055048)+4.97202673216031
BN=BNm
print('BNの推定ベスト重量:{}kg'.format(round(BNm)))

#DLの推定ベスト重量
DLm=DLs1*0.943229+weight*0.140076+age*(-0.077887)+17.6758487040875
DL=DLm
print('DLの推定ベスト重量:{}kg'.format(round(DLm)))

この式で,ベスト重量を推定しています.この式は,

日本パワーリフティング協会 2019年02月09日(土)-11日(月・祝) 第23回ジャパンクラシックパワーリフティング選手権大会
https://www.jpa-powerlifting.or.jp/japan_new/japan_2018

のデータをもとに重回帰の予測モデルをつくり,機械学習によってベスト重量を推定しています.

この式を適応すると,↓の結果が得られます.

画像1

3. トレーニングに関する情報を入力

#トレーニングに関する情報を入力
#トレーニング週
week=2

#トレーニングメニュー(1:adaptation or deload, 2:Strehngth development, 3: Maximum muscle strength)
m=2

#疲労
#疲労の度合いを1~10のスケールで(1が疲れていない10が疲れている)
f=2

#強度
#先週のトレーニングはきつかった(0:イージー, 1:まあまあ, 2:ハード)
t=2

 ここでは,トレーニングに関する情報を入力します.トレーニング週がいつなのか入力します.トレーニングの目的を,1:adaptation or deload, 2:Strehngth development, 3: Maximum muscle strengthから選びます.現在の疲労度を1~10のスケールで(1が疲れていない10が疲れている)入力します.先週のトレーニングはきつかったかどうかについて,0:イージー, 1:まあまあ, 2:ハードで入力します.例えとして今回は,week2として,Strehngth developmentを目的にします.疲労度は,あまり疲れていないとして2として入力してます.先週のトレーニング強度は,まあまあきつかったの2として入力してます.

 疲労度が0~3の時にはレップ数とセット数を1回ずつ増やして,疲労度が8以上の時にはレップ数とセット数を1回ずつ減らしています.疲労度が5~7の時にはレップ数とセット数は変わりません.疲労度からレップ数とセット数を変更することで,総負荷量が変わりようになっています.

 先週のトレーニングはきつかったかどうかについて,0の「イージー」と答えた場合には運動強度を5%高くなるようにして,, 2の「ハード」と答えた場合には運動強度を5%低くなるようにしています. 1の「まあまあ」と答えた場合には運動強度は変更されません.先週のトレーニングはきつさによって,運動強度が変わるようになっています.

4. トレーニングメニューの提示

#トレーニングメニューの提示
print('week'+str(week))
#基本情報
#_____________________________________________________________________________________________________
#adaptation or deload

if m==1:
   
   if  0< f < 4:
       r=8+1 #レップ数
       s=2+1 #セット数
   
   elif 5< f < 7:
       r=8 #レップ数
       s=2 #セット数
       
   else:
       r=8-1 #レップ数
       s=2-1 #セット数

   if  t==0:
       ins=0.6+0.05 #運動強度
   
   elif t==1:
       ins=0.6 #運動強度
       
   else:
       ins=0.6-0.05 #運動強度


   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s


   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1


   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))

   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))

   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1


   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))

   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2


   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))

#_____________________________________________________________________________________________________
#Strehngth development
elif m==2:
   
   if  0< f < 4:
       r=5+1 #レップ数
       s=4+1 #セット数
   
   elif 5< f < 7:
       r=5 #レップ数
       s=4 #セット数
       
   else:
       r=5-1 #レップ数
       s=4-1 #セット数

   if  t==0:
       ins=0.75+0.05 #運動強度
   
   elif t==1:
       ins=0.75 #運動強度
       
   else:
       ins=0.75-0.05 #運動強度

   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s


   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1


   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))

   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))

   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1


   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))

   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2


   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))


#_____________________________________________________________________________________________________
#Maximum muscle strength

else:
   
   if  0< f < 4:
       r=2+1 #レップ数
       s=3+1 #セット数
   
   elif 5< f < 7:
       r=2 #レップ数
       s=3 #セット数
       
   else:
       r=2-1 #レップ数
       s=3-1 #セット数

   if  t==0:
       ins=0.875+0.05 #運動強度
   
   elif t==1:
       ins=0.875 #運動強度
       
   else:
       ins=0.875-0.05 #運動強度


   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s


   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1


   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))

   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))

   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1


   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))

   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2


   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))

ここでは,入力する数値はありません.Shift+Enterを押してコードを実行するだけです.コードを実行することで,これまで入力した情報からトレーニングメニューが自動的に提示されます.今回入力したデータだと↓のアウトプットが得られます.

画像2

week2のトレーニングの内訳は,

day1にスクワット153kgを6レップ5セット,ベンチプレス76kgを6レップ6セット.
day2にはデッドリフト153kg153kgを6レップ5セット,ポーズドデッドリフト109kgを4レップ4セット.
day3には,スクワット153kgを6レップ5セット,ポーズドスクワット109kgを4レップ4セット.
day4には,ベンチプレス76kgを6レップ7セット,ナローベンチプレス54kgを6レップ6セット.

となっています.

上記のコードを説明した解説動画をYoutubeにアップしました.この動画を見ていただくと,このコードを具体的にどのように使うのか理解できると思います.

今回作成したトレーニング提示プログラムが,トレーニング計画作成のお役に立てれれば嬉しいです.

コード全体は↓になっています.

#個人データ入力

#体重
weight=100
#年齢
age=20

#試合の日の第一試技にする重量 or マックス重量の90%~95%の重量
SQs1=200 #スクワット(SQ)
BNs1=100 #ベンチプレス(BN)
DLs1=200 #デッドリフト(DL)

#推定ベスト重量の算出
#SQの推定ベスト重量
SQm=SQs1*0.982917+weight*0.157134+age*(-0.049384)+6.9212514881147
SQ=SQm
print('SQの推定ベスト重量:{}kg'.format(round(SQm)))

#BNの推定ベスト重量
BNm=BNs1*1.017229+weight*0.031749+age*(-0.055048)+4.97202673216031
BN=BNm
print('BNの推定ベスト重量:{}kg'.format(round(BNm)))

#DLの推定ベスト重量
DLm=DLs1*0.943229+weight*0.140076+age*(-0.077887)+17.6758487040875
DL=DLm
print('DLの推定ベスト重量:{}kg'.format(round(DLm)))

#トレーニングに関する情報を入力
#トレーニング週
week=2

#トレーニングメニュー(1:adaptation or deload, 2:Strehngth development, 3: Maximum muscle strength)
m=2

#疲労
#疲労の度合いを1~10のスケールで(1が疲れていない10が疲れている)
f=2

#強度
#先週のトレーニングはきつかった(0:イージー, 1:まあまあ, 2:ハード)
t=2

#トレーニングメニューの提示
print('week'+str(week))
#基本情報
#_____________________________________________________________________________________________________
#adaptation or deload

if m==1:
   
   if  0< f < 4:
       r=8+1 #レップ数
       s=2+1 #セット数
   
   elif 5< f < 7:
       r=8 #レップ数
       s=2 #セット数
       
   else:
       r=8-1 #レップ数
       s=2-1 #セット数

   if  t==0:
       ins=0.6+0.05 #運動強度
   
   elif t==1:
       ins=0.6 #運動強度
       
   else:
       ins=0.6-0.05 #運動強度


   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s


   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1


   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))

   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))

   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1


   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))

   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2


   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))

#_____________________________________________________________________________________________________
#Strehngth development
elif m==2:
   
   if  0< f < 4:
       r=5+1 #レップ数
       s=4+1 #セット数
   
   elif 5< f < 7:
       r=5 #レップ数
       s=4 #セット数
       
   else:
       r=5-1 #レップ数
       s=4-1 #セット数

   if  t==0:
       ins=0.75+0.05 #運動強度
   
   elif t==1:
       ins=0.75 #運動強度
       
   else:
       ins=0.75-0.05 #運動強度

   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s


   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1


   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))

   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))

   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1


   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))

   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2


   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))


#_____________________________________________________________________________________________________
#Maximum muscle strength

else:
   
   if  0< f < 4:
       r=2+1 #レップ数
       s=3+1 #セット数
   
   elif 5< f < 7:
       r=2 #レップ数
       s=3 #セット数
       
   else:
       r=2-1 #レップ数
       s=3-1 #セット数

   if  t==0:
       ins=0.875+0.05 #運動強度
   
   elif t==1:
       ins=0.875 #運動強度
       
   else:
       ins=0.875-0.05 #運動強度


   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s


   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1


   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))

   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))

   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1


   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))

   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2


   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))

 まず第一号のプロトタイプとしてトレーニングメニューのプログラミングコードを作成しました.今後,さらに改良を加えていきたいと考えています.ご指摘や要望等がございましたら,ぜひ教えていただきたいです.今回作成したコードに反映させていただきます.

__________________________________

*1 追加で,総負荷量が自動的に算出されるコードを追加しました.例として↓のように提示されます.

画像3

追加したコードのファイルは↓からダウンロードできます.

トレーニングメニューの提示の箇所での追加は↓のようになっています.

#トレーニングメニューの提示
print('week'+str(week))
#基本情報
#_____________________________________________________________________________________________________
#adaptation or deload

if m==1:
   
   if  0< f < 4:
       r=8+1 #レップ数
       s=2+1 #セット数
   
   elif 5< f < 7:
       r=8 #レップ数
       s=2 #セット数
       
   else:
       r=8-1 #レップ数
       s=2-1 #セット数

   if  t==0:
       ins=0.6+0.05 #運動強度
   
   elif t==1:
       ins=0.6 #運動強度
       
   else:
       ins=0.6-0.05 #運動強度


   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s
   SQd1t=SQd1*SQr1*SQs1  #総負荷量 
   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1
   BNd1t=BNd1*BNr1*BNs1  #総負荷量 
   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))
   print('スクワットの総負荷量:{}kg, ベンチプレスの総負荷量:{}kg'.format(SQd1t,BNd1t))
   print('_________________________________________________________________')
   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   DLd1t=DLd1*DLr1*DLs1  #総負荷量    PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   PDLd1t=PDLd1*PDLr1*PDLs1  #総負荷量    print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))
   print('デッドリフトの総負荷量:{}kg, Pausedデッドリフトの総負荷量:{}kg'.format(DLd1t,PDLd1t))
   print('_________________________________________________________________')
   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   SQd1_2t=SQd1_2*SQr1_2*SQs1_2  #総負荷量    PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1
   PSQd1_2t=PSQd1_2*PSQr1_2*PSQs1_2  #総負荷量 
   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))
   print('スクワットの総負荷量:{}kg, Pausedスクワットの総負荷量:{}kg'.format(SQd1_2t,PSQd1_2t))
   print('_________________________________________________________________')


   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   BNd1_2t=BNd1_2*BNr1_2*BNs1_2  #総負荷量    NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2
   NBNd1_2t=NBNd1_2*NBNr1_2*NBNs1_2  #総負荷量 
   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))
   print('ベンチプレスの総負荷量:{}kg, ナローベンチプレスの総負荷量:{}kg'.format(BNd1_2t,NBNd1_2t))
   print('_________________________________________________________________')
#_____________________________________________________________________________________________________
#Strehngth development
elif m==2:
   
   if  0< f < 4:
       r=5+1 #レップ数
       s=4+1 #セット数
   
   elif 5< f < 7:
       r=5 #レップ数
       s=4 #セット数
       
   else:
       r=5-1 #レップ数
       s=4-1 #セット数

   if  t==0:
       ins=0.75+0.05 #運動強度
   
   elif t==1:
       ins=0.75 #運動強度
       
   else:
       ins=0.75-0.05 #運動強度

   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s
   SQd1t=SQd1*SQr1*SQs1  #総負荷量 
   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1
   BNd1t=BNd1*BNr1*BNs1  #総負荷量 
   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))
   print('スクワットの総負荷量:{}kg, ベンチプレスの総負荷量:{}kg'.format(SQd1t,BNd1t))
   print('_________________________________________________________________')
   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   DLd1t=DLd1*DLr1*DLs1  #総負荷量    PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   PDLd1t=PDLd1*PDLr1*PDLs1  #総負荷量    print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))
   print('デッドリフトの総負荷量:{}kg, Pausedデッドリフトの総負荷量:{}kg'.format(DLd1t,PDLd1t))
   print('_________________________________________________________________')
   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   SQd1_2t=SQd1_2*SQr1_2*SQs1_2  #総負荷量    PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1
   PSQd1_2t=PSQd1_2*PSQr1_2*PSQs1_2  #総負荷量 
   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))
   print('スクワットの総負荷量:{}kg, Pausedスクワットの総負荷量:{}kg'.format(SQd1_2t,PSQd1_2t))
   print('_________________________________________________________________')


   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   BNd1_2t=BNd1_2*BNr1_2*BNs1_2  #総負荷量    NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2
   NBNd1_2t=NBNd1_2*NBNr1_2*NBNs1_2  #総負荷量 
   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))
   print('ベンチプレスの総負荷量:{}kg, ナローベンチプレスの総負荷量:{}kg'.format(BNd1_2t,NBNd1_2t))
   print('_________________________________________________________________')

#_____________________________________________________________________________________________________
#Maximum muscle strength

else:
   
   if  0< f < 4:
       r=2+1 #レップ数
       s=3+1 #セット数
   
   elif 5< f < 7:
       r=2 #レップ数
       s=3 #セット数
       
   else:
       r=2-1 #レップ数
       s=3-1 #セット数

   if  t==0:
       ins=0.875+0.05 #運動強度
   
   elif t==1:
       ins=0.875 #運動強度
       
   else:
       ins=0.875-0.05 #運動強度


   #day1


   SQd1=round(SQ*ins)
   SQr1=r
   SQs1=s
   SQd1t=SQd1*SQr1*SQs1  #総負荷量 
   BNd1=round(BN*ins)
   BNr1=r
   BNs1=s+1
   BNd1t=BNd1*BNr1*BNs1  #総負荷量    


   print('day1')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1,SQr1,SQs1))
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1,BNr1,BNs1))
   print('スクワットの総負荷量:{}kg, ベンチプレスの総負荷量:{}kg'.format(SQd1t,BNd1t))
   print('_________________________________________________________________')
   #day2

   DLd1=round(DL*ins)
   DLr1=r
   DLs1=s
   DLd1t=DLd1*DLr1*DLs1  #総負荷量    PDLd1=round(DL*(ins-0.2))
   PDLr1=r-2
   PDLs1=s-1
   PDLd1t=PDLd1*PDLr1*PDLs1  #総負荷量    print('day2')
   print('DL:{}kg×Reps:{}×Sets:{}'.format(DLd1,DLr1,DLs1))
   print('Paused DL:{}kg×Reps:{}×Sets:{}'.format(PDLd1,PDLr1,PDLs1))
   print('デッドリフトの総負荷量:{}kg, Pausedデッドリフトの総負荷量:{}kg'.format(DLd1t,PDLd1t))
   print('_________________________________________________________________')
   #day3

   SQd1_2=round(SQ*ins)
   SQr1_2=r
   SQs1_2=s
   SQd1_2t=SQd1_2*SQr1_2*SQs1_2  #総負荷量    PSQd1_2=round(SQ*(ins-0.2))
   PSQr1_2=r-2
   PSQs1_2=s-1
   PSQd1_2t=PSQd1_2*PSQr1_2*PSQs1_2  #総負荷量 
   print('day3')
   print('SQ:{}kg×Reps:{}×Sets:{}'.format(SQd1_2,SQr1_2,SQs1_2))
   print('Paused SQ:{}kg×Reps:{}×Sets:{}'.format(PSQd1_2,PSQr1_2,PSQs1_2))
   print('スクワットの総負荷量:{}kg, Pausedスクワットの総負荷量:{}kg'.format(SQd1_2t,PSQd1_2t))
   print('_________________________________________________________________')


   #day4

   BNd1_2=round(BN*ins)
   BNr1_2=r
   BNs1_2=s+2
   BNd1_2t=BNd1_2*BNr1_2*BNs1_2  #総負荷量    NBNd1_2=round(BN*(ins-0.2))
   NBNr1_2=r
   NBNs1_2=s+2
   NBNd1_2t=NBNd1_2*NBNr1_2*NBNs1_2  #総負荷量 
   print('day4')
   print('BN:{}kg×Reps:{}×Sets:{}'.format(BNd1_2,BNr1_2,BNs1_2))
   print('Narrow BN:{}kg×Reps:{}×Sets:{}'.format(NBNd1_2,NBNr1_2,NBNs1_2))
   print('ベンチプレスの総負荷量:{}kg, ナローベンチプレスの総負荷量:{}kg'.format(BNd1_2t,NBNd1_2t))
   print('_________________________________________________________________')

*2 追加で,現在の推定ベスト重量と目標重量との差を示すグラフを示すコードを付け足しました.目標達成に向けてモチベーションを高めるのが狙いです.Bestが現在の推定ベスト重量を示し,Aimが目標重量を示しています.グラフ中に表示されるdiffは,目標重量と推定ベスト重量の差を表しています.

図1

ファイルは↓からダウンロードできます.

追加したコードは↓のようになっています.

#スクワット(SQ),ベンチプレス(BN),デッドリフト(DL)の目標値

SQaim=230
BNaim=170
DLaim=250

 #図の描写 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')#グラフの背景を白くする
%matplotlib inline

array_SQ={'Best': [SQ], 'Aim': [SQaim]}
df_SQ= pd.DataFrame.from_dict(array_SQ)
array_BN={'Best': [BN], 'Aim': [BNaim]}
df_BN= pd.DataFrame.from_dict(array_BN)
array_DL={'Best': [DL], 'Aim': [DLaim]}
df_DL= pd.DataFrame.from_dict(array_DL)


 #SQ 
plt.figure(figsize=(10,6))
sns.set_style('ticks')#grid線を消す
sns.pointplot( data=df_SQ,color="Blue", linestyles=["--"], scale=3.0,errwidth=5.0,markers="s")
plt.tick_params(labelsize = 30)
plt.title("SQ", size=50)
plt.ylabel("", size=50)
plt.xlabel("")
plt.text(0.7,SQ+3,'Diff '+str(round(SQaim-SQ))+' kg', size=25)
plt.ylim(SQ-5, SQaim+5)#y軸の範囲

 #BN 
plt.figure(figsize=(10,6))
sns.set_style('ticks')#grid線を消す
sns.pointplot( data=df_BN,color="Red", linestyles=["--"], scale=3.0,errwidth=5.0,markers="s")
plt.tick_params(labelsize = 30)
plt.title("BN", size=50)
plt.ylabel("", size=50)
plt.xlabel("")
plt.text(0.7,BN+3,'Diff '+str(round(BNaim- BN))+' kg', size=25)
plt.ylim(BN-5, BNaim+5)#y軸の範囲

 #DL 
plt.figure(figsize=(10,6))
sns.set_style('ticks')#grid線を消す
sns.pointplot( data=df_DL,color="Green", linestyles=["--"], scale=3.0,errwidth=5.0,markers="s")
plt.tick_params(labelsize = 30)
plt.title("DL", size=50)
plt.ylabel("", size=50)
plt.xlabel("")
plt.text(0.7,DL+3,'Diff '+str(round(DLaim-DL))+' kg', size=25)
plt.ylim(DL-5, DLaim+5)#y軸の範囲

 #Total 
TO=SQ+BN+DL
TOaim=SQaim+BNaim+DLaim
array_TO={'Best': [TO], 'Aim': [TOaim]}
df_TO= pd.DataFrame.from_dict(array_TO)
plt.figure(figsize=(10,6))
sns.set_style('ticks')#grid線を消す
sns.pointplot( data=df_TO,color="Black", linestyles=["--"], scale=3.0,errwidth=5.0,markers="s")
plt.tick_params(labelsize = 30)
plt.title("Total", size=50)
plt.ylabel("", size=50)
plt.xlabel("")
plt.text(0.7,TO+3,'Diff '+str(round(TOaim-TO))+' kg', size=25)
plt.ylim(TO-5, TOaim+5)#y軸の範囲
参考資料
1. TSA 9 Week Intermediate Powerlifting Program (v1.0 + v2.0)
https://liftvault.com/programs/powerlifting/tsa-9-week-intermediate-program/

2. パワーズ運動生理学 体力と競技力向上のための理論と応用

3. Periodization Training for Sports

4. Science and Practice of Strength Training

5. Peterson, M. D., Rhea, M. R., & Alvar, B. A. (2004). Maximizing strength development in athletes: a meta-analysis to determine the dose-response relationship. The Journal of Strength & Conditioning Research, 18(2), 377-382.

6. Rhea, M. R., Alvar, B. A., Burkett, L. N., & Ball, S. D. (2003). A meta-analysis to determine the dose response for strength development.